Lead Storage for Google Ads: Sheets, CRM, or Data Manager?
Key Takeaways
- There are four sensible ways to store leads for Google Ads: Google Sheet, native CRM integration, automation tool, or directly the Google Ads Data Manager.
- My default for smaller accounts is Google Sheet plus Apps Script. Pragmatic, visible to sales, no license fees.
- Native Data Manager connectors in 2026 exist for HubSpot, Salesforce, ActiveCampaign, and Zoho, plus Sheets, BigQuery, Snowflake, and several cloud data sources.
- The right choice doesn't depend on Google, it depends on your sales reality: where does the lead status that actually matters get set?
When you set up Offline Conversion Tracking, the question comes up fast: where do we actually store the leads? In a Google Sheet, in the CRM, in our own database? And when does the Data Manager start to make sense?
This decision often gets made too fast. Anyone already paying for HubSpot or Salesforce defaults to CRM. Anyone without one defaults to Sheets. Both can be right, both can be wrong. Here is the comparison I walk through in audits when the question lands on the table.
The four options at a glance
There are essentially four clean options for storing leads on the path back to Google Ads:
| Option | Effort | Recurring cost | Scales to | When it fits |
|---|---|---|---|---|
| Google Sheet + Apps Script | Low | $0 | Up to a few hundred leads per month | No CRM, sales lives in spreadsheets anyway |
| Native CRM integration | Medium to high | License required | Very high | CRM is already in place, sales sets status there |
| Automation tool (Zapier, Make, n8n) | Medium | From ~$20 / month | Medium | Sheet workflow needs automating |
| Google Ads Data Manager direct | Medium | $0 (connector free) | High | The path Google is pushing from 2026 forward |
Anyone setting up OCT fresh should honestly answer the last column before picking the tool. For more on the OCT setup itself, see Offline Conversion Tracking in Google Ads.
Option 1: Google Sheet plus Apps Script
This is my default for smaller accounts. Not because it’s the fanciest setup, but because it honestly fits most of the time.
What you get:
- A Google Sheet as the lead list with columns for name, email, phone,
gclid, status, timestamp, value. - An Apps Script that catches form submissions via
doPostand writes them into the sheet. - A second Apps Script (menu button) that turns the sheet into a Google-Ads-ready upload table.
- Optional: the sheet is shared with the Google Ads account email, so Google reads the first tab directly (no CSV download needed).
The wins:
- Cost is $0. No license lock.
- Sales sees every lead instantly, can update the status via a dropdown.
- You can spin the whole setup up in a morning and live-test it.
- When things break, everything is readable end-to-end, no tool sitting in between.
When it tips over:
- Several hundred leads per month. The sheet gets unwieldy, status conflicts pile up.
- Several sales reps with different status definitions. Without strict naming, things drift.
- Complex flows with multiple stages, long sales cycles, many touchpoints. Sheets lack the depth.
Honest read: most smaller accounts I audit sit exactly in the band where the sheet is the right answer. CRM starts to pay off only when the lead status needs real sales discipline.
Option 2: Native CRM integration
If your sales team lives in the CRM, the sheet doesn’t stand a chance against that reality. The clean answer is lead and status in the CRM, then back to Google Ads from there.
The main players in English-speaking markets:
| CRM | Sweet spot | Native Data Manager connector |
|---|---|---|
| HubSpot | All-in-one marketing plus sales, strong tracking hooks | Yes |
| Salesforce | Standard for mid-size and enterprise sales teams | Yes |
| Pipedrive | Smaller sales teams, simpler structure | No (via Zapier/Make) |
| ActiveCampaign | Marketing automation focus | Yes |
| Zoho CRM | Budget-friendly all-rounder | Yes |
What your CRM has to handle for Google Ads:
- It needs a field for
gclid(pluswbraidandgbraid), either native or built as a custom field. - The lead status needs to be clearly defined and consistently set. If every rep uses their own status words, garbage lands in Google Ads.
- The values you push back have to come out of the CRM in a consistent way, not “set somewhere by hand”.
Option 3: Automation tool as the middle ground
When the sheet gets too tight and the CRM is still too much, an automation tool is often the right next step.
The usual suspects:
- Zapier. The classic, lots of pre-built templates. Pay per trigger, can get pricey at higher volume.
- Make (formerly Integromat). Cheaper operations, more logic per workflow.
- n8n. Self-hosted option, free if you run it yourself, more technically demanding.
What you typically build with these:
- Form submission → Sheet AND email tool AND CRM in one workflow.
- CRM status update → automatically back to Google Ads.
- Webhook from a booking platform (e.g. Calendly) → straight into the conversion upload.
Honest take from running these myself: these tools are great as long as the workflows stay small and readable. Anyone running five Zaps with twenty steps each has built a maintenance burden nobody will understand later. Better: few, clearly-defined flows, documented properly.
Option 4: Google Ads Data Manager direct
This is the path Google itself is pushing in 2026. The Data Manager is Google’s central hub for Customer Match data and offline conversion imports.
What you set up there:
- Native connectors to your data source (CRM, cloud storage, database).
- Mapping between your data fields and Google’s conversion or audience schema.
- Regular sync, no manual upload required.
Important: starting June 15, 2026, custom integrations that hit the Google Ads API for offline conversion uploads directly will be blocked. These setups have to be on the Data Manager by then. I covered the June 15, 2026 cutoff in the OCT post.
Which native Data Manager connectors exist?
As of June 2026, the Data Manager supports the following data sources directly. The list is being expanded continuously, so the current state lives in the official Data Manager help. Quick check there before any setup.
CRMs:
- HubSpot
- Salesforce
- ActiveCampaign
- Zoho CRM
Databases and cloud storage:
- Google BigQuery
- Snowflake
- MySQL
- PostgreSQL
- Oracle
- Amazon Redshift
- Google Cloud Storage
- Amazon S3
- Google Drive
- Google Sheets
- SFTP / HTTPS
These connectors handle authentication, mapping, and sync for you. What they don’t replace: clean data quality at the source. If your CRM holds garbage status, the connector ships garbage status cleanly to Google Ads.
Which option fits when? A decision matrix
Three axes decide which setup is right in practice:
| If … | then … |
|---|---|
| < 50 leads / month, no CRM, no tech team | Google Sheet + Apps Script |
| 50 to 300 leads / month, CRM in place, sales updates status there | Native CRM integration via Data Manager connector |
| Data sources change a lot, multiple tools in the mix | Zapier or Make as glue |
| Own data warehouse or BigQuery in place | Data Manager direct via BigQuery / Snowflake / Cloud Storage |
| Custom-built API integration today | Migrate to Data Manager before June 15, 2026 |
The table is a starting point, not a universal rule. Industry, sales cycle, and sales maturity move the thresholds significantly.
What your storage needs for clean OCT
Whatever option you pick, OCT doesn’t work without these fields.
- Click-ID fields. At minimum
gclid, ideally alsowbraidandgbraid. If your CRM doesn’t have these natively, build them as custom fields. - A single source of truth for status. One clearly-defined status value per lead stage. No free-text status fields, dropdowns instead.
- Consistent timestamp with timezone. ISO format with timezone (
2026-06-10T09:30:00-04:00). Otherwise the conversion lands at the wrong moment and Google might discard it. - Conversion value per stage. Defined from your real numbers, not pulled out of thin air.
- Audit trail. Who set which status when. Worth its weight in gold when questions come up later.
If your CRM or sheet doesn’t deliver these five things cleanly, the setup isn’t ready for OCT, no matter how modern the storage system looks.
Common migration mistakes
Sheet to CRM, CRM to Data Manager: every migration is a spot where conversions can quietly fall through.
- Naming drift. The status terms in the new system don’t match the old ones. The conversion action in Google Ads is named after the old terms, the upload sends the new ones, nothing matches.
- Double uploads. Both systems send in parallel. Google counts the conversion twice, bidding optimizes on inflated values.
- Lost historical leads. During the move, old leads never get reported back. Anyone retroactively sending values should do so with strict date filters and a lot of intention.
- Mapping errors. The new tool uses different field names. “Lead Status” becomes “Stage”, “Email” becomes “Contact Email”. If the mapping is off, garbage or nothing lands.
My recommendation for migrations: parallel run for two to four weeks. Both systems live, you compare the conversion counts in Google Ads. Only once they line up, retire the old system.
FAQ
Does Google Sheets really work for OCT?
Yes, and for many smaller accounts better than a half-implemented CRM. What matters isn’t the tool, it’s that the status logic is clean and click IDs land properly. Anyone running 30 leads a month with no CRM is faster and more accurate with Sheet plus Apps Script than with a barely-used HubSpot install.
Do I need HubSpot or Salesforce for clean OCT?
No. A CRM pays off if your sales team lives in it and lead status is set there. Anyone buying a CRM just to enable OCT is fixing the wrong end. Sales process first, tool second.
What if my lead management lives in Notion or Airtable?
Both work, but neither has a native Data Manager connector. You either need a Zapier or Make workflow syncing from Notion or Airtable into a Google data source, or you build a custom export hitting the Data Manager. In that case, I’d mirror the lead status into a Google Sheet too and push from there.
How do I connect the Data Manager to my CRM?
In the Google Ads UI under Tools → Data Manager → Connections you create a new connection. For HubSpot, Salesforce, ActiveCampaign, and Zoho there are native connectors authorized via OAuth or API key. From there you pick which data to push (conversions, Customer Match) and define the field mapping.
What happens to my old Sheet setup after June 15, 2026?
Sheet setups using sheet sharing (sheet shared with the Google Ads email, Google reads the first tab) keep working. That’s not an API upload and isn’t affected by the migration. Only custom scripts uploading directly via the Google Ads API need to move to the Data Manager API.
Your next moves
Before you pick the tool, answer two questions honestly. First: where does the lead status that actually matters for Google Ads get set? If your sales team carries it in their head or across ten scattered Excel files, no CRM will save you. Second: how many leads per month do you actually process? The answer decides whether Sheets, Zapier, or a CRM is the honest call.
One last reminder: everything above is what I’ve learned running accounts, not universal law. Every account has its own sales reality, its own cycle, its own data volume. What is obviously right in one setup can be exactly wrong in the next. If you’re working through a lead storage migration or setting up OCT properly, the framework lives inside a Google Ads audit or a project setup. If you’re starting from scratch with OCT itself, read Offline Conversion Tracking in Google Ads first. The structural mistake underneath all this is the one in the post on Google Ads conversion tracking issues.
Google Ads project & setup specialist. Former contractor on behalf of Google. Helps SMBs and medical practices in the DACH region advertise profitably.
You might also like
Ready for profitable Google Ads?
In a free initial consultation, we will look together at if and how Google Ads can work for you.
Book Free ConsultationNo commitment · No sales pressure · 30 minutes