Shopify Store Intelligence — Catalog, Price & Stock Tracker
Pricing
Pay per event
Shopify Store Intelligence — Catalog, Price & Stock Tracker
Track product launches, price changes, and stock signals across hundreds of Shopify stores. KV-checkpointed delta detection plus AI-powered store audits. Replaces Storeleads and Particl at PPE pricing.
Pricing
Pay per event
Rating
5.0
(1)
Developer
Omar Eldeeb
Actor stats
2
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Track product launches, price changes, and stock signals across hundreds of Shopify stores in one actor. KV-checkpointed delta detection plus AI-powered store audits. Replaces Storeleads ($75–950/mo) and Particl ($250–1000/mo) at fraction-of-a-cent PPE pricing.
What does Shopify Store Intelligence do?
Five modes against the public Shopify storefront endpoints (/products.json + /products/<handle>.json + sitemap fallback):
catalog_snapshot— full product dump for one or many storesnew_launches— products published in the last N days OR new since your last runprice_changes— variant-level price + compare-at-price deltas vs your previous run (the Particl-killer)stock_signals— variants going in/out of stock; with deep-probe enabled, trueinventory_quantitydeltas including low-stock alertsstore_audit— one-shot per-store report with aggregate stats and Gemini-powered niche classification (BD/M&A use case)
All output is one unified row shape discriminated by type (product / delta / audit).
Why use Shopify Store Intelligence?
- DTC competitive intel teams — track 50–500 competitor stores weekly, surface price moves and new launches the same day
- Trend hunters / dropshippers — find what competitors test before it explodes
- M&A scouts / agencies — one-shot
store_auditreturns niche, buyer persona, brand positioning, price tier, and full catalog stats per store - Repricing / brand pricing analysts —
price_changesdeltas down to the variant SKU level - Demand forecasters —
stock_signalsflag products selling out fast (predictive of hot SKUs)
How to use Shopify Store Intelligence
- Pick a mode (start with
store_auditfor one store to see what you get) - Paste 1–500 store domains (
allbirds.com,kith.com,mvmt.com— bare domains, http stripped automatically) - Set
maxProductsPerStoreto control PPE budget (small catalogs: leave default; big brands: cap at 500) - For
price_changes/stock_signals: schedule the actor weekly or daily — the second-onwards run emits real deltas - For big brands behind WAF (Gymshark-tier), enable
proxyConfiguration → useApifyProxy: true— sitemap fallback handles the rest - Export results as JSON / CSV / Excel via Apify's standard download
Input
Minimal example (audit one store with AI niche classification):
{"mode": "store_audit","storeDomains": ["allbirds.com"],"enableAiNiche": true}
Track price changes across a competitor set (run weekly):
{"mode": "price_changes","storeDomains": ["allbirds.com", "rothys.com", "vejashoes.com"],"maxProductsPerStore": 500,"concurrency": 8}
Find new launches in the last 14 days:
{"mode": "new_launches","storeDomains": ["mvmt.com", "thursdayboots.com"],"lookbackDays": 14}
Stock signals with true inventory probe (slower, more expensive, higher signal):
{"mode": "stock_signals","storeDomains": ["bombas.com"],"deepInventoryProbe": true,"lowStockThreshold": 10}
Bypass WAF on big brands with residential proxy:
{"mode": "catalog_snapshot","storeDomains": ["gymshark.com"],"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Output
Sample product row (from catalog_snapshot / new_launches):
{"type": "product","store": "allbirds.com","title": "Trino® Cozy Crew - Heathered Onyx","vendor": "Allbirds","productType": "Socks","available": true,"variantCount": 4,"priceMin": 12,"priceMax": 12,"currency": "USD","publishedAt": "2026-04-21T12:39:05-07:00","productUrl": "https://allbirds.com/products/trino-cozy-crew-heathered-onyx","variants": [{"title": "S (W5-7)","sku": "PCC1HONU301","price": 12,"compareAtPrice": 24,"available": true,"inventoryQuantity": null}],"source": "products.json"}
Sample delta row (from price_changes / stock_signals):
{"type": "delta","store": "allbirds.com","deltaType": "price_change","productTitle": "Wool Runner","variantTitle": "Black / Size 10","oldValue": 110,"newValue": 88,"detectedAt": "2026-05-08T12:00:00.000Z"}
Sample audit row (from store_audit with enableAiNiche: true):
{"type": "audit","store": "allbirds.com","isShopify": true,"productCount": 50,"vendorCount": 1,"avgPrice": 32.90,"medianPrice": 25,"currency": "USD","availableShareOfCatalog": 0.16,"primaryNiche": "sustainable footwear and apparel","secondaryNiches": ["eco-friendly accessories", "comfortable everyday wear"],"buyerPersona": "Environmentally conscious consumers who prioritize comfort, sustainability, and minimalist design","brandPositioning": "Allbirds positions itself as a leader in sustainable fashion, offering comfortable products made from natural, renewable materials","priceTier": "premium","aiConfidence": 0.95}
Data fields
| Field | Type | Where it appears | Notes |
|---|---|---|---|
type | string | every row | product / delta / audit discriminator |
store | string | every row | bare domain (no scheme) |
productId | string | product, delta | <domain>::<shopifyId> |
variants[] | array | product | array of { title, sku, price, compareAtPrice, available, inventoryQuantity } |
inventoryQuantity | number|null | variant | only populated when store exposes it (depends on Shopify config) |
deltaType | string | delta | price_change, compare_at_change, stock_in, stock_out, low_stock, restock |
primaryNiche | string | audit | Gemini classification when enableAiNiche: true |
priceTier | enum | audit | budget / mid / premium / luxury |
source | enum | product | products.json / product-handle / sitemap-fallback |
How much does it cost to scrape Shopify with this actor?
| Event | Price | When it fires |
|---|---|---|
| Actor start | $0.01 | Once per run, per GB of memory |
| Product fetched | $0.005 | Each product written in catalog_snapshot mode |
| Price change detected | $0.02 | Variant price or compare_at_price changed since last run |
| New launch detected | $0.01 | Product published in lookback window OR new since last run |
| Stock signal detected | $0.01 | Variant flipped in/out of stock or crossed low-stock threshold |
| Store audited | $0.50 | One-shot per-store report with aggregate stats |
| AI niche classified | $0.05 | Gemini classification appended to a store_audit row |
| Residential proxy fetch | $0.003 | Fired only when proxyConfiguration.useApifyProxy: true |
Free trial: the first 200 custom chargeable events per run are free.
Typical-run costs:
- Audit 5 stores with AI: 5 × ($0.50 + $0.05) = $2.75
- Catalog snapshot 10 stores × 200 products: 2,000 × $0.005 = $10
- Weekly price-change monitor across 100 stores (~50 deltas/week observed): 50 × $0.02 = $1/week
- Stock signals on 50 high-traffic stores (~30 signals/run): 30 × $0.01 = $0.30/run
Compare: Storeleads $75–950/mo, Particl $250–1,000/mo, Charm.io enterprise.
Tips & advanced options
- First run of a delta mode = baseline only. No deltas are emitted on run #1 — checkpoint is saved instead. Schedule the actor for repeated runs to see real deltas.
maxProductsPerStoreis your budget knob. Large catalogs (5,000+ products) blow through PPE fast. Cap aggressively for monitoring use cases.- WAF-blocked stores (Gymshark-tier) auto-fall-back to sitemap parsing — slower but works without a proxy. Enable
useApifyProxy: truefor full/products.jsonaccess. inventory_quantityexposure varies by store. Allbirds returnsnulleven on/products/<handle>.json; Bombas exposes it. Theavailableboolean is always populated.- Schedule with Apify Schedules. Run
price_changesweekly,new_launchesdaily for a low-cost monitoring stack. - One actor for many use cases. The dataset is discriminated by the
typefield — filter downstream consumers (BI tools, n8n, Make.com webhooks) ontype === 'delta'ortype === 'audit'.
Legal disclaimer
This actor reads only publicly accessible Shopify storefront endpoints (/products.json, /products/<handle>.json, /sitemap.xml) — the same data any browser can request without authentication. No Shopify accounts, OAuth, or admin access is required or used. We do not bypass paywalls, login walls, or rate limits.
Each store's robots.txt should be respected by users; if a store explicitly disallows crawling, do not use this actor against it. Public catalog data is generally not personal information under GDPR/CCPA, but consult counsel for your jurisdiction before storing or republishing.
Shopify and the Shopify storefront APIs are trademarks of Shopify Inc. This actor is not affiliated with, endorsed by, or sponsored by Shopify Inc.
FAQ
Will this work on every Shopify store?
Most. About 70–80% of Shopify stores leave /products.json open by Shopify default. Big brands (Gymshark, fashion-world enterprise) WAF-block the JSON path — for those, the actor automatically falls back to sitemap-based discovery. Enable Apify residential proxy to recover full coverage on these.
Why does inventoryQuantity come back as null sometimes?
Shopify lets store owners hide inventory counts via theme settings. When hidden, you only get available: true|false. The deepInventoryProbe option fetches /products/<handle>.json (which exposes counts on stores that allow it) but cannot bypass intentional hiding.
How is this different from existing Shopify actors on Apify?
Existing actors return raw catalog dumps. This one adds: KV-checkpointed delta detection (price + stock changes between runs), per-store AI niche classification, sitemap fallback for WAF-blocked stores, and unified output shape discriminated by type. No incumbent ships these together.
Can I find Shopify stores I don't already know about? Not in v1. Pass your own domain list. There is no public Shopify store directory — paid aggregators (BuiltWith, Wappalyzer) are required for at-scale discovery. We may add a niche-seeded discovery mode in v2.
Does this respect Shopify's ToS? We use only public storefront endpoints. Shopify's general ToS prohibits abusive scraping; this actor uses one User-Agent, defensive concurrency caps, and respects 4xx/429 responses. We recommend you respect each store's robots.txt and rate-limit your runs to the data freshness you actually need.
For issues / feature requests: report at Apify Console → Actor → Issues.