Detect which apps any Shopify store has installed (Klaviyo, Recharge, Yotpo, Privy + 30 more). Plus full product catalog & reviews. No login. 5x cheaper.
All notable changes to Shopify Apps Spy + Product Scraper are documented here.
This project adheres to Semantic Versioning .
The Apify build numbers track each deployment to the Apify Store; the version
numbers below reflect functional changes visible to users.
[1.1.0] — 2026-05-26
Fixed (critical — actor was returning only the store domain instead of products)
Insufficient permissions for the dataset hung the run when the actor was called via the Apify API or by any user other than the actor owner. Apify runs every public actor under a LIMITED_PERMISSIONS token that can write to the run's default dataset but cannot open globally-named datasets like apps or reviews. The previous code called Actor.openDataset('apps') which hung indefinitely under that token, freezing the run after the first store and leaving the dataset effectively empty (just an error/domain record). The actor now writes every row to the default dataset only, tagged with a record_type field so the output stays filterable.
Anti-bot block detection (Cloudflare Bot Fight Mode, Akamai, PerimeterX, Datadome) — datacenter IPs sometimes get a 403 from anti-bot, which the previous code misreported as not_a_shopify_store. The actor now distinguishes "blocked by anti-bot" from "not a Shopify store" and auto-retries with a residential proxy on the first block. If the block persists, the diagnostic record now includes an actionable next_steps array (whitelist Apify IPs in Cloudflare, disable Bot Fight Mode for /products.json, etc.).
Added
record_type field on every dataset record (product / apps / reviews). Filter the default dataset by this field instead of opening separate named datasets.
proxy_tier_used field in diagnostic records (datacenter / residential_fallback) so users can see exactly which network path succeeded.
Anti-bot signal codes in the signals array (anti_bot_cloudflare, anti_bot_akamai, etc.) for downstream filtering.
4-second timeout on every Actor.charge() call so a hung billing endpoint can never freeze the run.
Changed
Output structure. All records now flow through the default dataset. Existing scripts that read from the apps and reviews named datasets need to switch to dataset.filter(r => r.record_type === 'apps') etc. on the default dataset.
include_variants: true now emits one row per variant (matching the README contract) instead of a nested variants[] array on a single product row. Each variant row carries the full product fields plus per-variant variant_id, variant_title, sku, option1/2/3, variant-level price, compare_at_price, available, and main_image (variant featured image when available). Verified on aplusnutri.com: the product "Équilibre et bien-être au quotidien" now correctly produces 5 rows (Limonade framboise / Pastèque fraîche / Cerise gourmande / Orange douce / Piña colada).
Revenue placeholder row (emitted at extract_level: 'pro') moved from the named revenue dataset to the default dataset with record_type: 'revenue'. Same LIMITED_PERMISSIONS rationale.
Added (apps detection coverage — major expansion)
30+ new detectors across 4 new categories:
Analytics: Microsoft Clarity, Segment, Mixpanel
Pricing / AB testing (new category): Intelligems, Visually.io, Dexter
SMS marketing (new category): Attentive, Postscript, Emotive
Live chat extended: Shopify Inbox, Re:amaze, Crisp, Freshchat
Currency / i18n extended: Multi Currency Converter, Bagging
Verified on aplusnutri.com: detection went from 1 app (klaviyo only) to 6 apps across 6 categories — Klaviyo, Microsoft Clarity, Intelligems, Kaching Bundles, Boostymark Region Block, Shopify Privacy Banner.
Added (Apify Console UI)
4 dedicated dataset views for clean per-type rendering in Apify Console:
All records — universal columns with record_type first for sort/filter
🧩 Apps detected — one row per store, columns per category (email/SMS/reviews/subs/popups/loyalty/chat/upsell/search/analytics/pricing_ab/consent/geo/page_builder/i18n)
⭐ Reviews — store, product, provider, rating, body, author, date
💰 Revenue — placeholder until the model lands
[1.0.2] — 2026-05-05
Added
4-language video tutorials (EN / FR / DE / ES) embedded in README and on Apify Store
examples/ folder with 5 runnable code samples covering ICP qualification, app market-share research, cold-outreach personalization, cURL quickstart, and Zapier/Make.com integration
README badges (Apify Run, MIT License, YouTube Tutorial)
"Video Tutorial" section in README + Apify Store, mirroring the format used on the Vinted Turbo Scraper actor
Changed
Renamed actor from "Shopify Product Scraper - Apps Spy + Reviews" to "Shopify Apps Spy + Product Scraper" to lead with the differentiated apps-detection feature while keeping the product-scraper SEO term
Aligned .actor/actor.json title and .actor/README.md with the new name
[1.0.0] — 2026-04-30
Added
Apps detection across 150+ Shopify apps (email/SMS, reviews, subscriptions, popups, search, loyalty, ad pixels)
Product catalog extraction via the official /products.json endpoint
Reviews extraction at extract_level: full for Yotpo, Judge.me, Stamped, Okendo, Loox, Junip, Reviews.io, Rebuy