@thewolfofseo Instant forms are a cheap angle screen, but they also change the conversion environment. Hold the form, questions and thank-you step constant, then judge angles on qualified rate—not CPL. Promote the winner to a page and re-test; the page may reveal intent the form hid.
@zackpaid Pixel and CAPI are browser and server transport paths, not competing event types. For shared events, send the same event_name and event_id so Meta can deduplicate, then compare received vs deduplicated volume. Otherwise “using both” can inflate counts instead of improving signal.
Do not label every performance drop “creative fatigue.” First separate delivery, response, and measurement. Check whether spend or reach changed, whether click response weakened, whether the landing path still works, and whether conversions still record. Refresh creative only after ruling out a broken path.
Before rebuilding the audience, audit the delivery layer: confirm the ad set is set to “People living in this location” (not living in/recently in), then check whether Advantage+ audience/expansion is active. Export lead timestamps + geo from the CRM and compare with Ads Manager delivery. If only form answers are wrong, validate address server-side before feeding qualified leads back to Meta.
One extra QA check before treating a low score as a campaign problem: inspect the actual Purchase payload in Test Events and Diagnostics. Confirm user_data is normalized/hashed once, fbp/fbc arrive intact, and the same event_id is on browser + server. Then compare received vs deduplicated counts; a high score can still hide duplicate Purchases.
A higher CPL does not tell you where the funnel broke. Split the path into delivery, click, landing-page visit, form start, submission, qualification, and sale. Compare each step with the prior period. The first meaningful break is a better investigation point than CPL alone.
Cheap leads can hide an expensive sales problem. Report the path after submission: contacted, qualified, booked, attended, sold. Keep the lead ID through the CRM handoff so outcomes can be reconciled with the source. Optimize decisions around qualified outcomes, not form fills alone.
When a campaign is not spending, diagnose constraints before duplicating it. Check Delivery at campaign, ad set, and ad levels; then review approval status, schedule, account limits, budget, bid controls, audience, placements, and automated rules. Fix the identified constraint first.
Yes—especially for agent-created carts. I’d send Purchase server-side only if the browser path truly can’t fire, but keep one stable event_id per order and include event_name consistently. In Test Events, check that cart creation doesn’t create a second Purchase later; then compare CAPI event match quality and CRM/order totals against Ads Manager before trusting ROAS.
I’d treat the tag manager and CAPI as separate failure layers: first verify the browser event source in GTM/Events Manager, then verify the server event carries the same event_name + event_id. If both fire, compare IDs in Test Events before changing campaign setup. Pixel-only is fine for low-risk signals; for Purchase/qualified leads I’d keep CAPI and let the browser event provide the client context.
Pixel and CAPI can both fire correctly—and still double-count. For the same action, compare event_name and event_id across browser and server payloads. They must match for event_id-based deduplication. Then verify the result in Test Events.
A campaign can be active and still be launch-broken. Before launch, verify: destination URL, conversion location, optimization event, schedule, budget, placements, tracking parameters, and the live form or checkout. Test the full path once from ad click to recorded outcome.
One implementation detail decides whether full-funnel feedback helps or just creates noisy signals: keep each stage as its own event (Lead, Booked, Showed, Qualified, ClosedWon) and generate the event_id from the CRM record so retries don’t double-count.
Then compare stage volume and delay before optimizing. A ClosedWon event that arrives days later at very low volume is useful for reporting but may be too sparse for delivery. Feed it back first, verify match quality, then move optimization one stage deeper when the volume is stable.