FluxLogic

Work · Tracking audit for GA4 and the Meta pixel

Meta counted 953 purchases,the shop had 504 orders.

A tracking audit for an online shop of natural cosmetics: every GA4 and Meta event with its parameters, the reason behind each mismatch, and the same funnel after the fix.

THE BUILD

Tracking audit for GA4 and the Meta pixel · October 2026

Pixel Audit

On the left a working shop with eight products, a cart, Stripe at checkout and a consultation booked through an external booking widget. On the right every event as GA4 and Meta receive it, with a red note on each mistake. The other tabs match the catalog feed against the pixel, chart 30 days of orders against both platforms and print a report.

WHAT IT’S BUILT WITH
Next.jsTypeScriptSQLiteChart.jsDocker
BUILT IN
4 days
SHIPPED
October 2026
CHECKS
GA4, Meta Pixel, CAPI
REPORT
Saves as PDF
WHAT WAS NEEDED
Shop owners and marketers write the same things: the pixel sends nothing, conversions dropped and nobody knows whether orders stopped or tracking broke, the catalog and the pixel do not match and support did not help, GA4 numbers differ from the shop. They need to see each event and the reason for each mismatch instead of guessing.
WHAT WE BUILT
A shop with a Before and After switch. Before carries the usual mistakes: add_to_cart firing when the cart opens, purchase sent again on every reload, no value or currency, the SKU as content_id while the feed uses the ID, no event_id to merge browser and server events, and a booking widget whose Lead never reaches the tags. After fixes each one. Next to the shop a monitor lists every GA4 and Meta event with its parameters and explains each issue in one or two lines.
HOW IT WORKS
gtag and fbq are replaced by local versions with the same calls. They post Measurement Protocol and Conversions API bodies to collectors inside the app, which keep them in SQLite and check them against the rules. In After, purchase reaches GA4 from the server once the order is confirmed, and Meta gets the browser and the server copy with one event_id. The catalog tab reads the XML feed and compares its IDs with what the pixel sends. The 30 days are generated orders with ad blockers, reloads, buyers lost on the payment page and a GA4 time zone left on Los Angeles, counted the way each platform counts them. Next.js, TypeScript, Chart.js, one Docker container.
WHAT IT DOES NOT DO
It does not connect to real GA4 or Meta accounts and does not export a GTM container. The shop and its 30 days of orders are part of the project; on a real store the same checks run against its own tags, and the fixes are the same lines of code.

01Before and after · 2

01

One order and one reload: GA4 and Meta already count it twice, with no amount.

02After the fix: one purchase with the amount, and Meta merges its two copies.

02The booking that never became a Lead · 1

03

The widget confirms the booking, but neither GA4 nor Meta hears about it.

03Catalog against pixel · 1

04

The feed uses g:id, the pixel sends the SKU, so Meta cannot match a single product.

04Thirty days and the report · 2

05

504 orders, 445 in GA4, 953 in Meta, and where each difference comes from.

06What was found, how it was fixed and what to check next, ready to save as PDF.

05On a phone · 2

07

The shop on a phone.

08Opening the cart twice sends two add_to_cart, and no button was pressed.
NEXT BUILDWB unit economics