docs/integrations/sources/google-sheets.md
This page contains the setup guide and reference information for the Google Sheets source connector.
</HideInUI>:::info The Google Sheets source connector pulls data from a single Google Sheets spreadsheet. Each sheet within a spreadsheet can be synced. To sync multiple spreadsheets, use our Google Drive connector or set up multiple Google Sheets source connectors in your Airbyte instance. No other files in your Google Drive are accessed. :::
The Google Sheets source connector supports authentication via either OAuth or Service Account Key Authentication.
For Airbyte Cloud:
We highly recommend using OAuth, as it significantly simplifies the setup process and allows you to authenticate directly from the Airbyte UI.
<!-- /env:cloud --> <!-- env:oss -->For Airbyte Open Source:
We recommend using Service Account Key Authentication. Follow the steps below to create a service account, generate a key, and enable the Google Sheets API.
:::note
If you prefer to use OAuth for authentication with Airbyte Open Source, you can follow Google's OAuth instructions to create an authentication app. Be sure to set the scopes to https://www.googleapis.com/auth/spreadsheets.readonly. You will need to obtain your client ID, client secret, and refresh token for the connector setup.
:::
If your spreadsheet is viewable by anyone with its link, no further action is needed. If not, give your Service account access to your spreadsheet.
<!-- /env:oss --> {
"type": "service_account",
"project_id": "YOUR_PROJECT_ID",
"private_key_id": "YOUR_PRIVATE_KEY",
...
}
The Google Sheets connector allows you to optionally rename streams (sheet/tab names) as they appear in Airbyte and your destination. This is useful if your sheet names are not descriptive, contain special characters, or you want to standardize naming across sources.
source_stream_name (the exact name of the sheet/tab in your spreadsheet) and a custom_stream_name (the name you want it to appear as in Airbyte and your destination).source_stream_name is not found in your spreadsheet, it will be ignored and the default name will be used.Suppose your spreadsheet has sheets named Sheet1, 2024 Q1, and Summary. You want to rename them to sales_data, q1_2024, and leave Summary unchanged. You would configure:
[
{ "source_stream_name": "Sheet1", "custom_stream_name": "sales_data" },
{ "source_stream_name": "2024 Q1", "custom_stream_name": "q1_2024" }
]
After discovery, your streams in Airbyte will be named sales_data, q1_2024, and Summary.
The Google Sheets connector offers options to customize how column names from your spreadsheet are converted to be SQL-compliant. These settings can be configured in the Airbyte UI when setting up the connector.
The following options allow you to fine-tune the column name conversion process. They only take effect if "Convert Column Names to SQL-Compliant Format" is enabled.
Remove Leading and Trailing Underscores
" EXAMPLE Domain ""example_domain"Combine Number-Word Pairs
"50th Percentile""50th_percentile" (if "Allow Leading Numbers" is enabled)"_50th_percentile" (if "Allow Leading Numbers" is disabled)Remove All Special Characters
*, ?, !, $, %, (, )) from column names."Example ID*""example_id"Combine Letter-Number Pairs
"Q3 2023""q3_2023"Allow Leading Numbers
"50th Percentile""50_th_percentile" (if enabled)"_50_th_percentile" (if disabled)These options provide flexibility to tailor column name conversions to your specific database requirements. Adjust them as needed in the Airbyte UI when configuring the Google Sheets connector.
The Google Sheets connector automatically handles duplicate column headers by appending the cell position to create unique field names. This ensures that all columns are properly synced even when your spreadsheet contains duplicate header names.
_<cell_position> to each duplicated header nameIf your spreadsheet has a header named stats in both columns C and Q (positions C1 and Q1), the connector will create two distinct fields:
stats_C1 (for the column at position C1)stats_Q1 (for the column at position Q1)This ensures that data from both columns is properly captured and synced to your destination, with clear identification of which column each field represents.
The Google Sheets source connector supports the following sync modes:
Each sheet in the selected spreadsheet is synced as a separate stream. Each selected column in the sheet is synced as a string field.
Airbyte only supports replicating Grid sheets.
Each sheet in the selected spreadsheet is synced as a separate stream. Each selected column in the sheet is synced as a string field.
Airbyte only supports replicating Grid sheets.
| Integration Type | Airbyte Type | Notes |
|---|---|---|
| any type | string |
The Google API rate limits are:
Airbyte batches requests to the API in order to efficiently pull data and respect these rate limits. We recommend not using the same user or service account for more than 3 instances of the Google Sheets source connector to ensure high transfer speeds.
| Version | Date | Pull Request | Subject |
|---|---|---|---|
| 0.12.22 | 2026-03-17 | 74660 | Update dependencies |
| 0.12.21 | 2026-02-24 | 73968 | Update dependencies |
| 0.12.20 | 2026-02-10 | 73078 | Update dependencies |
| 0.12.19 | 2026-02-03 | 72644 | Update dependencies |
| 0.12.18 | 2026-01-20 | 71904 | Update dependencies |
| 0.12.17 | 2026-01-14 | 71703 | Update dependencies |
| 0.12.16 | 2025-12-18 | 70510 | Update dependencies |
| 0.12.15 | 2025-12-03 | 69848 | Add optional flag to read columns with empty headers |
| 0.12.14 | 2025-11-25 | 70029 | Update dependencies |
| 0.12.13 | 2025-11-18 | 69396 | Update dependencies |
| 0.12.12 | 2025-10-29 | 68759 | Update dependencies |
| 0.12.11 | 2025-10-21 | 68254 | Update dependencies |
| 0.12.10 | 2025-10-16 | 67531 | Add error handling for unexpected data in sheets causing 500 responses. |
| 0.12.9 | 2025-10-14 | 67876 | Update dependencies |
| 0.12.8 | 2025-10-07 | 67395 | Update dependencies |
| 0.12.7 | 2025-09-30 | 65383 | Update dependencies |
| 0.12.6 | 2025-09-16 | 66012 | Update to CDK v7 |
| 0.12.5 | 2025-08-09 | 64633 | Update dependencies |
| 0.12.4 | 2025-08-02 | 64179 | Update dependencies |
| 0.12.3 | 2025-07-26 | 63822 | Update dependencies |
| 0.12.2 | 2025-07-22 | 63334 | Feature: Deduplicate Headers |
| 0.12.1 | 2025-07-19 | 55490 | Update dependencies |
| 0.12.0 | 2025-07-15 | 63305 | Promoting release candidate 0.12.0-rc.2 to a main version. |
| 0.12.0-rc.2 | 2025-07-11 | 62931 | Fix: handle empty propeties_to_match in SchmemaMatchingExtractor |
| 0.12.0-rc.1 | 2025-07-02 | 62456 | Feature: migrate connector to manifest-only format |
| 0.11.0 | 2025-06-11 | 61489 | Feature: Added Streeam Name Override Options |
| 0.10.0 | 2025-06-09 | 60836 | Feature: Added additional sanitization flags when using Convert Column Names to SQL-Compliant Format (names_conversion) |
| 0.9.6 | 2025-05-22 | 60874 | Use custom backoff policy on 429 errors for single sheets |
| 0.9.5 | 2025-05-13 | 60259 | Fix whitespaces used for column names when enabling names_conversion |
| 0.9.4 | 2025-03-01 | 54989 | Update dependencies |
| 0.9.3 | 2025-02-22 | 54434 | Update dependencies |
| 0.9.2 | 2025-02-15 | 53720 | Update dependencies |
| 0.9.1 | 2025-02-08 | 51696 | Update dependencies |
| 0.9.0 | 2025-02-04 | 53154 | Promoting release candidate 0.9.0-rc.3 to a main version. |
| 0.9.0-rc.3 | 2025-01-31 | 52682 | Fix stream name typing |
| 0.9.0-rc.2 | 2025-01-31 | 52671 | Fix sheet id encoding |
| 0.9.0-rc.1 | 2025-01-30 | 50843 | Migrate to low-code |
| 0.8.5 | 2025-01-11 | 44270 | Starting with this version, the Docker image is now rootless. Please note that this and future versions will not be compatible with Airbyte versions earlier than 0.64 |
| 0.8.4 | 2024-12-09 | 48835 | Implementing integration tests |
| 0.7.4 | 2024-09-09 | 45108 | Google Sheets API errors now cause syncs to fail |
| 0.7.3 | 2024-08-12 | 43921 | Update dependencies |
| 0.7.2 | 2024-08-10 | 43544 | Update dependencies |
| 0.7.1 | 2024-08-03 | 43290 | Update dependencies |
| 0.7.0 | 2024-08-02 | 42975 | Migrate to CDK v4.3.0 |
| 0.6.3 | 2024-07-27 | 42826 | Update dependencies |
| 0.6.2 | 2024-07-22 | 41993 | Avoid syncs with rate limits being considered successful |
| 0.6.1 | 2024-07-20 | 42376 | Update dependencies |
| 0.6.0 | 2024-07-17 | 42071 | Migrate to CDK v3.9.0 |
| 0.5.11 | 2024-07-13 | 41527 | Update dependencies |
| 0.5.10 | 2024-07-09 | 41273 | Update dependencies |
| 0.5.9 | 2024-07-06 | 41005 | Update dependencies |
| 0.5.8 | 2024-06-28 | 40587 | Replaced deprecated AirbyteLogger with logging.Logger |
| 0.5.7 | 2024-06-25 | 40560 | Catch an auth error during discover and raise a config error |
| 0.5.6 | 2024-06-26 | 40533 | Update dependencies |
| 0.5.5 | 2024-06-25 | 40505 | Update dependencies |
| 0.5.4 | 2024-06-22 | 40129 | Update dependencies |
| 0.5.3 | 2024-06-06 | 39225 | [autopull] Upgrade base image to v1.2.2 |
| 0.5.2 | 2024-06-02 | 38851 | Emit state message at least once per stream |
| 0.5.1 | 2024-04-11 | 35404 | Add row_batch_size parameter more granular control read records |
| 0.5.0 | 2024-03-26 | 36515 | Resolve poetry dependency conflict, add record counts to state messages |
| 0.4.0 | 2024-03-19 | 36267 | Pin airbyte-cdk version to ^0 |
| 0.3.17 | 2024-02-29 | 35722 | Add logic to emit stream statuses |
| 0.3.16 | 2024-02-12 | 35136 | Fix license in pyproject.toml. |
| 0.3.15 | 2024-02-07 | 34944 | Manage dependencies with Poetry. |
| 0.3.14 | 2024-01-23 | 34437 | Fix header cells filtering |
| 0.3.13 | 2024-01-19 | 34376 | Fix names conversion |
| 0.3.12 | 2023-12-14 | 33414 | Prepare for airbyte-lib |
| 0.3.11 | 2023-10-19 | 31599 | Base image migration: remove Dockerfile and use the python-connector-base image |
| 0.3.10 | 2023-09-27 | 30487 | Fix bug causing rows to be skipped when batch size increased due to rate limits. |
| 0.3.9 | 2023-09-25 | 30749 | Performance testing - include socat binary in docker image |
| 0.3.8 | 2023-09-25 | 30747 | Performance testing - include socat binary in docker image |
| 0.3.7 | 2023-08-25 | 29826 | Remove row batch size from spec, add auto increase this value when rate limits |
| 0.3.6 | 2023-08-16 | 29491 | Update to latest CDK |
| 0.3.5 | 2023-08-16 | 29427 | Add stop reading in case of 429 error |
| 0.3.4 | 2023-05-15 | 29453 | Update spec descriptions |
| 0.3.3 | 2023-08-10 | 29327 | Add user-friendly error message for 404 and 403 error while discover |
| 0.3.2 | 2023-08-09 | 29246 | Add checking while reading to skip modified sheets |
| 0.3.1 | 2023-07-06 | 28033 | Fixed several reported vulnerabilities (25 total), CVE-2022-37434, CVE-2022-42898 |
| 0.3.0 | 2023-06-26 | 27738 | License Update: Elv2 |
| 0.2.39 | 2023-05-31 | 26833 | Remove authSpecification in favour of advancedAuth in specification |
| 0.2.38 | 2023-05-16 | 26097 | Refactor config error |
| 0.2.37 | 2023-02-21 | 23292 | Skip non grid sheets. |
| 0.2.36 | 2023-02-21 | 23272 | Handle empty sheets gracefully. |
| 0.2.35 | 2023-02-23 | 23057 | Slugify column names |
| 0.2.34 | 2023-02-15 | 23071 | Change min spreadsheet id size to 20 symbols |
| 0.2.33 | 2023-02-13 | 23278 | Handle authentication errors |
| 0.2.32 | 2023-02-13 | 22884 | Do not consume http spreadsheets. |
| 0.2.31 | 2022-10-09 | 19574 | Revert 'Add row_id to rows and use as primary key' |
| 0.2.30 | 2022-10-09 | 19215 | Add row_id to rows and use as primary key |
| 0.2.21 | 2022-10-04 | 15591 | Clean instantiation of AirbyteStream |
| 0.2.20 | 2022-10-10 | 17766 | Fix null pointer exception when parsing the spreadsheet id. |
| 0.2.19 | 2022-09-29 | 17410 | Use latest CDK. |
| 0.2.18 | 2022-09-28 | 17326 | Migrate to per-stream states. |
| 0.2.17 | 2022-08-03 | 15107 | Expose Row Batch Size in Connector Specification |
| 0.2.16 | 2022-07-07 | 13729 | Improve configuration field description |
| 0.2.15 | 2022-06-02 | 13446 | Retry requests resulting in a server error |
| 0.2.13 | 2022-05-06 | 12685 | Update CDK to v0.1.56 to emit an AirbyeTraceMessage on uncaught exceptions |
| 0.2.12 | 2022-04-20 | 12230 | Update connector to use a spec.yaml |
| 0.2.11 | 2022-04-13 | 11977 | Replace leftover print statement with airbyte logger |
| 0.2.10 | 2022-03-25 | 11404 | Allow using Spreadsheet Link/URL instead of Spreadsheet ID |
| 0.2.9 | 2022-01-25 | 9208 | Update title and descriptions |
| 0.2.7 | 2021-09-27 | 8470 | Migrate to the CDK |
| 0.2.6 | 2021-09-27 | 6354 | Support connecting via Oauth webflow |
| 0.2.5 | 2021-09-12 | 5972 | Fix full_refresh test by adding supported_sync_modes to Stream initialization |
| 0.2.4 | 2021-08-05 | 5233 | Fix error during listing sheets with diagram only |
| 0.2.3 | 2021-06-09 | 3973 | Add AIRBYTE_ENTRYPOINT for Kubernetes support |
| 0.2.2 | 2021-04-20 | 2994 | Formatting spec |
| 0.2.1 | 2021-04-03 | 2726 | Fix base connector versioning |
| 0.2.0 | 2021-03-09 | 2238 | Protocol allows future/unknown properties |
| 0.1.7 | 2021-01-21 | 1762 | Fix issue large spreadsheet |
| 0.1.6 | 2021-01-27 | 1668 | Adopt connector best practices |
| 0.1.5 | 2020-12-30 | 1438 | Implement backoff |
| 0.1.4 | 2020-11-30 | 1046 | Add connectors using an index YAML file |