Apple App Store Scraper: Apps, Reviews & Keyword Rankings
Pricing
from $2.00 / 1,000 app records
Apple App Store Scraper: Apps, Reviews & Keyword Rankings
Extract Apple App Store app details, search results, customer reviews and keyword rankings with top competitors. Official Apple APIs only, no login, no proxy. Ideal for ASO and app market research.
Pricing
from $2.00 / 1,000 app records
Rating
0.0
(0)
Developer
Fetchsmith Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Share
Extract app details, search results, customer reviews and keyword rankings from the Apple App Store. This Apple App Store scraper is built for app developers, ASO (App Store Optimization) specialists, market researchers and product teams who need structured iOS app data without writing code. It uses only Apple's public iTunes Search API, Lookup API and customer review feed, so there is no login, no cookies and no proxy to configure.
What data you get
The actor has four modes. Pick one with the mode input.
| Mode | What it does | Output |
|---|---|---|
apps | Details for app IDs, App Store URLs, bundle IDs or whole developer pages | One record per app and country |
search | Apps that match one or more search terms | One record per app, with the search term and position |
reviews | Public customer reviews for apps | One record per review |
keywordRanks | Where your apps rank in the top 200 search results for each keyword and country, plus the top 10 competitors | One record per keyword, country and app |
App fields (modes apps and search)
| Field | Description |
|---|---|
appId, bundleId | App Store ID and bundle identifier |
title, url | App name and App Store link |
developer, developerId | Seller name and developer ID |
price, currency | Price in the storefront currency |
rating, ratingCount | Average user rating and number of ratings |
genres, primaryGenre | Categories |
version, releaseDate, currentVersionReleaseDate | Version and ISO dates |
size | Download size in bytes |
contentRating | Age rating, for example 4+ |
description, releaseNotes | Store texts |
screenshotUrls, iconUrl | Image links |
country, scrapedAt | Storefront and scrape time |
searchTerm, searchRank | Only in search mode |
Review fields (mode reviews)
appId, country, reviewId, title, text, rating, author, version, date, voteSum, voteCount, scrapedAt.
Keyword rank fields (mode keywordRanks)
| Field | Description |
|---|---|
keyword, country | The checked keyword and storefront |
appId | The tracked app (null if you gave no apps) |
rank | Position in the search results, null if not found in the top 200 |
totalResults | Number of results Apple returned for the keyword (maximum 200) |
topCompetitors | The first 10 results that are not your tracked apps: rank, appId, title, developer, rating, ratingCount |
scrapedAt | Check time |
How to use
- Choose a Mode.
- Fill the matching input: Apps (
appIds) forapps,reviewsandkeywordRanks, Search terms forsearch, Keywords forkeywordRanks. - Pick one or more Countries (two-letter App Store codes such as
us,gb,de). - Set Max items and start the run.
- Download the dataset as JSON, CSV, Excel or via API.
Apps can be given as numeric IDs (570060128), App Store URLs (https://apps.apple.com/us/app/duolingo-language-lessons/id570060128) or bundle IDs (com.duolingo.DuolingoMobile). In apps mode a developer page URL such as https://apps.apple.com/us/developer/duolingo/id570060151 returns all apps of that developer.
Meaning of maxItems: in apps mode it is the total number of app records, in search mode it is per search term and country (Apple returns at most 200), in reviews mode it is per app and country (Apple exposes at most 500), and keywordRanks always checks the top 200 results.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | apps | apps, search, reviews or keywordRanks |
appIds | string[] | Duolingo URL | App IDs, App Store URLs, bundle IDs or developer page URLs. Used by apps, reviews and keywordRanks |
searchTerms | string[] | none | Search terms for search mode |
keywords | string[] | none | Keywords to check in keywordRanks mode |
countries | string[] | ["us"] | Two-letter App Store country codes |
maxItems | integer | 20 | Result limit (1 to 1000), see the note above for what it counts in each mode |
reviewSort | string | mostrecent | mostrecent or mosthelpful (reviews mode) |
Input example
{"mode": "keywordRanks","keywords": ["language learning", "learn spanish"],"appIds": ["570060128"],"countries": ["us", "de"]}
Default input (runs in a few seconds):
{"mode": "apps","appIds": ["https://apps.apple.com/us/app/duolingo-language-lessons/id570060128"]}
Output example
Keyword rank record:
{"keyword": "language learning","country": "us","appId": "570060128","rank": 1,"totalResults": 195,"topCompetitors": [{ "rank": 2, "appId": "829587759", "title": "Babbel - Language Learning", "developer": "Babbel GmbH", "rating": 4.72185, "ratingCount": 755621 }],"scrapedAt": "2026-10-11T06:48:44.163Z"}
Review record:
{"appId": "284882215","country": "us","reviewId": "14645741666","title": "Satisfaction","text": "Encore plus","rating": 4,"author": "Yassoo5","version": "582.0.0","date": "2026-10-09T12:54:00.000Z","voteSum": 0,"voteCount": 0,"scrapedAt": "2026-10-11T06:49:19.837Z"}
Use the App Store scraper from your code (API)
Every run can be started over the Apify API, so you can plug App Store data into your own scripts, dashboards or ASO tools.
Node.js with the apify-client package:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('fetchsmith-labs/app-store-scraper').call({mode: 'reviews',appIds: ['570060128'],countries: ['us', 'gb'],maxItems: 200,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.length, 'reviews');
Python with the apify-client package:
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("fetchsmith-labs/app-store-scraper").call(run_input={"mode": "keywordRanks","keywords": ["language learning"],"appIds": ["570060128"],"countries": ["us"],})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
cURL, synchronous run that returns the dataset items directly:
curl -X POST "https://api.apify.com/v2/acts/fetchsmith-labs~app-store-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"mode": "search", "searchTerms": ["habit tracker"], "countries": ["us"], "maxItems": 50}'
Results can also go straight to Google Sheets, Make, Zapier, n8n, Slack or a webhook through the Apify integrations on the Actor page.
Pricing
Pay per event. You only pay for results you receive.
| Event | Price | Charged for |
|---|---|---|
app | $0.002 | Each app record (modes apps and search) |
review | $0.0004 | Each review |
keyword-rank | $0.003 | Each keyword and country check (several tracked apps in the same check are not charged again) |
Example cost for 1,000 results: 1,000 app records cost $2.00, 1,000 reviews cost $0.40, and 1,000 keyword and country checks cost $3.00. The run stops cleanly when your maximum charge limit is reached.
Use cases
- ASO keyword tracking: check your app's rank for target keywords in several countries and see who ranks above you.
- Competitor research: compare ratings, rating counts, versions, release notes and screenshots.
- Review analysis: collect user feedback for sentiment analysis, bug detection or feature requests.
- Market research: list the top apps for a search term or all apps of a developer.
- Monitoring: schedule runs with the Apify platform to watch version changes and rank movements.
FAQ
Do I need a proxy or login? No. The actor reads Apple's public endpoints only.
Is it legal? The actor only collects publicly available App Store data (app listings, public ratings and public customer reviews) through Apple's documented public interfaces. You are responsible for using the data in line with applicable laws and Apple's terms. Reviews contain public usernames chosen by the reviewers, so handle them according to data protection rules such as GDPR.
How fast is it? Apple limits the Search and Lookup API to roughly 20 calls per minute per IP, so the actor spaces those calls about 3 seconds apart (concurrency 2) and backs off on 403 or 429 responses. A keyword check takes one call, so about 20 keyword and country checks per minute.
How many reviews can I get? Apple's review feed exposes at most 10 pages of 50 reviews (500 reviews) per app and country, newest first. Some apps and storefronts return no reviews at all.
Why are fewer reviews returned than requested? Apple's public review feed is inconsistent. Individual pages are sometimes empty while later pages hold data, and the mosthelpful sort order is often empty. The actor scans all 10 pages and skips empty ones, but it cannot return reviews Apple does not serve. Try mostrecent or another country.
Why is the rank null? The app was not in the top 200 results Apple returns for that keyword in that country. For some keywords Apple returns fewer than 200 results.
Can I export App Store reviews to CSV or Excel? Yes. Every run stores its results in a dataset that you can download as JSON, CSV, Excel, XML or HTML, or read through the API.
Can I track keyword rankings over time? Each keywordRanks run is a snapshot. To build a rank history, start the run on a schedule you create in your Apify account (for example daily) and compare the datasets, or send them to Google Sheets.
Are ratings per country? Yes. Ratings and prices come from the storefront you select.
Support
Found a bug or missing a field? Open an issue on the actor page and we will take a look.