App Store & Google Play Review Intelligence

io.github.gunnargray-dev由 GitHub 账号 gunnargray-dev 发布v1.1.3更新于 Oct 30, 2026

App Store + Google Play reviews: top complaints, what got worse by version, cross-store comparisons.

发布方自己的服务:Review Expert

已验证Streamable HTTP可网页运行网页搜索与抓取数据与分析商业与电商

概览

AI 生成的概览

分析 App Store 与 Google Play 评论,给出主要抱怨、版本间退步和竞品对比,适用于任意 iOS 或 Android 应用。

可以做什么
  • 按名称或类别在 App Store 或 Google Play 搜索应用,获取 id、评分、安装量和价格
  • 获取单个应用的评论洞察:评分分布、按版本评分、带引用的主要抱怨短语,以及最新版本变差的地方
  • 拉取原始评论文本,含评分、版本、日期和有用票数,供自行分析
  • 并排对比 2 到 10 个应用,可混用 Apple 与 Google Play 的 id,给出各项指标领先者和主要抱怨
适用场景
适合想了解用户为何不满、最近一次更新是否让情况变差,或想基于近期文字评论比较自家应用与竞品时使用。
运行要求
使用 Apify 托管的 Streamable HTTP 端点,需 Apify API 令牌,通过 Authorization 的 bearer 头发送(不支持自定义头的客户端可用 token 查询参数)。需要 Apify 账户,调用按事件计费。也可用 Node.js 自托管,通过 stdio 或本地 HTTP 运行。
安装前请注意
付费服务:每次成功的工具调用按事件计费(例如按返回的评论条数,或洞察与对比调用按次固定收费),另有 Actor 启动费。Apify API 令牌属于凭据;优先用 Authorization 头而非把令牌放进 URL,因为 URL 可能进入日志,并建议使用受限范围的令牌。数据来自非官方、未公开文档的 Apple 与 Google Play 端点,可能变更或限流。工具均为只读,服务器无状态。

安装

在 SourceWeft 中

  1. 打开 控制台中的 App Store & Google Play Review Intelligence,将其添加到工作区。
  2. 连接 Authorization token 凭据。它们会被私密存储,绝不会在公开页面上展示。
  3. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.gunnargray-dev%2Fapp-store-review-intelligence-mcp/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "app-store-google-play-review-intelligenc": {
      "type": "http",
      "url": "https://parallelstudio--app-store-review-intelligence-mcp.apify.actor/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

README

App Store & Google Play Review Intelligence MCP Server

[MCP Registry] [Apify] [Glama score] [License: MIT]

Ask your AI agent what users hate about any iOS or Android app, and what broke in the last update. This MCP server searches the Apple App Store and Google Play, pulls recent reviews for any app (yours or a competitor's), and returns analysis your agent can use directly: top complaints with quotes, rating by version, what got worse in the latest version, and side-by-side competitor benchmarks. No API keys, no App Store Connect or Play Console access needed.

Hosted (no setup): apify.com/parallelstudio/app-store-review-intelligence-mcp. Connect any MCP client to https://parallelstudio--app-store-review-intelligence-mcp.apify.actor/mcp with your Apify token and pay per call. You can also run this open-source code locally over stdio: npm install && npm run build && npx app-review-intel-mcp.

Now with Google Play: every tool works on both the Apple App Store and Google Play, including iOS-vs-Android comparisons.

Works with Claude Desktop, Claude Code, Cursor, VS Code, Windsurf and any client that supports MCP over Streamable HTTP.

What you can ask

  • "What broke in Instagram's last update?" review_insights compares the newest version with the previous one: rating change, negative-share change, and the complaints that rose most, with quotes.
  • "Top 10 complaints about Duolingo on Android vs iOS." Same tool, either store. The store is inferred from the app id.
  • "Compare Notion, Obsidian and Evernote. Who has the unhappiest users, and why?" compare_apps gives one table with leaders per metric. You can mix Apple and Google Play ids.
  • "Find the top meditation apps on Google Play." search_apps returns ids, ratings, installs and prices.
  • "Show me the latest reviews mentioning crashes." get_app_reviews returns raw review text for your own analysis.

Tools

ToolUse it whenReturnsBilling
search_appsYou have an app name or a category and need its idid (Apple numeric id or Play package name), name, developer, rating, rating count, price, genre, version, URL; installs on Google Playper call
review_insightsStart here for any "why are users unhappy / what changed / summarize feedback" questionrating distribution, rating by version, top complaint phrases (share of 1–2★ reviews + quote), versionDeltas (latest vs previous version: rating change, rising complaints with quotes), sample quotesflat per call
get_app_reviewsYou need the actual review textreviews with rating, title (Apple), body, version, date, helpful votes; developer replies on Google Playper review returned
compare_appsCompetitor benchmark of 2–10 apps (Apple and Google can be mixed)store rating & count, installs, price, version, recent average, % negative/positive, latest-version average, top 5 complaints, leadersflat per call

Parameters. app_id accepts an Apple id (284882215, id284882215, or an apps.apple.com URL) or a Google Play package name (com.instagram.android or a play.google.com URL). store (apple | google) is optional because it's inferred from the id. On search_apps it defaults to apple. country is a 2-letter storefront code (us, gb, de…). pages is 1–10, about 50 reviews each. lang (Google Play only, default en) picks the review language. review_insights also takes countries (pool up to 10 storefronts), since_version (choose the version to compare from), keyword_limit and quotes.

All tools are read-only. Errors come back as MCP tool errors (isError: true), prefixed invalid_input, upstream_error or internal_error.

Example output

review_insights { "app_id": "389801252", "countries": ["us", "gb"] } (Instagram for iOS, real call, October 2026, trimmed):

json
{  "sample": { "reviews": 300, "negativeReviews": 188, "byCountry": { "us": 150, "gb": 150 } },  "ratingDistribution": { "average": 2.42, "total": 300 },  "storeRating": { "averageRating": 4.69, "ratingCount": 29583259 },  "versionDeltas": {    "basis": "version",    "latest":   { "label": "450.1.0", "reviews": 210, "averageRating": 2.17, "negativeShare": 0.695 },    "previous": { "label": "previous versions 448.0.0–450.0.0", "reviews": 90, "averageRating": 3.0, "negativeShare": 0.467 },    "change": { "averageRating": -0.83, "negativeShare": 0.228 },    "whatGotWorse": [      { "phrase": "ipad", "status": "new", "latestShare": 0.24, "previousShare": 0, "change": 0.24,        "examples": [{ "rating": 1, "text": "iPad Update Ruined Reels. Tiny, unchangeable aspect ratio that hovers over the search page?…" }] },      { "phrase": "reels", "status": "increased", "latestShare": 0.281, "previousShare": 0.095, "change": 0.186 },      { "phrase": "full screen", "status": "new", "latestShare": 0.11, "previousShare": 0, "change": 0.11,        "examples": [{ "rating": 1, "text": "Broken UI in latest update. Can no longer see full screen reels in iPad. They now crop reels to square format…" }] }    ],    "confidence": "high",    "summary": "Version 450.1.0 (210 reviews) average 2.17★ vs 3.00★ for previous versions 448.0.0–450.0.0 (90 reviews), −0.83; negative share 69.5% vs 46.7% (+22.8 pp). Rising complaints: \"ipad\" (new, 24% of negative reviews), …"  },  "complaintKeywords": [    { "phrase": "reels", "reviews": 45, "share": 0.239, "example": "…" },    { "phrase": "ipad", "reviews": 35, "share": 0.186, "example": "…" },    { "phrase": "account", "reviews": 34, "share": 0.181, "example": "…" },    { "phrase": "full screen", "reviews": 16, "share": 0.085, "example": "…" }  ]}

search_apps { "term": "meditation", "store": "google", "limit": 3 }:

idnamedeveloperratinginstalls
com.spotlightsix.zentimerlite2Insight Timer - Meditation AppInsight Network Inc4.7010,000,000+
meditofoundation.meditoMedito: Meditation & SleepMedito for Mindfulness, Meditation and Sleep4.791,000,000+
com.getsomeheadspace.androidHeadspace: Sleep & MeditationHeadspace for Meditation, Mindfulness and Sleep4.2610,000,000+

compare_apps { "app_ids": ["324684580", "com.spotify.music"], "pages": 1 } compares Spotify on iOS and Android. It reports a 4.77 vs 4.35 store rating, a 4.18 vs 3.90 recent average, and 16% vs 28% negative reviews. Top Android complaints: premium, song, ads.

See demo/transcript.md for full, untrimmed responses from every tool.

Step-by-step recipes (release check, competitor teardown, iOS vs Android, a weekly watch in Claude Code) with real results and per-workflow cost: docs/workflows.md.

Pricing

Pay-per-event: tool events are charged only for successful calls. Calls that fail validation or can't reach the store are not charged as tool events. Apify also charges its standard Actor start event ($0.00005 per GB of memory, minimum one event) each time a server instance starts. At the default 512 MB standby memory that's $0.00005 per start, and one running instance serves many calls before it idles out. The Pricing tab on this Actor is the authoritative list of current prices.

EventPriceCharged for
search-apps$0.002each App Store search_apps call
review$0.001each App Store review returned by get_app_reviews (50 reviews = 50 events; 0 reviews = no review events)
review-insights$0.03each App Store review_insights call, flat. Reviews analyzed internally are not charged as review events
compare-apps$0.05each compare_apps call with only App Store apps, flat however many apps or reviews

Google Play calls are billed as separate events at the same prices: play-search $0.002 per search, play-review $0.001 per review, play-review-insights $0.03 per call, play-compare-apps $0.05 per comparison that includes any Google Play app.

Tip: review_insights and compare_apps cost the same however many reviews they analyze. For aggregates they are much cheaper than pulling hundreds of raw reviews.

Connect your MCP client

Endpoint (Streamable HTTP):

https://parallelstudio--app-store-review-intelligence-mcp.apify.actor/mcp

Authenticate with your Apify API token by sending it as Authorization: Bearer <APIFY_TOKEN>.

Cursor (~/.cursor/mcp.json or .cursor/mcp.json)

json
{  "mcpServers": {    "app-store-reviews": {      "url": "https://parallelstudio--app-store-review-intelligence-mcp.apify.actor/mcp",      "headers": {        "Authorization": "Bearer <APIFY_TOKEN>"      }    }  }}

Windsurf (~/.codeium/windsurf/mcp_config.json)

json
{  "mcpServers": {    "app-store-reviews": {      "serverUrl": "https://parallelstudio--app-store-review-intelligence-mcp.apify.actor/mcp",      "headers": {        "Authorization": "Bearer <APIFY_TOKEN>"      }    }  }}

Claude Desktop (claude_desktop_config.json)

Claude Desktop's config file only launches local (stdio) servers, so bridge to the hosted endpoint with mcp-remote (needs Node.js). The same block works in any other client that only supports stdio:

json
{  "mcpServers": {    "app-store-reviews": {      "command": "npx",      "args": [        "-y", "mcp-remote",        "https://parallelstudio--app-store-review-intelligence-mcp.apify.actor/mcp",        "--header", "Authorization: Bearer ${APIFY_TOKEN}"      ],      "env": { "APIFY_TOKEN": "<APIFY_TOKEN>" }    }  }}

Clients that can't send headers

Apify also accepts the token as a token query parameter, so a client that only takes a URL can use:

https://parallelstudio--app-store-review-intelligence-mcp.apify.actor/mcp?token=<APIFY_TOKEN>

Prefer the Authorization header when your client supports it: a token in a URL can end up in logs. A scoped Apify token limits the damage if it leaks.

Claude Code

bash
claude mcp add --transport http app-store-reviews \  https://parallelstudio--app-store-review-intelligence-mcp.apify.actor/mcp \  --header "Authorization: Bearer $APIFY_TOKEN"

VS Code (.vscode/mcp.json)

json
{  "servers": {    "app-store-reviews": {      "type": "http",      "url": "https://parallelstudio--app-store-review-intelligence-mcp.apify.actor/mcp",      "headers": { "Authorization": "Bearer ${input:apifyToken}" }    }  },  "inputs": [{ "id": "apifyToken", "type": "promptString", "description": "Apify API token", "password": true }]}

Example prompts

Four ready-made workflows, with the prompt, tool calls and real results in docs/workflows.md:

WorkflowToolsTool-event cost on the hosted server (plus the Actor start fee above)
Release check: did our last update make things worse?review_insights$0.03
Competitor teardown before a roadmap or pricing callsearch_apps, compare_apps$0.052
iOS vs Android: which platform is unhappier?compare_apps$0.05
Weekly review watch in Claude Code (cron + claude -p)review_insights$0.06 per week
  • "Find the Duolingo app id and summarize what users complained about in the last 300 US reviews."
  • "Did Instagram's latest iOS release make things worse? Use us, gb and ca."
  • "Compare Spotify on iOS and Android: which platform's users are unhappier, and about what?"
  • "Compare Spotify, Apple Music and YouTube Music on recent reviews and tell me each one's biggest complaint."

How complaint keywords and "what got worse" are computed

The method is transparent and deterministic. It uses no LLM and no black-box model:

  1. Tokenize each 1–2★ review. Curly and straight apostrophes are treated the same.
  2. Build 1-, 2- and 3-word phrases made only of content words. Stopwords, filler ("never", "just", "still", "really", "keep"…), review boilerplate ("app", "update", "star"…), numbers and the app's own name and developer are excluded. Plurals and possessives are merged (account/accounts).
  3. Rank phrases by how many reviews mention them, so one long rant can't dominate. Multi-word phrases get a small boost.
  4. Drop redundant phrases. A word disappears when a longer phrase covers most of its mentions (screen → full screen), and near-duplicate phrases are merged.
  5. Version deltas: split the sample into the newest app version and the version(s) just before it, or use since_version. Compare average rating and negative share, then rank phrases by how much their share of negative reviews rose. If the sample holds a single version, fall back to the last 3 days (or 24 hours) vs earlier. If that's not possible either, say so and suggest more pages or countries. A confidence level reflects how many negative reviews each side has.

Limitations

  • Recent reviews, not the whole history. Up to 500 reviews per app, storefront and call (Apple's feed serves 10 pages of 50; the same cap applies to Google Play). Insights describe recent written reviews. The store-wide rating and count are reported separately.
  • Busy apps cover only a few days. For apps like Instagram, 150 reviews may span one day and a single version. versionDeltas then explains this and suggests more pages or countries.
  • Unofficial endpoints. Apple's iTunes Search/Lookup APIs and RSS feed, and Google Play's public web endpoints, are key-less but undocumented for this use. They can change or rate-limit. The server retries with backoff, caches responses for 5 minutes, and returns partial results with warnings when a page or storefront fails.
  • Google Play specifics. Reviews have no title, and filtering is by lang (default en) more than by country. Storefronts overlap, so review_insights de-duplicates reviews across countries. Many apps report "varies with device" instead of a version number. App size is not available.
  • Apple specifics. The feed has no developer replies and no rating-only (unwritten) reviews.
  • English-centric keywords. Reviews in any language are returned and counted, but the stopword list is mainly English, with basic Spanish, French and German.

FAQ

Do I need an Apple developer account, Play Console access or an API key? No. All data comes from public App Store and Google Play endpoints. You only need an Apify account and token to call this hosted server.

Can I analyze apps I don't own? Yes. Any app listed on the App Store or Google Play works, including competitors' apps.

How do I analyze the Android version of an app? Use its Google Play package name (com.spotify.music) or Play URL as app_id, or call search_apps with store: "google" to find it.

Why is the sample average so different from the store rating? The store rating covers every rating the app has ever had, including the many silent 5★ taps. The sample covers only the most recent written reviews, and people who write reviews are more often unhappy. The gap is useful: a sharp drop in the recent average usually points to a problem in a recent release.

How many reviews does review_insights analyze? pages × 50 per storefront, up to 500 per country. With pages: 10 and 10 countries, that's up to 5,000 reviews in one call, charged as a single event.

Which countries are supported? Any storefront, by its 2-letter code. App Store reviews are separate per storefront, so pass several countries to review_insights for wider coverage. On Google Play, use lang to get reviews in other languages.

Is any data stored? No. The server is stateless. It keeps only a short in-memory response cache and writes nothing to datasets or key-value stores.

Can I self-host it? Yes. Run npm install && npm run build, then node dist/index.js for stdio or node dist/index.js --http for Streamable HTTP at http://127.0.0.1:3000/mcp. Self-hosted, billing is off unless you set BILLING=apify.

Self-hosting and development

bash
npm installnpm run buildnpm start              # MCP over stdionpm run start:http     # Streamable HTTP at http://127.0.0.1:3000/mcp (GET / and /health = health check)npm test               # build + unit checks + end-to-end smoke test against live Apple and Google Play endpoints
env vardefaultpurpose
PORT / HOST3000 / 127.0.0.1HTTP bind (--http); also --port, --host
HTTP_TIMEOUT_MS15000per-request timeout to Apple / Google Play
HTTP_MAX_RETRIES2retries on 408/425/429/5xx/network errors
CACHE_TTL_MS300000in-memory cache TTL (0 disables)
BILLING(unset); apify in the Docker imageapify enables Actor.charge() pay-per-event billing
GOOGLE_PLAY_ENABLEDenabledfalse hides Google Play from tool schemas and rejects Google Play ids with a "coming soon" error

On Apify (Standby mode). When APIFY_IS_AT_HOME is set, the server calls Actor.init(), forces HTTP mode, and listens on 0.0.0.0:$ACTOR_WEB_SERVER_PORT, falling back to ACTOR_STANDBY_PORT, then PORT. GET / answers the Standby readiness probe and MCP is served at /mcp. The HTTP server has no authentication of its own: on Apify, the platform authenticates requests with your API token. If you self-host it beyond localhost, put it behind an auth proxy.

.actor/        actor.json, input_schema.json (empty), output_schema.json (MCP endpoint)Dockerfile     apify/actor-node:20, multi-stage TypeScript build, BILLING=apifysrc/  index.ts     entry: stdio or stateless Streamable HTTP; Apify Standby wiring  server.ts    MCP tool registrations (zod schemas, error mapping, billing)  http.ts      shared HTTP client: timeout, retry, cache  itunes.ts    Apple API client: search, lookup, review feed parsing  googleplay.ts Google Play client: search, app details, reviews (batchexecute)  insights.ts  distribution, by-version stats, n-gram keywords, version deltas, quotes  billing.ts   chargeEvent() → Actor.charge() when BILLING=apify  util.ts      errors, cache, concurrency limiter, input normalizationtest/smoke.mjs unit checks + end-to-end test via the MCP SDK client (stdio + HTTP)

License

MIT

来源:README.md,提交 e77a73d

工具

0
该服务器需要 API 密钥等凭据,因此 SourceWeft 无法在没有凭据的情况下读取其工具,也未收录。

版本历史

3
  1. v1.1.3最新Oct 29, 2026
  2. v1.1.2Oct 18, 2026
  3. v1.1.0Oct 13, 2026

评分

已满足适用检查项的 85%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

其他 Review 集成