Google Sync
Keep leads in sync with a Google Sheet (pull), or export leads to a Google Sheet (push). Map columns once, then it runs on a schedule you choose or on demand — no duplicates. Requires the Google integration. Paid plans.
Try it with your AI assistant
Once WebsitePublisher is connected to your AI assistant, paste one of these into the chat. Replace the parts in [brackets] with your own details.
@WebsitePublisher keep my leads in sync with my Google Sheet [sheet name] every hour@WebsitePublisher export all my leads to a Google Sheet once a dayWith WebsitePublisher, keep my leads in sync with my Google Sheet [sheet name] every hourWith WebsitePublisher, export all my leads to a Google Sheet once a dayWith WebsitePublisher, keep my leads in sync with my Google Sheet [sheet name] every hourWith WebsitePublisher, export all my leads to a Google Sheet once a dayEndpoints (11)
Create or update a sync source (matched by name). PULL (default): Google Sheet tab → leads. field_map maps sheet headers to lead fields, key_column identifies a row (e.g. email; omit to fingerprint the row). Header row is checked before saving. Default schedule every 4 hours. PUSH (direction "push", capability drive_export): leads → a Google Sheet the platform creates. field_map is a list of [lead_field, column] pairs in column order (special fields: _id, _created_at, _status, _form_name); push_mode new_document | append | replace; optional filters. Manual unless schedule is set. schedule is a cron expression (minimum interval per project, see get-config); empty string = manual only.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | ✓ Yes | Unique name for this source, e.g. "sheet-leads". |
spreadsheet |
string | No | Google Sheets URL or ID (required when creating). |
tab |
string | No | Pull: tab to read (required when creating). Push: tab name in the new sheet (default "Leads"). |
header_row |
integer | No | Row number of the column headers (default 1). |
key_column |
string | No | Header of the column that uniquely identifies a row. Omit to use a fingerprint of the mapped values. |
field_map |
array | No | Pull: {"Sheet column header": "lead_field"}. Push: a list of [lead_field, "Column header"] pairs in column order, e.g. [["voornaam", "First name"], ["email", "Email"]] (an object also works, but its order is not guaranteed). Required when creating. |
form_name |
string | No | form_name for the leads (default "google-sheet"). |
on_change |
string | No | "update" (default) applies sheet changes to existing leads; "ignore" only adds new rows. |
schedule |
string | No | Cron expression, e.g. "0 */4 * * *". Empty string = manual only. Defaults and minimum interval come from get-config. |
timezone |
string | No | Timezone for the schedule (default Europe/Amsterdam). |
enabled |
boolean | No | Pause (false) or resume (true) the schedule. |
direction |
string | No | "pull" (default) or "push". Cannot be changed on an existing source. |
push_mode |
string | No | Push: "new_document" (default, a new sheet per run), "append" (only leads not exported before) or "replace" (rewrite the same sheet). |
title |
string | No | Push: spreadsheet title (default "Leads export"). |
filter_form_name |
string | No | Push: only leads with this form_name. Empty string clears the filter. |
filter_status |
string | No | Push: only leads with this status. Empty string clears the filter. |
created_after |
string | No | Push: only leads created on or after this date (YYYY-MM-DD). |
target |
string | No | "leads" (default). "mapi_entity" arrives later. |
One sync source with its config, schedule and last run.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | ✓ Yes |
All sync sources of this project with their schedule and last run.
No input parameters required.
Delete a sync source and its schedule. Leads already created stay.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | ✓ Yes |
Dry run, writes nothing. Pull: header check and how the first rows map (create / update / unchanged). Push: the column header, how many leads match and would be written, and the first rows.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | ✓ Yes | |
limit |
integer | No | Rows to show (default 5, max 25). |
Run a sync source immediately (same logic as the scheduled run). Returns the run summary.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | ✓ Yes |
Used by the schedule. Prefer run-now for manual runs.
| Field | Type | Required | Description |
|---|---|---|---|
source_id |
integer | ✓ Yes |
Recent runs of a sync source: counts per run and the first row errors.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | ✓ Yes | |
limit |
integer | No | Default 10, max 50. |
Project settings for Google Sync (limits, minimum interval, defaults), which ones were changed, and the platform limits.
No input parameters required.
Change project settings; only the keys you send change, null resets a key to the platform default. Values must stay within the platform limits shown by get-config. Paid plans.
| Field | Type | Required | Description |
|---|---|---|---|
max_sources |
integer | No | Max sync sources in this project. |
max_rows_per_run |
integer | No | Max rows (pull) or leads (push) per run. |
min_interval_minutes |
integer | No | Minimum minutes between scheduled runs. |
new_document_min_interval_hours |
integer | No | Minimum hours between runs of push_mode new_document. |
default_schedule |
string | No | Schedule for new pull sources when none is given. |
default_timezone |
string | No | Timezone for new sources, e.g. "Europe/Amsterdam". |
default_form_name |
string | No | form_name for leads from pull sources. |
default_push_title |
string | No | Spreadsheet title for push sources. |
default_push_tab |
string | No | Tab name for push sources. |
Forget which rows were seen, so the next run compares every row again. Does not create duplicate leads.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | ✓ Yes |
MCP Tool Names
When using this integration through an AI assistant (Claude, ChatGPT, Cursor, etc.), the endpoints are available as MCP tools:
| Endpoint | MCP Tool Name |
|---|---|
| set-source | google_sync_set_source |
| get-source | google_sync_get_source |
| list-sources | google_sync_list_sources |
| delete-source | google_sync_delete_source |
| preview | google_sync_preview |
| run-now | google_sync_run_now |
| run-scheduled | google_sync_run_scheduled |
| get-runs | google_sync_get_runs |
| get-config | google_sync_get_config |
| set-config | google_sync_set_config |
| reset-state | google_sync_reset_state |
Website