Shopify Store API — Detect if a Domain Is Shopify
Documentation menu
FetchLayer FetchLayer API

Check whether a domain is Shopify

Report whether a domain is a Shopify store, with the evidence behind the answer: which signals fired, how confident the verdict is, the store name and currency, the permanent myshopify domain behind a custom one, the theme in use, and which of products, collections and store metadata that store actually publishes. A domain that is not Shopify comes back as a normal 200 with isShopify false, so this is safe to run across a list of domains before spending requests on any of them. It works on stores that do not look like Shopify: every classic storefront answers the same endpoints regardless of theme, and a headless store is read at the myshopify domain its own markup reveals.

POST /detect-store Stores
https://api.fetchlayer.dev/shopify-stores/detect-store
OpenAPI JSON

Headers

Authorization string required

Bearer token — your FetchLayer API key.

Parameters

store string required

Store domain, or any URL on the store — for example example.com, https://example.com/products/foo, or a myshopify.com domain.

format string optional

json or markdown. Markdown returns the same result rendered for a model to read. (default: json)

timeoutMs number optional

Per-request time limit in milliseconds (max 120000).

Response Fields

detect-store

Check whether a domain is Shopify

requestedUrl string

The store URL this result corresponds to.

scrapedAt string

When the store was read, as an ISO timestamp.

transport string

Always shopify-storefront — the upstream source this data came from.

notes string[]

Caveats about this specific result: a truncated walk, an upstream limit, or a field this store does not publish. Read it before treating a result as complete.

resultType string

Always store-detection.

domain string

The domain that was checked.

storeUrl string

The canonical store URL the other endpoints should be pointed at.

isShopify boolean

Whether this domain is a Shopify store.

confidence string

confirmed when a decisive signal matched, likely when only indirect evidence did, no when nothing did.

signals object[]

Each check that ran and what it found: platform-header, storefront-cookie, cdn-assets, storefront-runtime, product-catalog, store-metadata.

endpoints object[]

Whether the store publishes products, collections and store-metadata, with the status code each returned. A store can switch any of them off.

storeName string

The store's name, when its storefront publishes one.

currency string

The currency the storefront prices in.

permanentDomain string

The store's myshopify.com address, when the storefront reveals it. This is how a headless store is read.

theme object

The storefront theme: name, id, role, and the theme store id for an off-the-shelf theme (null for a custom one).

Request

curl -X POST "https://api.fetchlayer.dev/shopify-stores/detect-store" \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"store":"allbirds.com"}'

Response

{
  "resultType": "store-detection",
  "domain": "allbirds.com",
  "storeUrl": "https://allbirds.com",
  "isShopify": true,
  "confidence": "confirmed",
  "storeName": "Allbirds",
  "currency": "USD",
  "permanentDomain": "allbirds.myshopify.com",
  "signals": [
    {
      "name": "platform-header",
      "detected": true,
      "detail": "Storefront served the Shopify platform header."
    }
  ],
  "endpoints": [
    {
      "endpoint": "products",
      "available": true,
      "status": 200
    }
  ],
  "notes": []
}