Apple App Store Review Alerts — New Reviews Only avatar

Apple App Store Review Alerts — New Reviews Only

Pricing

from $5.00 / 1,000 app-country checks

Go to Apify Store
Apple App Store Review Alerts — New Reviews Only

Apple App Store Review Alerts — New Reviews Only

Monitor new or edited Apple App Store reviews without duplicates. Filter low ratings by app and country for Slack, email, n8n, or Make alerts.

Pricing

from $5.00 / 1,000 app-country checks

Rating

0.0

(0)

Developer

Leonhardt Tools

Leonhardt Tools

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

14 days ago

Last modified

Share

Catch new 1–2★ App Store complaints without reprocessing or re-alerting old reviews.

Run once to build a silent baseline, schedule it daily, then connect the Dataset to Slack, email, n8n, Make, or your own workflow. Use an Apple bundle ID such as com.spotify.client, a numeric App ID, or an apps.apple.com URL. The Actor keeps independent state for each app × country and writes only new or edited reviews after the baseline.

Apple controls review availability and pagination. This Actor provides best-effort incremental monitoring from Apple's public storefront feed; it does not promise complete history, real-time delivery, or zero missed reviews.

Why this is not another review scraper

Raw review scrapers return the same recent pages every time a schedule runs. A production alert or reporting workflow then has to:

  1. maintain bundle ID → numeric App ID mappings;
  2. remember what each country returned last time;
  3. remove duplicates before triggering email, Slack, n8n, Make, or an AI workflow;
  4. avoid advancing a cursor when one target fails.

This Actor performs that recurring job. Exact identifier resolution and persistent state are the product; bulk historical scraping is not.

Quick start

{
"apps": ["com.spotify.client"],
"countries": ["us"],
"mode": "delta",
"firstRun": "baseline",
"maxRating": 2,
"maxPages": 1
}

With this alert-ready example:

  • the first successful run remembers up to 50 recent reviews and sends no historical alerts;
  • later runs stop after reaching reviews already present in state;
  • only newly observed or edited 1–2★ reviews pass to the Dataset;
  • a failed target records an error in OUTPUT and does not advance that target's state;
  • other targets continue.

For an initial backfill instead, set firstRun to emitAll and choose the rating range you want.

Accepted app identifiers

InputExampleResolution behavior
Apple bundle IDcom.spotify.clientExact Apple Lookup match only
Numeric App ID324684580Exact trackId match only
App Store URLhttps://apps.apple.com/us/app/spotify/id324684580Numeric ID extracted, then verified

If an identifier is missing, unavailable in a requested storefront, ambiguous, or returns incomplete metadata, that target fails closed. The Actor never substitutes a sample app, a search result, or a default App ID.

Inputs

FieldDefaultMeaning
appsrequiredBundle IDs, numeric App IDs, or App Store URLs; maximum 25
countries["us"]Two-letter Apple storefront codes; maximum 10
modedeltadelta reads/writes state; snapshot returns the current visible window without touching delta state
firstRunemitAllemitAll returns an initial backfill; baseline starts silently
stateKeyautomaticSaved Tasks use their Task ID; direct runs use a stable direct namespace plus resolved target keys. Set an explicit unique value for another direct workflow over the same targets
resetStatefalseRebuild this monitor's target state after successful scans; turn it off after the reset run
maxPages21–10 pages per target, up to 50 reviews per page
minRating / maxRating1 / 5Rating output range
sinceunsetISO 8601 output filter on Apple's updated timestamp
versionsunsetExact reviewed app-version values
includeKeywordsunsetOutput when title or body contains any value, case-insensitively
excludeKeywordsunsetSuppress output when title or body contains any value

Filters affect output, not identity tracking. A review filtered out today is still remembered and does not unexpectedly become “new” when a filter changes. To intentionally backfill under a different filter, use another stateKey or a one-time resetState run.

The Actor accepts at most 25 app × country targets per run. This conservative V1 limit protects runtime and cost until larger cloud workloads are benchmarked.

Review output

The default Dataset contains only review events. Errors and run statistics are never mixed into the review rows.

{
"schemaVersion": "1.0",
"requestedIdentifier": "com.spotify.client",
"bundleId": "com.spotify.client",
"appId": "324684580",
"appName": "Spotify: Music and Podcasts",
"country": "us",
"reviewId": "14289955980",
"rating": 1,
"title": "Example title",
"body": "Example public review text",
"author": "Public reviewer name",
"appVersion": "9.1.62",
"appleUpdatedAt": "2026-07-11T12:31:00.000Z",
"firstSeenAt": "2026-07-13T00:10:00.000Z",
"fetchedAt": "2026-07-13T00:10:00.000Z",
"sourceUrl": "https://itunes.apple.com/us/review?id=324684580&type=Purple%20Software",
"dedupeKey": "324684580:us:14289955980",
"reviewHash": "sha256…",
"eventKey": "324684580:us:14289955980:sha256…",
"isNew": true,
"isChanged": false,
"changeType": "new"
}

dedupeKey is the stable identity of an app × country × review. reviewHash changes when the public author, title, body, rating, app version, or Apple updated value changes. eventKey = dedupeKey + reviewHash identifies one exact delivered version: retrying the same event keeps the same eventKey, while a legitimate review edit produces a new one.

Apple's public review feed exposes updated, but no distinct creation timestamp. The Actor therefore reports appleUpdatedAt and its own firstSeenAt; it does not invent a creation date.

Apple may return the same app-level sourceUrl for multiple reviews. Do not treat it as a unique review URL.

Run summary

The default Key-Value Store record OUTPUT contains the machine-readable run summary and a result for every attempted target.

{
"schemaVersion": "1.0",
"mode": "delta",
"stateKey": "mobile-products",
"targetsRequested": 2,
"targetsAttempted": 2,
"targetsSucceeded": 2,
"targetsFailed": 0,
"targetsSkippedDueToBudget": 0,
"budgetLimitReached": false,
"reviewsFetched": 100,
"reviewsNew": 3,
"reviewsChanged": 1,
"reviewsFilteredOut": 2,
"reviewsOutput": 2,
"targets": [
{
"requestedIdentifier": "com.spotify.client",
"appId": "324684580",
"country": "us",
"status": "succeeded",
"pagesFetched": 1,
"stoppedReason": "stateBoundary",
"stateAdvanced": true
}
]
}

Use OUTPUT.targets[].error for target-level failures and warnings for coverage conditions. The Actor does not log public review bodies.

State and delivery semantics

  • State is stored in the named Key-Value Store app-store-review-delta-monitor-state, separately from each run's output storage.
  • Saved Tasks automatically include their Task ID in the state namespace when stateKey is blank. Direct runs use direct; the state record still includes resolved App ID + country, so changing from bundle ID to numeric ID does not reset the monitor. Use an explicit stateKey to isolate multiple direct workflows over the same targets.
  • A target's state is written only after its scan succeeds and accepted review items have been written.
  • If a spending limit accepts only part of a result batch, state is marked pendingOutput; the next run scans the configured window past already delivered rows so the remaining events can still be emitted.
  • Dataset writes and Key-Value Store updates are not a cross-storage transaction. A platform interruption between them can produce a duplicate on retry. Delivery is therefore at least once. Use eventKey for retry-safe downstream idempotency; use dedupeKey only when grouping all versions of one review.
  • Do not overlap two runs using the same stateKey and targets. Schedule the next run after the previous one can finish.

Reliability safeguards

  • Uses the fresher first-page URL without an explicit page=1, avoiding a stale CDN behavior reproduced during live testing.
  • Constructs JSON page 2–10 URLs instead of following Apple's advertised next links, which can return XML or self-loop.
  • Handles feed.entry as absent, a single object, or an array.
  • Verifies exact app identity through Apple Lookup before reading reviews.
  • Retries 429, 5xx, network, timeout, and malformed-JSON responses with bounded backoff.
  • Rejects non-chronological pages and cross-page time reversal instead of publishing a potentially false delta.
  • Rejects a whole review window—or one known review version—that moves backward relative to saved state.
  • Deduplicates review IDs when pagination shifts during a run.
  • Never advances a failed target's state.

Active PPE launch pricing

PPE pricing became active at 2026-07-13T19:04:44.648Z for build 1.0.4 (HhOSUA2ui48AXpZtM). It is designed around the monitoring job, not repeated historical rows:

  • apify-actor-start: $0.00005 per start (Apify synthetic event);
  • app-country-check: $0.005 per successfully fetched app × country target;
  • apify-default-dataset-item: $0.0001 per review event actually written.

app-country-check is the primary event. A run needs a maximum-charge allowance of at least $0.00505 for one Actor start plus one successful check. Private pre-release tests verified a full 50-item run, a budget-limited 2-item run, one invalid plus one valid target, and two identifiers resolving to the same target; event counts and spending limits behaved as designed.

At the launch price, checking 5 apps across 3 countries once per day costs about $2.25/month in successful-check events, plus $0.0001 for each emitted new/changed review and the small start event. Invalid or inconsistent targets fail before the successful-check charge.

The user's maximum cost per run is respected. Event prices shown in the Apify Console at run time are authoritative.

Four publisher-operated cloud runs verified full output, budget-limited partial output, invalid-target isolation, and resolved-target deduplication before launch. The public Store page and anonymous Actor metadata expose the active PAY_PER_EVENT pricing.

Important limits

  • Apple's public storefront feed exposes at most 10 pages × 50 reviews—roughly the latest 500 reviews per app × country, not all history.
  • If saved state is not reached within maxPages, the target fails without charging or advancing state and asks the user to raise maxPages. If the boundary is already outside Apple's 500-review window, the Actor cannot recover the missing history and requires an explicit reset/rebaseline.
  • Reviews can appear late, move between pages, be edited, or disappear under Apple's control.
  • This is scheduled polling, not real-time delivery.
  • Developer replies are not available from this feed.
  • iOS storefront reviews are the tested scope. macOS-only claims are intentionally not made.
  • Storefront availability varies. A valid App can be unavailable in a particular country.
  • The data source is a public Apple storefront endpoint, not a private App Store Connect API and not an Apple partnership.
  • Public reviewer names and text are user-generated content. Apply your own privacy, retention, moderation, and downstream escaping rules.

Local development

Requires Node.js 20+; the Actor image uses Node.js 24.

npm install
npm test
npm run test:live
npm start

For a local Actor run, place input in storage/key_value_stores/default/INPUT.json. Do not commit real review fixtures or reviewer data.