# Why your Ordinary session counts should match Shopify Admin closely

> How Ordinary's session counts relate to Shopify Admin's analytics, why they should match within a small margin after the bot filter, and what to expect across the install boundary.

Source: https://help.tryordinary.com/concepts/historical-vs-ongoing-session-data

---

Short version: **Ordinary captures every real shopper Shopify's
own pixel sees, plus the cohort Shopify misses (ad-blocker, iOS
strict tracking, in-app browsers), and then filters out bot traffic
the same way Shopify Admin does — so your headline session counts
match Shopify Admin within a small margin.** What Ordinary adds on
top: attribution depth, click-ID stitching across every major paid
platform, multi-touch journey reconstruction, and cross-platform
reconciliation in one place.

## What "real" means in our session count

Every store gets some traffic from automated visitors: search-engine
crawlers (Googlebot, Bingbot), AI scrapers (GPTBot, ClaudeBot,
PerplexityBot), SEO-tool bots (AhrefsBot, SemrushBot), social-link
unfurl previews (Facebook, Twitter, Slack, Discord), uptime monitors
(Pingdom, UptimeRobot), and one-time visitors who land on a page
and never return. These are real HTTP requests but they're not
shoppers.

Ordinary classifies these as **bot traffic** and excludes them from
session counts in your reports. The classification uses two signals:

- **User-agent pattern matching** at ingest — recognizes the
  hundreds of known crawler / scraper / headless-browser signatures.
- **Behavioral retro-tagging** — a daily check that flags visitors
  who fired exactly one event in their entire history then never
  came back. This catches the disguised bots that pass user-agent
  checks by pretending to be a real browser.

Result: your session count reflects **what real humans actually did**.
This is the same posture Shopify Admin takes, which is why the
numbers should line up closely.

## How to read your dashboard across the install boundary

When you install Ordinary, your dashboard pulls from two sources:

### Before the install — Shopify's analytics warehouse

Ordinary backfills your historical session counts, landing pages,
channel attribution, add-to-cart counts, and checkout-started counts
directly from Shopify's records. These numbers match
**Shopify Admin → Analytics → Reports** exactly — they're the same
data.

The backfill goes back as far as Shopify retains it (typically up
to 12 months for most plans).

### After the install — Ordinary's first-party pixel

The pixel starts capturing the moment you connect. It records the
same shoppers Shopify's analytics records, AND the shoppers
Shopify's own tracking misses (ad-blocker / iOS-strict cohort),
THEN filters bot traffic before showing you the number.

Net effect: the post-install session count should be very close
to what Shopify Admin reports for the same day, with small
discrepancies in either direction depending on the specific bot
mix on a given day. There's no dramatic step-change at the install
boundary anymore.

## What Ordinary captures beyond the headline session count

The session count matches Shopify Admin. Underneath it, Ordinary
records signal Shopify's own analytics doesn't:

- **Click IDs from every major paid platform** — Google (gclid /
  gbraid / wbraid), Meta (fbclid), TikTok (ttclid), Bing (msclkid),
  Klaviyo (\_kx), Pinterest, LinkedIn, Twitter, Snapchat, Reddit.
  Stitched across the full funnel and persisted on every order.
- **First-touch / last-touch attribution** — every shopper's
  original landing UTMs preserved alongside their last-touch ones,
  on every order, with channel context.
- **Multi-touch chains** — every intermediate touchpoint between
  first visit and order, in time order.
- **iOS-strict and ad-blocker shoppers** — these visitors are in
  Ordinary's underlying data with full attribution, even when
  their pixel events don't bump the headline session count
  materially.
- **Cross-platform reconciliation** — orders join cleanly to Meta
  spend, Google Ads keyword data, Klaviyo flows, Amazon Ads
  reporting, GA4 — one source of truth across channels.

## What gets backfilled vs what only Ordinary captures going forward

| Data | Historical (pre-install) | Going forward (post-install) |
|---|---|---|
| Daily session count (real humans, bot-filtered) | ✓ from Shopify | ✓ from pixel |
| Landing pages | ✓ | ✓ |
| Add-to-cart counts | ✓ | ✓ |
| Checkout-started counts | ✓ | ✓ |
| Bounce rate, avg session duration | ✓ | ✓ |
| Channel attribution (Google/Meta/email/etc.) | ✓ | ✓ (deeper post-install) |
| UTM parameters | ✓ | ✓ |
| Click IDs (gclid, fbclid, ttclid, _kx, etc.) | ✗ | ✓ |
| Device, browser, geographic location | ✗ | ✓ |
| Per-shopper journey reconstruction | ✗ | ✓ |
| Multi-touch attribution chains | ✗ | ✓ |
| Order revenue attribution | ✓ | ✓ |

The "✗ historical" rows are signals Shopify's analytics warehouse
doesn't expose to apps. Those start populating the moment your
pixel fires.

## What you might notice on day 1

For the first 7–14 days after install:

- **Headline session counts will be very close to Shopify Admin** —
  no dramatic step up or down at the install boundary, just normal
  day-to-day variation.
- **Conversion rate reflects bot-filtered shoppers** — slightly
  higher than if bots inflated the denominator, which is the
  posture you want for a real conversion rate.
- **Period-over-period comparisons** are reliable across the
  install boundary because both sides are bot-filtered.
- **Attribution depth ramps up** — first-touch / last-touch click
  IDs start showing up on orders within a few minutes of install,
  giving you channel attribution Shopify's own reports don't have.

## Want to recover even more?

Ordinary's standard pixel recovers ~95% of real human shoppers on
most stores. For the remaining ~5% (mostly Brave on aggressive
settings + some iOS configurations), Ordinary offers a **first-party
CNAME** upgrade that brings recovery closer to ~99%. The lift is
marginal but available — ask your account manager if you'd like
to set that up.

## Related

- [What is a first-party pixel?](https://help.tryordinary.com/concepts/first-party-pixel) — why we
  built our own pixel instead of using Meta's or Google's
- [How bot traffic filtering works](https://help.tryordinary.com/concepts/bot-traffic-filtering) —
  what we exclude from your session counts and why
- [Data handling and privacy](https://help.tryordinary.com/concepts/data-handling-and-privacy) —
  what we collect and how we protect it
- [Attribution models](https://help.tryordinary.com/concepts/attribution-models) — how channel credit
  gets assigned across the funnel
