pixellint

Launch · marketers · PMs

Test Events is empty until both pipes exist

You can launch ads on a pixel-only stack. You cannot call it the recommended CAPI setup. Check match quality on Purchase, not on PageView.

See both transports

1. Browser hit in Pixel Helper (or TikTok / Pinterest analog) on a clean profile. 2. Server hit in Test Events (or Events API diagnostics). 3. Same event name on both pipes (Purchase versus purchase is two events). 4. Same event_id: fbq eventID on the pixel, event_id on Meta CAPI. TikTok and Pinterest use event_id on both. 5. If only one pipe appears, you have a single pipe with extra ceremony. Empty Test Events means you are not live, even if GTM says the tag fired.

Preview is not production. GTM preview can show the tag as fired while the published container has no tag, or while the request was blocked. Confirm Network on a browser with no preview cookie after publish.

fbq('track', 'Purchase', {value: 19.99, currency: 'USD'}, {eventID: 'T12345'});
// CAPI data[].event_id must be T12345, event_name Purchase, event_time ten digits

Money fields

1. Open the payload, not only the Event count chart. 2. Purchase carries value and currency (ISO 4217). A conversion count with $0 value will spend as if value did not exist. 3. Pixel value and CAPI value must match, or ROAS reporting fights itself. 4. transaction_id / order id is how you refund and how GA4 dedupes; put it on the dictionary. 5. A named Purchase with no items on GA4 MP is not revenue.

Value-based bidding trains on the numbers in the payload. A correctly spelled event with empty value is a tax on the account. Look at the JSON.

Match quality on the conversion that spends

1. Check Event Match Quality (or the vendor analog) on Purchase or Lead, not on PageView. 2. Hashed email and phone after the vendor recipe. 3. Click ids and first-party cookies (_fbp, _fbc, ttclid) in the clear. 4. IP and user-agent in the clear from the client, not the VPC NAT. 5. Do not block the pixel until you have an email; PageView is allowed to be weak.

You will not have email on every PageView. Aim for high quality on money events. Chasing 10.0 on PageView is how you starve the model.

After launch

1. Watch Event Match Quality for a week on the optimization event. 2. Watch refunds if you sell physical goods; send refund with the same transaction identity the purchase used. 3. Watch Safari separately. Chrome-only QA is a seasonal incident. 4. Confirm test_event_code is gone in production (Pixellint warns when it is present). 5. Confirm staging traffic is not on the production pixel id.

A CAPI-only surprise (pixel blocked, server up) is healthy. A pixel-only surprise after you announced CAPI is a mapping that never shipped. Re-open Test Events on a real order, not only on a test code.

Vendor clocks are not interchangeable

Meta CAPI event_time is Unix seconds, 10 digits. TikTok Events API timestamp is ISO 8601. LinkedIn conversionHappenedAt is milliseconds, 13 digits, and a URN. Pinterest CAPI event_time is seconds, action_source is lowercase web, event_id is required. Copying a Meta client at TikTok is how you send ten-digit seconds into an ISO field. The 200 will be fine. The event time will not.

Pixellint is not affiliated with Meta or TikTok. Playbooks under vendor docs and pack pages under /packs/ are complementary: this checklist is go-live; the pack is the field table. pixellint validate json on the server body before you raise bids.

pixellint validate json @capi.json --rulepack vendor/meta-conversions-api
pixellint validate json @tiktok.json --rulepack vendor/tiktok-events-api

Check the artifact

Paste the pixel URL or JSON body into the playground. Same engine as pixellint validate. Nothing leaves the tab.