How to Automate Offline Conversion Uploads with Zapier
No developer, no cron job. Here is a Zapier pipeline that sends closed deals to Google Ads and Meta on its own.

This post gives you a working Zapier pipeline that sends closed deals from your CRM to Google Ads and Meta automatically, with no developer and no server.
If your CRM has a Zapier trigger and your team updates deal stages, you can have this running today.
When this fits
You already use Zapier or are happy to.
Your volume is modest. Zapier charges per task, so thousands of conversions a month gets expensive.
You want automation without writing code.
If you are cost sensitive at volume, compare against Make, which is usually cheaper for this shape of work.
What you will build
A Zap that fires when a deal reaches a stage, formats the data, and sends it to one or both ad platforms.
Let’s implement it
Step 1: the trigger
Use your CRM’s updated deal or stage changed trigger. HubSpot, Pipedrive, Salesforce, Zoho CRM, Close and Airtable all have one.
Add a filter step immediately after, so only the stages you care about continue. Without it you will burn tasks on every field edit.
Step 2: filter properly
Two conditions worth adding:
Stage is exactly Won or Qualified.
Click ID field is not empty. No point spending a task on a row that cannot match.
Step 3: format the data
Use a Formatter step to:
Convert the close date into the format Google Ads expects, with timezone.
Strip currency symbols from the value.
Lowercase and trim email before hashing.
Zapier’s Formatter can produce a SHA256 hash, which is what you need for Meta. Do the lowercasing and trimming before the hashing step, in that order, or the hash will not match.
Step 4: send to Google Ads
Two options. Either append a row to a Google Sheets tab that Google Ads imports on a schedule, which is simple and cheap, or post directly to the API with a webhook step, which needs OAuth handling.
For most people the sheet is the right answer: offline conversions with Google Sheets.
Step 5: send to Meta
Use a webhook step posting to the Conversions API with your hashed identifiers, the event name, the timestamp and the value.
Step 6: mark it as sent
Write back to the CRM to flag the record as uploaded. Without this, a later edit to the same deal re triggers the Zap and you upload the conversion twice.
This step is skipped constantly and it is the main cause of inflated conversion counts in automated pipelines.
Before you finish
Run the Zap on a test deal and check every step’s output, not just that it turned green.
Confirm the date format is accepted by Google Ads.
Confirm the hash matches one you generate independently.
Edit the test deal again and confirm it does not re upload.
Check your task usage after a week against your plan limit.
FAQ
How many tasks will this use?
Roughly one per step per conversion. A six step Zap on 200 conversions a month is about 1,200 tasks. Filter early to keep that down.
Zapier or Make?
Zapier is friendlier. Make is cheaper at volume and handles the data shaping better. If this is your only automation, Zapier. If you will build more, Make.
Can Zapier hash for Meta?
Yes, the Formatter has a hash utility. Normalise first, hash second.
What if my CRM has no Zapier trigger?
Use a scheduled trigger that queries your CRM’s API for recently changed deals, or fall back to the spreadsheet method.
Need this built properly?
The write back step is what stops this from double counting. I set up and repair tracking for ecommerce stores and lead generation businesses, so the numbers in your ad accounts match the money in your bank account.
Have a look at what I do, or book a call and we can go through your setup together.



















