App Store Review Monitor — New Reviews & Competitor Alerts avatar

App Store Review Monitor — New Reviews & Competitor Alerts

Pricing

from $5.00 / 1,000 app checkeds

Go to Apify Store
App Store Review Monitor — New Reviews & Competitor Alerts

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

Mohammed Samaan

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 days ago

Last modified

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:

FieldWhat it is
app / appIdApp name and App Store ID
countryWhich country store the review came from (us, gb, ae, …)
rating1–5★
sentimentpositive / neutral / negative, derived from rating
title / reviewThe review text
versionApp version reviewed
authorReviewer's displayed name
reviewedAtISO timestamp of the review
helpfulVotes / totalVotes"Was this helpful" counts
reviewId / urlApple's review ID and link
isNewMonitor mode only: true when the review was not seen in a previous run
checkedAtWhen 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) or mosthelpful.
  • 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

  1. Set onlyNew: true and your apps / countries.
  2. Save the run as a Task and add an Apify Schedule (daily works well).
  3. Read the dataset in your workflow, or set webhookUrl to 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 apps list makes the run fail immediately. So does a countries list 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. maxPages defaults 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 MATCHED or NO NEW REVIEWS, with reviewsSeen. 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, aiUrgencyScore and aiRiskFlag are 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 webhookUrl receives one POST summarising the run. A failed POST logs a warning and does not fail the run.
  • Charging. One app-checked event per app and country whose reviews were fetched (even if a status row is the only output), and one review-found event per review row delivered. NOT FOUND and ERROR rows 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 ApifyClient
client = 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


Using this actor? A quick review helps other buyers find it: app-store-review-monitor

AI triage fields (Sep 2026)

Each review also gets:

FieldValues
aiTopicproduct_quality, service_staff, price_value, wait_delivery, billing_refund, bugs_performance, cleanliness_safety, general_praise, other
aiUrgency / aiUrgencyScorenone / low / high / critical (0–3) — judged from the review text, so a 4★ review reporting food poisoning is still critical
aiRiskFlagtrue 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.

  • 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.