Shopify Store Analyzer – Apps, Theme, Prices
Pricing
from $6.00 / 1,000 store reports
Shopify Store Analyzer – Apps, Theme, Prices
Analyze any Shopify or WooCommerce store: one report with platform, shop name, currency and country, product count, price stats and sale share, top vendors and product types, newest products, theme, installed apps and pixels, emails and social links. $6 per 1,000 stores.
Pricing
from $6.00 / 1,000 store reports
Rating
0.0
(0)
Developer
SFOLN LLC
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Analyze any Shopify or WooCommerce store from its domain: one report per store with the platform, shop name, currency and country, product count, price statistics and share on sale, top vendors and product types, newest products, the live theme, installed apps and tracking pixels, emails and social links and hosting hints. The store's public storefront JSON (Shopify /meta.json and /products.json, the WooCommerce Store API) and its homepage are read directly, so there is no login, no API key and no browser. Built for Shopify app and agency prospecting, e-commerce lead generation, competitor research, market sizing and AI agents.
- What you get:
platform,storeName,country,currency,productCount,priceStats,onSaleShare,topVendors,topProductTypes,newestProducts,themeName,apps,pixels,emails,socials,techHints. - Price: $0.006 per store report (
store-report), $6 per 1,000 stores. Stores on other platforms, password-protected, blocked or unreachable stores cost nothing. - About 70 common apps recognized (Klaviyo, Attentive, Yotpo, Judge.me, Recharge, Gorgias, Rebuy, Global-e …) plus Meta, Google, TikTok and other pixels.
- Works everywhere: API, MCP for AI agents, Make, Zapier, n8n, schedules and webhooks.
Input
| Field | Type | Default | Description |
|---|---|---|---|
stores | string[] | – | Store domains or URLs (allbirds.com, https://www.allbirds.com); any page URL of a store analyzes the whole store. Entries for the same store are merged. |
maxProducts | integer | 250 | Products read per store for the catalog statistics (1–2,500). Shopify lists the most recently published products first. The product count is always the store's full count. |
maxStores | integer | 1000 | Safety cap for this run; further entries are ignored and counted as inputItemsDropped in the OUTPUT record. |
concurrency | integer | 5 | Stores analyzed in parallel (1–10). The requests to one store run one at a time, at most 2 per second. |
itemTimeoutSecs | integer | 180 | Time limit per store; reading the catalog stops cleanly before it and the statistics cover the products read. |
{"stores": ["allbirds.com", "kith.com", "https://www.gymshark.com"],"maxProducts": 250}
Output
One record per store:
{"input": "allbirds.com","store": "www.allbirds.com","url": "https://www.allbirds.com","platform": "shopify","storeName": "Allbirds","description": "The world’s most comfortable shoes, made with natural materials like merino wool, eucalyptus tree fiber, and sugar cane.","country": "US","province": "California","city": "Beverly Hills","currency": "USD","locale": "en-US","myshopifyDomain": "weareallbirds.myshopify.com","productCount": 692,"collectionCount": 1346,"shipsToCountries": ["US"],"shopPayInstallments": true,"catalogRead": true,"catalogComplete": false,"productsAnalyzed": 250,"priceStats": { "min": 4, "p25": 60, "median": 75, "p75": 110, "max": 165, "mean": 83.86 },"onSaleShare": 0.552,"avgDiscountPct": 48,"availableShare": 0.464,"variantsPerProduct": 10.88,"vendorCount": 1,"productTypeCount": 4,"topVendors": [{ "name": "Allbirds", "count": 250 }],"topProductTypes": [{ "name": "Shoes", "count": 234 }, { "name": "Apparel", "count": 6 }, { "name": "Underwear", "count": 2 }, { "name": "Socks", "count": 1 }],"topTags": [{ "name": "shoprunner", "count": 223 }, { "name": "FINAL SALE", "count": 114 }],"newestProducts": [{ "title": "Women's Wool Runner - Natural Grey (Light Grey Sole)", "url": "https://www.allbirds.com/products/womens-wool-runners-natural-grey", "price": 49, "createdAt": "2026-05-26T18:10:21.000Z", "publishedAt": "2026-09-25T23:24:03.000Z" }],"newProducts30d": 0,"newProducts90d": 0,"lastProductUpdate": "2026-10-14T22:58:08.000Z","themeName": "[DNAM Theme July 2026]","theme": { "name": "[DNAM Theme July 2026]", "schemaName": "allbirds-theme", "schemaVersion": "1.231.12", "themeStoreId": null, "id": 130450260048, "role": "main" },"apps": [{ "name": "Attentive", "category": "email & SMS" },{ "name": "Redo", "category": "returns & shipping" },{ "name": "Shop Pay", "category": "payments" },{ "name": "Elevar", "category": "analytics" }],"pixels": ["Meta Pixel", "Google Tag Manager", "Microsoft Clarity"],"techHints": ["Shopify", "Cloudflare", "HSTS"],"emails": ["help@allbirds.com"],"phones": [],"socials": { "instagram": "https://www.instagram.com/allbirds", "facebook": "https://www.facebook.com/weareallbirds", "tiktok": "https://www.tiktok.com/@weareallbirds" },"contactPages": [],"homepageRead": true,"status": "ok","charged": true,"chargedEvent": "store-report","source": "storefront","fetchedAt": "2026-10-14T12:00:02.000Z","warnings": ["The catalog statistics cover the first 250 products of 692 (maxProducts)."]}
| Field | Description |
|---|---|
platform, store, url | shopify or woocommerce (other for unsupported stores, see below), and the store's host and origin after redirects. |
storeName, description, country, province, city, currency, locale, myshopifyDomain | Shopify's /meta.json (name, address, currency, permanent .myshopify.com domain), else the homepage (site name, meta description, language). WooCommerce currencies come from the product prices. |
productCount, collectionCount, shipsToCountries, shopPayInstallments | The store's own counts of published products and collections (WooCommerce: X-WP-Total), shipping countries and Shop Pay Installments (Shopify). |
catalogRead, catalogComplete, productsAnalyzed | Whether the catalog could be read, whether every product was read, and how many products the statistics cover (up to maxProducts). |
priceStats, onSaleShare, avgDiscountPct, availableShare, variantsPerProduct | Quartiles, mean and range of each product's lowest price; the share of products on sale (a variant below its compare-at price) and their mean discount; the share with at least one variant in stock. |
vendorCount, productTypeCount, topVendors, topProductTypes, topTags | Distinct and most common vendors (brands), product types (WooCommerce: first categories) and tags (machine tags such as key::value left out). |
newestProducts, newProducts30d, newProducts90d, lastProductUpdate | The 5 most recently created products, products created in the last 30 / 90 days and the latest product update (Shopify; the WooCommerce Store API has no dates). |
themeName, theme | The live Shopify theme (Shopify.theme: name, the theme it is built on as schemaName, version, Theme Store ID); WooCommerce: the WordPress theme folder. |
apps, pixels | Apps the homepage loads, by category (email & SMS, reviews & UGC, subscriptions, loyalty, support, returns, search, upsell, page builders, payments …), and advertising / analytics pixels. |
techHints | CDN, hosting and server hints from the homepage's response headers (Cloudflare, Fastly, WP Engine, Nginx …) and its generator tag. |
emails, phones, socials, contactPages | Contacts on the homepage: emails (the store's own domain first), phone numbers, social profiles and contact / about pages. |
status: ok for a Shopify or WooCommerce store whose catalog or homepage was read (charged), not_found for a store on another platform (unsupported_platform, with platform: "other" and platformName such as BigCommerce, Magento, Wix or Squarespace when the homepage shows it), a password-protected store or a domain that does not exist, error when the store blocks automated requests (blocked) or failed, skipped_invalid for an unusable entry and skipped_budget / skipped_free_plan when a cap was hit. Only ok is charged.
Pricing
Store discounts: the FREE and BRONZE tiers use the list prices below. SILVER receives 5% off; GOLD, PLATINUM and DIAMOND receive 10% off billable result events. The platform start fee is unchanged. Check the Actor's Store pricing table for the prices currently in effect.
Pay-per-event, no subscription:
| Event | Price | When charged |
|---|---|---|
store-report | $0.006 per store ($6 / 1,000) | once per Shopify or WooCommerce store whose catalog or homepage was read |
Example: a list of 1,000 e-commerce domains of which 620 run on Shopify or WooCommerce costs 620 × $0.006 = $3.72; the other 380 are free. Reading up to 2,500 products per store costs nothing extra. Apart from Apify's automatic Actor-start charge ($0.00005 per GB of run memory) there is no start fee.
Set Maximum cost per run to cap spend: the Actor checks the budget before each store and stops cleanly; remaining stores are returned with status: "skipped_budget" and are not charged.
Accounts on the Apify free plan can process up to 10 stores per run.
Use with AI agents (MCP)
Use this Actor from Claude, ChatGPT, Cursor, VS Code or any other MCP client through the Apify MCP server. Add this server URL to your client and sign in with your Apify account when asked:
https://mcp.apify.com?tools=sfoln/shopify-store-analyzer
To run the MCP server locally instead, start npx -y @apify/actors-mcp-server --tools sfoln/shopify-store-analyzer with your APIFY_TOKEN in the environment.
Example prompt:
Analyze the Shopify stores allbirds.com and kith.com: which theme and apps does each use, how many products do they sell, what is their median price and what share of products is on sale?
Runs started by an agent are billed like any other run (see Pricing). Agents can cap what a run may spend with maxTotalChargeUsd.
API usage
Run the Actor and get its dataset items in one call (the call waits up to 5 minutes for the run to finish):
curl -X POST "https://api.apify.com/v2/acts/sfoln~shopify-store-analyzer/run-sync-get-dataset-items" \-H "Authorization: Bearer <APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"stores": ["allbirds.com"], "maxProducts": 250}'
For large inputs, start the run asynchronously and download the dataset when it has finished:
# 1. Start a run: the response holds the run ID (data.id) and its dataset ID (data.defaultDatasetId)curl -X POST "https://api.apify.com/v2/acts/sfoln~shopify-store-analyzer/runs" \-H "Authorization: Bearer <APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"stores": ["allbirds.com"], "maxProducts": 250}'# 2. Repeat until data.status is SUCCEEDED (each call waits up to 60 s)curl "https://api.apify.com/v2/actor-runs/<runId>?waitForFinish=60" -H "Authorization: Bearer <APIFY_TOKEN>"# 3. Download the results (format=json, csv or xlsx)curl "https://api.apify.com/v2/datasets/<defaultDatasetId>/items?format=json" -H "Authorization: Bearer <APIFY_TOKEN>"
Python (apify-client):
from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("sfoln/shopify-store-analyzer").call(run_input={"stores": ["allbirds.com"], "maxProducts": 250})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
Instead of polling, you can attach a webhook to the run (see Integrations). The API tab of this page shows the same calls for JavaScript and the Apify CLI.
Integrations
- Make, Zapier and n8n: run
sfoln/shopify-store-analyzerwith the Apify app (in n8n, the Apify node) and pass the dataset items to the next step of your workflow. - Google Sheets: add the items to a sheet with the Google Sheets step of Make, Zapier or n8n, or download them as CSV or Excel from the run's Storage tab or the API (
format=csvorformat=xlsx). - Webhooks: get a POST request when a run succeeds or fails: add a webhook in the Actor's Integrations tab, or pass
webhookswhen you start a run through the API. - Schedules: run it hourly, daily or weekly with the same input from Apify Schedules; every run keeps its results in its own dataset.
- More: Slack, Google Drive, GitHub, LangChain, LlamaIndex and other Apify integrations.
Related Actors
- Shopify Products Scraper + WooCommerce
- Tech Stack Detector – Website Technologies
- Website Contact Details Scraper
- Company Enrichment – Firmographics by Domain
See all our Actors on Apify Store.
FAQ
How much does it cost, and am I charged for failed items?
You pay per event at the prices under Pricing above, plus a run start fee of $0.00005 per GB of memory, with no subscription; platform usage is included. Errors and skipped items (skipped_… statuses) are never charged; a lookup that finds nothing is charged only where Pricing says so, and every record's charged field shows whether it was billed. Set Maximum cost per run to cap what a single run can spend.
How fresh is the data?
Each run queries its source while it runs, so you get what the source returns at that moment. Source-specific details, such as how often a provider refreshes its own database, are under Limits & notes.
What are the limits?
Per-run caps (for example the maximum number of items) are listed under Input, source limits under Limits & notes, and the free-plan limit under Pricing. For big batches, start the run asynchronously (see API usage) and read the dataset when it has finished.
Can I schedule runs or get results by webhook?
Yes. Create a schedule in Apify Console to run it hourly, daily or weekly with the same input, and add a webhook to get a POST request when a run finishes (see Integrations).
What does this Actor record about my runs?
This Actor records operational metrics about each run (item counts, duration, charges, error codes and a pseudonymous hash of your Apify user ID) to monitor reliability and costs. It never stores your input or results.
How are apps detected?
From the hosts the homepage loads scripts and assets from (and a few distinctive script names): about 70 common apps such as Klaviyo, Attentive, Yotpo, Judge.me, Recharge, Gorgias, Rebuy and Global-e, plus advertising and analytics pixels. Apps that load nothing on the homepage (back-office apps, apps only on product or checkout pages) cannot be seen.
Does it read the whole catalog?
The product count is always the store's full count. Price statistics, vendors, product types and newest products cover up to maxProducts products (250 by default, up to 2,500); Shopify lists the most recently published products first. catalogComplete tells whether every product was read.
What happens with stores that are not on Shopify or WooCommerce?
They return status not_found with platform other and, when the homepage shows it, the platform they use (BigCommerce, Magento, Wix, Squarespace …). They are not charged, nor are password-protected, blocked or unreachable stores.
How do I get help?
Open an issue in the Actor's Issues tab and include the link to the run, so we can reproduce the problem. Feature requests are welcome there too.
Limits & notes
- Up to 2,500 products analyzed per store and 10,000 stores per run. The statistics of larger catalogs cover the most recently published products (Shopify) or the first Store API pages (WooCommerce);
productCountis always the full count. - Apps are recognized on the homepage only: apps that load nothing there (back-office tools, checkout or product-page widgets) are not seen. The app table covers about 70 common apps.
- A store whose storefront JSON is refused but whose homepage is readable still gets a report without catalog statistics (
catalogRead: false, charged). Stores that refuse every request (Cloudflare challenges, HTTP 403/429) end aserrorand are not charged. - WooCommerce needs the Store API (WooCommerce 6.0+, enabled by default) for catalog statistics; it publishes no product dates and no shop address.
- Country, city and shipping countries come from Shopify's
/meta.json; multi-currency stores report their base currency. - Data is live: each run reads the store at that moment. For monitoring (new products, theme or app changes), schedule the Actor and compare runs.