If you build a Shopify app, the App Store is your market map. Your competitors' plans and prices are public, so is where they rank in your category, and every merchant review (with the developer's reply) is right there. What the App Store does not give you is a table: comparing ten email apps' entry prices means opening ten listings and copying numbers by hand, and noticing a new competitor or a fresh one-star review means checking every day.
This post pulls that data into Python, then turns it into a morning feed of new apps and new reviews.
Disclosure: I'm Aurelix, and I built the Shopify App Store Scraper. It's a paid tool (prices below).
What each row holds
One row per app (record_type: "app"):
-
name,tagline,description,highlights,icon_url,built_for_shopify. -
rating,review_countandrating_distribution(reviews per star level). -
pricing_plans: every plan shown on the listing withname,price,currency,billing_period,detailsand itsfeatures. -
developer_name,developer_url,developer_website,developer_address,developer_country,launched_date,languages,works_with,categories. -
category_ranks: the app's position in each category the run read, in Shopify's order or newest first.
With reviews on, one row per review (record_type: "review"): stars, date, text, the merchant's store name and country, how long they had used the app, and the developer's reply.
Start from app handles or links, category names ("Email marketing" works, so does a category link), or developer pages.
Your category as a price table
pip install apify-client import os from apify_client import ApifyClient client = ApifyClient(os.environ["APIFY_TOKEN"]) run = client.actor("aurelix/shopify-app-store-scraper").call( run_input={"categoryUrls": ["Email marketing"], "maxAppsPerCategory": 48} ) apps = [r for r in client.dataset(run["defaultDatasetId"]).iterate_items() if r["record_type"] == "app"] def entry_price(app): paid = [p["price"] for p in app["pricing_plans"] if p["price"]] return min(paid) if paid else None for app in sorted(apps, key=lambda a: a["category_ranks"][0]["position"]): rank = app["category_ranks"][0]["position"] free = any(p["price"] == 0 for p in app["pricing_plans"]) print(f"#{rank:>2} {app['name'][:40]:40} {app['rating'] or '-':>4} ({app['review_count']:>6} reviews) " f"free plan: {'yes' if free else 'no ':3} from ${entry_price(app) or '-'} launched {app['launched_date']}") That is a positioning sheet in one run: who ranks above you, who has a free plan, where the lowest paid plan starts and which apps are new. Run it weekly and you also have a rank history.
New apps and new reviews every morning
run_input = { "categoryUrls": ["Email marketing"], "categorySort": "newest", "maxAppsPerCategory": 48, "appUrls": ["klaviyo-email-marketing", "omnisend"], "includeReviews": True, "maxReviewsPerApp": 50, "onlyNewEntries": True, "stateKey": "email-marketing-watch", "slackWebhookUrl": "https://hooks.slack.com/services/...", } With onlyNewEntries on, the first run returns the newest apps in the category and the latest reviews of the two competitors. Each later run with the same stateKey returns only apps listed since and reviews you have not seen yet; the two listed apps come back every run with their current rating and review count, so you can chart them. A category stops paging at the first page with nothing new, so a quiet day costs little more than the start fee. Save the input as a task in the Apify Console, schedule it daily, and the Slack URL gets a short digest.
Why this tool
- $0.75 per 1,000 apps ($0.50 on paid plans), and reviews at $0.025 per 1,000, cheaper than the leading tools.
- Apps, categories, developers and reviews in one run.
- Category rank on every app.
- Only new apps and new reviews since the last run.
- What it doesn't cover: keyword (search) rankings, because the App Store's robots.txt disallows its search pages.
Limits worth knowing
- Plan prices are in the visitor's currency; runs on Apify's US servers see US dollars, and every plan carries its
currency. - Listings show up to about four plans; a "See all pricing options" page is not read.
- The App Store rate-limits app pages, so full details run at about one app a second; a rank list with
appDetailsoff reads 24 apps per page in half a second.
The tool reads only what a logged-out visitor sees on apps.shopify.com, follows robots.txt and returns reviews word for word as the page shows them, paragraph breaks kept.
![Industrial Communication — Ch.10: Factory Automation [EN]](https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft1hw2kvh64lkchmsurzd.png)

