The customer journey to each Shopify order, through our own pixel · first, last, linear, position-based, time decay · cross-check with Triple Whale
Free mode
Loading…
Which channels lead to orders. Each order of Shopify counts once (by order id); its touches are the visits of the same visitor before the order, recorded by our own pixel (Setup). An order without a pixel touch uses Shopify's own first and last visit of the order (dashed). The model decides how the order is shared between the touches; "Every channel 100%" gives each channel the whole order, like Triple Whale's Triple Attribution, so its total is higher than the orders.
By channel
By campaign
Touches with a utm_campaign, as source / campaign.
Sources
Like Triple Whale's attribution table. Purchases and value (CV) come from the Shopify orders shared by the model; sessions, add to carts (ATC), started checkouts, bounce rate (a visit with one page) and the average visit length come from our pixel, by the source of each visit. Bounce rate and visit length need pixel v2 (Setup). Spend, clicks, impressions and ROAS need read access to the ad platforms (Google Ads, Meta, Pinterest) and come later. Click a number of purchases to see its orders, then an order to see its journey.
Journeys
The newest orders with their touches, oldest first: channel, source / medium, campaign, landing page, click id, and the share of the order this touch gets under the chosen model. A dashed touch comes from Shopify's own visit data (no pixel touch for that order).
Search keywords behind Google organic orders
The share of orders that the model gives to Google organic touches, split over the Search Console queries of the landing page on the day of the touch: by clicks, weighted by intent (branded ×3, transactional ×2, commercial ×1.5, navigational ×1, informational ×0.5). These are estimates: Google hides rare queries ("Not shown by Search Console"), and its data comes about 3 days late ("Pending"). Confidence: high = few candidate queries with clicks, low = many.
Cross-check with GA4 (BigQuery export)
GA4's own purchases of the period from its BigQuery export (read only), grouped by the session's last-click source in the same channels, and how many of them match a Shopify order (transaction id = order id or number). GA4 usually misses some orders (ad blockers, consent) and may count a few twice; the Shopify orders are the reference.
Cross-check with Triple Whale
Triple Whale is read only, to check our numbers; nothing is sent to it. Same period and the closest model (first, last, linear, every channel); Triple Whale uses its lifetime window and its own channel names. Expect differences: its pixel and ours do not see exactly the same visits, and on-site shops (Meta, TikTok) are counted differently. A big gap on one channel is worth a look.
Setup: our own gate
Nothing here changes the tracking the shop already has: GA4, Google Tag Manager, Meta, TikTok and Triple Whale keep working as they are and receive nothing from this. Our pixel sends only to this tool, and orders are read from Shopify, one row per order id.
Shopify orders: the Shopify Admin app of the tool (secrets SHOPIFY_SHOP + SHOPIFY_CLIENT_ID / SHOPIFY_CLIENT_SECRET) needs the scope read_orders (orders of the last 60 days; read_all_orders for older ones). Then click The cron syncs every 2 hours.
Our pixel: Shopify admin → Settings → Customer events → Add custom pixel → name it "Rowabi attribution (tools)" → paste the code below → Save → Connect. It is a separate pixel: do not paste it into Google Tag Manager or the theme, and do not change the other pixels.
Triple Whale (cross-check only): Triple Whale → Settings → API keys → create a key with read access → Cloudflare → Worker geo-tag → Variables and Secrets → Secret TRIPLEWHALE_API_KEY. Optional Text variable TRIPLEWHALE_SHOP when the shop id is not <SHOPIFY_SHOP>.myshopify.com.
Search keywords: uses the Search Console connection of the Index Tool (secret GSC_SERVICE_ACCOUNT). Optional Text variable BRAND_TERMS (comma-separated, default rowabi) for branded queries.
GA4 BigQuery export (cross-check only, read only): GA4 → Admin → BigQuery links → Link → choose a Google Cloud project → Daily export → Submit (the first tables appear the next day). In Google Cloud → IAM, give the service account of the tool (the one of GSC_SERVICE_ACCOUNT) the roles BigQuery Job User (project) and BigQuery Data Viewer (the analytics_… dataset). Then add the Text variable GA4_BQ_DATASET = project-id.analytics_<GA4 property id>. Each check reads at most 5 GB (free tier: 1 TB a month).