Google Sheets ↔ CRM Sync
Move records between Google Sheets and HubSpot/Salesforce via Composio.
Workflow
- Pick a direction. Sheet → CRM (import) or CRM → Sheet (report)?
- Link both toolkits:
composio link googlesheets composio link hubspot # or salesforce - Read the sheet:
composio execute GOOGLESHEETS_BATCH_GET -d '{ "spreadsheet_id": "1abc...", "ranges": ["Leads!A1:F500"] }' - Map columns explicitly: ask the user for sheet_col → CRM_property pairs. Never guess.
- Import or export:
- Sheet → CRM: iterate rows,
composio execute HUBSPOT_CREATE_A_CONTACT -d '{...}'per row, write result (id, status) back to sheet. - CRM → Sheet: pull CRM records, build a 2D array, then:
composio execute GOOGLESHEETS_BATCH_UPDATE -d '{ "spreadsheet_id": "1abc...", "data": [{ "range": "Pipeline!A2", "values": [[...]] }] }'
- Sheet → CRM: iterate rows,
- Timestamp the sync. Write
last_synced_atinto a header cell so the user sees freshness.
Reporting recipes
- Weekly pipeline report: Pull all open opps → group by stage → write to
Report!A1with columns: Stage, Count, $Amount, Avg Age. - New signups log: Append each new HubSpot contact created in the last 24h to an "Intake" tab.
Guardrails
- For Sheet → CRM imports: dedupe on email before creating. Ask before creating > 50 records.
- Never overwrite a sheet without making a backup tab (
<tab>_backup_<date>). - If column mapping is ambiguous, stop and ask — bad mappings silently corrupt the CRM.