App Store reviews
POST https://tools.yukai.uk/api/v1/appstore/reviews
Get App Store reviews of an app. Reads Apple's customer-reviews feed (the newest 500 written reviews per country, 50 per page) with retries for Apple's empty and rate-limited pages, then sorts and filters.
Cost
Credits: 1 per review ($0.0001 per review). 50 credits are reserved before the call; the call is then settled on the real number of items returned. Failed calls are free. Source price: apple-app-store-reviews/review.
Input
Send a JSON body (POST) or the same fields as a query string (GET).
Required: app.
| Field | Type | Default | Description |
|---|---|---|---|
app required | string | App Store URL (https://apps.apple.com/us/app/instagram/id389801252), numeric app id (389801252), bundle id (com.burbn.instagram) or an app name to search. Aliases: id, appId, url, bundleId. | |
country | string | "us" | Two-letter App Store country (storefront). Default: the country in the App Store URL, else us. |
sort | string | "mostRecent" | Order of the reviews returned. |
limit | integer | 100 | Maximum reviews returned. |
minRating | integer | 1 | Only reviews with at least this many stars. |
maxRating | integer | 5 | Only reviews with at most this many stars. |
since | string | Only reviews since a date (2026-09-01) or a period (30 days, 2 weeks). |
Examples
Replace tt_live_XXXX with your key from the pricing page.
curl
curl -i -X POST "https://tools.yukai.uk/api/v1/appstore/reviews" \
-H "Authorization: Bearer tt_live_XXXX" \
-H "Content-Type: application/json" \
-d '{"app":"389801252"}'JavaScript (fetch)
const res = await fetch("https://tools.yukai.uk/api/v1/appstore/reviews", {
method: "POST",
headers: { "Authorization": "Bearer tt_live_XXXX", "Content-Type": "application/json" },
body: JSON.stringify({"app":"389801252"}),
});
console.log(res.status, res.headers.get("x-credits-charged"), res.headers.get("x-credits-balance"));
console.log(await res.json());Python (requests)
import requests
r = requests.post(
"https://tools.yukai.uk/api/v1/appstore/reviews",
headers={"Authorization": "Bearer tt_live_XXXX"},
json={"app": "389801252"},
timeout=120,
)
print(r.status_code, r.headers.get("x-credits-charged"), r.headers.get("x-credits-balance"))
print(r.json())
Response
JSON with "success": true and the result fields; on failure {"success": false, "error": {"code", "message", "retryable"}} and no credits are used. Every answer carries x-credits-charged (credits used) and x-credits-balance (balance after the call); check the balance any time with GET https://tools.yukai.uk/v1/billing/balance.
Full field list and response schema: OpenAPI spec app-store (its servers entry is the marketplace gateway; call https://tools.yukai.uk with your key).