Shopify App & Theme Detector — Store Audit & Gap Finder
Pricing
$0.01 / store audited
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
Maintained by CommunityActor stats
0
Bookmarked
70
Total users
7
Monthly active users
11 days ago
Last modified
Categories
Features
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:
| Field | Description |
|---|---|
domain | Store domain audited |
is_shopify | Whether the domain is a confirmed Shopify store |
store_name / store_description | The store's name and one-line description, as the store publishes them |
city / province / country | The store's business location |
contact_email | Best email on the store's own domain (with includeContacts) |
emails / phones / socials | Every email, phone and social profile found on the store's contact and policy pages |
detected_apps | Installed apps detected from the storefront ({name, category}) |
app_categories | Categories of detected apps |
missing_categories | App categories with NO detected app — the prospecting gaps |
matches_criteria | True 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_base | The theme's name and the theme it is built on (e.g. Dawn) |
theme_store_id | Set when the theme comes from the Shopify Theme Store |
product_count / collection_count | Published product and collection counts |
price_min / price_max | Variant price range |
currency | Store currency (ISO code) |
ships_to_countries_count | How many countries the store ships to |
shop_pay_installments | Whether the store offers Shop Pay Installments |
discount_rate | Fraction of products with a compare-at markdown |
new_products_30d | Products created in the last 30 days (catalog velocity) |
shopify_plus | Best-effort Shopify Plus signal |
apps_added / apps_removed | Apps installed/removed since the previous run (monitoring) |
product_count_delta | Product-count change since the previous run |
first_seen | True on the first run for this domain |
source_url | The 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
| Field | Required | Type | Default | Description |
|---|---|---|---|---|
domains | yes | array | ["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). |
targetGaps | no | array | — | 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. |
includeContacts | no | boolean | true | When 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. |
includeProducts | no | boolean | false | When off (default), return store signals only (fast, cheap — the lead-gen need). Turn on to also include the (slimmed) product catalog. |
compareToPrevious | no | boolean | true | When 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. |
maxProductsPerStore | no | integer | 1000 | Cap on products sampled per store (bounds cost). Product count caps here for very large stores. |
proxyConfiguration | no | object | {"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:
- How-to: How to run Shopify App & Theme Detector — Store Audit & Gap Finder
- Use case: Audit a Competitor's Shopify Tech Stack
- Use case: Detect a Shopify Store's Apps & Theme
- Use case: Find Shopify Stores Missing a Reviews App
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.