SFOLN

Catalogue / Company & lead intelligence

Shopify Store Analyzer – Apps, Theme, Prices

sfoln/shopify-store-analyzer · Ecommerce, Lead generation, Automation

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.

About

What it does

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.

Price

Price per delivered record

EventPricePer 1,000Charged for
Store report
store-report
$0.006$6 / 1,000One store's report: platform, name, currency and country, product count, price statistics and sale share, top vendors and product types, newest products, theme, apps and pixels, contacts and social links, hosting hints.

Apify free plan: up to 10 items per run. Paid plans have no per-run cap; set maxTotalChargeUsd to cap spend.

Run

Call it from code, an agent or the Console

curl · synchronous run, rows in the response
curl -X POST "https://api.apify.com/v2/actors/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}'
mcp.json · hosted Apify MCP server
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/shopify-store-analyzer"
    }
  }
}
asynchronous run · for large batches
POST https://api.apify.com/v2/actors/sfoln~shopify-store-analyzer/runs?maxTotalChargeUsd=1
GET  https://api.apify.com/v2/actor-runs/{runId}            # until status is SUCCEEDED
GET  https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json

Authenticate with an Apify API token. MCP clients can instead sign in with OAuth when prompted. Example prompt for an agent: 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?

Input

Input fields

Add Shopify or WooCommerce store URLs or domains. Each store produces one report.

FieldTypeDefaultMeaning
stores *arrayrequiredStores (URLs or domains)
Store homepages or domains (allbirds.com, https://www.allbirds.com), one per line; any page URL of a store analyzes the whole store. The platform is detected per store: Shopify (/meta.json, /products.json) or WooCommerce (Store API). Duplicates are removed. Accounts on the Apify free plan can process up to 10 stores per run.
maxProductsinteger250Max products analyzed per store
Products read per store for the catalog statistics (1–2,500). Shopify lists the most recently published products first; larger catalogs are summarized from these and the report says so. The product count is always the store's full count. No extra charge. Range 1–2500.
maxStoresinteger1000Max stores
Safety cap on the number of stores processed in this run. Range 1–10000.
concurrencyinteger5Concurrency
Stores analyzed in parallel (1–10). The requests to one store run one at a time, at most 2 per second. Range 1–10.
itemTimeoutSecsinteger180Time limit per store (seconds)
Reading one store stops cleanly shortly before this limit (60–3600); the statistics then cover the products read. Range 60–3600.
Example input
{
  "stores": [
    "allbirds.com"
  ],
  "maxProducts": 250
}

Output

One record per input item

Records land in the run's dataset; a synchronous call returns them directly. Each has a status (ok is charged; everything else is free) and a charged flag. The run's OUTPUT record totals items and charges.

FieldTypeMeaning
inputstring | objectInput
The store entry as given.
storestring | nullStore
The store's host after redirects (e.g. www.allbirds.com).
urlstring | nullStore URL
The store's origin after redirects.
platformstring | nullPlatform
shopify | woocommerce | other (other platforms are not charged: status not_found with platformName) e.g. "shopify"
platformNamestring | nullOther platform
Unsupported stores only: the platform the homepage points to (BigCommerce, Magento, Salesforce Commerce Cloud, PrestaShop, OpenCart, Ecwid, Lightspeed eCom, Big Cartel, Wix, Squarespace, Webflow, WordPress), else null.
storeNamestring | nullStore name
Shopify /meta.json name, else the homepage's site name or title.
descriptionstring | nullDescription
Shopify shop description, else the homepage meta description.
countrystring | nullCountry
Shopify: the shop's country (ISO 3166-1 alpha-2) from /meta.json.
provincestring | nullProvince / state
Shopify: from /meta.json.
citystring | nullCity
Shopify: from /meta.json.
currencystring | nullCurrency
ISO 4217: Shopify's from /meta.json (or the page), WooCommerce's from its product prices.
localestring | nullLocale
Storefront locale (Shopify.locale) or the homepage language.
myshopifyDomainstring | nullmyshopify domain
The store's permanent <name>.myshopify.com domain (Shopify).
productCountinteger | nullProducts
The store's own count of published products (Shopify /meta.json, WooCommerce X-WP-Total); null when the store does not say and the catalog was not read to the end.
collectionCountinteger | nullCollections
Published collections (Shopify).
shipsToCountriesarrayShips to
Countries the Shopify store ships to (ISO codes; "*" means the rest of the world).
shopPayInstallmentsboolean | nullShop Pay Installments
Whether the Shopify store offers Shop Pay Installments.
catalogReadbooleanCatalog read
False when the storefront JSON was refused or unavailable: the report then has no catalog statistics (a warning says why).
catalogCompletebooleanWhole catalog read
True when every product was read; false when maxProducts or the time limit cut the reading.
productsAnalyzedintegerProducts analyzed
Products the statistics cover (up to maxProducts; Shopify: the most recently published first).
priceStatsobject | nullPrice statistics
{ min, p25, median, p75, max, mean } over each product's lowest price, in the store currency.
onSaleSharenumber | nullShare on sale
Share of analyzed products with at least one variant below its compare-at price (0–1).
avgDiscountPctinteger | nullAverage discount (%)
Mean of the largest discount of each product on sale.
availableSharenumber | nullShare in stock
Share of analyzed products with at least one variant that can be bought (0–1).
variantsPerProductnumber | nullVariants per product
vendorCountintegerVendors
Distinct vendors (brands) among the analyzed products.
productTypeCountintegerProduct types
Distinct product types (WooCommerce: first categories) among the analyzed products.
topVendorsarrayTop vendors
[{ name, count }]: the 10 most common vendors.
topProductTypesarrayTop product types
[{ name, count }]: the 10 most common product types.
topTagsarrayTop tags
[{ name, count }]: the 15 most common product tags (machine tags such as "key::value" left out).
newestProductsarrayNewest products
[{ title, url, price, createdAt, publishedAt }]: the 5 most recently created products among those analyzed (Shopify).
newProducts30dinteger | nullNew in 30 days
Analyzed products created in the last 30 days (null for WooCommerce, whose Store API has no dates).
newProducts90dinteger | nullNew in 90 days
Analyzed products created in the last 90 days.
lastProductUpdatestring | nullLast product update
ISO 8601 UTC: the latest updated_at among analyzed products (Shopify).
themeNamestring | nullTheme
Shopify: the live theme's name (Shopify.theme). WooCommerce: the WordPress theme folder.
themeobject | nullTheme details
Shopify: { name, schemaName (the theme it is built on, e.g. Dawn), schemaVersion, themeStoreId, id, role }.
appsarrayApps
[{ name, category }]: apps the homepage loads, recognized by their script and asset hosts (Klaviyo, Yotpo, Recharge, Gorgias … about 70 common apps).
pixelsarrayPixels
Advertising and analytics tags on the homepage (Meta Pixel, Google Analytics, Google Tag Manager, TikTok Pixel …).
techHintsarrayTech hints
Platform, CDN, hosting and server hints from the homepage's response headers (Shopify, Cloudflare, Fastly, Nginx, WP Engine …) and its generator tag.
emailsarrayEmails
Email addresses on the homepage, the store's own domain first (up to 10).
phonesarrayPhones
Phone numbers on the homepage (up to 5).
socialsobjectSocial links
{ instagram, facebook, tiktok, twitter, youtube, pinterest, linkedin }: profile URLs linked from the homepage.
contactPagesarrayContact pages
Same-site contact, about and imprint pages linked from the homepage (up to 5).
homepageReadbooleanHomepage read
False when the homepage could not be read: theme, apps, pixels, contacts and hints are then empty (a warning says why).
statusstringStatus
ok | not_found | error | skipped_invalid | skipped_budget | skipped_free_plan | skipped_unmetered e.g. "ok"
chargedbooleanCharged
Whether this record incurred a pay-per-event charge (store-report).
chargedEventstringCharged event
Pay-per-event event charged for this record (present only when charged).
chargedCountintegerEvents charged
Events actually charged when the charge came back short of the requested count (present only then; a warning explains it).
sourcestringSource
Upstream data source (storefront).
fetchedAtstringFetched at
ISO timestamp.
errorobjectError
{ code, message, provider?, status? } when status is not ok. Actor codes: invalid_input, unsupported_platform, store_password_protected, blocked, store_unreadable. Upstream codes: dns_not_found, http_error (see status), timeout, network, blocked_url, too_large, invalid_json, unexpected_type, invalid_response. Codes set by the runtime: budget_exhausted, free_plan_limit, unmetered, aborted, charge_failed, record_too_large, invalid_record, dataset_push_failed.
warningsarrayWarnings
Notes, e.g. statistics that cover only part of a large catalog, a refused catalog or an unreadable homepage.
Example record
Example record
{
  "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)."
  ]
}

FAQ

Questions

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.

Machine-readable

This page for agents