cartwright
Features

Google Sheets sync

Two-way sync between a Google Sheet and your product catalog — pull (upsert by SKU, never deletes) and push (clears stale rows), with a CRON_SECRET-gated cron.

sheetsSync syncs products, stock and prices between your catalog and a Google Sheet via the Sheets API v4, on top of the Google Workspace connector. Merchants who live in spreadsheets get bulk editing without leaving the sheet.

Enable it

Connect the Google Workspace connector in /admin/integrations.
Turn on sheetsSync in /admin/features (runtime — no redeploy).
Set the spreadsheet ID in /admin/sheets and run a sync.

How sync works

  • Pull (sheet → catalog): upserts products by SKU, with a slug fallback. It never deletes catalog rows — a row removed from the sheet is left alone.
  • Push (catalog → sheet): writes the current catalog, clearing the range first so a shrunk catalog leaves no stale trailing rows.
  • Each run reports added / updated / skipped counts; needsUpdate diffing keeps it idempotent (re-running changes nothing).

Scheduled sync

/api/cron/sheets-sync runs on a schedule (vercel.json), gated by CRON_SECRET, and no-ops when the flag is off or no spreadsheet/connection is configured.

Tools

The AI/MCP surface gains sheets.sync_now, sheets.pull, sheets.push (scope-gated).

FlagsheetsSync
Tierruntime
Defaultoff
NeedsWorkspace connector + Sheets scope, CRON_SECRET for the cron

Fail-soft: with no connection the sync is inert. Reuses the existing product CSV import/export logic where possible.

On this page