Get your Saleor / Medusa tracking to 95%+ accuracy guaranteed in writing.
Saleor and Medusa give you full control over the storefront — and full responsibility for tracking. There's no plugin marketplace, no native pixel app, no Shopify-style Customer Events API. Without a server-side gateway, every iOS user, every ad-blocker user, every cookie-banner click stays invisible. We build the gateway, ship a typed dataLayer for your storefront framework, and hand over a runbook your team can extend.
Free30 minutesNo obligation
Saleor / Medusa · what breaks
Headless tracking complexity — Saleor / Medusa
- 01
No native pixels
Marketplace plugins do not apply.
- 02
GraphQL events need manual wiring
Each mutation = a tag.
- 03
Edge-runtime restrictions
Workers can't ship full Node libs.
- 04
Hydration double-fires
Common in naïve setups.
Saleor / Medusa · the fix
Outcomes — Saleor / Medusa
Typed React/Vue module
Source + Storybook examples.
Server-side CAPI
Edge or Node runtime.
Hydration-safe events
Zero double-fires.
GA4 e-com schema
Standard events.
Saleor / Medusa · architecture
How a Saleor and Medusa order should reach the ad platforms
These are headless commerce backends, so there is no theme, no template and no page to attach tracking to. Everything is an API call, which is both the difficulty and the opportunity.
- 1
Click identifiers captured at first touch
Click IDs are captured by the storefront application at landing and stored against the cart or customer, so they persist through a checkout that may span several API calls and a payment provider redirect.
- 2
The browser sends the fast, fragile copy
The storefront application pushes events explicitly at each state change. There is no DOM to scrape, which makes tracking a development dependency and puts it in the release cycle.
- 3
The order itself is the source of truth
The order completion mutation's response, or the backend order-created webhook, is the truth. A confirmation route can be reloaded, shared or never reached.
- 4
A server container sends the authoritative event
The backend webhook posts to a GTM server container on your own subdomain, keyed on the order ID, which is also where hashed identity is added rather than in the client.
- 5
Customer identity raises match quality
The order carries email, phone and address. Hashed in the backend, never exposed to the storefront bundle where any script could read them.
Saleor / Medusa · events
The event set we build on Saleor and Medusa, and where each one comes from
Every event here is a deliberate call from application code. Nothing fires by accident, which means nothing fires unless someone writes it.
| Event | Fires when, on Saleor and Medusa | Key parameters | Sent from |
|---|---|---|---|
| view_item | The product query resolves for a product route | item_id, value, currency, event_id | Browser + server, deduped |
| add_to_cart | The cart line mutation returns success | item_id, quantity, value, currency, event_id | Browser + server, deduped |
| begin_checkout | A checkout session is created | value, currency, num_items, event_id | Browser + server, deduped |
| purchase | The backend order-created webhook fires | order_id, value, currency, items[], hashed email/phone/name/address, event_id | Server authoritative |
| refund | A refund is processed in the backend | order_id, value, currency | Server only |
Saleor / Medusa · normal or broken
Headless commerce specifics — Saleor / Medusa
The usual tracking assumptions — page loads, templates, DOM values — none of them apply.
Normal, not a fault
No page load between funnel steps
Route changes replace navigation. Page-view triggers will never fire and should not be expected to.
Tracking requiring a developer for every change
That is the architecture. Budget for it rather than being surprised by it.
Ad platforms report more conversions than you have orders
Meta credits a 7-day click and 1-day view; Google credits on click date. Two platforms can each claim the same sale. Compare each one to your order records separately and never add them together.
Recent days always look worse than they finish
Conversions are credited back to the date of the click, so yesterday's return on ad spend is understated and will keep improving for several days. This is attribution working, not data arriving late.
Actually broken
One page view per session and nothing else
Route changes are not wired to fire events. The most common headless symptom by a wide margin.
Purchase fired on the confirmation route
Reloading fires it again, and a customer who never reaches the route is never counted.
Events firing before hydration completes
Undefined values are sent and accepted. The count looks right and every parameter is empty.
Saleor / Medusa · prove
How we prove the Saleor and Medusa build is correct
The tag firing proves the tag fires. These prove the numbers are right.
Source of truth
The commerce API's order records
- Route navigation confirmed producing one event per view across a multi-step journey.
- The confirmation route confirmed not to produce a second purchase on reload.
- Which application code paths own which events documented, since a frontend refactor will otherwise silently break them.
- Purchase count within a few percent of the commerce api's order records for a fully closed week, matched on order ID rather than on totals.
- No order ID appearing twice in any platform's event log.
- Deduplication confirmed at every destination that supports it.
- Test and staff orders excluded, with the exclusion confirmed active rather than merely configured.
- The same reconciliation repeated 30 days later, because a setup that works once and then drifts is the harder failure to catch.
Saleor / Medusa · free audit
What we check in the free audit
- No native pixels
- GraphQL events need manual wiring
- Edge-runtime restrictions
- Hydration double-fires
Checked against
The commerce API's order records
Free30 minutesNo obligation
Saleor / Medusa · when not to buy
When a Saleor and Medusa rebuild is not what you need
We would rather say this now than three weeks into an engagement.
- You are pre-launch and the storefront is still changing weekly. Build once it stabilizes.
- Your ad spend does not yet justify development time on tracking.
- No developer capacity is available. Nothing here can be done without one.
Saleor / Medusa · what we deliver
Deliverables — Saleor / Medusa
TS dataLayer module
Storybook + tests
Server-side gateway
Edge or Node
Per-route integration
PDP / Cart / Checkout / Order
QA + Notion runbook
Plus 60-day support
Written guarantee
95%+ tracking accuracy
Measured against The commerce API's order records. Miss it and we keep working at no cost.
Pricing
Pick the package that fits your ad spend
Browser-side starter
$400One-time fee · lifetime ownership
Baseline pixel install for Saleor / Medusa. Honest disclosure: at enterprise scale this tier is a stopgap — every paid-media dollar should be running 1st-party server-side. Only suitable when ad spend is genuinely small.
- Saleor / Medusa-aware dataLayer
- GA4 + Meta Pixel + Google Ads + TikTok + UET
- Consent Mode v2 wiring
- QA + 14-day support
- No CAPI · no iOS recovery
1st-party server-side
Recommended for paid ads$800One-time fee · most popular
Standard for Saleor / Medusa stacks running serious paid media. Every channel — Meta, Google, TikTok, Microsoft — fed 1st-party server-side. Multi-store / multi-region aware. EMQ 8+ verified live before handoff.
- Everything in browser starter
- 1st-party server-side GTM (Stape Pro or self-hosted)
- Meta CAPI · Google EC · TikTok Events · UET server
- Deterministic browser ↔ server dedup
- Multi-store / multi-region routing
- Live EMQ verification · 8+ target
- Notion runbook + 30-day support
Enterprise 1st-party stack
$1,800One-time fee · lifetime ownership
Full enterprise stack for high-volume Saleor / Medusa brands. Every channel 1st-party server-side, identity graph, data warehouse, EU + US residency, and a quarterly attribution review with leadership.
- Everything in 1st-party server-side tier
- Pinterest · Snapchat · LinkedIn · Reddit CAPI
- Klaviyo / CDP identity stitching
- BigQuery export + Looker Studio dashboard
- EU + US data residency (Stape EU / GCR europe-west)
- GDPR / CCPA / CPRA audit-clean
- Quarterly health check + leadership review
- 90-day support · retainer optional
FAQ
Saleor / Medusa questions, answered
Yes — same module pattern.
Yes.
More on Saleor / Medusa
- GuideBrowser vs Server Tracking: Which Events Belong Where
- GuideWhat an Ecommerce Tracking Rebuild Actually Involves (Start to Finish)
- Free toolFree headless audit
- Saleor → Google AdsConnecting Saleor to Google Ads
- Saleor → MetaConnecting Saleor to Meta Conversions API
- Saleor → GA4Connecting Saleor to GA4
Free · 30 min
Free headless tracking strategy call
Free30 minutesNo obligation
