Shopify App Store Scraper avatar

Shopify App Store Scraper

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Shopify App Store Scraper

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

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

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 fingerprintscurl-cffi impersonation (Chrome / Firefox) so the target sees a real browser, not a Python client.
  • 🔁 We retry with exponential backoff on 408 / 429 / 5xx, honouring Retry-After, rotating impersonation profiles between attempts.
  • 🧩 Structured-first parsing — we prefer each detail page's application/ld+json block 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: [], null fields) 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

  1. Click Try for free at the top of the page.
  2. Provide either App handles (specific apps you want) or Category slugs (top-40-per-category discovery) — or both.
  3. Click Start. Output streams into the run's dataset.
  4. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
appHandlesarray<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.
categorySlugsarray<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.
maxItemsintegerno100Hard cap on total dataset rows emitted this run, applied across both input modes combined.
proxyConfigurationobjectno{"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.

FieldTypeNotes
handlestringApp's canonical URL handle.
namestringApp name.
developerstringDeveloper/company name.
urlstringCanonical https://apps.shopify.com/{handle} URL.
icon_url['string', 'null']App icon URL.
category['string', 'null']Category name; null when not discoverable.
pricing_plansarrayOrdered 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_witharrayIntegration/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_viastringapp_handles or category_slugs — whichever input mode produced this row.
scraped_atstringISO-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:

EventUSDWhat it is
actor-start$0.02One-off warm-up charge per run
result-row$0.002Per 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.