Sam asked to rectify the remaining Google Ads offline conversion issues after the contact form GCLID bug was fixed, and specifically noted that draft and duplicate copies need to be reconciled into one truth source.
Repos/sail-litify/Litify_AI_Integration_Project/scripts/sync-google-ads-litify-conversions-to-sheet.mjs through the launchd plist.Repos/sail-litify/Litify_AI_Integration_Project/scripts/export-google-ads-litify-conversions.mjs so direct Intake records select GCLID_Custom__c first and fall back to legacy GCLID__c during the transition.GCLID_Custom__c and include records where either GCLID field is populated.Repos/sail-litify/scripts/ into thin wrappers that import and execute the canonical Litify_AI_Integration_Project/scripts/ implementations.OPS_LEDGER.md and docs/litify-environment-diary.md so future agents do not re-open the duplicate-source question.GCLID_Custom__c: 0.GCLID_Custom__c and populated legacy GCLID__c: 62.INT-26053055395, Salesforce Id a0CUV00006kWLBq2AO, signed 2026-06-01T19:48:59.000+0000, GCLID_Custom__c = null, legacy GCLID__c populated.GCLID_Custom__c API-name guidance was correct for the custom website form going forward, but incomplete for current OCT automation because present converted examples still live in legacy GCLID__c.node --test scripts/export-google-ads-litify-conversions.test.mjs: passed 6/6.node scripts/export-google-ads-litify-conversions.mjs --help from the old root wrapper: passed.node scripts/sync-google-ads-litify-conversions-to-sheet.mjs --help from the old root wrapper: passed.output/google-ads-data-manager/codex-gclid-custom-coalesce-2026-06-03/ with 15 production rows, 64 all-history rows, 9 QA rows, 15 internal conversion QA rows, and 500 internal lead QA rows.output/google-ads-data-manager/codex-gclid-custom-coalesce-sheet-dry-run-2026-06-03/google-ads-sheets-dry-run.json; no Google Sheet tabs were changed, no required tabs were missing, and the dry run would sync 15 production rows and 9 QA rows.