DEV Community

Hay Equipos
Hay Equipos

Posted on

How to scrape Shopify App Store apps, pricing plans and reviews

If you build Shopify apps, or you are researching a category before you build one, you keep coming back to the same questions. What do competitors charge on each plan? How fast are their reviews coming in? What do one star reviews complain about? The App Store shows all of this, but one page at a time, with review counts rounded to "47K".

Shopify App Store Scraper by Hay Equipos reads the public pages of apps.shopify.com and returns clean rows: app details with every pricing plan, and optionally the merchant reviews. No login, no browser and no proxies.

What you get back

Each row has a type: app, review or error.

An app row, trimmed, with illustrative values:

{
  "type": "app",
  "handle": "example-reviews-app",
  "url": "https://apps.shopify.com/example-reviews-app",
  "name": "Example Product Reviews",
  "tagline": "Collect photo reviews and show star ratings",
  "developer": "Example Apps Inc",
  "rating": 4.8,
  "reviewCount": 2140,
  "ratingHistogram": { "1": 41, "2": 12, "3": 25, "4": 160, "5": 1902 },
  "pricingSummary": "Free plan available. Free trial available.",
  "hasFreePlan": true,
  "hasFreeTrial": true,
  "plans": [
    { "name": "Free", "priceText": "Free", "price": 0, "billingPeriod": null, "freeTrialDays": null, "features": ["Up to 50 review requests"] },
    { "name": "Growth", "priceText": "$15/month", "price": 15, "billingPeriod": "month", "freeTrialDays": 14, "features": ["Photo reviews", "Review widgets"] }
  ],
  "builtForShopify": true,
  "categories": [{ "name": "Product reviews", "slug": "marketing-and-conversion-social-trust-product-reviews" }],
  "languages": ["English", "French"],
  "worksWith": ["Shopify Flow"],
  "launchedDate": "2019-04-02"
}
Enter fullscreen mode Exit fullscreen mode

App rows also carry description, developerUrl, features (feature tags), iconUrl and, for apps found through a category, category and categoryPosition. The star counts in ratingHistogram are exact: they come from the review filter links on the listing, not the rounded figure shown on screen.

A review row, with illustrative values:

{
  "type": "review",
  "handle": "example-reviews-app",
  "reviewId": "1234567",
  "rating": 2,
  "date": "2026-09-12",
  "text": "Setup was easy but the widget slowed down our product pages...",
  "storeName": "Example Outdoor Co",
  "storeCountry": "Canada",
  "timeUsingApp": "About 2 months",
  "developerReply": "Thanks for the feedback. We have released a lighter widget...",
  "developerReplyDate": "2026-09-13"
}
Enter fullscreen mode Exit fullscreen mode

Apps that do not exist come back as an error row, which is free. A RUN_SUMMARY record in the run's key value store lists any input that returned nothing.

Step by step in the Apify Console

  1. Open the actor on the Apify Store (link at the end) and click Try for free.
  2. In Apps, add app handles (the part after apps.shopify.com/) or full app links, one per line.
  3. In Categories, add category links or slugs to map a whole category. Set Maximum apps per category (default 48). Apps come in the order the category lists them, 24 per category page.
  4. Keep Open each app page on for full details. Turn it off for a fast run that returns only the card data from the category page (name, rating, review count, pricing label, tagline).
  5. To collect reviews, turn on Include reviews and set Maximum reviews per app (default 50, newest first).
  6. Optionally filter with Only reviews with these star ratings (for example 1 and 2 for complaints) and Only reviews newer than (a date like 2026-09-01).
  7. Set Maximum rows (default 5,000, apps plus reviews), click Start and export the table.

Calling it from code

With curl:

curl -X POST \
  "https://api.apify.com/v2/acts/pistachio_implementation~shopify-app-store-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "apps": ["example-reviews-app"],
    "includeReviews": true,
    "maxReviewsPerApp": 20,
    "reviewRatings": ["1", "2"]
  }'
Enter fullscreen mode Exit fullscreen mode

With Python and the apify-client package:

import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])

run = client.actor("pistachio_implementation/shopify-app-store-scraper").call(
    run_input={
        "categories": [
            "https://apps.shopify.com/categories/marketing-and-conversion-social-trust-product-reviews"
        ],
        "maxAppsPerCategory": 24,
        "includeReviews": False,
    }
)

for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    if row["type"] == "app":
        prices = [p["price"] for p in row.get("plans") or [] if p.get("price") is not None]
        print(row.get("categoryPosition"), row["name"], row["rating"], row["reviewCount"], prices)
Enter fullscreen mode Exit fullscreen mode

Pricing

Pay per event, with no subscription and no platform usage charge on top:

Event Price
App saved $0.0015 per app ($1.50 per 1,000 apps)
Review saved $0.0003 per review ($0.30 per 1,000 reviews)

There is no start fee, and error rows are free. Example: a weekly check of 50 competitor apps with their 20 newest reviews each is 50 app rows and 1,000 review rows, which costs 50 × $0.0015 + 1,000 × $0.0003 = $0.375.

For review monitoring on a schedule, set "Only reviews newer than" to your last run date. Older reviews are not collected and not charged. Note that each app you list is still saved, and charged, as an app row on every run.

Limits and what it does not do

  • No keyword search. The App Store's robots.txt asks automated tools not to read search pages, so the actor uses app links and categories instead.
  • Reviews load 10 per page, at about one page every 1.5 seconds to stay polite, so long review histories take time.
  • Category order is the App Store's own at the time of the run and can include promoted apps.
  • Prices are what the listing shows, usually in US dollars. Usage based or extra charges appear only as the listing words them.
  • No personal contact details. The reviewing store's name and country are only what the App Store publishes on each review.

The actor is an independent tool and is not affiliated with Shopify. Use the data in line with the Shopify App Store's terms.

Try it on the Apify Store: https://apify.com/pistachio_implementation/shopify-app-store-scraper

Top comments (0)