Shopify App & Theme Detector — Store Audit & Gap Finder avatar

Shopify App & Theme Detector — Store Audit & Gap Finder

Pricing

$0.01 / store audited

Go to Apify Store
Shopify App & Theme Detector — Store Audit & Gap Finder

Shopify App & Theme Detector — Store Audit & Gap Finder

Detect the apps and theme any Shopify store runs, find the app categories it is missing, and get the store's name, location and contact email — for a single store or a whole prospect list.

Pricing

$0.01 / store audited

Rating

0.0

(0)

Developer

ScrapeBench

ScrapeBench

Maintained by Community

Actor stats

0

Bookmarked

70

Total users

7

Monthly active users

11 days ago

Last modified

Features

Limited permissions

Share

Pain points

  • You can't tell what apps, theme, or tech a Shopify store runs just by looking at it.
  • Qualifying a list of Shopify prospects by hand — which ones lack your app's category, and who to email there — is slow.
  • Checking back later to see if a store added or dropped an app means re-auditing manually.

What we solve

  • Detects installed apps across 14 categories (reviews, email, SMS, popups, search, upsell, loyalty, subscriptions, chat, buy-now-pay-later, returns, tracking pixels, translation, accessibility) plus the theme and the theme it is built on.
  • Flags the tech-stack gaps (missing app categories) and marks the stores that match your lead criteria.
  • Adds the store's name, city, state and country, and its contact email, phone and social links read from its own contact and policy pages.
  • Run on a schedule to see which apps each store added or removed since the last run.

Summary

Turn a list of Shopify store domains into qualified leads. For each store you get the detected apps in 14 categories, the theme and the theme it is built on, the exact product count and price range, plus the GAPS (which app categories are missing) and a lead-match flag against your criteria. Each row also says who the store is and how to reach it: name, city, state and country, and the contact email, phone and social links the store publishes on its own contact and policy pages. Run it on a schedule and it reports what changed since last time (apps added/removed, product-count delta). Built for app vendors and agencies prospecting Shopify merchants.

Who it's for

  • Shopify app vendors prospecting merchants who lack their category
  • Agencies doing Shopify lead-gen and tech-stack audits
  • Competitive-intelligence and e-commerce analysts
  • Sales teams enriching a list of Shopify domains

How to use

Set the input, run the actor, and collect results from the run's dataset (export to JSON/CSV/Excel, or pull via the Apify API). Example input:

{
"domains": [
"allbirds.com",
"colourpop.com"
],
"targetGaps": [
"loyalty"
],
"includeContacts": true,
"compareToPrevious": true
}

See Inputs below for every available field.

What you get

One row per record:

FieldDescription
domainStore domain audited
is_shopifyWhether the domain is a confirmed Shopify store
store_name / store_descriptionThe store's name and one-line description, as the store publishes them
city / province / countryThe store's business location
contact_emailBest email on the store's own domain (with includeContacts)
emails / phones / socialsEvery email, phone and social profile found on the store's contact and policy pages
detected_appsInstalled apps detected from the storefront ({name, category})
app_categoriesCategories of detected apps
missing_categoriesApp categories with NO detected app — the prospecting gaps
matches_criteriaTrue when all your target-gap categories are missing (a lead)
has_reviews_app / has_bnpl_app / …Per-category presence flags, one per category
theme_name / theme_baseThe theme's name and the theme it is built on (e.g. Dawn)
theme_store_idSet when the theme comes from the Shopify Theme Store
product_count / collection_countPublished product and collection counts
price_min / price_maxVariant price range
currencyStore currency (ISO code)
ships_to_countries_countHow many countries the store ships to
shop_pay_installmentsWhether the store offers Shop Pay Installments
discount_rateFraction of products with a compare-at markdown
new_products_30dProducts created in the last 30 days (catalog velocity)
shopify_plusBest-effort Shopify Plus signal
apps_added / apps_removedApps installed/removed since the previous run (monitoring)
product_count_deltaProduct-count change since the previous run
first_seenTrue on the first run for this domain
source_urlThe store URL

Sample:

{
"domain": "allbirds.com",
"is_shopify": true,
"store_name": "Allbirds",
"city": "Beverly Hills",
"province": "California",
"country": "US",
"contact_email": "help@allbirds.com",
"emails": [
"help@allbirds.com"
],
"phones": [
"+1 (424) 363-8064"
],
"socials": [
{
"platform": "instagram",
"url": "https://www.instagram.com/allbirds"
}
],
"theme_name": "[DNAM Theme July 2026]",
"theme_base": "allbirds-theme",
"detected_apps": [
{
"name": "Yotpo",
"category": "reviews"
},
{
"name": "Redo",
"category": "returns"
},
{
"name": "Triple Whale",
"category": "tracking"
}
],
"app_categories": [
"returns",
"reviews",
"tracking"
],
"has_reviews_app": true,
"has_loyalty_app": false,
"missing_categories": [
"email",
"sms",
"popups",
"search",
"upsell",
"loyalty",
"subscription",
"chat",
"bnpl",
"translation",
"accessibility"
],
"matches_criteria": true,
"product_count": 356,
"collection_count": 1346,
"price_max": 165.0,
"currency": "USD",
"ships_to_countries_count": 1,
"shop_pay_installments": true,
"first_seen": true,
"apps_added": [],
"apps_removed": [],
"source_url": "https://allbirds.com"
}

Inputs

FieldRequiredTypeDefaultDescription
domainsyesarray["allbirds.com"]Shopify store domains or URLs to audit, e.g. 'allbirds.com'. Paste a list to bulk-audit a prospect list. We audit the domains you provide (we don't discover stores).
targetGapsnoarray—App categories that should be MISSING for a store to count as a lead — sets 'matches_criteria'. E.g. a reviews-app vendor sets ['reviews']. Categories: reviews, email, sms, popups, search, upsell, loyalty, subscription, chat, bnpl, returns, tracking, translation, accessibility.
includeContactsnobooleantrueWhen on (default), also return the store's contact email, phone and social links, read from its own contact and policy pages. This makes each store take a few seconds longer, so a long list runs noticeably slower. Turn it off for a fast tech-stack-only audit. Same price either way.
includeProductsnobooleanfalseWhen off (default), return store signals only (fast, cheap — the lead-gen need). Turn on to also include the (slimmed) product catalog.
compareToPreviousnobooleantrueWhen on (default), diff each store against the previous run and report what changed — apps added/removed and product-count delta. Run on a schedule to track stores over time.
maxProductsPerStorenointeger1000Cap on products sampled per store (bounds cost). Product count caps here for very large stores.
proxyConfigurationnoobject{"useApifyProxy": false}Optional, and off by default. Measured 2026-08-19 across 12 stores from inside an actor run: the platform's own IPs reached 27/27 store checks and Apify Proxy's datacenter pool matched them, while RESIDENTIAL was the only mode that lost a store. If a storefront refuses, the actor already retries it at the store's

Pricing (Pay Per Event)

You pay per result (dataset-item) — no charge for empty runs. Example: 1000 Shopify stores audited at $0.01/result ≈ $10.00.

You're only charged for confirmed Shopify stores — non-Shopify or unreachable domains are free, and contact details cost nothing extra. Apify platform usage (compute) is billed separately per your plan.

Use cases

  • App-vendor prospecting — find Shopify stores missing your app's category (e.g. no loyalty app) and email them from the same row.
  • Agency lead-gen — bulk-audit a prospect list, filter by gaps, country and store size, and export to your CRM.
  • Competitor monitoring — run weekly to catch when stores install or remove apps, or ramp their catalog.
  • Domain enrichment — add apps, theme, location and contacts to stores you already have.

Why this actor

  • Reads the public storefront — no app install and no merchant permission needed.
  • Detects apps + theme AND flags the gaps (missing categories), with the store's contact email on the same row.
  • Bulk-audit a whole domain list in one run; pay per store (non-Shopify domains are free).

Limitations & updates

Storefront (public) data only — never returns real inventory counts, sales, revenue, orders, traffic, or customers (those are Admin-API-only). It audits the domains you provide; it does not discover stores across Shopify. Contact details are whatever the store publishes on its own pages; some stores publish only a help-center form, and their contact fields stay empty. Headless storefronts hide the store-profile fields (name, location, counts) and most of their app markup, so on a row with no store_name a 'missing' category may be a blind spot rather than a real gap. App detection is best-effort from storefront markers. Some stores refuse their custom domain — usually a CDN or WAF in front of it, not Shopify. Those are retried automatically at the store's

FAQ

How do you detect a store's apps?

From public storefront markers (app scripts, app blocks, theme settings). No app install or merchant access is needed.

Which app categories do you cover?

Reviews, email, SMS, popups, search, upsell, loyalty, subscriptions, chat, buy-now-pay-later, returns, tracking pixels, translation and accessibility — about 100 apps in all.

Where do the contact details come from?

From the store's own contact-information, refund and privacy policy pages, which Shopify publishes for every store, and from its contact page when it has none. Only what the store publishes itself. Turn includeContacts off for a faster audit.

What can't it see?

Storefront-only data — never real inventory counts, sales, revenue, orders, or traffic (those are Admin-API-only).

How am I charged?

Pay-per-store audited. Non-Shopify or unreachable domains are free, and contact details cost nothing extra.

Can it monitor changes over time?

Yes — run on a schedule and it reports apps added/removed and the product-count delta since the last run.

How accurate is app detection?

Best-effort from storefront markers; some apps load server-side and can be missed. The signatures are checked against real storefronts and kept current by our maintenance loop.

Some stores won't load?

A few sit behind a CDN or WAF that refuses the custom domain — CloudFront and Vercel in our tests, not always Cloudflare. The actor automatically retries those at the store's

Which actor to choose

Part of the same Shopify suite — pick the one that fits your goal:

  • Shopify Price & Stock Change Tracker — You want to monitor a Shopify store over time — price moves, back-in/out-of-stock flips, products added or removed.
  • Shopify App & Theme Detector — Store Audit & Gap Finder (this actor) — You want to audit or qualify a Shopify store — installed apps, theme, tech-stack gaps and contact details.

Guides & use cases

Written up on scrapebench.dev — the bench that runs and verifies this actor against the live source every night:

More actors, coverage and nightly verification results: scrapebench.dev

Works with AI assistants (MCP)

Callable as an MCP tool, so Claude, Cursor, VS Code Copilot and other MCP clients can run it directly. Grab the config from the MCP tab on this page — Apify hosts the server and keeps that snippet current, and OAuth signs you in on first connect, so no API token goes in your config file.

Then just ask:

"Audit allbirds.com — is it on Shopify, which apps and theme does it run, what is it missing, and what's its contact email?"

One domain is the quickest check; pass a list of domains to qualify a whole prospect list in a single call. Runs started this way bill exactly like any other run.

Data & lawful use

This actor collects publicly available information that the agencies or websites it reads publishes for public lookup — licence records, business listings and the contact details professionals list there. Some of it identifies individuals (sole proprietors, licence holders, agents), so treat any names, phone numbers and emails in your results as personal data.

When you run this actor, you decide what is collected and what it is used for, so you are the controller of that data and we act only as your processor (Apify Standard Actor Contract). You need a lawful basis for your use, must honour opt-out and deletion requests, and must follow the marketing rules that apply to you (CAN-SPAM, TCPA, GDPR, CCPA and similar). Don't use the output for unsolicited bulk messaging, for screening covered by the FCRA, or for anything the source's own terms forbid.

Your results are stored in your own Apify account. We don't keep a copy of your results and don't sell or share them.

Disclaimer

This is an independent tool. It is not affiliated with, endorsed by or sponsored by the agencies or websites it reads. Names and marks are used only to describe the data source. Records are provided as published by the source and may be out of date or incomplete. For anything consequential (hiring, a permit, a legal decision), confirm the record with the issuing agency. You are responsible for making sure your use complies with applicable law and the source's terms.

Need help?

Open an issue on this actor's Issues tab and we'll respond there. Bug reports, missing fields and feature requests are all welcome. Guides and examples: scrapebench.dev.

If you are a person named in this data and want your record removed from our copy, email apify-help@scrapebench.dev; the source agency remains the official record.

Your run may be used to improve our services. If something looks off, or you want this actor to fit your use better, please share your run data with us: Apify Console → Settings → Security → Share run data with developers. It lets us see exactly what went wrong and keep improving the actor.