Skip to content

Free tool · Store lookup

Shopify theme detector

Enter a store's address. The detector reads the pages the store serves to everyone and tells you whether it runs on Shopify, which theme it uses (renamed or not), which apps load code on the storefront, and how ready its product data is for AI shopping.

Free, no signup Built by Billy Reiner Updated

A domain or any page URL from the store. We read up to 6 of its public pages and respect its robots.txt. What the detector reads.

Try:

What the detector reads

Every lookup reads only what the store sends to any visitor, in this order, and never more than 6 pages:

  1. /robots.txt, first. If it tells automated tools to stay off the homepage, the detector stops there and says so. It also shows which search and AI crawlers the file lets in.
  2. The homepage, for the Shopify signals, the theme object, the apps and the Organization markup.
  3. /products.json?limit=30, Shopify's public product feed, for catalog field coverage.
  4. /llms.txt, to see whether it exists and who wrote it.
  5. One product's /products/<handle>.json, for barcodes and image alt text.
  6. That product's page, for its Product JSON-LD.

Steps 3 to 6 only run for Shopify stores that are open to the public. Each one fails on its own: if a store switches off its product feed or blocks one path, that check shows as skipped with the reason and the rest still run. Requests go out as ShopifyRankedBot/1.0, time out after 8 seconds, stop reading at 3 MB and follow at most 3 redirects. A result is kept for 6 hours, so checking the same store twice doesn't hit it twice.

Find a store's theme by hand

You don't need a tool for the basic answer. Open the store, view the page source (Ctrl+U, or Cmd+Option+U on a Mac) and search for Shopify.theme. Stores running an Online Store theme print one line like this. It's the real line from Shopify's own Dawn demo store4:

Shopify.theme = {"name":"Dawn","id":129690763353,"schema_name":"Dawn","schema_version":"15.0.0","theme_store_id":887,"role":"main"};
FieldWhat it meansCan it be changed?
nameThe name this copy of the theme has in the store's theme library.Yes, freely. Stores name copies after sales, releases and dates.
schema_nameThe theme's own name, from theme_info in config/settings_schema.json, where every theme declares its name and version2.Only by editing theme code. Most stores never touch it.
schema_versionThe theme version the copy is based on, from the same file.Only by editing theme code.
theme_store_idThe theme's ID in the Shopify Theme Store. Shopify's API docs say it's null when the theme wasn't installed from the Theme Store1.No. It comes with the install.
rolemain for the published theme. Previews show other roles.Changes when another theme is published.

Read theme_store_id first and look it up in the ID table below. If it's null, the theme didn't come from the Theme Store: it's a custom build, a theme bought elsewhere, or a copy a developer uploaded, pushed with Shopify CLI or connected from GitHub. Then schema_name is your best clue. A null ID with schema_name "Dawn" is a Dawn copy that a developer installed by hand, which is common on bigger stores.

Why renamed themes fool detectors

A detector that reads only name, or matches file names, reports whatever the merchant called the copy. On 2026-09-16 knix.com's live theme was named "Post Summer Sale - (US|2026.09.10) Release 4.21.1" and its schema_name said "Knix (v4.21.1)", yet its theme_store_id was 887: Dawn. cotopaxi.com was the same story ("Cotopaxi", ID 887). In the 105 Online Store homepages we sampled that day, 12 carried a Theme Store ID, 9 of those 12 had been renamed and 3 had a rewritten schema_name too. The sample was mostly large DTC brands, so it leans towards custom builds, but the order of evidence holds for any store: ID first, then schema_name, then name.

Some things can't be read from the page at all. A heavily customised Dawn with a new schema_name and no Theme Store ID looks exactly like a from-scratch build. When that happens the detector says it can't tell rather than guessing.

How to tell if a site is on Shopify

A Shopify storefront gives itself away in its response headers and its page source. The detector counts a site as Shopify when it sees one strong signal, or at least two weak ones:

  • Strong: a powered-by: Shopify response header4, a Shopify.shop = "…myshopify.com" line, the Shopify.theme object, or a theme ID in the server-timing header.
  • Weak: assets under /cdn/shop/ or on cdn.shopify.com, the shopify-digital-wallet meta tag, _shopify_y cookies, the ShopifyAnalytics object. One weak signal alone isn't enough: any site can embed a Shopify Buy Button and load an image from Shopify's CDN.

Two cases need care. A headless store runs Shopify behind its own front end, often Hydrogen on Shopify's Oxygen hosting, which answers with powered-by: Shopify, Oxygen, Hydrogen. It's Shopify, but there's no Online Store theme to find and no public product feed. A password-protected store redirects everyone to /password, so only the lock screen is public and the detector stops there.

How app detection works, and what it can't see

An app shows up only if it puts code on the storefront. The detector accepts four kinds of evidence and prints the one it found next to each app:

  • A script, stylesheet, iframe or pixel loaded from the app's own domain, such as static.klaviyo.com. Plain links don't count: a "Powered by" link isn't an install.
  • Shopify's own BEGIN app block: shopify://apps/<handle> comment, which Online Store 2.0 themes print around every app block and app embed.
  • A theme app extension file under cdn.shopify.com/extensions/…/<handle>.
  • A Shopify web pixel whose settings name the vendor, or an inline call such as fbq('init', …).

It can't see apps that never touch the storefront: inventory, shipping labels, accounting, most back-office tools. It also misses checkout-only extensions and anything that loads only after a cookie-consent click. App blocks it doesn't recognise are listed by their handle, which is the name the app's developer gave it and not always the brand name. The detector recognises 95 apps and tags, each signature checked on 2026-09-16 against live store pages or the vendor's install docs:

Reviews
Judge.me, Okendo, Loox, Stamped, Bazaarvoice, Junip, REVIEWS.io, Trustpilot
Reviews & loyalty
Yotpo
Email & SMS
Klaviyo, Omnisend, Attentive, Postscript, Recart, Mailchimp, PushOwl
Support & chat
Gorgias, Tidio, Gladly, Kustomer, Richpanel, Zendesk, Re:amaze
Subscriptions
Recharge, Skio, Ordergroove
Loyalty
Smile.io, LoyaltyLion, Rivo, Inveterate
Upsell & personalisation
Rebuy, Nosto, Dynamic Yield
A/B testing
Intelligems, Shoplift, Optimizely, Convert, AB Tasty, Visually
Page builder
PageFly, GemPages
Search & filters
Boost AI Search & Filter, Searchanise, Klevu, Algolia, Searchspring, Doofinder
Buy now, pay later
Afterpay, Klarna, Affirm, Sezzle
Analytics & pixels
Google tag / Tag Manager, Meta Pixel, TikTok Pixel, Pinterest Tag, Snap Pixel, Reddit Pixel, Microsoft Clarity, Hotjar, Heap, Elevar, Triple Whale, Northbeam, Littledata, Polar Analytics
Privacy & consent
OneTrust, Consentmo, Pandectes, Cookiebot, Osano, Termly
Accessibility
accessiBe, UserWay
Shipping & returns
Route, Loop Returns, Redo, AfterShip, EcoCart
Video & UGC
Tolstoy, Videowise, Firework
Wishlist
Swym Wishlist Plus, Wishlist King
Fraud prevention
Signifyd, NoFraud
Affiliates & creators
impact.com, ShareASale, Refersion, Superfiliate, ShopMy
International
Global-e, Weglot
Quizzes & forms
Octane AI, Hulk Form Builder, Powerful Form Builder

The AI-readiness checks

The top-ranking theme detectors we tried stop at the theme name. This one also reads the public data AI shopping tools can read, and grades it. The field list comes from Shopify's guidance on the product details AI platforms consider5. The pass lines are ours and are shown with each result.

CheckWhat it measuresPass lineHow to fix
Crawler accessWhether robots.txt lets Googlebot, Bingbot, OAI-SearchBot, Claude-SearchBot, Claude-User, PerplexityBot read the homepage and a product page91011. Matching follows RFC 930913.All allowed. Blocking Googlebot or Bingbot is a fail.AI crawlers
Indexable homepageNo noindex in the meta robots tag or X-Robots-Tag header.No noindex.Indexing
Product JSON-LDProduct or ProductGroup markup on the sampled product page, with offers and brand. Google requires offers and recommends brand and gtin7.Product with offers and brand. Missing gtin is a warning.Product schema, GTIN
Organization JSON-LDOrganization (or a subtype such as OnlineStore) on the homepage, where Google recommends it8.Present.Organization schema
Catalog minimumsShare of up to 30 products with a title, at least 1 image and a price above zero, the product rules Shopify Catalog lists6.100%. Under 80% is a fail.Catalog eligibility
Type, vendor, tagsShare of sampled products with each field filled in.90% each. Under 50% is a fail.Catalog product fields
DescriptionsShare with a description of 50 words or more. Shopify asks for "clear, accurate, and detailed" descriptions; 50 words is our line.80%. Under 40% is a fail.Descriptions for AI
SKUsShare of variants with a SKU.90%.Product variants
BarcodesVariants of one sampled product carrying a GTIN with a valid check digit. The public product feed leaves barcodes out; the single-product JSON includes them.Every variant.Barcodes and GTINs
Image alt textImages of the sampled product with alt text. Also only in the single-product JSON.90%.Alt text
llms.txtWhether the file exists and whether the store wrote it. Reported, not scored: llms.txt is still a proposal14.None.llms.txt

Training crawlers (GPTBot, ClaudeBot, Google-Extended, Applebot-Extended, CCBot, meta-externalagent, Amazonbot) are listed in every result but never scored. Blocking them is a content-rights choice with no search cost; Google says Google-Extended "does not impact a site's inclusion in Google Search"12.

One thing changed recently. On 2026-09-16, stores that hadn't customised robots.txt served a default file that opens with comments pointing AI agents to /agents.md and to Universal Commerce Protocol endpoints, and /llms.txt returned an "Agent Instructions" file the merchant never wrote4. The detector labels that file as Shopify's default so a store doesn't get credit for it.

Popular Shopify themes and their Theme Store IDs

Every ID below was read from the theme's own page on themes.shopify.com on 2026-09-163, together with its developer and list price that day. The detector knows all 337 themes the Theme Store listed. Third-party Theme Store themes carry an ID too (Prestige is 855, Focal 714), even though Shopify's API docs describe the ID as belonging to Shopify-made themes.

Free themes by Shopify
ThemeTheme Store IDDeveloperPrice
Dawn887ShopifyFree
Horizon2481ShopifyFree
Refresh1567ShopifyFree
Sense1356ShopifyFree
Craft1368ShopifyFree
Studio1431ShopifyFree
Taste1434ShopifyFree
Crave1363ShopifyFree
Colorblock1499ShopifyFree
Ride1500ShopifyFree
Origin1841ShopifyFree
Publisher1864ShopifyFree
Spotlight1891ShopifyFree
Trade2699ShopifyFree
Popular paid themes (one-time list price in USD on 2026-09-16)
ThemeTheme Store IDDeveloperList price
Be Yours1399RoarTheme$350
Broadcast868Presidio$420
Empire838Pixel Union$360
Focal714Maestrooo$320
Impact1190Maestrooo$400
Impulse857Archetype Themes$500
Motion847Archetype Themes$420
Pipeline739Groupthought$360
Prestige855Maestrooo$400
Symmetry568Clean Canvas$420
Warehouse871Maestrooo$320

What we log

For each store looked up we keep one line per day: the date, the store's domain and what the detector found (platform, theme, recognised apps, readiness numbers). That builds an aggregate picture of which themes and apps Shopify stores use, which we plan to publish as statistics. We don't store or log your IP address, and the lookup isn't tied to you in any way. Rate limits (10 lookups a minute, 100 a day) are counted in memory against a one-way hash of your connection's address and forgotten within a day. Details are in the privacy policy.

FAQ

Why does it say "custom theme"?

The store has no Theme Store ID and its schema_name doesn't match any theme on the Theme Store. That's a theme built for the brand, one bought outside the Theme Store, or a Theme Store theme whose name was rewritten. Most large brands in our sample fell in this group.

Can it detect the theme of a Hydrogen or other headless store?

It can tell you the store runs on Shopify, but there's no theme to report: a headless front end replaces the Online Store theme. Headless stores also don't serve Shopify's public product feed, so the catalog checks are skipped.

Why is an app I know the store uses missing?

Either it doesn't load code on the homepage (back-office apps, checkout-only extensions, apps used only on product or cart pages), it loads only after a consent click, or it isn't in our signature list yet. Unrecognised app blocks are still listed by handle under "Other app blocks".

Does the store find out I checked it?

Our requests reach the store like any visit and appear in its logs as ShopifyRankedBot/1.0 with a link back to this page. They don't carry anything about you, and we don't contact the store.

Why were the catalog checks skipped?

Usually because /products.json didn't answer: some stores switch it off, headless stores don't have it, and password-protected stores hide it. The result says which one.

The result shows a different domain from the one I typed. Why?

The store redirected us. Some stores send visitors to a regional storefront by location, and our server is in Europe, so you may see a different market's store than we did. The result names the storefront it actually read.

Is the theme price current?

It's the list price themes.shopify.com showed on 2026-09-16. Developers change prices, so check the theme's page before you buy.