Skip to main content
Glama

AppTail – ASO & Keyword Research

Get Reviews

get_reviews
Read-only

Reviews for any app over a window, filtered by storefront, star rating, text, or whether the developer has replied — plus the shape of the period: how many arrived per bucket, what they averaged, and where the app's pooled store rating stood while they did. Reviews exist for every app whether or not App Store Connect is connected, because they are read from the public store. This is the tool for "what are people complaining about": filter it and read the reviews yourself rather than asking for a summary. Every review says whether it can be answered (can_reply) and where an existing reply stands (reply_state); reply_to_reviews is what answers them.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
toNoEnd date, `YYYY-MM-DD`, inclusive. Send it alone and the window is the three years before it.
fromNoStart date, `YYYY-MM-DD`, inclusive. Overrides `period` when both are sent. Send it alone and the window runs to today.
limitNoMax reviews, newest first. Default 25, capped at 200. The answer always says how many matched.
app_idYesApptail app id. get_account for the user's own apps, search_apps for any other. Reviews are readable for any app in the store, including competitors.
periodNoThe window to report on. A calendar month as `2026-07`, a calendar year as `2026`, `last_month`, `this_month`, `last_year`, or a trailing window: `today`, `7d`, `14d`, `30d`, `90d`, `180d`, `365d`, `730d`, `1095d`. Defaults to `30d`. A calendar period is compared against the calendar period before it — July against June, not against the 31 days ending 30 June. Three years is the ceiling. **This tool also takes `all`**, which is the app's whole review history and the only period that reaches a backlog older than three years. Reviews are kept for the life of the app and the console's own reviews screen has no date bound at all, so the ceiling above is about first-party analytics and not about these rows. Send `all` for "what have we never answered" and for anything asking about a review from years ago; the trend then buckets by quarter or year.
ratingNoOnly these star ratings, e.g. `[1, 2]` for the critical ones. Omit for all five. The `summary` counts are deliberately NOT filtered by this, so a call asking only for one-stars still learns how many reviews the period actually held.
countryNoOnly reviews from this storefront (e.g. de). Omit for every storefront, which is usually right — one storefront's reviews are a thin sample. Send it when `ratings.by_country` on get_app has pointed at a market, which is the follow-up that finds out why it is low.
containsNoOnly reviews whose title or body contains this text, case-insensitively. Title as well as body, because a complaint is as often the headline as the paragraph. This is how you check a hypothesis — "crash", "subscription", "ads" — rather than reading everything.
unansweredNoOnly reviews the developer has never replied to. False or omitted for all of them. Combined with `rating: [1, 2]` this is the work queue the console leads with — and **a backlog has no window**, so send `period: "all"` when you mean all of it. `summary.unanswered` is the whole-history count either way, and a list that is smaller than it is a windowed list, not a shorter backlog.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
countYesReviews returned.
totalYesReviews matching the filters in this window. Larger than `count` when the list was capped.
trendYesThe shape of the period. Compare `average_rating` with `store_rating` bucket by bucket: the first is the mood of what arrived, the second is the running total the store ranks on, and the gap between them is the finding.
app_idYesThe app the reviews belong to.
windowYesThe window actually read, which is not always the one asked for: an inverted range is swapped, a range past three years is shortened, and first-party figures are pulled back to the last day App Store Connect reported. Quote these dates, not the requested ones.
countryNoStorefront the list was narrowed to, or null for every storefront.
repliesYesWhether replying is available to this account at all. Read it together with `can_reply` on each review: this is about the account's key, that is about the individual review having an App Store Connect id. Both must be true.
reviewsYesThe matching reviews, newest first, in the language they were written in. Read them; do not ask for a summary you can produce better yourself.
summaryYesThe period in figures. `arrived*`, `critical*` and `average_rating*` are flows *in the window*; `all_time`, `unanswered` and `store_rating*` are the app's standing position and ignore it. Mixing the two is how "we got 12 reviews and have 400" becomes one number.
app_nameNoIts name.
filteredYesTrue when any of `country`, `rating`, `contains` or `unanswered` narrowed the list. Worth saying out loud: "no reviews" under a filter is not "no reviews".
truncatedYesTrue when `count` is below `total`. Say the list is a sample rather than presenting it as everything that was written.
console_urlNoThe app's Reviews screen in the console.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds meaningful context beyond the readOnly/openWorld annotations: reviews are read from the public store and exist for every app regardless of App Store Connect connection, each review carries can_reply and reply_state, and summary counts are deliberately not filtered by rating. Return value specifics are partly delegated to the output schema, so not a full 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then progressively deeper detail. Dense but each sentence carries routing or behavioral value; the period/can_reply/reply_state sentence and a few em-dash asides are slightly overstuffed, keeping it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a 9-parameter tool with a live output schema and readOnly annotations, the description covers everything an agent needs: scope, cross-tool routing, the all-period ceiling caveat, and the distinction between windowed lists and whole-history summary counts.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema itself is unusually rich, so the baseline is 3, but the description adds selection rationale beyond it: filters map to use cases ('check a hypothesis — crash, subscription, ads'), country is a follow-up to ratings.by_country on get_app, and unanswered + rating [1,2] is the work queue.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Reviews for any app over a window') plus the filterable dimensions and the aggregate shape returned. It distinguishes itself from siblings by naming get_app, search_apps, get_account and reply_to_reviews and clarifying the read-yourself framing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing: 'this is the tool for "what are people complaining about"... rather than asking for a summary', 'get_account for the user's own apps, search_apps for any other', and '`reply_to_reviews` is what answers them'. It also gives when-not guidance for the country filter (one storefront is a thin sample).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources