Send offline conversions from any CRM (Pipedrive, Close, Zoho, Salesforce) with a webhook

PipedriveCloseZohoSalesforce
Direct or Zapier, Make, n8n

If your CRM can send a web request when a deal changes, it can tell Google Ads, Meta, TikTok and LinkedIn which clicks turned into customers. This is the field list, a JSON example, the direct route against Zapier, Make and n8n, and a debugging checklist in the order to work through it.

Setup in 5 minutes
No credit card
One lead from a Meta ad
From form fill to won deal in HighLevel
With DataCops
Form fillSent to Meta
Booked callSent to Meta
Showed upSent to Meta
Deal wonSent with its value
Matched to the original ad click by email

Trusted by agencies and brands running paid media

AffilinoBigfishClever DigitalKeetraxLegendListingLogicNumeroStormZealdBurst Digital
Definition

How does a CRM webhook send offline conversions?

Every CRM keeps a record of what really happened: who bought, when and for how much. Your ad platforms only see the form fill. A webhook closes that gap. When a deal moves to a stage you care about, the CRM posts a short message to a private DataCops address, and DataCops sends it on to the ad platforms you connected.

DataCops has no native app for Pipedrive, Close, Zoho or Salesforce. It has one private sales webhook that any of them can call, directly or through Zapier, Make or n8n. DataCops matches the person to the ad click it kept on your own domain, by click ID or by hashed email and phone.

DataCops accepts sales from any CRM through a private webhook, matches them to the ad click it kept, and sends them to Google Ads, Meta, TikTok and LinkedIn.

What your ads learn from

Pipedrive, Close or Zoho by webhook
What your ads see today Form Deal won, with value
With DataCops Form Deal won, with value
Any CRM with a sales cycle
What your ads see today Form Qualified Deal won, with value
With DataCops Form Qualified Deal won, with value

The webhook fields, one by one

The fewer things you send, the fewer things break. Here is what the private sales webhook reads.

  1. event (required): the stage that just happened, such as lead, booked, showed, won or paid. The full list of accepted names is in the offline conversions docs.
  2. email or phone (at least one): how DataCops finds the person. Send both when you have them. Phone should include the country code.
  3. value and currency (optional): the amount of a won or paid sale. Send them so the ad platforms can optimize for revenue and not only for counts.
  4. order_id (optional, strongly advised): your own ID for the deal or invoice. The same order_id sent twice counts once.
  5. test (optional): set to true to send a test row that shows in the delivery log.
  6. Click IDs (optional): gclid, wbraid and gbraid for Google, fbclid, fbc and fbp for Meta, ttclid for TikTok, li_fat_id for LinkedIn, and lead_id if you keep one. If your CRM stored a click ID on the contact, send it, since it is the strongest match.

An example JSON body

This is an example with made-up values. Post it as JSON to your private sales webhook URL, which you copy from the DataCops dashboard. Keep that URL private.

Example: a deal marked won

{
  "event": "won",
  "email": "[email protected]",
  "phone": "+447700900123",
  "value": 2400,
  "currency": "GBP",
  "order_id": "deal-10482",
  "gclid": "Cj0KCQjw-example",
  "ttclid": "E.C.P-example",
  "test": false
}

A lead-stage call is the same shape with event set to lead and no value. Nothing else changes, so one automation template can cover every stage.

Direct, or through Zapier, Make or n8n?

Both work, and they feed the same webhook. The difference is where things can go wrong.

Direct means the CRM calls the webhook itself: a Pipedrive automation with a webhook action, a Close workflow that posts on a status change, a Zoho workflow rule with a webhook, or a Salesforce Flow with an HTTP callout. There is no middle layer, no task quota and one fewer login to lose.

Zapier, Make and n8n make sense when the CRM has no webhook action on your plan, when you need to map field names, or when several tools should react to the same event. They add a step that can fail and, on hosted plans, a usage count. If you use one, keep the payload identical to the example above.

Debugging checklist, in this order

When a sale does not show up, work down this list. Each step rules out one cause.

  1. Did the CRM fire? Open the automation history in your CRM or the run log in Zapier, Make or n8n. If nothing ran, the trigger stage or filter is wrong.
  2. Did the call reach DataCops? Look for the row in the DataCops delivery log. No row means the request never arrived or the URL is wrong.
  3. Is the body valid JSON with an event and an email or phone? A missing event or no contact detail is the most common reason a row is skipped.
  4. Are email and phone clean? No extra spaces, a real email address, and a phone number with the country code.
  5. Was it sent as a test? A row with the test flag on is logged and not sent as a real sale.
  6. Was it a duplicate? The same order_id twice counts once, so the second call is expected to add nothing.
  7. Is the platform connected and is the sale too old? Meta rejects events sent more than 7 days after they happened. Google Ads ignores uploads more than 90 days after the click. LinkedIn takes conversions up to 90 days old.
  8. Read the reason on the row. The delivery log says why a row was held, skipped or failed, and that reason is usually the answer.

What the delivery log records

Every row that reaches DataCops gets a line for each platform it was meant for. The status is one of sent, held, skipped or failed, with the reason next to it, for example no email or phone, the platform is not connected, or a Real people only check.

One limit to know about: Google Ads rejections are not read back per row yet, so a row can show sent to Google and still be turned down on Google's side. Check the conversion action in Google Ads for the final count.

When to use HighLevel native instead

If your team lives in HighLevel, skip the webhook. The native connection is installed once on the agency, you pick the sub-accounts, and the stages lead, booked, showed, won (with value) and paid go out without a flow to build. Cancelled, no-show and lost are never sent, and the result is written back onto the HighLevel contact.

For everything else, including Salesforce, Pipedrive, Close and Zoho, the webhook is the route. What DataCops does not do: it has no native Salesforce or Pipedrive app, Stripe and Paddle are not connected yet, refunds are not reversed on Meta or TikTok, and Microsoft Ads is not supported.

Real people only

Filter fake leads before you send

A bot that fills in your form becomes a lead your ads try to find more of. DataCops checks every visit for bots and datacenter traffic, and for VPNs and proxies if you choose. Switch on Real people only for a platform and flagged visits never reach it.

Sales that come from your CRM are sent as your CRM reports them, with no bot check, so qualify them there before you send.

How DataCops spots bots
Meta, delivery
Real people only
Bots and datacenter traffic never reach Meta. VPNs and proxies too, if you choose.
Send everything
Meta gets every visitor, bots included.
Lead from a bot Skipped

Set up the CRM webhook

About 5 minutes for the site, then one automation in your CRM.

  1. Step 1
    code

    Add the DataCops script
    One script and one DNS record keep each ad click on your own domain.

  2. Step 2
    link

    Copy your private webhook URL
    Connect your ad platforms, then copy the sales webhook address from the dashboard.

  3. Step 3
    hub

    Post a test sale
    Add a webhook action to your CRM with the test flag on, and check the row in the delivery log.

FAQ

Any CRM that can send a web request or connect to Zapier, Make or n8n, including Pipedrive, Close, Zoho and Salesforce. There is no native app for any of them, and HighLevel is the one native connection.

Connect your CRM to your ads

Start free, then post a test sale from your CRM in minutes.

Setup in 5 minutes. No credit card.

Live traffic quality

Updated just now

Visits · last 24h

487
Real users
35873.5%
Bots · auto-filtered
12926.5%

Without filtering, 26.5% of your reported traffic is bot noise inflating dashboards and draining ad spend.

Don't trust your analytics!

Make confident, data-driven decisions withactionable ad spend insights.

Setup in 2 minutes
No credit card