Skip to main content
MySQL → Google Sheets

MySQL data in Google Sheets,
on the schedule you set.

Business teams get live MySQL data in the spreadsheet they already know — no SQL queries, no manual exports, no scripts. Describe the sync in plain English and rsync.ai handles the rest.

TL;DR

rsync.ai reads from MySQL over a read-only connection and appends rows to your target Google Sheets tab on the schedule you describe. Incremental runs write only rows added since the last run. Values are written as typed, so Sheets parses numbers and dates itself. Works with MySQL 5.7+, RDS, Aurora and Cloud SQL; connects to Google with OAuth.

  • Plain-English schedule — 'every morning at 9am', 'every hour'
  • Values written as typed — Sheets parses numbers and dates
  • Incremental append — only rows added since the last run
  • Multiple MySQL tables → multiple tabs in the same spreadsheet
How it works

How to sync MySQL to Google Sheets — 5 steps

From MySQL connection to rows appending on a schedule — typically a few minutes.

  1. 1

    Connect MySQL

    Provide your MySQL host, port (default 3306), username, password, and database name. rsync.ai opens a read-only connection — no binlog replication user required, just SELECT privileges on the tables you want to export. SSL/TLS and SSH tunnels are supported.

    mysql://user:pass@host:3306/mydb — SELECT privileges only
  2. 2

    Connect Google Sheets

    Authorize rsync.ai with Google OAuth. It requests Google's Sheets scope, which lets it read and write the spreadsheets in that Google account (it does not get the rest of your Drive). To limit what it can touch, connect a Google account that owns only the spreadsheets you want it to write.

    Google OAuth · Sheets scope
  3. 3

    Describe the sync in plain English

    Type what you want: 'Append new MySQL orders to Sheet1 every morning at 9am.' or 'Add new rows from the products table to my pricing spreadsheet every hour.' rsync.ai parses your intent, infers the SQL query, and proposes the target tab and header row.

    No SQL · No YAML · No scripts
  4. 4

    Review the columns

    rsync.ai lists the MySQL columns it will write. Values go in as if typed into Sheets, so Sheets parses numbers and dates itself, and JSON arrives as a string. rsync.ai does not set cell formats, so apply currency, date or checkbox formatting in Sheets. Exclude any column you don't want in the sheet.

    Values written as typed · exclude columns you don't need
  5. 5

    Approve and schedule

    Approve the proposed tab layout. rsync.ai writes the first batch immediately so you can verify it looks right, then runs on the cadence you set. Each run appends rows to the tab. Pick incremental so only rows added since the last run are written. Google Sheets destinations don't update or delete rows already written.

    First run immediate — then scheduled on your cadence

How MySQL columns land in Google Sheets

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

MySQL columnValue in Google SheetsNotes
id (INT)id (Number)Written as a number. Sheets applies its own default display format.
created_at (DATETIME)created_at (date-time, parsed by Sheets)Written as a date-time value that Sheets parses. rsync.ai does not apply a format pattern; change the display format in Sheets (Format → Number).
customer_name (VARCHAR(255))customer_name (Text)VARCHAR → text. Column width is not adjusted.
is_paid (TINYINT(1))is_paid (Number)Written as 1 or 0. rsync.ai does not create checkbox cells.
total_amount (DECIMAL(10,2))total_amount (Number)Written as a number. rsync.ai does not apply currency formatting; format the column in Sheets.
metadata (JSON)metadata (Text)MySQL JSON column serialised as a JSON string in a Text cell. Nested objects are not expanded — use a PostgreSQL destination if you need queryable JSON.

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

How the options compare for keeping a spreadsheet in sync with MySQL.

Featurersync.aiyouZapierFivetranManual CSV
Plain-English pipeline setup
Scheduled MySQL → Sheets sync
Incremental (append new rows only)
Column-level PII masking / exclusion
Self-host in your own VPC
Source-available connector code
No per-row / per-task pricing
Multiple tabs from multiple tables

MySQL to Google Sheets — frequently asked

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

Google Sheets has a hard limit of 10 million cells per spreadsheet and a practical row limit of around 200,000–500,000 rows per tab before performance degrades noticeably. For most use cases — daily order reports, weekly product summaries, monthly billing exports — this is more than enough. If you need more, consider MySQL → PostgreSQL or MySQL → S3 as a destination, and use Sheets only for summary/aggregated views.

Does rsync.ai update existing rows in Google Sheets, or only append?

Only append. Each run adds rows to the end of the tab; incremental runs write rows where a timestamp or auto-increment column (e.g. `created_at`, `id`) is greater than the last synced value. rsync.ai doesn't clear the tab or update and delete rows it already wrote, so if rows in MySQL change after insert, send that table to PostgreSQL and use Sheets for new-row feeds.

Can I sync MySQL data into multiple tabs in the same Google Sheet?

Yes. You can set up multiple rsync.ai pipelines pointing to different tabs in the same spreadsheet — for example, one pipeline writes `orders` to the 'Orders' tab, another writes `products` to the 'Products' tab, and a third appends new `customers` rows to the 'Customers' tab. Each pipeline runs on its own schedule independently.

How are MySQL values written to Google Sheets?

Google Sheets cells are untyped, so rsync.ai writes values as if typed in: numbers arrive as numbers, dates and timestamps are parsed by Sheets, and everything else, including JSON, arrives as text. rsync.ai doesn't set cell formats, so apply currency, date or checkbox formatting 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 only the spreadsheets you want written.

What schedule options are available for MySQL → Google Sheets syncs?

You describe the schedule in plain English: 'every morning at 9am', 'every hour', 'every 15 minutes', 'on weekdays at 8am UTC'. rsync.ai converts this to a cron expression. The minimum schedule interval is 60 seconds. Google applies per-minute write quotas to the Sheets API, so choose a slower cadence for large tables. You can also trigger a manual run at any time from the rsync.ai UI.

Can I redact PII columns before they reach Google Sheets?

Yes. In the column review step you can mark columns as excluded (not written to Sheets at all), hashed (SHA-256 of the value), or truncated (first N characters only). This is useful when a business team needs access to order data in Sheets but should not see raw customer email addresses or phone numbers.

Is rsync.ai self-hosted for MySQL → 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 MySQL 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 MySQL 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