Intern
What you actually do
Events Manager vs GHL. event_id test. Count match. You are not launching creative. You are aligning truths.
Library / Wire / Meta CAPI and the CRM must not be two truths about the same sale
CAPI (and the pixel) report events to Meta. GHL reports opportunities. When they disagree, media teams optimize for a pixel and operators optimize for a board — two companies. Wire identity, which events you send, dedupe event_id, and a weekly match between Meta results and GHL Wons or qualified leads. This is not Events Manager click-path.
CAPI (and the pixel) report events to Meta. GHL reports opportunities. When they disagree, media teams optimize for a pixel and operators optimize for a board — two companies. Wire identity, which events you send, dedupe event_id, and a weekly match between Meta results and GHL Wons or qualified leads. This is not Events Manager click-path.
Thank-you page views as Purchase is how you scale junk. The event should fire when money or a true qualified lead happened — the same definition as GHL.
Double firing pixel + CAPI without event_id is inflated results. You will think ads work. The board will not.
Send the identifiers you actually have. Empty CAPI with a pretty Events Manager score is still a lie if GHL never got the person.
Lead ads already have a Meta object. Do not also fire a duplicate Lead from a thank-you if the Instant Form was the conversion.
Value must be currency-true. Fake $1 purchases to 'help the algorithm' poison both Meta and your own reporting.
Intern
Events Manager vs GHL. event_id test. Count match. You are not launching creative. You are aligning truths.
Operator
CAPI is a writer to Meta. GHL is the operating truth. Same definitions. Own the gap. Kill thank-you purchases for freebies.
CEO
If Ads Manager and the pipeline disagree, you will scale the lie. Weekly match is the number. Until it exists, ROAS is not a decision tool.
Meta Pixel, CAPI, event_id, email/phone hashing, GHL contact, Won or qualified event, browser vs server duplicate, value, currency, test events.
Browser event and CAPI event share event_id so Meta dedupes — not two purchases
Email/phone from the form/checkout match what GHL has, so match quality is not a mystery
Lead vs Purchase events correspond to GHL stages you would defend, not to thank-you page views
Weekly: Meta Purchase/Lead count vs GHL Wons/qualified — named gap, not a shrug
Purchase = Won/paid. Lead = form write-in you would call a lead (not a magnet if you do not want Meta optimizing for magnets). Write it.
Why: If Meta optimizes for magnets and you sell calls, you will get cheap magnets.
Done when: One sentence: event X means GHL stage Y.
event_id on browser and server. Test in Events Manager: duplicates collapsing. GHL or the site generates the id and both sides send it.
Why: Without dedupe you will 'improve' ROAS that is double-counted.
Done when: A test convert shows one event after dedupe, not two.
The email/phone on the event is the email/phone on the GHL contact. Advanced matching not at war with the form.
Why: Hashed identifiers Meta cannot match, plus a CRM that has the person, is still two truths.
Done when: Test lead: GHL contact exists and Meta received the same identity keys.
Remove Purchase on thank-you for free magnets. Remove duplicate Lead on Instant Form + page. Value is real or omitted.
Why: Junk events are how spend scales the wrong door.
Done when: Event inventory: each live event maps to a real job.
Same window, same definition. Gap list: ingest lag, blocked cookies, Instant Forms not in GHL, fake events. Own the gap.
Why: Unowned gaps become 'the pixel is broken' vs 'GHL is broken' forever.
Done when: A Monday row: Meta count, GHL count, gap reason.
Write event = GHL job. Fire a test with event_id. Confirm dedupe. Confirm GHL contact. List live events in Events Manager and kill junk. Pull last week Meta vs GHL counts. The gap is the ticket. Do not 'optimize creative' over a definition mismatch.
More Meta spend, a new CAPI vendor, or an agency 'full funnel' until Purchase/Lead means the same thing as GHL and weekly match exists. Spend into two truths is how ROAS becomes a religion.
Pixel on thank-you for everything. CAPI added later without event_id. Instant Form leads missing in GHL. Ads 'profitable'. Pipeline empty. Agency and operator in a fight. That is two dashboards, zero system.
Dedupe works. Event definition matches GHL. Identity keys shared. Junk events gone. Monday match with a named gap.
Trust the board you operate. CAPI is a signal to buy ads. If it diverges from Wons, you will buy ads for a story.
Hopelessness is an excuse to skip event_id and CRM match. You will not get perfection. You can get a known gap.
Then you must still share definitions and the weekly match. Agency-owned events with a private GHL is two truths by design.
This week
This week: event definition, event_id dedupe, junk off, identity match, one weekly Meta vs GHL row. No new ad sets until definitions agree.
A full calendar and an empty pipeline is two databases.
Read ↗A high score in a CSV is not a qualified opportunity.
Read ↗If the thank-you does not change the contact, the page was a brochure.
Read ↗If paid lives in Stripe and the opportunity is still open, reporting is theatre.
Read ↗Working notes
The minimum CRM, pipeline, and nurture spec before you add more pages. Request the file. It arrives by email — not a public dump, not a drip of slogans.
Email and WhatsApp stay open. A call is for installing the system — not for a tour of tools.