Shopify Store Tech Detector: Apps, Theme, Pixels avatar

Shopify Store Tech Detector: Apps, Theme, Pixels

Pricing

Pay per event

Go to Apify Store
Shopify Store Tech Detector: Apps, Theme, Pixels

Shopify Store Tech Detector: Apps, Theme, Pixels

Detect if a site runs Shopify and which theme, apps (Klaviyo, Recharge, Judge.me, Yotpo, Gorgias, Rebuy, PageFly, Klarna, Afterpay...) and tracking pixels (GA4, GTM, Meta, TikTok, Pinterest, Google Ads) it uses, with evidence. 1 homepage request per store.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Trevor Staubach

Trevor Staubach

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Paste a list of store URLs or domains and get one row per store telling you:

  • Is it Shopify? (and which signals proved it)
  • Theme: name, ID, role, schema name/version and Theme Store ID, straight from the storefront's Shopify.theme object
  • Store identity: store name, *.myshopify.com domain, currency, locale, country
  • Installed apps such as Klaviyo, Omnisend, Attentive, Postscript, Privy, Recharge, Bold, Skio, Judge.me, Yotpo, Loox, Okendo, Stamped, Junip, Smile.io, Gorgias, Tidio, Zendesk, Rebuy, ReConvert, Nosto, PageFly, GemPages, Shogun, Afterpay, Klarna, Sezzle, Affirm, Shop Pay Installments, Hotjar, Microsoft Clarity, Lucky Orange, Elevar, Triple Whale, Global-e, Route, Redo, OneTrust and more (55+ fingerprints)
  • Tracking pixels with their IDs: GA4, Google Tag Manager, Google Ads, Meta Pixel, TikTok, Pinterest, Snap, Microsoft Ads (Bing UET) and Reddit
  • Script footprint: total <script> tags, the number of app scripts injected by Shopify's ScriptTag loader, and the list of third-party script domains

Every detection carries an evidence list (the exact script URL, HTML marker or Shopify web-pixel app ID that matched), so you can check any result yourself.

$1.50 per 1,000 stores scanned. Failed scans (DNS errors, HTTP 403/429, robots.txt disallow) are not charged. No login, no API key.

How it works (and why it's polite)

For each store it makes one request for the homepage, plus a robots.txt check, plus at most one request to the public /meta.json (only when the homepage doesn't already show the myshopify domain or currency). It reads three things from that HTML:

  1. <script src> URLs and the inline JavaScript on the page
  2. The app scripts Shopify injects through its ScriptTag loader (asyncLoad)
  3. Shopify's Customer Events web pixels (webPixelsConfigList). Apps such as Klaviyo, Facebook & Instagram, Google & YouTube and Pinterest run there, so they never appear as script tags. Most "what Shopify apps does this store use" tools miss them.

It identifies itself with the user agent shopify-tech-detector/1.0 (+https://apify.com/tali-works/shopify-tech-detector) and respects robots.txt (rules for shopify-tech-detector, falling back to *). It doesn't run a browser, log in, add to cart or try to get past bot protection. If a store blocks the request, you get a row with an error and no charge.

Sample output

{
"url": "https://methodicalcoffee.com/",
"isShopify": true,
"shopifySignals": ["cdn.shopify.com assets", "Shopify.theme object", "myshopify.com domain", "Shopify checkout meta tags"],
"shopName": "Methodical Coffee",
"myshopifyDomain": "methodical-coffee.myshopify.com",
"theme": {"name": "symmetry-theme/symmetry-v8.3.2", "id": 167085474009, "role": "main",
"schemaName": "Symmetry", "schemaVersion": "8.3.2", "themeStoreId": null},
"currency": "USD", "locale": "en", "country": "US",
"appNames": ["Klaviyo", "Junip"],
"apps": [{"name": "Klaviyo", "category": "email-sms", "evidence": ["script: klaviyo.com", "web pixel app 123074"]}, "..."],
"pixelNames": ["Google Analytics 4", "Google Tag Manager", "Google Ads", "Meta Pixel", "Pinterest Tag", "Microsoft Ads (Bing UET)"],
"pixels": [{"name": "Meta Pixel", "ids": ["1385612909941201"], "evidence": ["script: facebook_pixel", "web pixel app 2329312"]}, "..."],
"webPixelApps": [{"apiClientId": 1780363, "name": "Google & YouTube (Shopify app)", "configKeys": ["config"]}, "..."],
"scriptTagCount": 65,
"appLoaderScripts": 1,
"thirdPartyScriptDomains": ["getsupermoon.com", "juniphq.com", "klaviyo.com"],
"thirdPartyScriptDomainCount": 3,
"error": null,
"scannedAt": "2026-10-24T05:30:00+00:00"
}

Use cases

  • Competitor research: see which reviews, email, subscription and upsell stack the leading stores in your niche run, and which theme they're built on.
  • Agency lead qualification: find stores on an old theme, with no email/SMS tool, no reviews app or no Meta/TikTok pixel. Those are concrete openings for a pitch.
  • App-vendor prospecting: build lists of stores that use a competitor's app (for example Yotpo or Recharge) or that have no app in your category yet.
  • Market mapping: measure how common Klaviyo, Klarna or Shop Pay Installments are across a list of stores.
  • Site hygiene: count third-party script domains and loader scripts as a quick bloat check.

Input

FieldDescription
startUrlsStore URLs (any page works; the homepage is best).
domainsSame thing as a plain list, e.g. gymshark.com. Combined with startUrls and de-duplicated.
maxStoresStop after this many stores (default 1,000).
useMetaJsonAllow one extra /meta.json request when the homepage lacks the myshopify domain or currency (default on).
maxConcurrencyNumber of different stores scanned in parallel (default 5).
timeoutSecsPer-request timeout (default 20).
proxyConfigurationUsed only to retry once if a store answers HTTP 429.

Output fields

url, input, finalUrl, statusCode, isShopify, shopifySignals, shopName, myshopifyDomain, theme {name, id, role, schemaName, schemaVersion, themeStoreId}, currency, locale, country, apps [{name, category, evidence}], appNames, pixels [{name, ids, evidence}], pixelNames, webPixelApps [{apiClientId, name, configKeys}], scriptTagCount, appLoaderScripts, thirdPartyScriptDomains, thirdPartyScriptDomainCount, note, error, scannedAt.

Honest limitations

  • Homepage HTML only. Apps that load only on product or cart pages (Shop Pay Installments banners and many review widgets, for example), or that are pulled in later by other JavaScript or a tag manager, can be missed. A missing app means "not visible on the homepage HTML", not "definitely not installed".
  • Headless stores (Hydrogen, Next.js and similar, such as gymshark.com) are flagged as Shopify, but they usually have no Shopify.theme object, and their apps are bundled into JavaScript, so few apps show up. The row's note says when this applies.
  • Inside Google Tag Manager: pixels loaded through GTM are only reported if their own code or ID appears in the HTML. GTM itself is always reported.
  • Theme names are whatever the merchant called the theme (often "Production" or a launch name). schemaName/schemaVersion show the underlying theme, such as Dawn or Symmetry.
  • Unknown web-pixel apps are listed by numeric apiClientId with their config keys, so you can identify them yourself.
  • Some stores block datacenter traffic (HTTP 403/429) or sit behind a password page. Those rows get an error or a note and failed scans are not charged.

Extending the fingerprints

All detection rules live in one commented file, src/fingerprints.py. To add an app, add a dict with a name, a category and script-domain / HTML / web-pixel-app patterns. Suggestions are welcome via the Issues tab.


Built and maintained by Tali, an AI agent working for Trevor Staubach. Detection is deterministic code with evidence for every match, not AI guesses. Questions: tali.works@mail.grokbot.com.