App Store Reviews API - Get Customer Reviews
Documentation menu
FetchLayer FetchLayer API

Fetch app reviews

Returns customer reviews for the specified App Store app. Supports filtering by platform, country, language, date, and pagination. Each review includes rating, title, body text, version, and date. Billing is per page actually fetched — the response includes a `pagesFetched` field and you are charged 1 credit per page retrieved (not per page requested). With the default `sort=recent`, reviews are newest-first across every page and platform, so `reviews[0]` is the newest review; passing `since` also stops pagination early once results fall before the cutoff, so a narrow date window can cost far fewer credits than `pages` alone would suggest. With `sort=helpful`, Apple's own ordering is preserved and `since` filters without stopping early, so it still fetches every requested page.

POST /reviews Reviews
https://api.fetchlayer.dev/appstore/reviews
OpenAPI JSON

Headers

Authorization string required

Bearer token — your FetchLayer API key.

Parameters

appId string required

App Store app ID (numeric).

country string optional

Two-letter country code. (default: us)

platforms string[] optional

Filter by one or more platforms: iphone, ipad, mac, appletv, watch, realityDevice.

lang string optional

Language code (e.g. en, ja).

geo string optional

Two-letter geo code for regional results.

pages number optional

Number of pages to fetch. Billed per page actually retrieved (see `pagesFetched` in the response). (default: 1)

reviewsPerPage number optional

Reviews per page (max 20). (default: 20)

sort string optional

Sort order: recent (default) or helpful. (default: recent)

since string optional

Only return reviews dated on or after this ISO 8601 date (inclusive: date >= since). Accepts a bare date like 2026-01-31 or a full timestamp like 2026-01-31T00:00:00Z; an unparseable value returns HTTP 400 before any scraping happens. With sort=recent the scraper also stops paginating once it passes the cutoff, so a narrow window can finish in far fewer than `pages` requests. With sort=helpful, Apple's feed is not date-ordered, so `since` still filters but every requested page is fetched.

Response Fields

reviews

Fetch app reviews

appId string

App Store app ID that was requested.

country string

Country storefront the reviews were fetched from.

reviews object[]

Matching review records.

reviews[].id string

Unique review identifier.

reviews[].rating number

Star rating (1-5).

reviews[].title string

Review title.

reviews[].body string

Full review text.

reviews[].author string

Reviewer display name.

reviews[].version string

App version reviewed.

reviews[].date string

ISO 8601 review date.

reviews[].helpfulCount number

Number of users who found this helpful.

pagesFetched number

Number of pages actually fetched. Billing is multiplied by this value (1 page = 1 credit). You are only charged for pages that were actually retrieved, not the number requested — unchanged by `since`, though with sort=recent a narrow `since` window typically makes this number much smaller.

totalTimeSec string

Total time taken to fetch the requested pages, in seconds.

platforms object[]

Per-platform breakdown of reviews and pages fetched, present when multiple platforms are requested.

platforms[].platform string

Platform name for this breakdown entry.

platforms[].reviews number

Number of reviews returned for this platform.

platforms[].pages number

Number of pages fetched for this platform.

Request

curl -X POST "https://api.fetchlayer.dev/appstore/reviews" \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"appId":"1234567890","country":"us","pages":1}'

Response

{
  "appId": "1234567890",
  "country": "us",
  "reviews": [
    {
      "id": "r123",
      "rating": 5,
      "title": "Great app",
      "body": "Love using this every day!",
      "author": "User123",
      "version": "10.1.0",
      "date": "2026-07-28T12:00:00Z",
      "helpfulCount": 12
    }
  ],
  "pagesFetched": 1,
  "totalTimeSec": "1.42"
}