
Website Content Crawler
scrape.ly/store/querystone/website-content-crawlerAIDeveloper tools
1 monthly user

Scrape public Apple App Store reviews by app ID or listing URL. Each row includes the title, text, star rating, app version, date, country, and reviewer profile.
Download public Apple App Store reviews for any app in any country: star rating, title, text, reviewer, and date. Give it an app ID or a listing URL. No login and no API key. Result fee: $0.00001 per review, which is $0.01 per 1,000 reviews.
389801252 or a full apps.apple.com link.| Field | Key | Description |
|---|---|---|
| App IDs | appIds | Numeric App Store ids, without the id prefix. Used when no listing URL returns reviews. |
| Listing URLs | startUrls | App Store listing URLs. A URL uses the country in the link. |
| Maximum reviews | maxItems | Reviews in total per run, no upper limit. Default 10. |
| Country | country | Storefront for app IDs, default us. |
| Sort | sort | mostRecent, mostHelpful, mostFavorable, or mostCritical. |
| Minimum stars | minScore | Keep reviews with at least this rating. |
| Since date | startDate | YYYY-MM-DD. |
| Transform function | customMapFunction | Optional JavaScript that receives each review and returns the object to save. |
| Proxy configuration | proxyConfiguration | Datacenter by default. |
{
"appIds": ["389801252"],
"maxItems": 10,
"country": "us",
"sort": "mostRecent",
"minScore": 1,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": ["DATACENTER"]
}
}
One row per review.
| Field | Description |
|---|---|
id | Review id |
date | Publication time (UTC, ISO 8601) |
score | Star rating, 1 to 5 |
title, text | Review title and body |
userName, userUrl | Reviewer name, and profile link when Apple's source includes it (empty otherwise) |
version | App version the reviewer used, only when a review comes from the RSS fallback (empty otherwise) |
country, appId, inputSource | Storefront, app id, and the input that produced the row |
url | Review URL |
Example item:
{
"inputSource": "389801252",
"id": "14658923472",
"date": "2026-10-12T19:01:48Z",
"userName": "Jane Doe",
"userUrl": "",
"version": "",
"score": 5,
"title": "Instagram",
"text": "I love this platform 2010!",
"url": "https://itunes.apple.com/us/review?id=389801252&type=Purple%20Software",
"country": "US",
"appId": "389801252"
}
A target with no reviews saves no row and is not charged. It is listed in failedInputs of the run's OUTPUT record with its code and message.
$0.00001 per review ($0.01 per 1,000 reviews). Platform usage is billed on top at standard rates: compute $0.30 per GB-hour and datacenter proxy $1 per GB. For small jobs the compute is the larger part.
Worked example: 10 reviews cost 10 × $0.00001 = $0.0001 in review fees. With platform usage, our measured 10-review job came to about $0.002.
The actor reads Apple's public review pages and endpoints, with no login. Follow Apple's terms and privacy laws such as GDPR for reviewer names.
No key and no login. Datacenter proxies are used by default.
As many as Apple serves: deep review history per app and country (more than 100,000 for very popular apps). When an app has fewer reviews than you asked for, the run stops at the last one and the status message says how many Apple lists.
No row is saved and you are not charged. The id is listed in failedInputs of the run's OUTPUT record with a code, such as C003 for an id that does not exist or C002 for an id that is not numeric. When every input is wrong, the run fails with that reason.
Yes. Use Schedules for recurring runs, or call the REST API and read the dataset in any format.
version is usually empty. Reviewer profile links are only included from the storefront endpoint.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
appIdsarrayOptionalApp IDs
Numeric App Store IDs, without the id prefix. Used when no listing URL returns reviews.
startUrlsarrayOptionalListing URLs
Apple App Store listing URLs, such as https://apps.apple.com/us/app/instagram/id389801252. When a URL returns reviews, app IDs on the same run are not read.
maxItemsintegerOptionaldefault 10Maximum reviews
Stop after this many reviews in total. Apple pages reviews 20 or 400 at a time.
Choose the storefront, sort, star rating, and oldest review date.
countryenumOptionaldefault "us"Country
Storefront for app IDs. A listing URL uses the country in the URL instead.
sortenumOptionaldefault "mostRecent"Sort
Order used by the App Store reviews page: most recent, most helpful, most favorable, or most critical.
minScoreintegerOptionalMinimum stars
Keep reviews with at least this star rating. Leave empty to keep every rating.
startDatestringOptionalSince date
Keep reviews published on or after this date (YYYY-MM-DD). With Most recent, reading stops once reviews are older than the date.
Reshape each review before it is saved.
customMapFunctionstringOptionalTransform function
Optional JavaScript function that receives each review and returns the object to save. Return an object. Returning nothing drops that review.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter proxies are used by default. Switch the group if a run cannot reach Apple's review pages.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| id | string | Review identifier |
| date | string | null | Publication time (UTC, ISO 8601) |
| userName | string | null | Reviewer display name |
| userUrl | string | null | Reviewer profile URL when Apple's source provides it, otherwise empty |
| version | string | null | App version the reviewer used when Apple's source provides it, otherwise empty |
| score | integer | null | Star rating from 1 to 5 |
| title | string | null | Review title |
| text | string | null | Review text |
| url | string | null | Review URL |
| country | string | null | Storefront country code |
| appId | string | null | Numeric App Store app ID |
| inputSource | string | null | App ID or listing URL this review came from |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Review | One saved App Store review. | $0.00001 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('querystone/appstore-reviews-scraper').call({
"appIds": [
"389801252"
],
"maxItems": 10,
"country": "us",
"sort": "mostRecent",
"startDate": "2026-10-01",
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run querystone/appstore-reviews-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=querystone/appstore-reviews-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Top reviews since a date from the US store.
Newest reviews; the country comes from the link.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.