🛒 Shopify App Store Scraper
Pricing
from $7.00 / 1,000 shopify app records
🛒 Shopify App Store Scraper
Scrape Shopify App Store listings: name, tagline, description, rating, review count, pricing tiers, BFS badge, categories, developer info. Watchlist mode tracks rating/review changes day-over-day. Export, run via API, schedule, or integrate with other tools.
Pricing
from $7.00 / 1,000 shopify app records
Rating
0.0
(0)
Developer
Skootle
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Share

TL;DR
Scrape any Shopify App Store listing for full app metadata: name, tagline, description, icon, rating, review count, pricing model, pricing tiers, Built for Shopify badge, categories, languages, developer info. Watchlist mode emits only apps where rating or review count changed since the previous run, so daily diffs surface competitor momentum signals. Built on Shopify's public listing pages with JSON-LD parsing and HTML fallback.
Try it on a small dataset, then let us know what you think in a review.
What does Shopify App Store Scraper do?
Shopify App Store Scraper extracts everything visible on a Shopify App Store listing page. You give it a list of app handles (the slug after apps.shopify.com/); it returns one record per app with: name, tagline, description, icon URL, rating value, review count, pricing model (free, free_to_install, free_plan_available, paid, one_time, unknown), pricing tier breakdown with prices and billing periods, Built for Shopify badge presence, categories, languages supported, "works with" integrations, and developer info.
The actor reads each listing's embedded JSON-LD (Schema.org SoftwareApplication) for the canonical name + rating + description, and parses the surrounding HTML for everything not in the JSON-LD: pricing tier cards, BFS badge, categories, developer link, languages, "works with" list.
Watchlist mode (watchlistMode: true) tracks ratingValue and ratingCount per app across runs and emits only the apps where either changed. Schedule daily and you get a diff feed of which apps are gaining or losing reviews.
Why scrape the Shopify App Store?
The Shopify App Store is the largest e-commerce SaaS marketplace on the planet, with 8,000+ apps spanning every Shopify merchant workflow. Tracking competitor reviews, pricing changes, BFS badge gains/losses, and category-wide momentum is high-signal for app developers, M&A scouts, market researchers, and AI-powered competitive intelligence.
Shopify doesn't expose a public API for app discovery or app metadata, and the listing pages are partly client-rendered. This actor handles the JSON-LD extraction + HTML parsing so you get clean structured records instead of HTML strings.
Who needs this?
- Shopify app developers monitoring competitor apps for pricing changes, rating shifts, and BFS badge events
- M&A scouts screening for fast-growing acquisition targets in the Shopify ecosystem
- Market researchers measuring category-wide momentum (top 50 reviews/marketing/fulfillment apps)
- App-marketing consultants benchmarking pricing tier structures across competitors
- VC analysts sourcing Shopify-native startups for early-stage investment
- AI agents building "recommend Shopify apps for this stack" features
- Acquisition operators building portfolio dashboards across multiple Shopify apps
How to use Shopify App Store Scraper
- Open the Input tab on the actor page
- Add app handles (the slug after
apps.shopify.com/) to theappHandlesfield. Full URLs work too — the actor strips the prefix. - Set
maxItems(default 50) - Optionally enable
watchlistModefor daily scheduled runs that only return apps where rating/reviews changed - Click Start or call via the Apify REST API or CLI
You can find app handles by browsing the Shopify App Store and copying the URL slug (e.g., apps.shopify.com/loox → loox).
How much will scraping the Shopify App Store cost?
This actor is priced per event:
- Actor Start: $0.01 once per run
- Shopify app record: tiered, charged per record written
| Apify plan | $/1000 records |
|---|---|
| FREE | $40.00 |
| BRONZE | $34.00 |
| SILVER | $28.00 |
| GOLD | $22.00 |
| PLATINUM | $22.00 |
| DIAMOND | $19.80 |
A typical daily competitor watchlist of 25 apps in your category returns ~25 records on day 1, then 0-5 per day in watchlist mode (only apps that gained/lost reviews). Roughly $0.55-$0.65 per daily run on the GOLD plan after the first.
Is it legal to scrape the Shopify App Store?
Yes, listing pages are publicly accessible to anyone in a browser without logging in. This actor reads the same data Google's crawler reads, with proper rate limiting (1.1 second delay between requests) and a respectful User-Agent. It does not log in to merchant Shopify admins, does not access merchant private data, and does not bypass any technical access control.
The data scraped (app metadata, ratings, prices) is published by Shopify as marketing material specifically intended to be discoverable. Use it freely for research, competitive analysis, AI training, or commercial intelligence products. Reselling raw datasets verbatim may run afoul of Shopify's terms — consult your legal counsel for commercial redistribution.
Examples
Example 1: Track top 5 review apps daily
{"appHandles": ["loox", "judgeme-product-reviews", "yotpo-social-reviews", "stamped", "vitals"],"watchlistMode": true,"maxItems": 5}
Example 2: Snapshot a single app
{"appHandles": ["loox"],"maxItems": 1}
Example 3: BFS-badge tracker on email-marketing apps
{"appHandles": ["klaviyo-email-marketing-sms", "shopify-email", "omnisend-email-marketing-sms", "privy", "smile-rewards-program"],"watchlistMode": true,"maxItems": 5}
Filter the output downstream for builtForShopify: true.
Example 4: Pricing benchmark across the Reviews category
{"appHandles": ["loox", "judgeme-product-reviews", "yotpo-social-reviews", "stamped", "okendo", "ali-reviews", "rivo-reviews", "vitals"],"maxItems": 10}
Aggregate pricingTiers[] downstream to compute median entry price, free-plan availability rate, and tier-count distribution.
Example 5: Acquisition-target watchlist
{"appHandles": ["app-1", "app-2", "app-3", "...", "app-200"],"watchlistMode": true,"maxItems": 200}
Run weekly. Sort the diff output by ratingCount delta to find apps gaining reviews (and presumably revenue) fast.
Example 6: Developer-portfolio audit
Pull every app from a single developer (find their handles by browsing their developer page on Apps Shopify):
{"appHandles": ["app-by-loox-1", "app-by-loox-2", "app-by-loox-3"],"maxItems": 5}
Example 7: Single-app fast snapshot for an AI agent
{"appHandles": ["klaviyo-email-marketing-sms"],"useApifyProxy": false,"maxItems": 1}
The agent can call the actor synchronously and consume the agentMarkdown directly for chat-context grounding.
Input parameters
| Field | Type | Default | Description |
|---|---|---|---|
appHandles | string[] | sample apps | Slugs (e.g., loox) or full URLs (the prefix is stripped). |
watchlistMode | bool | false | Diff against KV-stored rating/review snapshots. |
maxItems | int | 50 | Hard cap on apps saved. |
useApifyProxy | bool | true | Apify residential proxy. Recommended. |
apifyProxyGroups | string[] | ["RESIDENTIAL"] |
Pricing model enum
| Value | Meaning |
|---|---|
free | App is free, no upgrade path |
free_to_install | App installs free, may charge per-event |
free_plan_available | Has free tier + paid plans |
paid | All plans paid, no free tier |
one_time | Single one-time payment |
unknown | Couldn't classify from listing |
Shopify App Store output format
shopify_app
| Field | Type | Description |
|---|---|---|
outputSchemaVersion | string | Versioned literal ('2026-05-08') |
recordType | literal | 'shopify_app' |
recordId | string | shopify:app:<handle> |
appHandle, url | string | Slug + canonical URL |
name, tagline, description | string | Marketing copy |
iconUrl | string | App icon (Shopify CDN URL) |
ratingValue | float | 0.0-5.0 |
ratingCount | int | Number of reviews |
pricingModel | enum | See enum table above |
pricingHeadline | string | Pricing summary string ("Free plan available", "From $19/month", etc.) |
hasFreePlan, hasFreeTrial | bool | Pricing flags |
pricingTiers | array | [{ name, priceUsd, billingPeriod, description }] |
categories | string[] | Shopify-assigned category names |
builtForShopify | bool | BFS badge presence |
worksWith | string[] | Listed integrations |
languagesSupported | string[] | UI/admin languages |
developer | object | { name, url } |
fieldCompletenessScore | int 0-100 | Self-filtering signal |
agentMarkdown | string | 300-500 char LLM-ready summary |
scrapedAt | ISO 8601 | Snapshot timestamp |
Shopify App Store scraper output example
{"outputSchemaVersion": "2026-05-08","recordType": "shopify_app","recordId": "shopify:app:loox","appHandle": "loox","url": "https://apps.shopify.com/loox","name": "Loox · Product Reviews App","tagline": "Turn customer love into sales. Product reviews, referrals and social proof upsells with Loox for Shopify and Shopify Plus.","ratingValue": 4.9,"ratingCount": 7810,"pricingModel": "free_plan_available","pricingHeadline": "Free plan available","hasFreePlan": true,"hasFreeTrial": false,"pricingTiers": [{ "name": "Free", "priceUsd": 0, "billingPeriod": "monthly", "description": null },{ "name": "Beginner", "priceUsd": 9.99, "billingPeriod": "monthly", "description": null }],"categories": ["Product reviews", "Photo and video reviews"],"builtForShopify": true,"worksWith": ["Klaviyo", "Yotpo", "Loyalty Lion"],"languagesSupported": ["English", "French", "Spanish", "German", "Italian"],"developer": { "name": "Loox", "url": "https://apps.shopify.com/partners/loox" },"fieldCompletenessScore": 100,"agentMarkdown": "**🛒 Loox · Product Reviews App** · 🛍 Built for Shopify\n> Turn customer love into sales...\n- ⭐ 4.9 (7,810) · Free plan available\n- 👤 by Loox\n- 🏷 Product reviews, Photo and video reviews\n- 🔗 https://apps.shopify.com/loox"}
During the Actor run
The actor fetches each listing page sequentially with a 1.1-second delay (well under any reasonable Shopify rate limit), parses the JSON-LD SoftwareApplication block for canonical name + rating + description + icon, then parses the surrounding HTML for pricing tier cards, BFS badge, categories, developer link, languages, and works-with list. Each record is validated against a Zod schema before push. Bad rows go to error counters in OUTPUT, not silently dropped.
The actor writes to its key-value store:
OUTPUT— compact run summaryAGENT_BRIEFING— markdown digest with top apps by review countWATCHLIST_STATE— (whenwatchlistMode: true) per-app rating snapshot
FAQ
How does Shopify App Store Scraper work?
The actor fetches each app's public listing URL, parses the embedded JSON-LD for canonical metadata, and HTML-parses the surrounding page for pricing tier cards, BFS badge, categories, developer info, and languages.
Can I get reviews for each app?
Not in v0.1. This actor returns the rating value and review count, but not individual review threads. Review-level scraping is on the roadmap as a separate v0.2 feature.
Can I discover apps by category?
Not in v0.1. Shopify's category and search pages are fully client-rendered (JavaScript-only), so discovery requires Playwright. For now, you provide app handles explicitly. Discovery mode is planned for v0.2.
Can I monitor for rating changes only?
Yes. Set watchlistMode: true. The actor tracks ratingValue and ratingCount per app per run and only emits records where either changed.
Can I use this with the Apify API?
Yes. POST to https://api.apify.com/v2/acts/skootle~shopify-app-store-scraper/runs with your input as JSON body and your token as the bearer header.
Can I integrate with Make / Zapier / n8n / Slack?
Yes. From the actor page, click Integrations.
Does this work for non-public apps?
No. This actor only reads public Shopify App Store listings. Custom apps, private apps, and unlisted apps are not accessible.
Why are some fields empty?
Shopify's listing layout varies per app. Pricing tier cards and category badges are particularly inconsistent. The fieldCompletenessScore (0-100) flags how complete a record is so you can self-filter low-quality rows downstream.
What if Shopify changes its layout?
JSON-LD parsing is the primary path for name + rating + description, and JSON-LD is highly stable. HTML parsing for pricing tiers, BFS badge, and categories is the secondary path; if Shopify changes these, the actor adapts within 24-48 hours.
Your feedback
Hit a bug or want a feature? Open an issue on the Issues tab rather than the reviews page, and we'll fix it fast (typically within 48 hours).
Why choose Shopify App Store Scraper
- JSON-LD primary path — canonical name, rating, description, and icon come from Shopify's own structured-data block. Stable across layout changes.
- Pricing tier breakdown —
pricingTiers[]array with named plans, USD prices, and billing periods. Aggregate across competitors for benchmarks. - Built for Shopify badge tracking —
builtForShopify: boolon every record. Watchlist mode catches badge gains/losses (a strong revenue signal). - Watchlist diff mode — only emits apps where rating or reviews changed since the last run.
- Versioned schema —
outputSchemaVersion: '2026-05-08'literal on every record. - Idempotent record IDs —
shopify:app:<handle>stable across runs. - Agent-grade output —
agentMarkdownready to paste into an LLM context.
Other Skootle actors you might want to check
- Apple App Store Reviews Monitor — App Store reviews + metadata, watchlist for negative-review triage
- Reddit Subreddit Scraper — sentiment + brand monitoring
- Hacker News Watchlist — tech discourse stream
- GitHub Trending Repos — daily trending dev repos
- SEC EDGAR Filings Monitor — public-company filings stream
Support and contact
File issues on this actor's page (Issues tab) — replies within 48 hours. Feature requests welcome — tag with enhancement.