What is a first-party pixel?
Why Ordinary uses a first-party pixel instead of the traditional Meta/Google pixel and what that means for the data quality you see in reports.
What is a first-party pixel?
Short version: a pixel that runs on your Shopify domain and reports to us instead of running on Meta’s / Google’s infrastructure and reporting to them. It’s more reliable, more accurate, and not blocked by ad-blockers or iOS privacy changes.
The problem with traditional pixels
Meta’s pixel, Google’s tag, and most other ad-platform pixels are third-party:
- They load from
connect.facebook.netorgoogletagmanager.com. - The browser treats them as third-party scripts.
- iOS 14.5+ blocks third-party tracking by default.
- ~30% of visitors run ad-blockers that block these domains outright.
- Browser cookies set by these pixels expire after 7-30 days under Safari ITP and similar Firefox/Chrome rules.
Net effect: your Meta pixel sees ~60-80% of your real traffic and under-reports conversions by an equal margin. Most brands have learned to not fully trust their ad-platform numbers.
How a first-party pixel is different
Ordinary’s pixel:
- Runs via Shopify’s Customer Events extension — loaded by Shopify’s own infrastructure, first-party to your store domain.
- Not blocked by ad-blockers (the URL is your own shop, not a known tracker).
- Not subject to iOS 14.5 third-party restrictions.
- Cookies are first-party, so they persist for the browser’s normal retention period (not the shortened third-party window).
Result: materially more session coverage than a traditional third-party pixel can capture — and a cleaner view of your data since it isn’t subject to platform reporting quirks.
What the pixel captures
- Page views (generic page URL + referrer + UTM chain)
- Product views (which SKU was viewed)
- Collection views
- Onsite search queries (the term typed into the storefront search bar)
- Add-to-cart (which SKU + variant, quantity, price)
- Cart views
- Checkout started
- Payment info submitted
- Checkout completed (with order ID linking back to Shopify)
- Storefront alerts (out-of-stock messages, payment-declined notices, shipping-rate errors — the kinds of messages that indicate checkout friction)
- App-extension errors (when a third-party checkout extension fails; helps diagnose app reliability issues affecting your conversions)
Each event is tagged so that repeat visits from the same browser are recognized as part of one journey instead of a string of disconnected sessions.
Bot traffic filtering
Not every event the pixel captures comes from a real shopper. Search engine crawlers (Googlebot, Bingbot), AI scrapers (GPTBot, ClaudeBot, PerplexityBot), SEO tools (AhrefsBot, SemrushBot), social link unfurl previews, uptime monitors, and disguised crawlers all fire pixel events as they browse your store.
Ordinary classifies these as bot traffic and excludes them from session, visitor, and funnel reports — so your headline numbers reflect what real humans actually did. See how bot traffic filtering works for the full picture of what we exclude and why.
What the pixel doesn’t capture
- Logged-in customer identity unless Shopify’s Customer Events API provides it. When Shopify tells us which customer just placed an order, we link their prior anonymous browsing to their profile. Before that link happens, their activity is tracked anonymously.
- Activity on other sites — we only see what happens on your store. UTMs tell us where they came from; they don’t let us follow them elsewhere.
- Offline purchases — in-store POS, phone orders, B2B invoicing. Those hit Shopify’s order webhook but have no pixel session attached.
- Pre-purchase browsing for shoppers on aggressive privacy browsers who don’t end up buying. A small slice of visitors use browsers (Brave with default shields, Safari with strict tracking protection, iOS content blockers) that block our pixel from running on their device. We pair the pixel with two recovery layers — a first-party beacon path that defeats most cross-origin tracker blocking, and a server-side reconstruction of the conversion event for shoppers who do buy — but pre-purchase browse activity (page views, product views) for blocked-browser shoppers who never complete an order is genuinely uncapturable. We don’t fabricate it.
What we still capture for blocked-browser shoppers who buy
For an order from a shopper whose browser blocked our pixel entirely, we reconstruct the conversion record server-side from Shopify’s order webhook (which is server-to-server and unaffected by browser blocking) and Shopify’s own customer-journey data. So the merchant gets:
- The order in their reports
- Accurate revenue attribution
- Real channel attribution (e.g. “Paid Social”, not the catch-all “Direct” bucket)
- Proper product / SKU / discount-code attribution
What’s missing for these orders: the pre-purchase funnel (which products were viewed, how long the visitor browsed, etc.) — there’s no server-side equivalent for that data.
How Ordinary compares against Meta’s own numbers
You’ll typically see:
- Ordinary’s sessions > Meta pixel’s on your store (better coverage).
- Ordinary’s orders ≈ Shopify’s (we read from Shopify’s webhook, which is authoritative).
- Ordinary’s ROAS < Meta’s reported ROAS (Meta includes view-through + cross-device stitching that inflates their numbers).
Meta’s reporting is useful for relative campaign performance. Ordinary is useful for absolute revenue truth and first-party attribution.
Checking your Meta CAPI match quality
If you also have the Meta Conversions API connected, the Meta CAPI card on Settings shows an Aggregated Event Measurement (AEM) priority diagnostic. AEM is Meta’s iOS-14+ mechanism that prioritises a small ranked list of conversion events per pixel — mis-prioritised events can silently degrade ad delivery. The diagnostic surfaces:
- The current ranked list of events Meta is using to optimise your campaigns
- Whether
Purchaseis at position 1 (it should be — that’s where the revenue signal lives) - Whether the events Ordinary is sending match the ones Meta has prioritised, so you don’t end up paying for impressions on events Meta isn’t actually counting
If anything looks off, the card links to the relevant page in your Meta Events Manager so you can rerank without leaving the context.
What if I still want to run a Meta pixel?
You can. Ordinary’s pixel doesn’t conflict with Meta’s; they’re on different infrastructures. Most brands keep their Meta pixel for the downstream benefit (Meta’s ad optimization uses it) and treat Ordinary as the source of truth for reporting.
Optional: CNAME first-party forwarding (recover the last ~3-4%)
Even with our Shopify Customer Events pixel, the events your visitors
fire have to POST to somewhere. By default that destination is
app.tryordinary.com — which the browser treats as a third-party
domain relative to your storefront. Safari ITP, Brave Shields, uBlock
Origin, and aggressive content-blockers strip or drop those POSTs.
You can close that gap by configuring CNAME forwarding in Settings →
First-Party Pixel. We give you a hostname like i.<your-domain>.com
that points at Ordinary. Once you add the CNAME record at
your DNS provider and we verify the record is live, your storefront
pixel POSTs events to your own subdomain. The browser sees same-site
requests and stops blocking them.
Setup is a single CNAME record at your DNS host:
Type: CNAME
Name: i
Value: <the target shown in your Settings → First-Party Pixel card>
TTL: 3600
(Use whatever subdomain you prefer — i is the convention; track
or pixel also work as long as you control that subdomain.)
We auto-provision a TLS certificate within ~30 seconds of DNS
propagating. Status updates live in the Settings card. You can revoke
at any time and the pixel falls back to the standard
app.tryordinary.com route — no broken state in between.
What’s identical with vs without forwarding: the data we collect, how
long we keep it, who processes it, our role as your data processor.
Only the network route changes — events flow your-storefront → your-cname-subdomain → Ordinary instead of your-storefront → Ordinary directly. From your end-customers’ perspective there’s
nothing visibly different.
What you get with it: closer to ~99% session capture in environments where ad-blockers / Safari ITP / Brave Shields would otherwise drop the third-party POST. Most useful for brands with high iOS / Brave / privacy-focused-browser traffic shares.
What if your storefront is *.myshopify.com only (no custom domain)?
You can’t add a CNAME under myshopify.com (Shopify owns that zone).
Skip CNAME forwarding for now — it’s only useful once you bring your
own domain.
Related articles
- Customer Events pixel extension — how the pixel gets installed.
- Pixel says “Disconnected”
- Attribution numbers don’t match Shopify
- How bot traffic filtering works