Offline Conversion Tracking with Freshsales
Freshsales has the fields and the workflows. Here is how to use them to close the loop with Google Ads.

This post covers offline conversion tracking with Freshsales. It has the custom fields, the workflows and the API you need, so this is mostly a matter of wiring them together in the right order.
When this fits
You use Freshsales and run ads that generate leads.
Deals close days or weeks later.
You want bidding to chase qualified pipeline rather than form volume.
What you will build
Custom fields on Contact and Deal.
Form wiring that fills them.
A workflow that fires on deal stage change.
A feed to Google Ads.
Let’s implement it
Step 1: create the fields
In Admin Settings, open Contacts and add custom text fields for Google Click ID, gbraid, wbraid, fbclid and your first and last touch UTMs.
Add matching fields on the Deals module, because your uploads read from deals and a contact level only setup leaves you exporting the wrong object.
Step 2: carry values from contact to deal
Freshsales does not copy custom contact fields onto a deal automatically. Build a workflow that triggers on deal creation and copies the click ID across.
This is the same gap that catches people in Salesforce and Zoho CRM. Different CRM, identical failure.
Step 3: populate from your forms
Freshsales web forms support hidden fields. Map them to your custom fields and populate from your cookie on page load.
If you use a third party form, map the hidden fields in that tool’s Freshsales integration and verify a real submission rather than trusting the mapping screen.
Step 4: fire on stage change
Create a workflow triggered when a deal reaches Qualified or Won. Use a webhook action to post the click ID, stage, value and timestamp to Make, Zapier, or a sheet.
Step 5: upload
Let Google Ads pull from a scheduled sheet, which is the lowest maintenance route, or call the API if you already have a developer involved.
Before you finish
Real ad click, real submission, click ID on the contact.
Create a deal from that contact and confirm the click ID copied.
Confirm the field is long enough to hold the whole string.
Move a test deal to Won and confirm the webhook fired.
Check the match rate after one upload. Below 70 percent points at step 2.
FAQ
Freshsales or Freshworks CRM?
The product has been renamed and repackaged over time. The concepts here apply to whichever version you are on: custom fields, a workflow on stage change, and a webhook out.
Can I send to Meta too?
Yes, same pipeline with fbclid plus hashed email and phone: sending CRM outcomes to Meta.
What if my deals take six months?
Then closed won will fall outside the 90 day window. Bid on Qualified instead and keep closed won for internal reporting.
Is there a version without all this setup?
No CRM at all, and you want the simplest possible version? I wrote a full walkthrough of that for Stape using nothing but a spreadsheet: Google Ads offline conversion tracking without a CRM. Click to read it here.
Need this built properly?
Same pattern, different CRM, same field mapping trap. 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.



















