Get started with a free trial today
Already have an account? Sign in
Stitch’s Google Sheets integration replicates data using theGoogle Sheets v4 AP1. Refer to theSchema section for a list of objects available for replication.
Stitch’s Google Sheets integration will generate tables containing data related to metadata and the individual sheets within a spreadsheet.
Note: There are a few limitations:
IMPORTRANGE() function in Google Sheets isn’t currently supported. This integration identifies new and updated data using a spreadsheet’s lastupdated_at value, which theIMPORTRANGE() doesn’t update when used.A high-level look at Stitch's Google Sheets (v2) integration, including release status, useful links, and the features supported in Stitch.
| STITCH | |||
| Release status | Deprecated on March 12, 2024 | Supported by | |
| Stitch plan | Standard | API availability | Not available |
| Singer GitHub repository | |||
| REPLICATION SETTINGS | |||
| Anchor Scheduling | Supported | Advanced Scheduling | Supported |
| Table-level reset | Unsupported | Configurable Replication Methods | Unsupported |
| DATA SELECTION | |||
| Table selection | Supported | Column selection | Supported |
| Select all | Supported | ||
| TRANSPARENCY | |||
| Extraction Logs | Supported | Loading Reports | Supported |
To set up Google Sheets in Stitch, you need:
A spreadsheet in your Google Drive.
A header row with unique column values in the first row of every sheet you want to replicate. If there are multiple headers not in the first row, your worksheet data may not be replicated correctly. Headers that aren’t in the first row may be extracted as column data.
A full row of data in the second row of every sheet you want to replicate. Data must begin in the second row of the sheet. Values in this row may not beNULL orissues will arise during Extraction.

On the Stitch Dashboard page, click theAdd Integration button.
Click theGoogle Sheets icon.
Enter a name for the integration. This is the name that will display on the Stitch Dashboard for the integration; it’ll also be used to create the schema in your destination.
For example, the name “Stitch Google Sheets” would create a schema calledstitch_google_sheets in the destination.Note: Schema names cannot be changed after you save the integration.
The Sync Historical Data setting defines the starting date for your Google Sheets integration. This means that dataequal to or newer than this date will be replicated to your data warehouse.
Change this setting if you want to replicate data beyond Google Sheets’s default setting of1 year. For a detailed look at historical replication jobs, check out theSyncing Historical SaaS Data guide.
In theReplication Frequency section, you’ll create the integration’sreplication schedule. An integration’s replication schedule determines how often Stitch runs a replication job, and the time that job begins.
Google Sheets integrations support the following replication scheduling methods:
Advanced Scheduling using Cron (Advanced or Premium plans only)
To keep your row usage low, consider setting the integration to replicate less frequently. See theUnderstanding and Reducing Your Row Usage guide for tips on reducing your usage.
The last step is to select the tables and columns you want to replicate.Learn about the available tables for this integration.
Note: If a replication job is currently in progress, new selections won’t be used until the next job starts.
For Google Sheets integrations, you can select:
Individual tables and columns
All tables and columns
Click the tabs to view instructions for each selection method.
To track a table, click thecheckbox next to the table’s name. A blue checkmark means the table is set to replicate.
To track a column, click thecheckbox next to the column’s name. A blue checkmark means the column is set to replicate.
Click theTables to Replicate tab.
In the menu that displays, clickTrack all Tables and Fields:

After you finish setting up Google Sheets, itsSync Status may show asPending on either the Stitch Dashboard or in the Integration Details page.
For a new integration, aPending status indicates that Stitch is in the process of scheduling the initial replication job for the integration.This may take some time to complete.
Initial replication jobs with Anchor Scheduling
If using Anchor Scheduling, an initial replication job may not kick off immediately. This depends on the selected Replication Frequency and Anchor Time. Refer to theAnchor Scheduling documentation for more information.
The first seven days of replication, beginning when data is first replicated, are free. Rows replicated from the new integration during this time won’t count towards your quota. Stitch offers this as a way of testing new integrations, measuring usage, and ensuring historical data volumes don’t quickly consume your quota.
In this section:
Details about Extraction, including object discovery and selecting data for replication
Details about how data replicated from Google Sheets is loaded into a destination
For every table set to replicate, Stitch will perform the following during Extraction:
During Discovery, Stitch will:
At the start of each replication job, Stitch will check the sheets’s header row and first data row (the second row in the sheet) for data.
To be detected and properly replicated, every sheet set to replicate must have:
Column headers with unique values in the first row. If there are duplicate column names, Stitch will skip the sheet and surface aduplicate column name error.
For example: Two columns in the header row can’t be namedcustomer_id. Uniqueness must not rely on case. Whilecustomer_id andCustomer_ID may be unique due to case differences, this may still cause errors during extraction and loading. For this reason, column names must be completely unique.
A full row of data in the second row. If any column in this row is empty but has a format (currency or datetime for example), the type will be determined using the format. If a cell is empty and has no format, the column type will be set to string by default.
If the sheet doesn’t contain a header row and a second row of data, Stitch will skip the sheet and surface anempty sheet message during extraction.
To determine data types, Stitch will analyze the first two rows in thefiles included in object discovery.
If a column contains non-standard boolean language, Stitch will intentionally coerce those values into boolean. The following values are to be expected to be replicated asTrue:
YES/yesY/y1true (the string “true” prefixed with a tick [`])The following values are expected to be replicated asFalse:
NO/noN/n0false (the string “false” prefixed with a tick [`])If a column has been specified as aSTRING, Stitch will attempt to parse the value as a string, unless the column contains non-standard boolean language. If this fails, the column will be loaded as a nullableSTRING.
For all other columns, Stitch will perform the following to determine the column’s data type:
BOOLEAN valueINTEGERDATE-TIME valueDATE dateTIME valueSTRINGAfter discovery is completed, Stitch will move onto extracting data from the sheets set to replicate.
While data from Google Sheets integrations is replicated usingKey-based Incremental Replication, the behavior for this integration differs subtly from other integrations.
The table below compares Key-based Incremental Replication andReplication Key behavior for Google Sheets to that of other integrations.
| Google Sheets | Other integrations | |
| What's replicated during a replication job? | The entire contents of a modified spreadsheet. This includes all sheets in the spreadsheet that are set to replicate, regardless of whether they have been modified. | Only new or updated rows in a table. |
| What's used as a Replication Key? | The time a spreadsheet is modified. | A column or columns in a table. |
| Are Replication Keys inclusive? | No. Only spreadsheets with a modification timestamp value greater than the last saved bookmark are replicated. | Yes. Rows with a Replication Key valuegreater than or equal to the last saved bookmark are replicated. |
To reduce row usage, considerscheduling the integration to replicate less frequently.
For every sheet you set to replicate, Stitch will create a table in your destination. These tables will contain the columns you select for replication, along with some system columns created by Stitch. Refer to thesample table in the next section for an example.
Schemas and versioning
Schemas and naming conventions can change from version to version, so we recommend verifying your integration’s version before continuing.
The schema and info displayed below is forversion 2 of this integration.
Table and column names in your destination
Depending on your destination, table and column names may not appear as they are outlined below.
For example: Object names are lowercased in Redshift (CusTomERs >customers), while case is maintained in PostgreSQL destinations (CusTomERs >CusTomERs). Refer to theLoading Guide for your destination for more info.
Thefile_metadata table contains metadata about the spreadsheet defined in the integration’s settings.
Key-based Incremental | |
Primary Key | id |
Replication Key | modifiedTime |
| Useful links |
createdTime DATE-TIME | |||
driveId STRING | |||
id STRING | |||
lastModifyingUser OBJECT
| |||
modifiedTime DATE-TIME | |||
name STRING | |||
teamDriveId STRING | |||
version INTEGER |
Thesheet_metadata table contains metadata about the sheets within the spreadsheet defined in the integration’s settings.
Full Table | |
Primary Key | sheetId |
| Useful links |
columns ARRAY
| |||||||
gridProperties OBJECT
| |||||||
index INTEGER | |||||||
sheetId INTEGER | |||||||
sheetType STRING | |||||||
sheetUrl STRING | |||||||
spreadsheetId STRING | |||||||
title STRING |
Thesheets_loaded table contains metadata about individual sheets loaded to your destination.
Full Table | |
Primary Keys | sheetId spreadsheetId loadDate |
| Useful links |
lastRowNumber INTEGER |
loadDate DATE-TIME |
sheetId INTEGER |
spreadsheetId STRING |
title STRING |
Thespreadsheet_metadata table contains metadata about the spreadsheet defined in the integration’s settings.
Full Table | |
Primary Key | spreadsheetId |
| Useful links |
properties OBJECT
| ||||
spreadsheetId STRING | ||||
spreadsheetUrl STRING |
| Related | Troubleshooting |
Did this article help? If you have questions or feedback, feel free tosubmit a pull request with your suggestions,open an issue on GitHub, orreach out to us.