Shopify App Store Scraper
Pricing
from $2.00 / 1,000 results
Shopify App Store Scraper
Scrape Shopify App Store listings for pricing tiers, ratings, review counts, launch dates, categories, and integrations. Fetch specific app handles or discover up to 40 apps per category. Built for Shopify app developers and DTC agencies doing competitive research.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
🎯 What this scrapes
apps.shopify.com has no public API for app-listing data — we read the app-card markup on category browse pages and the structured LD+JSON block on each app's detail page, so you get one clean row per app with pricing tiers, ratings, launch date, category, and integration tags without hand-scraping the Store yourself.
🔥 Features
- 🛡️ We rotate browser fingerprints —
curl-cffiimpersonation (Chrome / Firefox) so the target sees a real browser, not a Python client. - 🔁 We retry with exponential backoff on
408 / 429 / 5xx, honouringRetry-After, rotating impersonation profiles between attempts. - 🧩 Structured-first parsing — we prefer each detail page's
application/ld+jsonblock for name, developer, icon, rating, and review count over brittle HTML text. - 🧱 A missing pricing section or malformed detail page never fails the run — that row degrades gracefully (
pricing_plans: [],nullfields) instead of aborting. - 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, stable handles, JSON / CSV / Excel export straight from the Apify Console.
- 💰 You pay only for results that land. No data, no charge (only the small actor-start warm-up fee).
💡 Use cases
- Competitive pricing research — compare pricing tiers across Shopify apps in your category before setting your own.
- DTC agency app-stack vetting — pull ratings, reviews, and integration tags for the apps you're recommending to clients.
- Market-intel tracking — snapshot a category's top 40 apps to watch how the ecosystem shifts over time (scheduling for deltas is on you).
- Integration audits — check which platforms (Shopify Flow, POS, Checkout, etc.) an app actually works with before you commit.
⚙️ How to use it
- Click Try for free at the top of the page.
- Provide either App handles (specific apps you want) or Category slugs (top-40-per-category discovery) — or both.
- Click Start. Output streams into the run's dataset.
- Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
appHandles | array<string> | no* | — | Bare handles (e.g. klaviyo-email-marketing) or full apps.shopify.com URLs, normalized to a handle. The primary, most reliable input mode. |
categorySlugs | array<string> | no* | — | Top-40-per-category discovery mode, e.g. marketing-and-conversion, finding-products, orders-and-shipping, sales-channels, selling-products, store-design, store-management. Each category caps at 40 apps — Shopify does not paginate this surface. |
maxItems | integer | no | 100 | Hard cap on total dataset rows emitted this run, applied across both input modes combined. |
proxyConfiguration | object | no | {"useApifyProxy": true} | Apify Proxy config. apifyProxyGroups is left unset (datacenter default) — no residential-proxy requirement observed for this target. |
* At least one of appHandles / categorySlugs must be set. Both may be combined in one run.
Example input
{"appHandles": ["klaviyo-email-marketing"],"maxItems": 5,"proxyConfiguration": {"useApifyProxy": true}}
📤 Output
Every row is one dataset item.
| Field | Type | Notes |
|---|---|---|
handle | string | App's canonical URL handle. |
name | string | App name. |
developer | string | Developer/company name. |
url | string | Canonical https://apps.shopify.com/{handle} URL. |
icon_url | ['string', 'null'] | App icon URL. |
category | ['string', 'null'] | Category name; null when not discoverable. |
pricing_plans | array | Ordered list of {name, price, additional_charges} pricing tiers; empty list when none found. |
rating_value | ['number', 'null'] | Aggregate rating (0-5); null if the app has no reviews. |
review_count | ['integer', 'null'] | Aggregate review count; null under the same condition as rating_value. |
launched_date | ['string', 'null'] | ISO-8601 launch date. |
works_with | array | Integration/works-with tags; empty list when none found. |
install_count | ['integer', 'null'] | Best-effort only — no such signal is exposed by Shopify on this surface. Ships null, never a fabricated proxy metric. |
discovered_via | string | app_handles or category_slugs — whichever input mode produced this row. |
scraped_at | string | ISO-8601 UTC timestamp when this row was recorded. |
Example output
{"handle": "klaviyo-email-marketing","name": "Klaviyo: Email Marketing & SMS","developer": "Klaviyo","url": "https://apps.shopify.com/klaviyo-email-marketing","icon_url": "https://cdn.shopify.com/app-store/listing_images/example/icon/example.png","category": "Marketing and conversion","pricing_plans": [{"name": "Free plan", "price": "Free to install", "additional_charges": null},{"name": "Growth", "price": "$45/month", "additional_charges": "Additional email/SMS charges may apply."}],"rating_value": 4.6,"review_count": 3812,"launched_date": "2019-05-15","works_with": ["Shopify Flow", "Shopify POS", "Checkout"],"install_count": null,"discovered_via": "app_handles","scraped_at": "2026-08-06T09:00:00+00:00"}
💰 Pricing
Pay-Per-Event — you pay only when these events fire:
| Event | USD | What it is |
|---|---|---|
actor-start | $0.02 | One-off warm-up charge per run |
result-row | $0.002 | Per app row pushed to the dataset |
Example: 1 000 results at the rates above ≈ $2.02. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.
🚧 Limitations
Category discovery is capped at 40 apps per category — Shopify does not expose pagination on this surface, so categorySlugs is a top-40 discovery mode, not exhaustive category enumeration. Search-based discovery (/search?q=...) is not supported — that endpoint is client-side rendered. No install/merchant-count signal is exposed anywhere on the Store, so install_count always ships null. Each run is a point-in-time snapshot; historical price-change tracking across runs is on the buyer via scheduling. Individual review text/authors are out of scope — only the aggregate rating and review count.
❓ FAQ
Do I need both appHandles and categorySlugs?
No — either alone works. Provide appHandles for specific apps, categorySlugs for top-40-per-category discovery, or combine both in one run (results are deduplicated by handle).
Why is install_count always null?
Shopify doesn't expose a merchant/install-count signal anywhere on the App Store. We ship it null rather than invent a proxy metric.
Can I enumerate an entire category beyond 40 apps?
Not currently — Shopify's category pages return exactly 40 app cards with no working pagination parameter. This is a platform limitation, not a bug.
Is price a parsed number?
No — it's kept as raw text (e.g. "$29.99/month", "Free to install") because pricing tiers mix flat, trial-qualified, and usage-based phrasing that a single numeric field can't represent without losing information.
💬 Your feedback
Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.