Apple App Store Scraper: App Details, Prices & Top Charts
Pricing
$0.50 / 1,000 app scrapeds
Apple App Store Scraper: App Details, Prices & Top Charts
Extract iOS app metadata from Apple's public App Store search API: name, developer, price and currency per country, category, ratings, version, release dates, size, age rating, icon, plus Top Free / Top Paid chart ranks. Search, look up by id or bundle id, or pull charts. Pay per record.
Pricing
$0.50 / 1,000 app scrapeds
Rating
0.0
(0)
Developer
Hriday Rungta
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 hours ago
Last modified
Categories
Share
Pull iOS app metadata from the Apple App Store into a clean, flat dataset: name, developer, price and currency in any storefront, category, rating and rating count, current version and release dates, download size, age rating, icon and App Store link, plus Top Free / Top Paid chart ranks. The Actor reads Apple's public JSON feeds (the iTunes Search API search and lookup endpoints and the App Store chart feeds), so results are structured and fast: no browser, no HTML parsing, no login, no API key.
Three modes:
- Search - run keywords against the App Store search (up to 200 apps per term per country).
- Lookup - fetch exact apps by numeric App Store id or bundle id, 200 per request, in one or many countries.
- Charts - pull the Top Free or Top Paid chart (overall or by category) and enrich every ranked app with full details.
You pay only for the records you receive ($0.50 per 1,000), and maxItems caps every run.
Not affiliated with Apple. This is an independent tool that collects data Apple publishes through its public App Store search API. Apple, App Store and iTunes are trademarks of Apple Inc. See the disclaimer at the end.
What it extracts
One flat record per app per storefront:
| Field | Description |
|---|---|
appId, bundleId, name | Numeric App Store id, bundle identifier, app name |
developer, developerId, developerUrl, developerWebsite | Seller business name, developer id, developer's App Store page, developer's own website |
price, currency, formattedPrice, isFree | Storefront price (0 for free), ISO currency, display price such as $4.99 |
category, categoryId, genres[] | Primary genre (e.g. Games, 6014) and all genres |
rating, ratingCount | Average user rating (0-5) and number of ratings, all versions |
currentVersionRating, currentVersionRatingCount | Same for the current version |
version, versionReleaseDate, releaseDate | Current version string, its release date, first release date (ISO-8601) |
minOs, sizeBytes, ageRating | Minimum iOS version, download size, content rating (4+, 12+, 17+) |
languages[], supportedDevicesCount, screenshotCount | Localisations and quick size signals |
country | Storefront the record was fetched from (prices and availability differ by storefront) |
chartFeed, chartRank | top-free / top-paid and 1-based position (charts mode; null otherwise) |
url, iconUrl, scrapedAt | App Store page, 512px icon, ISO timestamp |
description, releaseNotes | Full description and latest release notes, only with Include description |
No user reviews or reviewer names are collected: the dataset contains business-level app metadata only.
Use cases
- ASO teams - track the keyword landscape: which apps rank for your terms in each storefront, their ratings, update cadence and pricing.
- App marketers and growth teams - monitor Top Free / Top Paid charts daily, overall or per category, and catch new entrants early.
- Competitor tracking - look up your competitor set by bundle id every morning and diff version, price, rating count and release notes.
- Price monitoring across countries - one lookup across
us,gb,de,jp,in,brgives you every local price and currency for the same apps. - Investors and analysts - build datasets of publishers, categories, ratings and version history for market sizing and due diligence.
- Product and data teams - feed app catalogues, recommendation engines and AI assistants with clean, deduplicated metadata instead of scraping HTML.
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode | search / lookup / charts | search | What to run. |
searchTerms | array | - | Keywords (search mode). One API call per term per country. |
appIds | array | - | Numeric ids, id553834731, or App Store URLs (lookup mode). |
bundleIds | array | - | Bundle identifiers such as com.midasplayer.apps.candycrushsaga (lookup mode). |
country | string | us | Storefront code. Ignored when countries is set. |
countries | array | - | Run in several storefronts, e.g. ["us","gb","de","jp"]. Each app is saved once per storefront. |
chartFeed | top-free / top-paid | top-free | Chart to pull (charts mode). |
chartGenreId | string | - | App Store genre id for a category chart, e.g. 6014 Games, 6015 Finance, 6013 Health & Fitness. |
limit | integer | 50 | Apps per search term, or chart length (max 200). |
includeDescription | boolean | false | Add description and releaseNotes. |
maxItems | integer | 500 | Hard cap on saved (and billed) records. |
requestsPerMinute | integer | 18 | Throttle. Apple allows roughly 20 calls per minute per IP. |
lang | string | - | Result language override, e.g. en_us, ja_jp. |
maxRetries | integer | 4 | Retries with backoff for network errors, 5xx, 403 and 429. |
proxyConfiguration | object | none | Optional Apify Proxy (datacenter is enough) to rotate IPs and spread the per-IP limit. |
Examples
Search, one storefront:
{ "mode": "search", "searchTerms": ["budget tracker", "meditation"], "country": "us", "limit": 100 }
Competitor set, prices in six storefronts:
{"mode": "lookup","bundleIds": ["com.midasplayer.apps.candycrushsaga", "com.mojang.minecraftpe", "com.spotify.client"],"countries": ["us", "gb", "de", "jp", "in", "br"]}
Top 100 paid games in Germany, with descriptions:
{ "mode": "charts", "chartFeed": "top-paid", "chartGenreId": "6014", "country": "de", "limit": 100, "includeDescription": true }
Sample output
{"appId": "553834731","bundleId": "com.midasplayer.apps.candycrushsaga","name": "Candy Crush Saga","developer": "King.com Limited","developerId": "526656015","developerUrl": "https://apps.apple.com/us/developer/king/id526656015?uo=4","developerWebsite": "https://king.com","price": 0,"currency": "USD","formattedPrice": "Free","isFree": true,"category": "Games","categoryId": "6014","genres": ["Games", "Puzzle", "Casual"],"rating": 4.71,"ratingCount": 3405678,"currentVersionRating": 4.71,"currentVersionRatingCount": 3405678,"version": "1.301.0.1","versionReleaseDate": "2026-08-27T09:12:41.000Z","releaseDate": "2012-11-14T14:41:32.000Z","minOs": "13.0","sizeBytes": 355842048,"ageRating": "4+","languages": ["EN", "FR", "DE", "JA"],"supportedDevicesCount": 3,"country": "us","chartFeed": "top-free","chartRank": 2,"url": "https://apps.apple.com/us/app/candy-crush-saga/id553834731?uo=4","iconUrl": "https://is1-ssl.mzstatic.com/image/thumb/Purple/v4/aa/512x512bb.jpg","screenshotCount": 2,"scrapedAt": "2026-09-11T06:00:02.114Z"}
Export from the Apify Console or API as JSON, CSV, Excel or XML, or push straight to Google Sheets, Airtable, Slack or a webhook with an integration.
Recipes
Daily Top Charts snapshot. Create a Schedule (e.g. 06:00 every day) with {"mode":"charts","chartFeed":"top-free","countries":["us","gb","de"],"limit":100}. Each run produces 300 ranked records with full details for about $0.15. Keep the dataset per run and join on appId + country + run date to chart rank movement over time.
Competitor change alerts. Schedule a lookup of your competitors' bundle ids with includeDescription: true and send the dataset to a Google Sheet; a second sheet with =IF(version<>previous_version, "UPDATED", "") (or a small Make/Zapier step) flags version bumps, price changes and new release notes.
Country price matrix. Lookup mode with countries set to every storefront you sell in; pivot the CSV on country with price/currency as values. Free apps in one country and paid in another show up immediately.
Keyword landscape for ASO. Search mode with 20-50 keywords and limit: 200; group by developer to see who dominates your niche, and by ratingCount to estimate traction.
Pricing
Flat pay-per-event pricing: one app-scraped event ($0.0005, i.e. $0.50 per 1,000 records) per saved record. There is no start fee and no per-request fee. maxItems is your hard cost cap; the run also stops as soon as your Apify "max total charge" limit is reached. Records de-duplicated within a run (same app in the same storefront) are free. Charts mode makes one extra lookup call per 200 ranked apps to enrich them, at no extra charge.
FAQ
Do I need an Apple developer account or API key? No. The search, lookup and chart feeds are public and unauthenticated. This Actor never logs in.
Is this legal?
The Actor uses the iTunes Search API that Apple documents for public use, at a request rate within Apple's published guidance (about 20 calls per minute per IP). Apple asks that content from the API link back to the App Store, which is why every record carries its url. Icon URLs are promotional artwork licensed by Apple for promoting store content; do not reuse them for other purposes. This Actor is not affiliated with, endorsed by or operated by Apple.
Why are ratings or prices different from what I see on my phone?
Ratings, prices, currency and even availability are per storefront. Set country (or countries) to the storefront you care about; the country field tells you which one each record came from.
Why did an app come back thin, with null rating and version, in charts mode?
The chart feed listed an app that the lookup endpoint did not return for that storefront (delisted, region-locked or a momentary inconsistency). The rank, name, developer and link are still saved so the chart stays complete.
Can I get user reviews or reviewer names? No. Reviews are out of scope by design; only business-level app metadata is collected.
How many apps can a search return? Apple caps a search at 200 results per term. Use several more specific terms, or run the same terms in more storefronts, to widen coverage.
What is the maximum chart length? 200 for Top Free / Top Paid (overall or per category). Category charts and lengths above 100 are served from Apple's legacy RSS chart feed; the Actor switches automatically.
What happens on rate limits or errors?
Requests are spaced by requestsPerMinute (default 18). If Apple still answers 403 or 429, the Actor backs off exponentially and, when a proxy is configured, rotates to a fresh IP. 5xx and network errors are retried up to maxRetries times.
Disclaimer
Data is obtained from Apple's public App Store search API and chart feeds. This Actor is an independent project and is not affiliated with, endorsed by or sponsored by Apple Inc. Apple, App Store, iTunes and the Apple logo are trademarks of Apple Inc., registered in the U.S. and other countries. Per Apple's API terms, please keep the App Store link (url) alongside any data you display, treat icon and screenshot URLs as promotional artwork for promoting App Store content only, and stay within Apple's rate guidance. You are responsible for how you use the data.
Local development
npm installnpm test # offline unit tests against documented fixturesAPIFY_LOCAL_STORAGE_DIR=$PWD/storage node src/main.js