App Store Review Monitor — New Reviews & Competitor Alerts
Pricing
from $5.00 / 1,000 app checkeds
App Store Review Monitor — New Reviews & Competitor Alerts
App Store review scraper: new reviews with rating, sentiment, version and text for your app and competitors. No login.
Pricing
from $5.00 / 1,000 app checkeds
Rating
0.0
(0)
Developer
Mohammed Samaan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 days ago
Last modified
Categories
Share
App Store Reviews Scraper + Monitor
Get App Store reviews for any iOS app — rating, title, text, version, author, date and helpful votes — as clean JSON or CSV, from any of Apple's country stores. Run it once as a scraper, or on a schedule as a monitor that returns only the reviews that are new since the last run.
No login, no cookies, no API key and no browser: it reads Apple's own public customer-reviews feed, so a run is a handful of JSON requests per app.
Who it's for
- Indie developers and studios tracking their own app and competitors
- ASO / product teams doing review sentiment and feature-request mining
- AI and automation workflows (n8n, Make, MCP agents) that need reviews as JSON
- Anyone who wants a same-day flag on a new 1–2★ review
What you get
One row per review:
| Field | What it is |
|---|---|
app / appId | App name and App Store ID |
country | Which country store the review came from (us, gb, ae, …) |
rating | 1–5★ |
sentiment | positive / neutral / negative, derived from rating |
title / review | The review text |
version | App version reviewed |
author | Reviewer's displayed name |
reviewedAt | ISO timestamp of the review |
helpfulVotes / totalVotes | "Was this helpful" counts |
reviewId / url | Apple's review ID and link |
isNew | Monitor mode only: true when the review was not seen in a previous run |
checkedAt | When it was captured |
Sample row:
{"app": "Notion: Notes, Tasks, AI","appId": "1232780281","country": "us","rating": 2,"sentiment": "negative","title": "Sync keeps failing","review": "Since the last update my pages stop syncing on cellular…","version": "4.12.1","author": "mkr_2020","reviewedAt": "2026-09-25T18:41:07.000Z","helpfulVotes": 3,"totalVotes": 4,"isNew": null}
Example output
One real row (scraper mode, Notion in the US store). The review text is as Apple returned it.
{"app": "Notion: Notes, Tasks, AI","appId": "1232780281","country": "us","rating": 1,"sentiment": "negative","title": "what's happening?","review": "So far notion has been great, my number 1 go to for note taking among other things. But now the app has been more of nuisance than anything because it has several glitches now. For one, whenever I highlight a paragraph and try applying italic, or bold to it, it only applies to the first word and only allows me to edit that first word. Another recent development being that whenever I try highlighting a text to put it in a different color, by the time I go to the color menu the entire thing becomes deselected and uncolorable. Please fix this.","version": "1.7.341","author": "K.loves20","reviewedAt": "2026-09-27T04:17:09.000Z","helpfulVotes": 0,"totalVotes": 0,"reviewId": "14598140299","url": "https://itunes.apple.com/us/review?id=1232780281&type=Purple%20Software","isNew": null,"checkedAt": "2026-09-28T16:04:23.019Z","aiTopic": "bugs_performance","aiUrgency": "high","aiUrgencyScore": 2,"aiRiskFlag": false}
isNew is null in scraper mode; in monitor mode (onlyNew: true) it is false on the first run and true for reviews first seen on later runs. The ai* fields are present only when AI triage answered for that run; otherwise rows are delivered without them.
Input
{"apps": ["Notion", "1232780281"],"countries": ["us", "gb"],"maxPages": 5,"onlyNew": false}
apps— App Store IDs, App Store URLs or app names (names are resolved via Apple's public search API). Mix your app and competitors in one list.countries— one or more two-letter store codes. Each app is fetched once per country. Apple serves up to 10 pages × ~50 reviews per app per country.sortBy—mostrecent(default) ormosthelpful.onlyNew— off by default (scraper). Turn on for monitor mode: the first run returns everything and saves a baseline; later runs return only reviews not seen before. Pair it with an Apify schedule.- Filters:
onlyNegative(1–2★ only),minRating/maxRating,keyword. webhookUrl— POST a per-run summary to Slack / Zapier / Make.
Pricing
Pay per event: a small charge per app-and-country checked, plus a charge per review row delivered. Exact prices are on the Pricing tab. A status row ("NO REVIEWS MATCHED" / "NO NEW REVIEWS") is not a review and is not billed as one.
Monitor mode on a schedule
- Set
onlyNew: trueand yourapps/countries. - Save the run as a Task and add an Apify Schedule (daily works well).
- Read the dataset in your workflow, or set
webhookUrlto get pushed.
The first scheduled run returns the current reviews (that is your baseline); every run after that returns only what is new.
Use with n8n / Make / Zapier / MCP
Add an Apify node, point it at this actor, pass your input, and read the dataset back into your workflow. The actor is also callable through the Apify MCP server — every input field has an example value, so an AI agent can call it without guidance.
Errors and limits
How the actor behaves when things go wrong (read from its code):
- No input. An empty
appslist makes the run fail immediately. So does acountrieslist with no valid two-letter codes (for example["us", "gb", "ae"]is fine). - App not found. App names are resolved through Apple's search and the first match is used, so a vague name can resolve to the wrong app; numeric IDs and App Store URLs are used as given. If a name matches nothing, you get one row
{"app": ..., "country": ..., "status": "NOT FOUND"}. - Apple errors or timeouts. If the first page of reviews for an app and country fails (an HTTP error such as 403, 429 or 5xx, or a 20-second timeout), you get one row with
status: "ERROR: <reason>"and the run continues with the next app or country. If a later page fails, the actor stops paging and delivers the reviews it already has, without reporting an error. There are no retries and no proxies. - Review limits. Apple's public feed serves about 50 reviews per page and at most 10 pages, so roughly 500 reviews per app per country per run at most.
maxPagesdefaults to 5. - Empty results. If your filters (
minRating,maxRating,onlyNegative,keyword) leave nothing, or in monitor mode nothing is new, you get one status row,NO REVIEWS MATCHEDorNO NEW REVIEWS, withreviewsSeen. In monitor mode the first run returns everything and saves the baseline in a named key-value store (appreview-monitor-state) in your account. - AI triage.
aiTopic,aiUrgency,aiUrgencyScoreandaiRiskFlagare added when the triage service is available and answers in time. If it is not, rows are delivered without those fields and the run does not fail. - Webhook. A configured
webhookUrlreceives one POST summarising the run. A failed POST logs a warning and does not fail the run. - Charging. One
app-checkedevent per app and country whose reviews were fetched (even if a status row is the only output), and onereview-foundevent per review row delivered.NOT FOUNDandERRORrows are not charged, and status rows (NO REVIEWS MATCHED,NO NEW REVIEWS) are not charged as reviews. If your max-charge limit is reached the run stops with what it has.
FAQ
Does it cover Google Play? No — Apple App Store only.
How is sentiment decided? From the star rating: 4–5★ positive, 3★
neutral, 1–2★ negative. It is not a text-sentiment model.
How many reviews can I get per app? Apple's public feed serves up to 500
per app per country store (10 pages × ~50). Add more countries to get more.
Why did an app come back NOT FOUND? The name didn't resolve in that
country store. Pass the numeric App Store ID instead — it is in the app's
App Store URL after /id.
Send results to Notion (new, Sep 2026)
Authorize Notion once in Apify Console → Settings → API & Integrations → MCP connectors (choose Notion, sign in). Then pick that connector in Notion connector and paste the link of any Notion page in Notion page to create the table in. The first run creates a table inside that page and fills it with the App Store reviews (up to 500 rows per run; the full set is always in the dataset). To keep adding to the same table on later runs, paste the table ID from the log into Existing Notion table ID. This Actor never sees your Notion login: Apify's connector proxy holds it. If the Notion step fails, your dataset results are still delivered and the reason is logged.
Use it from an AI agent (MCP)
Add this Actor to any MCP client (Claude, Cursor, VS Code) with one URL:
https://mcp.apify.com?tools=leadharbor/app-store-review-monitor
Or call it through the Apify API with an input like this:
{"apps": ["Notion"],"countries": ["us"],"maxPages": 2}
Returns one row per App Store review: rating, sentiment, version, text, AI topic and urgency. Results land in the run's default dataset (JSON, CSV or Excel). No login or API key is needed for the sites it reads, and pay-per-event pricing works with Apify's x402 agent payments.
API usage
Run it from your own code with an Apify API token. The input below is this actor's prefilled example.
curl (runs the actor and returns the dataset items):
curl -X POST "https://api.apify.com/v2/acts/leadharbor~app-store-review-monitor/run-sync-get-dataset-items" \-H "Authorization: Bearer $APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"apps": ["Notion","389801252"],"countries": ["us"],"sortBy": "mostrecent","maxPages": 2,"onlyNew": false,"onlyNegative": false}'
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("leadharbor/app-store-review-monitor").call(run_input={"apps": ["Notion","389801252"],"countries": ["us"],"sortBy": "mostrecent","maxPages": 2,"onlyNew": False,"onlyNegative": False})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
Changelog
28 Sep 2026 — Buyer max-charge cap now stops the run; optional Notion output; MCP agent section. Plus 5 public example tasks with their own pages.
More from leadharbor
- Google Maps Scraper — MX-Checked Business Email Leads
- Website Contact Extractor
- Bulk Email Verifier
- Shopify Products Scraper + Price Drop & Restock Monitor
- Reddit Keyword Search Scraper + Mention Monitor
- Local Review Booster
- YouTube Scraper
- Airbnb Scraper
- LinkedIn Jobs Scraper
- USA Business Email Finder
- UK Business Email Finder
- UAE Business Email Finder
- UAE Property Broker Contacts
Using this actor? A quick review helps other buyers find it: app-store-review-monitor
AI triage fields (Sep 2026)
Each review also gets:
| Field | Values |
|---|---|
aiTopic | product_quality, service_staff, price_value, wait_delivery, billing_refund, bugs_performance, cleanliness_safety, general_praise, other |
aiUrgency / aiUrgencyScore | none / low / high / critical (0–3) — judged from the review text, so a 4★ review reporting food poisoning is still critical |
aiRiskFlag | true when the review describes a health, safety, legal, fraud, discrimination or privacy problem |
These are AI judgments — treat them as a triage aid, not a verdict. Fields are empty if the AI service is unavailable; the scrape itself never fails because of it.
Related actors
- Disposable Email & Domain Checker — Flags throwaway and free-provider email domains using 5 merged public lists. $0.30 per 1,000 checks.
- Domain Trust Check — 0-100 trust score for a domain from domain age, SSL, SPF/DKIM/DMARC and disposable-domain lists. $2.50 per 1,000 domains.
- Website Contact Extractor — Pulls emails, phone numbers and social links from website URLs.
- Telegram Channel Scraper — Public Telegram channel posts: text, views, dates, media links. $1.50 per 1,000 messages.
- Substack Scraper — Substack post metadata, dates, reactions and authors from public archives. $0.90 per 1,000 posts.