New to Kestra?
Use blueprints to kickstart your first workflows.
Read a Google Spreadsheet and load its rows into a BigQuery table with automatic schema detection, scheduled and retried by Kestra.
id: gsheet-to-bigquery
namespace: company.team
tasks:
- id: read_gsheet
type: io.kestra.plugin.googleworkspace.sheets.Read
description: Read data from Google Spreadsheet
spreadsheetId: 1ybRy9G-sGznXI9GM6FEb0duQyByJbgq4LoYd7oYFr5c
fetch: true
valueRender: FORMATTED_VALUE
- id: write_csv
type: io.kestra.plugin.serdes.csv.IonToCsv
description: Write CSV into Kestra internal storage
from: "{{ outputs.read_gsheet.uris.Sheet }}"
- id: load_biqquery
type: io.kestra.plugin.gcp.bigquery.Load
description: Load data into BigQuery
autodetect: true
csvOptions:
fieldDelimiter: ","
destinationTable: kestra-dev.demo.spotify_song_feature
format: CSV
from: "{{ outputs.write_csv.uri }}"
Move data out of a shared Google Spreadsheet and into a query-ready BigQuery table without manual exports or copy-paste. This blueprint reads a sheet through the Google Workspace plugin, serializes the rows to CSV, and loads them into BigQuery with automatic schema detection, giving analysts and data teams a repeatable Sheets-to-warehouse pipeline they can schedule, retry, and audit.
read_gsheet (io.kestra.plugin.googleworkspace.sheets.Read) reads the target spreadsheet by spreadsheetId, with fetch: true and valueRender: FORMATTED_VALUE so the displayed cell values land in Kestra's internal storage.write_csv (io.kestra.plugin.serdes.csv.IonToCsv) converts the fetched Ion data into a CSV file, reading from {{ outputs.read_gsheet.uris.Sheet }}.load_biqquery (io.kestra.plugin.gcp.bigquery.Load) loads that CSV into the destinationTable with autodetect: true, format: CSV, and a comma fieldDelimiter, pulling the file from {{ outputs.write_csv.uri }}.autodetect.Google Sheets and BigQuery have no shared scheduler that ties a sheet read to a warehouse load. Kestra closes that gap with declarative YAML, passing outputs between tasks, retries on transient API failures, full execution logs and lineage, and event or schedule triggers so the load runs exactly when you need it rather than on a manual export.
This blueprint references no {{ secret('NAME') }} values as written. Supply Google credentials through the plugin serviceAccount property (or environment defaults). For production, store the service account JSON as a Kestra secret and reference it on the read_gsheet and load_biqquery tasks.
spreadsheetId on read_gsheet to your sheet (the id sits between /d/ and /edit in the URL).destinationTable on load_biqquery to your project.dataset.table.Schedule or webhook trigger to load the sheet automatically.autodetect for an explicit BigQuery schema to enforce types.Query task to transform or merge the loaded rows.