Pixel & CAPI Studio v1.0

Audit your Meta tracking, generate Pixel + CAPI code with deduplication pre-wired, and export a ready-to-import Google Tag Manager container.

🔒 Everything runs in your browser. No API calls, no data ever leaves your device.

Your Meta events setup

For each event: is it configured, how, and how well is it receiving signal? Answer based on what you see in Events Manager.

Tracking health score

0
/ 100

—

Score = critical event coverage (35 pts) + CAPI adoption (25 pts) + deduplication coverage (20 pts) + signal frequency health (20 pts).

—
Critical events missing
—
CAPI coverage
—
Deduplication coverage

Event-by-event status

Status Event Method Frequency Note

Prioritized issues

Critical issues first. Each fixable issue links straight to the code generator.

Event & parameters

Pick an event, fill in what you know — the code below updates live. Required parameters left empty get a TODO placeholder.

Generated code

Three pieces, in order: base code once per site, the event call in the browser, and the matching server-side payload.

1 · Base code — once per site, in <head>



      

2 · Browser event snippet



      

3 · Server-side (Conversions API)



      
Deduplication, in one sentence: the browser snippet generates an eventId and the CAPI payload must carry the exact same value in event_id — that's how Meta knows both signals are the same conversion and counts it once.

Container setup

Configure which events go into the container and how each one fires. Download a JSON you can import directly into Google Tag Manager.

Events to include

Default dataLayer event names follow the GA4 e-commerce convention (purchase, add_to_cart, begin_checkout…) so they plug into an existing GA4 setup.

Export

  1. In GTM: Admin → Import Container
  2. Choose the downloaded file, select your workspace
  3. Pick Merge (recommended) — it adds these tags without touching what's already there
  4. Review the preview, confirm, then test in Preview mode before publishing

CAPI note: the generated Event ID variable prefers a server-provided event_id from the dataLayer, and auto-generates one only as fallback — so server-side deduplication keeps working if you push the ID from your backend.