Skip to content

Real User Monitoring for Shopify

Your Shopify storealready sayswhere it hurts.

Shopify attaches a Server-Timing header to every storefront response: backend time, database time, render time, page type. Most tools ignore it. fastmon reads it and puts it next to the Core Web Vitals of the same visitor. You need no app for that, only the script tag.

What you get

What fastmon does for your Shopify store.

In plain language, before this page turns technical further down.

  • 01

    You see whether Shopify or your theme is the brake

    Shopify itself reports how long backend, database and rendering took. If the time sits there, optimising images will not help. If it sits in the browser, it will.

  • 02

    You see it per page type, not as one average

    Home, collection, product page and cart, kept apart. Shopify sends the page type along, so there is nothing to configure.

  • 03

    You need no app from the app store

    One script tag in the theme is enough. No extra app running on every pageview, costing load time of its own.

  • 04

    And no cookie banner for the measurement

    fastmon sets no cookies, in any configuration. Hosted in Germany, the data path stays in the EU.

In short

Server-Timing
A standard header a server attaches to its response to say where the time went internally. Shopify does it out of the box.
TTFB
Time to First Byte: how long until the first byte of the page arrives. Tells you that it was slow, not why.
p75
The value three out of four visitors reach or beat. More telling than an average, because outliers cannot flatter it.

The difference

Shopify has been telling you where the time goes. Nobody was listening.

Every response from a Liquid storefront carries a Server-Timing header. It sits in every browser's devtools, yet almost no monitoring evaluates it. fastmon reads it off the document response, normalises it and shows it as p50, p75 and p95 next to the Core Web Vitals of the same pageview.

What a Shopify storefront's header looks like

server-timing: processing;dur=476, db;dur=50, render;dur=204,
               pageType;desc="index", edge;desc="TXL"

What fastmon turns that into

processingBackend time
The application as a whole. On Shopify, the time the store itself took.
dbDatabase time
How long queries took. Typically climbs with large collections and many variants.
renderRender time
Assembling the template. Heavy Liquid loops and theme customisations show up here.
pageTypePage type
A reserved name at fastmon. Shopify sends it along, so the breakdown is there with no configuration.

And what fastmon throws away

On Shopify the same header also carries requestID and analytics keys such as _y or _cmp whose values are UUIDs. Both fail fastmon's server-side validation: names have to start with a letter, and UUIDs, long hashes and known infrastructure keys are discarded. Only what belongs to the known phases is stored.

Checked against live storefronts on 22 September 2026. Which values a store sends depends on its theme and plan, and Shopify can change that at any time.

Checkout

And the checkout, through Shopify's own pixel.

The storefront tracker stops at the cart, Shopify does not let it go further. Through the Custom Pixel feature Shopify itself reports three checkout events to fastmon. That closes the funnel from pageview to order.

  1. Checkout startedThe visitor reaches the checkout.
  2. Payment info submittedThe visitor has submitted their payment details.
  3. Checkout completedThe order has been placed.

Set up in the Shopify admin

  1. 1Settings, Customer events, Add Custom Pixel
  2. 2Name the pixel fastmon and paste the snippet from the docs
  3. 3Set permissions: customer privacy not required, not a data sale
  4. 4In fastmon, set the platform to Shopify and enable store_stitch

What you need to know about it

  • Only those three events are measured. No Web Vitals, no load time and no error data from inside the checkout.
  • The figures are a floor, not an exact count.
  • Content blockers filter the pixel. uBlock Origin does so with EasyPrivacy by default.
  • On Shop Pay and Apple Pay, Shopify often does not fire the completion event.
  • store_stitch has to be on, because checkout events carry no session ID.
Shopify checkout in the docs

No configuration

Split by page type, from the first pageview.

Because Shopify sends the page type in the header and fastmon knows pageType as a reserved name, the metrics arrive already separated. No path patterns, no rules, no upkeep.

  • Collection versus product page

    A slow collection with many filters has different causes than a slow product page. Measured apart, judged apart.

  • Cart as its own type

    The page where the money is stops disappearing into the average of all pageviews.

  • Campaign landing pages

    What you pay to promote gets measured apart from the organic home page.

Install

One line into the theme, done.

No app store, no build step, no checkout changes. The script tag goes into your theme's layout and covers the whole storefront.

  1. 1In the admin, open the theme codeIn the Shopify admin under Online Store, Themes, then Edit code on the live theme.
  2. 2Open theme.liquidUnder Layout you will find theme.liquid. That is the file loaded on every storefront page.
  3. 3Paste the script tag before </head>Save, done. The first real visitors show up in the dashboard within minutes.

In theme.liquid, before the closing head tag

<script defer src="https://fastmon.site/s/DEIN-HASH.js"></script>

You get the hash when you create the application in the dashboard. On a custom theme, make the change on a copy rather than on the live theme.

Install guide in the docs

Privacy

No cookie banner for the measurement.

fastmon sets no cookies, in any configuration. New applications start on the Standard preset, which works without personal data and stores nothing on the device.

  • Minimal: vitals, error kinds and device classes only, no identifiers
  • Standard (default): plus fetch and XHR aggregates, query key names and stack frames, still without error text, query values and session ID
  • Full: writes an identifier into sessionStorage and therefore needs consent
  • Hosted in Germany, 100% EU data path

* On the Minimal and Standard presets fastmon stores nothing on the device; it only reads status values the browser produces at runtime. In our assessment that is not access to stored information under § 25 TDDDG. That has not been settled in court, a residual risk remains, and the assessment for a specific deployment is the store operator's to make.

Read what your store is already sending.

Start for free, script tag into the theme, done. Backend, database and rendering are in the dashboard from the first visitor.

FAQ

Common questions about Shopify

What store operators and agencies want to know before installing.

Does every Shopify store really send this header?

Classic Liquid storefronts do, checked against several live shops. Headless storefronts on Hydrogen and Oxygen behave differently and send another set, or none. What actually arrives is visible in fastmon after the first pageview, and in your browser's devtools even before that.

Do I need an app from the Shopify app store?

No. A script tag in theme.liquid is enough. That is also why fastmon costs barely any load time itself: there is no extra app running in the store.

Does fastmon measure the checkout too?

Yes, through Shopify's Custom Pixel feature. Shopify itself reports three events to fastmon with it: checkout started, payment info submitted, checkout completed. There are no Web Vitals, load times or errors from inside the checkout, and the figures are a floor, not an exact count.

Shopify checkout in the docs

Do I need a cookie banner?

Not for the measurement. fastmon sets no cookies in any configuration, and the Minimal and Standard presets write nothing to the device. Only the Full preset puts an identifier in sessionStorage and needs consent under § 25 TDDDG.

The full derivation

Does the script slow my store down?

It loads with defer, so it blocks neither rendering nor parsing, and it is served first-party without an extra connection to a third party. The Server-Timing header costs nothing at all: it is in every response anyway, fastmon only reads it.

What about apps that slow the store down?

You see them in the network waterfall and in the fetch and XHR aggregates, with their own hosts. Together with the backend time from the header, that separates an app slowing things down in the browser from the store itself doing it.

Shopify is a registered trademark of Shopify Inc. fastmon is not a partner of Shopify Inc. and is neither endorsed nor reviewed by them.