Declared available: false in src/lib/destinations/adapters/index.ts, alongside HubSpot and Salesforce.
Being honest about not having it was the right call — a selectable integration that silently drops leads would be far worse. But Sheets is not in the same bucket as the CRMs. It is the exact thing the base-tier customer is leaving, and often the thing their operations person still wants alongside.
"Keep your sheet, we will keep it filled" removes the only real objection at that tier: that moving to us means taking something away from a colleague who is happy with what they have. It converts a migration into an addition.
Notes
- The delivery engine, retry policy, health states, dead-lettering and delivery log are all already built and tested — this is an adapter, not a subsystem.
- OAuth to the customer's Google account is the real work, and it is the first destination needing a token that expires.
docs/28-destinations.md should record what happens when that token is revoked, and it must surface as a destination health state rather than a silent stop.
- Column mapping: a sheet has a header row and a form has field keys. Appending by header name is the obvious behaviour, and adding a column when a new field appears is probably right — but a customer reordering their columns must not corrupt the mapping.
About a day for the adapter, plus the OAuth work.
Leaving HubSpot and Salesforce declared unavailable is still correct. They are what a buyer asks about second, and they belong at the top tier where the outcome loop lives.
Declared
available: falseinsrc/lib/destinations/adapters/index.ts, alongside HubSpot and Salesforce.Being honest about not having it was the right call — a selectable integration that silently drops leads would be far worse. But Sheets is not in the same bucket as the CRMs. It is the exact thing the base-tier customer is leaving, and often the thing their operations person still wants alongside.
"Keep your sheet, we will keep it filled" removes the only real objection at that tier: that moving to us means taking something away from a colleague who is happy with what they have. It converts a migration into an addition.
Notes
docs/28-destinations.mdshould record what happens when that token is revoked, and it must surface as a destination health state rather than a silent stop.About a day for the adapter, plus the OAuth work.
Leaving HubSpot and Salesforce declared unavailable is still correct. They are what a buyer asks about second, and they belong at the top tier where the outcome loop lives.