Follow The Spend

Why Buy It Now and Shop Pay conversions show as direct

Shopify's express checkout buttons skip the page flow our pixel relies on. Here's how to read these conversions today, and what's coming next.

If you've spotted orders attributed to "direct" that you know came from a Meta or Google ad, this is almost always why.

It's not a tracking bug. It's a known v1.0 limitation that comes from how Shopify's express checkout buttons work — and there's a real fix on the way.

TL;DR

  • Buy It Now, Shop Pay, and other express checkout buttons skip the normal page flow our client-side pixel relies on.
  • Conversions still land in Follow The Spend — your revenue numbers are correct.
  • Attribution on those specific orders may show as "direct" rather than the visitor's real source.
  • The fix is a v1.x feature using Shopify's Web Pixel API. Live on the roadmap.

The behaviour you're seeing

A visitor arrives from a Meta ad, browses for a minute, taps "Buy It Now" on a product page, and converts. In Pulse, you'd expect that conversion to show as Meta. Instead it shows as direct.

You'll typically notice this when:

  • Your Shopify revenue includes orders you can't attribute in FTS
  • Your Meta Ads Manager reports more conversions than FTS does
  • A specific product or page produces a suspiciously high number of "direct" sales

Why this happens

Express checkout buttons (Shop Pay, Apple Pay, Google Pay, PayPal Express, "Buy It Now") are designed to skip the normal Shopify checkout pages. The buyer taps once, the order is placed, and they never see the cart, checkout, or thank-you pages in the usual flow.

Our client-side pixel runs on storefront pages — the same place every Shopify analytics integration runs. When a visitor never loads the page that fires the conversion event, the pixel can't link the order back to the visitor session that brought them in.

What we can still do: Shopify sends us the order itself via webhook. We get the customer ID, the order amount, the timestamps. What we can't always do reliably: connect that order to the marketing source that drove the click, since the link between the visitor session and the order is forged on a page that never loaded.

What you'll see in FTS

Three concrete things to know:

  1. The order itself is recorded. Revenue, customer, products — all there. Pulse's revenue total is correct.
  2. The visitor's journey may be incomplete. If we identified the customer earlier (signed-in, returning), we can sometimes stitch the journey together. If they were anonymous until the express-checkout tap, we can't.
  3. The attribution defaults to direct. When the bridge from session → order is missing, the order falls into the unattributed bucket and renders as direct.

How to estimate the impact today

A few minutes of detective work will tell you roughly how much "missing" attribution sits in your direct bucket:

  1. In Pulse, filter by direct channel for the last 7 days.
  2. Compare that direct revenue to a typical week's direct share. Most stores see 15–25% direct under normal conditions.
  3. The amount above your usual direct share is roughly the express-checkout attribution gap.

This is a rough estimate, not a science. But it sets a useful upper bound on how much your real channel mix differs from what Pulse shows.

What's coming in v1.x

The fix is Shopify's Web Pixel API — a sandboxed runtime designed specifically to receive checkout events from Shopify, including the express-checkout flows our current pixel can't see.

Once the Web Pixel integration ships, express-checkout conversions will attribute to their real marketing source, the same way every other conversion does. The current client-side pixel becomes a fallback rather than the primary path.

This is a v1.x release — actively scoped, not "someday" work. Watch the roadmap on the marketing site for ship dates.

Bottom line

If a chunk of your "direct" revenue feels wrong, you're probably right — but it's not because tracking is broken. The orders are landing accurately; the link between session and order is what's missing for express checkouts. The Web Pixel fix closes that gap completely. Until it ships, treat your direct revenue as "real direct + some misattributed express checkout."

On this page