What this integration solves
CRM migrations often succeed as contact moves and fail as attribution moves. GCLID fields get dropped, stage names change meaning, and offline upload automations point at dead properties. Paid media looks like it fell off a cliff when only the wiring moved.
This guide is a migration checklist for attribution continuity across HubSpot, Salesforce and Pipedrive moves.
Prerequisites and permissions
Admins on old and new CRM, Google Ads access, a freeze window for stage changes, and a mapping workbook that lists every attribution field: gclid, gbraid, wbraid, ga_client_id, original utm fields, offline upload flags, and conversion external IDs.
The build, step by step
1. Inventory attribution fields and automations in the source CRM. Export sample rows with known paid conversions.
2. Recreate fields in the destination with identical meaning. Prefer same API names where possible.
3. Map stages with a written dictionary. Do not collapse PQQ and ITT into Proposal without documenting the loss.
4. Migrate historical click IDs even for closed records; you may still need them for lookbacks and audits.
5. Rebuild upload jobs against new field API names. Keep the old job running until parity checks pass.
6. Parallel run: for two weeks, compare upload volume and accepted conversions pre/post.
7. Only then decommission the source automations.
Gotchas
Deduping contacts can discard the contact that held the gclid. Activity history migrations that rewrite timestamps break conversion_date_time audits. Soft-deleted marketing contacts excluded from export. Re-labelling stages without updating Google Ads conversion action names. Currency field defaults changing on import.
How to verify it is working
Reconcile 50 known paid-won records: click ID present, stage equivalent, upload flag equivalent, and a fresh stage change produces an Accepted upload in Google Ads. Compare weekly Accepted count to the pre-migration baseline.
What breaks it later
Post-migration cleanup scripts that null custom fields, and new sales processes that invent stages without measurement owners. Keep an attribution field lock list.
Identity and capture for CRM migration without losing attribution
Inventory every click ID field, upload flag and stage trigger in the source CRM before cutover. Rebuild meanings in the destination even when API names change, and keep a field dictionary. Historical IDs on closed records migrate for auditability, not for bidding nostalgia.
Upload contract for CRM migration without losing attribution
Parallel-run old and new upload jobs until Ads Accepted volume and missing-ID rates are stable for a full week. Freeze stage renames during that window. Do not cut over on a single green test Opportunity. Fifty-record reconciliations beat a demo.
Monitoring for CRM migration without losing attribution
Daily during parallel run: source stage volume, destination stage volume, Ads Accepted count and missing click ID rate. After cutover, lock attribution fields against cleanup scripts that null custom properties. Name a measurement owner with veto power over stage redesigns.
Deep dive: CRM migration without losing attribution
Migrations fail attribution when the workstream is treated as optional IT. Treat measurement as a go-live gate. Publish a short internal note covering the dictionary, the parallel-run exit criteria and who can rename stages after cutover.
Operator checklist: crm-migration-without-losing-attribution
1) Source field inventory signed. 2) Destination dictionary complete. 3) Historical IDs migrated. 4) Parallel run stable for seven days. 5) Fifty-record sample reconciles. 6) Attribution fields locked. 7) Measurement owner named in writing.