App Store Reviews Monitor & Analyzer avatar

App Store Reviews Monitor & Analyzer

Pricing

from $0.50 / 1,000 review scrapeds

Go to Apify Store
App Store Reviews Monitor & Analyzer

App Store Reviews Monitor & Analyzer

Fetches the most recent App Store reviews for any app from Apple's official public RSS feed and returns clean structured data plus a built-in summary: average rating, rating breakdown, low-rating share, most-reviewed app versions, and the top complaint signals in 1-2 star reviews. No login, no...

Pricing

from $0.50 / 1,000 review scrapeds

Rating

0.0

(0)

Developer

Donghai Li

Donghai Li

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

18 hours ago

Last modified

Categories

Share

App Store Reviews Monitor & Analyzer β€” Apify Actor (deploy-ready, not yet published)

Fetches the most recent App Store reviews for any app and returns clean structured data plus a run summary (average rating, rating breakdown, low-rating share, most-reviewed app versions, top complaint signals in 1–2β˜… reviews). Built for ASO monitoring, indie devs, support/QA teams and scheduled "new bad review" alert pipelines (Make/Zapier/n8n via Apify schedules + webhooks).

Status: built and locally verified 2026-10-29 (offline sample test + live test, both below). No Apify account exists yet and nothing has been published β€” deployment steps are at the bottom.

Why this niche (scan summary, Oct 2026)

Selection rules: public/legit data only, visible demand, no dominant free incumbent, AI-maintainable, and pay-per-event economics that can't go negative (Apify retired rental pricing Apr 2026 β€” PPE is the only model for new Actors, and browser/proxy-heavy Actors can lose money per sale).

CandidateDemand evidenceVerdict
App Store / Play Store reviews βœ…Oct 2026 public bench of Store review Actors (300-review jobs, field-fill 71–85%, $0.09–$0.43 per 1K reviews); G2 reviewers cite review fetching as a real Apify use; every app team needs review monitoringWINNER β€” official public RSS feed, zero proxy/browser cost
Google Maps business leads541–577K users, 35K monthly, $1.50–$4.00/1K placesRejected: dominant incumbent (compass/crawler-google-places), criterion (c) fails
Google SERP / SEO data171K users, 15K monthly, ~$1.80/1K pagesRejected: dominant official Actor, saturated
Job postings (Indeed etc.)valig/indeed-jobs-scraper 36.7K users but $0.10/1K jobsRejected: price already at floor, margin impossible; Indeed anti-bot = breakage
Shopify price/stock monitor (public /products.json)Real merchant pain, public endpointsStrong #2 β€” demand evidence thinner/less quantified; build next
E-commerce price monitoring (Amazon/Kroger)Kroger Actors ~$3.30/1K productsRejected for #1: ToS-hostile targets, residential-proxy costs eat PPE margin, high breakage
Public company registers (Georgia/Armenia-style)Dev.to build log: 5 Actors live, top Store results β€” 0 paying users in week 1Rejected: no competition but demand UNPROVEN (weak evidence, marked honestly)
Google review monitors ("Review Radar" pattern)Dev.to playbook sells $0.25/run + $0.01/reviewRejected for #1: depends on Google Maps scraping infra (browser + proxy cost, breakage)

Winner justification: Apple's customer-reviews RSS feed is an official, login-free, public feed β€” no scraping arms race, no proxy bill, compute per run is a few plain HTTPS GETs, so PPE margin is structurally safe. Incumbents are beatable on fields/speed (bench: most-used Actor 71% fields filled, 183s vs 57s for a 300-review job) and none lead with analytics. The summary block (rating mix, low-rating share, top complaint words per version) is the differentiator: raw scrapers sell rows, this sells "is the new update hurting us?" in one scheduled run.

What it does

Input: an App Store app ID or apps.apple.com URL, a storefront country, and a max review count (≀500 β€” Apple's feed cap). Output: one dataset item per review + a SUMMARY object in the key-value store. Optional mode pushes only 1–2β˜… reviews to the dataset (alert pipelines) while the summary is still computed over everything fetched.

Input (/.actor/input_schema.json)

FieldTypeDefaultNotes
appIdOrUrlstring (required)389801252Numeric id or full store URL
countrystringusStorefront, e.g. us, gb, de, jp
maxReviewsint 1–50010050/page, max 10 pages
onlyLowRatingsboolfalseDataset gets only 1–2β˜… reviews

Output (per review)

reviewId, appId, country, author, rating, title, body, appVersion, updatedAt, helpfulVotes, totalVotes, isLowRating, negativeSignals, storeUrl

Summary (SUMMARY key)

reviewCount, averageRating, ratingBreakdown{5..1}, lowRatingCount, lowRatingSharePct, topVersionsReviewed, topNegativeSignalsInLowReviews, newestReviewAt, oldestReviewAt

Project layout

first-actor/
β”œβ”€β”€ .actor/
β”‚ β”œβ”€β”€ actor.json # name/title/description, dockerfile + schema pointers
β”‚ β”œβ”€β”€ input_schema.json
β”‚ β”œβ”€β”€ output_schema.json # dataset schema
β”‚ └── pay_per_event.json # PPE pricing (see below)
β”œβ”€β”€ Dockerfile # apify/actor-python:3.12
β”œβ”€β”€ requirements.txt # core is stdlib-only; SDK from base image
β”œβ”€β”€ src/
β”‚ β”œβ”€β”€ core.py # ALL logic, pure stdlib β€” testable offline
β”‚ └── main.py # thin Apify entrypoint (charge β†’ fetch β†’ push)
β”œβ”€β”€ local_run.py # offline/live test harness, no account needed
β”œβ”€β”€ tests/sample_feed.json # real Apple feed page (captured 2026-10-29, trimmed)
└── output/ # reviews.json / reviews.csv / summary.json from test runs

Local test results (2026-10-29, actually run)

Offline (python3 local_run.py --sample tests/sample_feed.json): 6 reviews parsed, avg 1.67, breakdown {5:1, 1:5}, low-rating share 83.3%.

Live (python3 local_run.py --app-id 389801252 --country us --max-reviews 20): 20 reviews parsed from Apple's live feed, avg 2.55, breakdown {5:7, 4:0, 3:0, 2:3, 1:10}, low-rating share 65.0%, newest review 2026-10-28. Full items in output/reviews.json; example item:

{
"reviewId": "14721711404", "appId": "389801252", "country": "us",
"author": "Larmyclarmyparmy", "rating": 1,
"title": "Pausing music when opening the app",
"body": "This is new with the last update. Instagram now pauses my music when I open the app...",
"appVersion": "453.0", "updatedAt": "2026-10-28T06:28:12-07:00",
"helpfulVotes": 0, "totalVotes": 0, "isLowRating": true,
"negativeSignals": ["bug"]
}

Proposed pricing (pay-per-event, .actor/pay_per_event.json)

EventPriceReasoning
actor-start$0.10 / runCovers fixed cost on every run β€” the documented PPE trap is per-result-only pricing losing money on small runs. Kept at half the $0.20–$0.25 start fee proven by monitor-style Actors because this Actor has no browser/proxy cost.
review-scraped$0.0005 / review ($0.50 / 1K)Comparables: raw review Actors charge $0.09–$0.43/1K for rows only. $0.50/1K is a small premium for the summary analytics, version breakdown and complaint signals β€” still trivially cheap for the buyer (a maxed 500-review run costs $0.35 total).

Economics: a 500-review run bills $0.35; compute is a few seconds of a small Python container (no browser, no proxy) β‰ˆ $0.005–0.02 platform cost. Creator keeps 80% of event revenue minus platform costs (Apify's standard split; Apify reports $760K paid to creators in Jan 2026 and ~$1.6M in a recent month across the Store). Every Apify user also gets $5/mo free credits, so expect free-tier trial runs before real revenue β€” normal.

Honest expectation: week-1 paying users may be zero (a comparable niche build log reported exactly that). Store ranking is driven by README quality, working defaults, example tasks and early reviews β€” budget the first month as distribution work, not passive income.

Deployment steps (when Brian's Apify account exists β€” Brian's step)

  1. Brian creates the Apify account and adds a payout method (PayPal/Wise) β€” account/payout are his alone; Muse never logs in.
  2. From this folder: apify login (Brian) β†’ apify push β€” or zip-upload via Console β†’ Actors β†’ Create Actor β†’ upload.
  3. In Console, confirm the PPE events from .actor/pay_per_event.json appear under the Actor's pricing (file placement matters: it must live in .actor/, or charges silently don't record).
  4. Run the built-in example task (app 389801252, us, 50 reviews) and verify chargedEventCounts in the run object shows 1Γ— actor-start + 50Γ— review-scraped before making the Actor public.
  5. Publish to Store with example tasks + this README's Store description (in actor.json), then submit for Store review.
  6. Any publish/pricing change after that still goes through Brian's approval, per standing rules.

Maintenance notes

  • Breakage risk: LOW. The RSS-JSON format has been stable for years and is an official feed. Main risks: Apple retiring the feed (would hit every competitor equally) or an app having <50 reviews in a storefront (handled: pagination stops on an empty page; summary handles 0 reviews).
  • No proxies/browsers to babysit. If a storefront returns non-JSON (rare regional quirk), the run fails loudly rather than billing for junk β€” actor-start is the only charge in that case; monitor failed-run rate after launch.
  • Known limits: 500 reviews/app/run max (feed cap); most-recent order only (Apple offers sortby=mosthelpful β€” a v1.1 toggle is a one-line change in core.py); Play Store reviews are a separate v2 (different, unofficial endpoints β€” deliberately out of scope for v1's legit-data rule).
  • Roadmap if it gets traction: v1.1 sort toggle + multi-app input; v1.2 scheduled-diff mode ("only reviews newer than last run" via KVS state β€” the monitor pattern that supports the $0.10 start fee best); then the Shopify price/stock monitor as Actor #2.