Google Sheets to Snowflake: How to Move Your Data

Move Google Sheets into Snowflake with Airbyte. Why one service account should serve no more than three pipelines, grid sheet limits, and casting untyped columns.

Summarize with AI:

Moving Google Sheets into Snowflake takes data a person maintains by hand and puts it where your warehouse can join it. The sheet somebody updates every Friday is often the only place a piece of business context exists, and it stays invisible to every model you build until something loads it.

The technical work here is small. The failure modes are social, because the upstream of this pipeline is a colleague with a spreadsheet and no reason to think anyone depends on its structure. One operational rule about service accounts is worth knowing before you build the second of these.

Google Sheets to Snowflake at a glance:

CapabilitySupportedWhat it means for this pipeline
ScopeOne spreadsheetEach worksheet within it becomes a separate stream
Sheet typesGrid sheets onlyOther sheet types are not replicated
Accounts per connectorThree instancesBeyond that, transfer speed degrades on a shared account
Rate limitPer user and project100 requests per 100 seconds per user
TypingYours to doA spreadsheet has no schema, so cast in a view

Why move data from Google Sheets to Snowflake?

Two situations account for most of these pipelines.

The first is joining hand-maintained context to system data. Account tiers, territory owners, budget targets, a curated list of strategic customers. These live in a spreadsheet because a person curates them, and they are exactly what your warehouse tables lack when somebody asks why a number looks the way it does.

The second is history. A spreadsheet shows what it contains now, and a warehouse can hold what it looked like every week for two years, which is how you answer questions about how a plan changed. If you only need the current contents for one dashboard, a connected sheet may be simpler.

What do you need before you start?

The setup is short, and one item is a conversation rather than a credential:

Authentication, and a spreadsheet shared with it. OAuth on Airbyte Cloud, or a service account key on self-managed deployments, which is the recommended route there. A service account needs Project Viewer permission, and unless the sheet is viewable by anyone with the link, somebody must share it with the service account. The Google Sheets source documentation covers both.

The spreadsheet link. Taken from Share and then Copy Link on the sheet itself. One source covers one spreadsheet, and each worksheet inside it becomes its own stream, so a workbook with eight tabs gives you eight tables.

A separate service account if you plan several of these. Airbyte recommends not using the same user or service account for more than three instances of this connector, because transfer speeds degrade beyond that. Plan the accounts before you build the fourth pipeline rather than after.

An agreement with whoever owns the sheet. Column headers are now an interface and the tab names become table names, so renaming either is a schema change rather than tidying. That conversation is the single most useful thing you will do on this pipeline.

On the Snowflake side you need a warehouse, database, schema and a role able to create tables. The smallest warehouse is ample, because a spreadsheet is thousands of rows rather than millions.

How do you build a Google Sheets to Snowflake pipeline in Airbyte?

Step 1: Agree the rules with the sheet owner

Explain that headers and tab names are load-bearing, and ask what each column is supposed to contain, because you will need that to write the casting layer. Hand-maintained data always has a few columns whose intent is not obvious from their contents, and the person who maintains it is the only documentation.

Step 2: Configure the Google Sheets source

Click Sources in the left navigation, then New Source, and select Google Sheets, following adding a source. Authenticate, paste the spreadsheet link, and set the row batch size, which controls how many records the connector fetches at a time.

Step 3: Configure the Snowflake destination

Click Destinations, then New Destination, and select Snowflake, following adding a destination. Supply the account identifier, warehouse, database, schema and role. Consider a schema for hand-maintained sources specifically, so it is obvious to anyone browsing which tables have a person rather than a system upstream.

Step 4: Create the connection and add a freshness check

Click Connections, then New connection, select the worksheets you need and a sync mode. Daily is generous for a sheet a person edits weekly. Then add a check that alerts if the destination table has not changed in a while, because a stalled sync and an untouched sheet look identical.

Full refresh append is worth considering if anyone wants history, since it accumulates a snapshot per sync and gives you a record of how a curated list changed that the sheet itself does not keep.

Why does the service account need planning?

Because Google's rate limits are counted per user and per project rather than per pipeline. The Sheets API allows roughly 100 requests per 100 seconds per user, and the connector batches requests to work within that, but the budget is shared by everything authenticating as that account.

Hence Airbyte's recommendation not to use the same user or service account for more than three instances of this connector, which exists to protect transfer speed. Spreadsheets multiply in a way most sources do not, because every team has one, so reaching four or five pipelines happens faster than you would expect.

The symptom is unhelpful when it arrives, because nothing fails. Syncs simply take longer, and the cause is a limit shared with pipelines somebody else built. Create service accounts in groups of three from the start, and name them so the association is obvious to whoever inherits this.

What should you do about types?

Treat the landed tables as staging and build a view over them, because a spreadsheet has no schema to carry. A cell containing 1,200 is text as far as the sheet is concerned, and the same column can hold a number on one row and the word pending on another without anything objecting.

Snowflake gives you a useful choice per column. A try cast returns null when a value will not convert and keeps the pipeline quiet, while a plain cast raises an error. Use the loud version for anything financial, because a budget column with approx typed into one cell should break your build rather than silently become null and vanish from a sum.

Dates deserve particular care, since spreadsheet users write them in whatever format their locale suggests and a column can legitimately contain three conventions. Normalise them in the view and agree with the sheet owner that a single format is expected, rather than trying to parse every variant forever.

Frequently asked questions

Can one source sync several spreadsheets?

No. One source covers one spreadsheet, though every worksheet inside it becomes a separate stream. Create a source per spreadsheet, watching the three instance guidance on shared accounts.

Why are my syncs getting slower?

Probably too many connector instances on one account. Airbyte recommends no more than three per user or service account, because Google's rate limits are counted per user rather than per pipeline.

Why is my sync returning nothing?

On a service account, check the spreadsheet has been shared with it, unless it is viewable by anyone with the link. Also confirm the sheets you want are grid sheets, since other types are not replicated.

My sync broke after someone edited the sheet. Why?

A renamed column or tab is a schema change to your pipeline. Agree with the owner that headers and tab names are an interface, and refresh the source schema after structural changes.

Can I do this without writing code?

The Airbyte setup is entirely UI-driven. You will want a Snowflake view casting the columns, which is the difference between a usable dataset and a raw one.

Get your Google Sheets data into Snowflake

Have the conversation about headers before anything technical, plan service accounts in groups of three so transfer speed does not quietly degrade, cast the columns in a view choosing per column whether a bad value should fail loudly, and add a freshness check because a stalled sync looks like an untouched sheet.

Airbyte's connector catalog includes 700+ pre-built connectors, so hand-maintained context can sit alongside your system data. For another source whose upstream is a person, see Smartsheet to Snowflake, and for files rather than sheets, Google Drive to Snowflake.

Start syncing now →

Integrate with 700+ apps using Airbyte

Move data from 700+ sources into warehouses, lakes, and beyond. Set up pipelines in minutes with pre-built connectors and the Connector Builder.