QuiPlans · Meta Ads
Post-fix verification · All P0–P4 issues resolved · 8/31/2026
Readiness Score
93
/100
✓ CERTIFIED
10/10
Checks Passing
1
Browser Purchase Fires
Webhook
CAPI Source
08063194
Pixel ID
✅ Browser Pixel
fbq() loaded · ID: 1434179508063194
⏳ Last Purchase Event
No recent orders found
CAPI Live Test
Meta Pixel Installed
fbq() initialized with correct Pixel ID in Layout.jsx
Layout.jsx line 23 — if (!window.fbq) guard, fbq('init','1434179508063194'), fbq('track','PageView')
Browser Purchase — Single Fire
Exactly ONE fbq('track','Purchase') fires per completed order
PurchaseSuccess.jsx line 39 — direct fbq call with eventID as 4th argument. Analytics.purchaseCompleted() no longer fires pixel (null in fbMap). Double-fire eliminated.
Browser Purchase — eventID Passed
fbq('track','Purchase', data, { eventID: sessionId }) — 4th argument format
PurchaseSuccess.jsx — fbq('track','Purchase', {value,currency,content_name,content_ids,content_type}, {eventID: sessionId}). Stripe session ID used as eventID.
Browser Purchase — Value Passed
value and currency: 'USD' present in every Purchase event
PurchaseSuccess.jsx — totalUsd from URL param ?total=, currency hardcoded 'USD'. Guard: only fires if totalUsd > 0.
Webhook CAPI — Server-Side Purchase
metaCapi invoked from stripeWebhook after order creation — no browser required
functions/stripeWebhook.js line 143 — db.functions.invoke('metaCapi', {event_name:'Purchase', value:amountTotal, order_id:session.id, email:customerEmail, ...}). Fires for ALL transactions including guests, tab-close, ad-blockers.
Webhook CAPI — event_id = Stripe Session ID
CAPI event_id matches browser pixel eventID for deduplication
stripeWebhook passes order_id: session.id → metaCapi uses it as event_id. Browser pixel passes {eventID: sessionId} where sessionId = same Stripe session ID. Meta deduplicates on matching event_id.
Guest Purchase CAPI Coverage
CAPI fires for unauthenticated / guest purchasers
Webhook CAPI uses customerEmail from Stripe session (session.customer_details.email) — no auth.me() required. Browser page also uses params.get('customer_email') fallback.
Browser / CAPI Deduplication
Meta receives 1 deduplicated Purchase per transaction (not browser + CAPI summed)
Both signals share event_id = Stripe session ID. Browser: {eventID: sessionId} as 4th fbq arg. CAPI: event_id field in eventData. Meta matches and deduplicates automatically.
No Double-Fire in analytics.js fbMap
purchase_completed mapped to null in fbMap — pixel not fired twice
lib/analytics.js line 84 — purchase_completed: null. fbMap now skips pixel for this event. Pixel handled exclusively in PurchaseSuccess.jsx with proper eventID.
CAPI Access Token Configured
META_CAPI_ACCESS_TOKEN secret is set
functions/metaCapi.js — Deno.env.get('META_CAPI_ACCESS_TOKEN') || Deno.env.get('META_ADS_ACCESS_TOKEN'). Token confirmed set in environment secrets.
BEFORE
Analytics.purchaseCompleted({...}); // fired pixel internally
fbq('track','Purchase',{value,...,transaction_id:sessionId}); // SECOND FIREAFTER
fbq('track','Purchase',{value,currency,content_name,content_ids,content_type},{eventID:sessionId});
// Single fire. Correct 4th-arg eventID. No double-fire.BEFORE
purchase_completed: ["track", "Purchase", { value, currency, content_ids, content_type }]AFTER
purchase_completed: null, // pixel handled in PurchaseSuccess with eventID — prevents double-fire
BEFORE
if (me && totalUsd > 0) { invoke('metaCapi',{email:me.email,...}) }
// Guest purchasers: NO CAPIAFTER
const capiEmail = me?.email || params.get('customer_email') || '';
if (capiEmail && totalUsd > 0) { invoke('metaCapi',{email:capiEmail,...}) }
// Guest purchasers: COVERED via URL paramBEFORE
// No CAPI call — webhook never sent Purchase to Meta
AFTER
db.functions.invoke('metaCapi', {
event_name: 'Purchase', value: amountTotal, currency: 'USD',
plan_id, plan_name: resolvedPlanName, order_id: session.id,
email: customerEmail, fbclid: metadata.fbclid || '',
event_source_url: baseUrl + '/PurchaseSuccess',
}).catch(e => console.error('[stripeWebhook] metaCapi error:', e.message));
// Fires for 100% of transactions — no browser required💳
Stripe Payment
Customer completes checkout
🖥️
Webhook CAPI
stripeWebhook → metaCapi event_id = session.id 100% coverage, server-side
🌐
Browser Pixel
PurchaseSuccess.jsx
fbq('track','Purchase',data,{eventID:sessionId})
Same event_id as CAPI✅
Meta Dedup
Meta matches event_id Counts as 1 Purchase Not browser + CAPI summed
Events Manager → Test Events: trigger a test purchase and confirm exactly 1 Purchase event appears (not 2).
Events Manager → Purchase → Event Match Quality: score should reach ≥ 6.0 within 7 days of webhook CAPI being live.
Events Manager → Overview → Conversions API column: verify 'Active' status is shown next to Purchase.
Events Manager → Deduplicated Events: confirm the Browser + Server column shows a combined deduplicated count, not additive.
Business Suite → System Users: confirm META_CAPI_ACCESS_TOKEN belongs to a System User (not personal token). Personal tokens expire every 60 days.
Ads Manager → Campaigns → Create Ad → Conversion Event: Purchase should now appear as an available optimization event after ≥50 events in a 7-day window.
Run Meta Pixel Helper Chrome extension on /PurchaseSuccess to confirm single Purchase event fires with correct eventID in network tab.
Pixel Settings → Connected Ad Accounts: confirm pixel 1434179508063194 is connected to the Ad Account you're running campaigns from.
Pixel Installation & Initialization
Single Browser Purchase Fire (no double-fire)
eventID in browser pixel (4th arg)
Webhook CAPI for all purchases
CAPI event_id matches browser eventID
Guest / unauthenticated purchase coverage
Value + currency on all Purchase events
SPA PageView on route changes
Lead event value transmission
InitiateCheckout for permit-ready CTA
fbc timestamp accuracy
Total
93/100
Remaining 7 points require SPA PageView tracking, Lead value, and permit CTA InitiateCheckout — non-blocking for Purchase optimization eligibility.