Monitors are live: get a webhook when any Shopify store changes a price, sells out, or starts a promo

[ BLOG ]

All posts

Research ·

How to Check if a Website Is Built on Shopify

Five ways to tell whether a store runs on Shopify, from a ten-second look at the page source to checking a whole list of domains with one API request each.

The fastest way to check if a website is built on Shopify is to open the page source and search for cdn.shopify.com. Almost every Shopify storefront loads its images, scripts and stylesheets from that domain, and very few other sites do. If you need a firmer answer, or you have more than a handful of domains to check, the methods below go from quick and manual to automated.

What you need

  • A desktop browser with developer tools (Chrome, Firefox, Safari or Edge).
  • The store's address. A custom domain such as example-store.com works; you don't need the myshopify.com address.
  • For bulk checks, a terminal with curl or a short script, and an API key if you use a data provider.

The steps

  1. Open the store's home page and view the source (Ctrl+U on Windows and Linux, Cmd+Option+U on a Mac).
  2. Search the source for cdn.shopify.com. One match on product images or theme assets is a strong signal.
  3. Search for Shopify.theme and myshopify.com. Both come from the JavaScript object Shopify injects into every storefront.
  4. Visit the store's /cart.js URL. A Shopify store answers with a JSON description of an empty cart.
  5. Check the response headers in the Network tab for headers that start with x-shopid or x-shopify.
  6. For a list of domains, script the checks or send each domain to an API that verifies the store for you.

The sections below explain what each step proves and where it can mislead you.

Step 1: read the page source

Shopify themes serve their files from Shopify's CDN. In the source of a typical storefront you will see image tags and script tags pointing at cdn.shopify.com/s/files/ and stylesheet links pointing at the theme's asset folder. A site that only embeds a Shopify Buy Button on a WordPress page can also load files from that CDN, so treat this as a strong hint rather than proof.

Step 2: look for the Shopify JavaScript object

Every Online Store page defines a global object called Shopify. Open the browser console on the page and type Shopify.shop. On a Shopify store it returns the store's permanent address, something like example-store.myshopify.com. Typing Shopify.theme returns the active theme's name and ID. If the console answers that Shopify is not defined, the page is probably not a Shopify storefront, or it is a headless storefront built on another framework.

javascript
// Run in the browser console on the store's home page
console.log(Shopify.shop);        // "example-store.myshopify.com"
console.log(Shopify.theme?.name); // "Dawn"

Step 3: request a URL only Shopify answers

Shopify's Ajax API gives every theme a set of fixed URLs. /cart.js returns the visitor's cart as JSON, and /products/<handle>.js returns one product. Other ecommerce platforms don't answer these paths, so a JSON cart object is close to proof. You can check it from the terminal:

bash
curl -s https://example-store.com/cart.js | head -c 200

A Shopify store prints something that starts with {"token": and includes "item_count":0. Anything else (an HTML 404 page, a redirect to the home page) means the site is not using Shopify's storefront, or it blocks requests without a browser.

Step 4: check the response headers

Open the Network tab, reload the page and click the first document request. Shopify adds its own headers to storefront responses, such as x-shopid and x-shopify-stage. Header names can change without notice and a CDN in front of the store can strip them, so use this as a second opinion next to steps 1 to 3.

Step 5: check many domains at once

The manual checks take a minute per site. With a list of 500 domains from a trade show or a CRM export, you need a script. You can loop over the domains and request /cart.js yourself, but expect to handle redirects, password pages, bot protection and timeouts.

The other option is to ask an API that already verifies stores. ShopLens returns the store when the domain is a public Shopify store and answers 404 when it is not. A domain it has never seen is checked on the spot: the first request answers 202 with a Retry-After header, and asking again a few minutes later gives the result. See the API docs for the full response.

bash
curl -s -o /dev/null -w "%{http_code}\n" \
  -H "Authorization: Bearer $SHOPLENS_API_KEY" \
  https://data.shoplens.dev/api/v1/shops/example-store.com

A 200 means it is a public Shopify store, 404 means it is not (or it is password protected or unreachable), and 202 means it is still being checked. Each successful lookup costs one credit. For what the rest of that response contains, read how to estimate a Shopify store's sales and how to find a store's myshopify domain.

Common mistakes

  • Trusting one signal. A CDN link alone can come from an embedded Buy Button, and a missing header can come from a proxy. Two independent signals are a safe answer.
  • Testing a password page. A store that has not launched shows a password page. It is still a Shopify store, but it has no products to look at yet.
  • Missing headless stores. Brands on Shopify Plus sometimes build the storefront with Hydrogen or another framework. The checkout still runs on Shopify, but the home page may show none of the theme markers. Add a product to the cart and look at the checkout address to confirm.
  • Confusing the platform with the theme. Knowing a store runs on Shopify doesn't tell you which theme it uses. That is a separate check, covered in [how to find which theme a Shopify store uses](/blog/find-shopify-theme).

What the check doesn't tell you

Knowing the platform answers one question and opens several more. A yes doesn't tell you whether the store is on Shopify Plus, how much it sells, which country it ships from or whether it is still trading. Those are separate signals:

  • Plan. Plus is a contract between the merchant and Shopify, and only some of its features show on the storefront. The details are in [how to tell if a store is on Shopify Plus](/blog/is-store-on-shopify-plus).
  • Activity. A store can run on Shopify and have no sales at all. Look at when products were last added, whether prices change and whether the store runs ads.
  • Size. Product count, traffic and sales estimates help you sort a list of confirmed stores into the ones worth your time.

If you run these checks to qualify leads, record the platform result next to the date you checked it. Stores migrate to and from Shopify, and a list that was accurate in January can be wrong by the summer.

How to check it worked

You have a reliable answer when two of these agree: the source loads files from cdn.shopify.com, the console returns a value for Shopify.shop, and /cart.js returns a JSON cart. When they disagree, the site is usually headless, behind a strict firewall or only embedding Shopify products on another platform. For a list of domains, keep the HTTP status for each one in your spreadsheet so you can tell "not Shopify" apart from "still checking".

[ GET STARTED ]

Start building on Shopify data

Get an API key and make your first store lookup in a few minutes.