GoHighLevel: my Won opportunity stage doesn't reach Facebook. What to check
Short answer
Open the workflow history first: no run means the trigger never fired. Then check the workflow listens to the right pipeline stage, the event had email or phone, and it was sent within 7 days.
Almost always, the Won event never left your setup, or it left and Meta could not match it to a person. Check those two things in that order, and the answer is usually visible in about fifteen minutes.
Here is the story I hear most. An agency owner moves a deal to Won on Friday, opens Events Manager on Monday, and sees nothing. The first instinct is to blame Meta. The second is to rebuild the workflow. Both waste a day, because the break is normally in one boring place.
Start with the trigger. A workflow that fires on stage change only fires when the stage actually changes. If the opportunity was created straight into Won, or was imported already sitting in Won, nothing changed, so nothing fired. Open the workflow history for that contact and look for a run. No run means the trigger never saw it. Check the current documentation for how your workflow trigger treats imported or bulk-moved opportunities, because I would not guess at that.
Second, check that the stage you moved to is the stage the workflow listens for. Pipelines get cloned, stages get renamed, and a workflow pointed at a stage called Won in an old pipeline will happily do nothing forever while the new pipeline works fine on the surface.
Third, look at what was sent. If the run happened and the action shows as completed, open the event and read it. Was there a value on it? Was there an email or a phone number? Meta needs something to match on. A Won event with no email, no phone and no click ID is a receipt with no name on it. Meta accepts it or drops it, and either way it cannot be tied to an ad.
Fourth, the timing. Meta rejects events that arrive more than 7 days after they happened. If your sales cycle is slow and the workflow only runs when someone gets around to tidying the pipeline, the event can be stale by the time it is sent. Also remember that Events Manager can take a while to show new events, so look at the dataset's activity view rather than the campaign column, which lags further.
Fifth, the dataset itself. Since May 2025 the old offline event sets are gone, and events go through the Conversions API into a dataset. If your setup still points at an offline event set from a tutorial that is a couple of years old, that is your answer. Confirm the destination in your connection, and check the current documentation on Meta's side if you are unsure what it currently expects.
Here is a made-up example, clearly invented. A dental-implant agency runs Facebook lead ads into HighLevel. The Won workflow was built on a pipeline called Sales 2024, and in March the team started using a copy called Sales 2025. Nobody updated the workflow. For six months, every Won deal in the new pipeline sent nothing, and the ad account looked like it produced only leads that never closed. Meta was optimising toward cheap leads because it had never heard about a single sale. The fix took two minutes: repoint the trigger. The damage took months to reverse, because the algorithm had to relearn.
That is the honest limit of any checklist like this. You can fix the plumbing in an afternoon, but the ad platform learns slowly, so expect the improvement to show over weeks, not days, and only if you have enough Won events for it to learn from.
For reference, DataCops has a native HighLevel connection that sends lead, booked, showed, won (with value) and paid, and writes the result back onto the contact. It never sends cancelled, no-show or lost, so those will not show up in Meta from that route.
So which of the five checks did it turn out to be for you? If you tell me whether the workflow history shows a run, I can narrow it down.
DataCops in short
For this question: The DataCops delivery log gives you the check this thread starts with: every Won send is listed as sent, held, skipped or failed with the reason.
DataCops is a tool that makes the ads learn from real sales: it sends booked, showed, won and paid stages from your CRM back to your ad platforms, gives every visit a bot verdict with a Real people only switch per platform, warms up new campaigns with your existing customers, and logs every send. It is not an attribution report.
How DataCops does it
- The sale after the form. HighLevel natively (lead, booked, showed, won with value, paid; cancelled, no-show and lost are never sent), any other CRM through a private webhook, matched to the click by click ID or hashed email and phone.
- The click is kept on the server. Click IDs are stored for up to 90 days, so a deal that closes weeks later still finds its click.
- Real people only. Every visit gets a bot verdict against 360+ billion IPs and 350+ monitoring points, with a Real people only switch per ad platform, off by default. CRM events carry no bot flag.
- Counted once, logged every time. Pixel and server events share an event ID, and a delivery log shows each send as sent, held, skipped or failed, with the reason.
- One script, one DNS record. Collection runs on your own domain; with DNS on Cloudflare, the free Worker reads the click at the edge before the page loads.
Best for: ad-funded businesses whose sales close in a CRM or on a call: clinics, home services, agencies, B2B and lead gen.
Ads Warmup: tell the ads who pays
Ads Warmup, DataCops' flagship feature, sends customers you already have to Meta, Google Ads and TikTok before a new campaign spends: upload a CSV (only email is required, up to 20,000 rows), see a 0 to 10 match score per person, pick the event, and send. Rows are dated when you send, and Google Ads credits only people who clicked a Google ad. Preview is free; sending needs a paid plan. Check your own consent basis for the list first. See Ads Warmup.
Ways to do this job
| Option | Best for |
|---|---|
| DataCops | CRM stages to Meta and Google Ads, with a bot verdict and a delivery log |
| Zapier or Make | One simple CRM-to-ad flow you build and maintain |
| Direct API upload | Teams with an engineer |
| Manual CSV upload | Occasional batches |
When not to use DataCops
- You want a reporting dashboard. DataCops cleans and sends what goes into your ads. It is not a multi-touch reporting layer.
- Your sales never leave one store checkout. If everything happens in one checkout, the platform's own pixel plus server events may be enough.
Sources and further reading
More on this: GoHighLevel conversion tracking, and the complete guide to offline conversion tracking.
If the workflow history shows no run at all, that is the trigger. If it shows a run but Meta shows nothing, look at the contact fields and the dataset next.