Skip to main content
PostgreSQL → Google Sheets

Export PostgreSQL to Google Sheets
on a schedule, in plain English.

Push Postgres query results or table snapshots into Google Sheets automatically — no CSV exports, no Zapier task quotas, no manual refreshes. Just describe what you want.

TL;DR

rsync.ai generates a SQL query from your plain-English description, runs it against PostgreSQL on the schedule you set, and appends the results to your Google Sheet; incremental runs write only new rows. Values are written as typed, so Sheets parses numbers and dates itself. Connects to Google with OAuth. Live on rsync.ai Cloud, or self-hosted (source-available under the rsync.ai Source-Available License).

  • Scheduled export on any cadence — plain-English schedule description
  • Incremental append: only rows added since the last run
  • Values written as typed — Sheets parses numbers and dates
  • Read-only PostgreSQL access — SELECT privileges are enough
How it works

How to sync PostgreSQL to Google Sheets — 5 steps

From connecting Postgres to rows appearing in your spreadsheet.

  1. 1

    Connect PostgreSQL

    Provide host, port (default 5432), user, password, and database name. The user needs SELECT on the tables or views you want to export — no replication privilege required for scheduled snapshot exports. rsync.ai supports self-hosted Postgres 10+, Amazon RDS, Aurora, Google Cloud SQL, Supabase, and Neon. SSL and SSH tunnel are both supported.

    host · port · user · password · database — SELECT only
  2. 2

    Connect Google Sheets

    Authorize rsync.ai with Google OAuth (click 'Sign in with Google'). It requests Google's Sheets scope, which lets it read and write the spreadsheets in that account but not the rest of your Drive.

    Google OAuth · Sheets scope
  3. 3

    Describe the sync in plain English

    Type what you want: 'Append new orders with their status and total from Postgres to Sheet1 in the Orders spreadsheet every morning at 8am.' rsync.ai generates the SQL query and proposes the target spreadsheet, sheet tab name, and header row. You can also reference an existing view or write a custom SELECT.

    No SQL required — rsync.ai generates it from your description
  4. 4

    Review the columns

    rsync.ai writes values as if typed into Sheets: numbers arrive as numbers, timestamps and dates are parsed by Sheets, booleans arrive as TRUE or FALSE, and text, UUIDs and JSON arrive as text. rsync.ai does not set cell formats, so apply currency or date formatting in Sheets.

    Values written as typed · formatting stays in Sheets
  5. 5

    Approve and run on schedule

    rsync.ai shows the target sheet and tab and the schedule (e.g. 'Daily at 08:00 UTC'). Approve and the first run executes immediately. Every run appends rows to the tab; in incremental mode, keyed on a timestamp or ID column, only rows newer than the last run are written. Watch run history and row counts in the rsync.ai UI.

    Incremental append · watch live in UI

How PostgreSQL columns land in Google Sheets

How PostgreSQL values arrive in Sheets. Google Sheets cells are untyped, so rsync.ai writes values as typed and leaves formatting to you.

PostgreSQL column (type)Value in Google SheetsNotes
id (INTEGER)id (Number)Written as a number. Sheets applies its own default display format.
created_at (TIMESTAMPTZ)created_at (date-time, parsed by Sheets)Written as a date-time value that Sheets parses; display format is Sheets' default.
customer_name (TEXT)customer_name (Text)Plain text. Google Sheets limits a cell to 50,000 characters.
is_paid (BOOLEAN)is_paid (TRUE/FALSE)Written as TRUE or FALSE. Add a checkbox in Sheets (Insert → Checkbox) if you want a tick box.
total (NUMERIC(10,2))total (Number)Written as a number. Format the column as currency in Sheets.
order_uuid (UUID)order_uuid (Text)Stored as a plain text string (36-character UUID format).

rsync.ai vs. Zapier, Fivetran, manual CSV for PostgreSQL → Google Sheets

What you give up — and gain — choosing rsync.ai for Postgres to Sheets pipelines.

Featurersync.aiyouZapierFivetranManual CSV
Plain-English pipeline setup
Scheduled Postgres → Sheets export
Incremental append mode
Self-host in your own VPC
Source-available connector code
No per-task / per-row pricing
PII column masking before Sheets write

PostgreSQL to Google Sheets — frequently asked

How many rows can rsync.ai write to Google Sheets?

Google Sheets has a hard limit of 10 million cells per spreadsheet. For a table with 20 columns, that's 500,000 rows maximum. For larger datasets, use PostgreSQL → S3 to export Parquet and query it with Athena or BigQuery — Google Sheets is best for operational reports under ~100k rows.

Does rsync.ai replace the sheet each run, or append?

It appends. Each run adds rows to the end of the tab; in incremental mode rsync.ai writes only rows where a monotonically increasing column (id or created_at) is greater than the last synced value. It doesn't clear the sheet or update and delete rows it already wrote, so for reports whose whole result set changes each day, send the data to PostgreSQL or MySQL instead.

Can I write to multiple sheets or tabs in the same spreadsheet?

Yes. Each rsync.ai pipeline targets one sheet tab. You can create multiple pipelines pointing to the same spreadsheet but different tabs — e.g. 'orders' tab for the orders query, 'users' tab for the user count summary, 'revenue' tab for the daily revenue rollup. Each pipeline runs on its own schedule independently.

How are PostgreSQL values written to Google Sheets?

Google Sheets cells are untyped, so rsync.ai writes values as if typed in. Integers, decimals and floats arrive as numbers; timestamps and dates arrive as date-time values that Sheets parses; booleans arrive as TRUE or FALSE; text and UUIDs arrive as text; JSON and arrays are serialized to strings. rsync.ai doesn't set cell formats, so apply number, currency or date formats in Sheets.

How does rsync.ai authenticate to Google Sheets?

With Google OAuth. You approve rsync.ai on Google's consent screen and it requests the Google Sheets scope, which covers the spreadsheets in that Google account but not the rest of your Drive. Service accounts aren't supported today. For scheduled pipelines, connect a Google account that owns the spreadsheets you want written, and re-authorize the connection in rsync.ai if Google ever revokes access.

Can I schedule the export — for example, every morning at 8am?

Yes. Describe the schedule in plain English: 'every morning at 8am UTC', 'every Monday at 9am London time', 'every hour', 'every 15 minutes'. rsync.ai converts this to a cron expression and runs the pipeline on that cadence. You can edit the schedule at any time in the UI without touching any config files.

Can rsync.ai mask or exclude PII columns from the Google Sheets export?

Yes. Mark any column as `masked` — rsync.ai replaces the value with a SHA-256 hash or omits the column entirely from the Sheets export. You can also exclude columns at the SQL query generation step: 'Export orders but exclude the customer_email and phone columns.' rsync.ai removes those columns from the SELECT before running the query.

Is rsync.ai self-hosted for PostgreSQL to Google Sheets?

rsync.ai Cloud is live today at app.rsync.ai — nothing to deploy. You can self-host the full stack today — one command (`curl -sSL https://raw.githubusercontent.com/rsync-ai/rsync.ai/main/install.sh | bash`) brings it up inside your own VPC, so your PostgreSQL credentials and Google OAuth tokens never leave your network. rsync.ai is source-available under the rsync.ai Source-Available License: self-hosting is free for your company's own internal use, while reselling it or hosting it for others as a service needs a commercial license.

Run your first PostgreSQL to Google Sheets pipeline free

The first 10 GB of data moved is free. Describe the sync in plain English and review the plan before anything runs.

Start free