A magnifier for tracking events.

See what your page really sends.

Eventloupe is a Chrome DevTools extension. It shows every pixel, tag and dataLayer push a page fires, what was sent, and what was actually observed.

Chrome extension, launching soon on the Chrome Web Store.

Share feedback on GitHub

Illustrative example of one add-to-cart click on a sample page. Move the loupe, or tap and drag it.

  • Example of what Eventloupe reports on a sample product page.
  • Page view: Google Tag Manager container loaded, status 200. GA4 view_item observed, status 204. dataLayer view_item push seen. Meta Pixel ViewContent observed, status 200.
  • Add to cart click: GA4 add_to_cart observed, status 204. Meta Pixel AddToCart observed, status 200. TikTok AddToCart unknown, no response could be observed.
  • Consent banner: Consent Mode ad_storage observed as denied. Google Ads conversion failed, status 500.

How it works

Three questions, answered for every event.

Most tag debuggers tell you a request was made. Eventloupe tells you what happened to it, and why it says so.

01

What happened?

Every event is captured the moment it fires, from dataLayer.push, SDK calls like gtag() and fbq(), and the network itself. Two capture channels run in parallel, so early pixels aren't missed.

02

How do we know?

Each event is traced through six stages, from your app to the response. Every stage is marked observed, failed, or unknown, so you can see exactly where the evidence stops.

03

What should be fixed?

Rule-based diagnostics with stable codes, EL1000 to EL9999. The same input always gives the same answer. No AI decides what's valid.

The truth gap

Evidence, not guesses.

Fired is not the same as delivered. A missing response isn't a success, and it isn't a failure. Eventloupe keeps "I couldn't observe this" as its own answer instead of rounding it to yes or no.

Observed

httpStatus: 204

The request was seen and the response came back clean.

Failed

httpStatus: 500

The request was seen and delivery was confirmed to have failed.

Unknown

httpStatus: null

Not observable from the browser. Shown as unknown, never as an error you didn't see.

Standard debuggers vs. Eventloupe

A typical pass/fail debugger compared with Eventloupe
CapabilityStandard debuggersEventloupe
Status modelSuccess or fail. Two states.Observed, failed or unknown. Three states.
What it relies onTypically the SDK's own report of what it didThe network request and its response, alongside the SDK call
Missing evidenceHas to be shown as a pass or a failShown as unknown, never guessed
DeliveryNot verifiedResponse status recorded where the browser exposes it
The reportA pass/fail badgeAn evidence trail: six stages, each marked observed, failed or unknown

Same event, two answers

Standard debugger

purchaseSuccess

The SDK call fired, so a pass/fail badge says it worked.

Eventloupe

  1. Application
  2. Tag Manager
  3. SDK
  4. Network
  5. Response
Failed at ResponseHTTP 500 · EL1003

The request left the browser. The server's response says it wasn't recorded.

The life of one event

Six stages, each marked observed, failed or unknown. Select a stage to see what Eventloupe looks at there.

Stage 1 of 6 · Application

What it looks at
The page's own call: a dataLayer.push, or an SDK call like gtag() or fbq().
Evidence recorded
The event name and payload exactly as the page produced them.
Unknown when
The call ran before Eventloupe could hook it. The network stage may still catch the request.

Who it's for

Built for the precision-obsessed.

01 · Developers

Verify dataLayer pushes and SDK invocations without guessing.

dataLayer.push → gtag() → request

02 · Analysts

Cross-reference GA4 and Meta Pixel events in one unified timeline.

GA4 + Meta Pixel · one timeline

03 · Marketers

Confirm conversion requests were sent and got a response, not just fired.

request sent · response observed

Diagnostics

Every finding has a code.

Codes are permanent identifiers: the wording can improve, the code never changes. They come from fixed rules, so the same input always gives the same result.

EL1001Medium

Network request not observed

The JS API call was intercepted, but no matching network request was seen.

FixCheck whether a consent manager or ad blocker is suppressing the request.

EL1002Critical

HTTP 4xx client error

The tracking server rejected the request, so the event was lost.

FixCheck the payload for malformed parameters or an invalid pixel ID.

EL1003Critical

HTTP 5xx server error

The tracking server returned an error, so the platform failed to record the event.

FixThis is platform-side. Retry, or check the platform's status.

EL2003High

Event ID mismatch

The event_id in the JS call doesn't match the one in the network request.

FixPass the same event_id to fbq() and to the CAPI server call.

EL4002Medium

ad_storage denied on a conversion

The conversion may not be attributed to the right ad click.

FixMake sure Consent Mode is configured correctly for your consent platform.

EL4012Critical

Consent default set after config

gtag("consent","default") fired after gtag("config"), so tags may have fired with the wrong consent state.

FixMove the consent default before any config call, ahead of your tag manager.

The panel

One panel inside DevTools.

Captured from real sites, not mock-ups. Add to cart, checkout and consent, across every platform at once.

FIVE TOOLSONE TIMELINEGA4 debuggerPixel helperdataLayer checkerTag explorerNetwork tabEVENTLOUPEGA4 page_view ✓ 204Meta PageView ✓ 200dataLayer view_item ✓ seenTikTok ViewContent ? unknownAds conversion ✗ 500
Five tools, one timeline: every platform's events land in a single ordered stream.
Eventloupe panel listing an add-to-cart event captured across several platforms on a live store
An add-to-cart on a live store, caught on every platform that fired it, in one timeline.

Coverage

21 platforms. One timeline.

Eventloupe replaces switching between a handful of single-purpose debuggers. Every platform is read the same way and validated against its own documentation.

  • dataLayer
  • Google Analytics 4
  • Google Tag Manager
  • Meta Pixel
  • TikTok Pixel
  • Google Ads
  • Snapchat Pixel
  • Pinterest Tag
  • LinkedIn Insight
  • Reddit Pixel
  • Segment
  • Adobe Analytics
  • Amplitude
  • Mixpanel
  • Microsoft UET
  • X Pixel
  • Criteo
  • Floodlight / CM360
  • Taboola
  • Outbrain
  • Quora Pixel

Privacy

It all stays in your browser.

Eventloupe doesn't collect, transmit or store any data outside your browser.

Accounts
None needed
Servers
None used
Analytics inside
None
Data lives
In your browser
YOUR BROWSERThe pageEventloupechrome.storagestays on this deviceOur servers · noneAccounts · noneAnalytics · none
Eventloupe watches the page's own requests and keeps what it sees inside your browser. It sends nothing of its own.

This site practises the same thing. It loads no trackers, no third-party fonts and no analytics. Open Eventloupe on this page and see for yourself.

Read the full privacy policy →

Launching soon

Coming to the Chrome Web Store.

Eventloupe is built for developers, analysts and marketers who need to know what a page really sent. Questions or feedback are welcome.

A magnifier for tracking events.