Apple App Store Scraper API
Our Apple App Store scraper takes any numeric app id, reverse-DNS bundle id, or apps.apple.com URL and returns the full listing as JSON: title, developer, exact rating, review count, price, version, release dates, description, and every screenshot in a single request.
The hard part of Apple App Store data
The App Store web page ships most of its numbers in late-loading scripts, so hand-written selectors break within weeks and the rating you scrape from the HTML is often the rounded star, not the real average. Apple's own iTunes Lookup endpoint is cleaner but throttles at roughly 20 requests per minute per IP and returns a 403 block page once you cross it.
Send one request to the Apple App Store Scraper API
curl "https://api.appstorescraperapi.com/api/v1/appstore/product?id=324684580&api_key=$API_KEY" import requests
BASE = "https://api.appstorescraperapi.com"
API_KEY = "YOUR_API_KEY"
# Pass a numeric app id, an apps.apple.com URL, or a bundle id.
data = requests.get(
f"{BASE}/api/v1/appstore/product",
params={"id": "324684580", "api_key": API_KEY},
timeout=30,
).json()
print(data["title"], "by", data["seller_name"])
print(data["rating"], "stars across", data["reviews_count"], "ratings")
print("Version", data["version"], "-", data["formatted_price"])
# Look an app up by its bundle id instead of the numeric id.
by_bundle = requests.get(
f"{BASE}/api/v1/appstore/product",
params={"bundleId": "com.spotify.client", "api_key": API_KEY},
timeout=30,
).json()
print(by_bundle["id"], by_bundle["minimum_os_version"]) Parameters
| Parameter | Required | Default | Notes |
|---|---|---|---|
id | optional | - | The numeric App Store track id. Accepts a bare id like 324684580, an id324684580 token, or a full apps.apple.com/.../id324684580 URL. Required unless you pass bundleId. |
bundleId | optional | - | The app's reverse-DNS bundle id, e.g. com.spotify.client. Use it instead of id when you know the bundle but not the numeric id. One of id or bundleId is required. |
url | optional | - | An apps.apple.com app URL. Pass it as the id value and we extract the numeric track id from it server side. |
country | optional | us | Two-letter ISO storefront country. Defaults to us. Set it to read the listing, price, and availability for another region's store. |
api_key | required | - | Your API key, passed as a query parameter. Get one free at signup. |
Reading the Apple App Store Scraper API response
{
"id": "324684580",
"track_id": "324684580",
"bundle_id": "com.spotify.client",
"title": "Spotify: Music and Podcasts",
"seller_name": "Spotify",
"artist_id": "324684583",
"primary_genre": "Music",
"genres": ["Music", "Entertainment"],
"price": 0,
"formatted_price": "Free",
"currency": "USD",
"rating": 4.78005,
"rating_current_version": 4.78005,
"reviews_count": 40687986,
"reviews_count_current_version": 40687986,
"content_advisory_rating": "12+",
"version": "9.1.60",
"current_version_release_date": "2026-06-26T07:29:24Z",
"release_date": "2011-07-14T11:22:37Z",
"release_notes": "We're always making changes and improvements to Spotify. To make sure you don't miss a thing, just keep your Updates turned on.",
"file_size_bytes": 281802752,
"minimum_os_version": "16.1",
"description": "With the Spotify app, you can explore an extensive library of music and podcasts for free...",
"artwork_url": "https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/50/c5/33/50c533fe-3854-b5ce-92c5-b2a1cb4fafe2/AppIcon-0-0-1x_U007epad-0-1-0-0-sRGB-85-220.png/512x512bb.jpg",
"thumbnail": "https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/50/c5/33/50c533fe-3854-b5ce-92c5-b2a1cb4fafe2/AppIcon-0-0-1x_U007epad-0-1-0-0-sRGB-85-220.png/512x512bb.jpg",
"screenshot_urls": [
"https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/f3/ce/05/f3ce0547-690a-b355-b1dd-6b6e91808279/IOS_-_5.5_-_S01.png/392x696bb.png"
],
"ipad_screenshot_urls": [
"https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/31/15/15/31151525-510a-a212-ea51-e023e7b6351f/IOS_-_Ipad_6th_-_S01.png/552x414bb.png"
],
"supported_devices": ["iPhone13-iPhone13", "iPadPro13M4-iPadPro13M4"],
"languages": ["EN", "FR", "DE", "ES", "JA"],
"advisories": ["Infrequent/Mild Profanity or Crude Humor"],
"is_game_center_enabled": false,
"kind": "software",
"url": "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580?uo=4",
"seller_url": "https://www.spotify.com/",
"artist_view_url": "https://apps.apple.com/us/developer/spotify/id324684583?uo=4"
} | Field | Type | Description |
|---|---|---|
id | string | The App Store track id, the stable numeric identifier for the app. |
bundle_id | string | The app's reverse-DNS bundle identifier, e.g. com.spotify.client. |
title | string | The app's display name as shown on its App Store page. |
seller_name | string | The seller or developer name behind the listing. |
primary_genre | string | The app's primary App Store category, e.g. Music. A genres array carries the full category list. |
price | number | Numeric price in the storefront currency. formatted_price gives the display string, e.g. Free. |
rating | number | Average user rating across all versions, unrounded. rating_current_version gives the current build's average. |
reviews_count | integer | Total number of ratings. reviews_count_current_version gives the count for the current version. |
content_advisory_rating | string | The age rating, e.g. 12+. An advisories array lists the specific content descriptors. |
version | string | The current app version string, with current_version_release_date and release_notes alongside it. |
release_date | string | ISO timestamp of the app's original App Store release. |
file_size_bytes | integer | Download size of the current build in bytes. |
minimum_os_version | string | The lowest iOS version the app supports. |
description | string | The full App Store description text for the listing. |
artwork_url | string | URL of the app icon. thumbnail mirrors it for convenience. |
screenshot_urls | array | iPhone screenshot URLs. ipad_screenshot_urls carries the iPad set. |
languages | array | ISO language codes the app is localized into. |
url | string | The canonical apps.apple.com listing URL. seller_url and artist_view_url point to the developer site and their App Store page. |
What you can ship with it
App Store Optimization
Competitor monitoring
App catalogs and directories
Rating and version alerts
Market research
Store listing sync
Why our Apple App Store Scraper API earns its keep
Pass a numeric id, a bundle id, or an apps.apple.com URL and we return the parsed listing with no key from Apple and no rate limit of your own to nurse. Every request runs through rotating proxies, anti-bot handling, and retries across proxy tiers, returning validated JSON with a stable schema in about 2.6 seconds.
id, bundle id, or URL input
Unrounded ratings
Anti-bot and proxy rotation
Auto-retry across pools
Full listing in one call
Storefront targeting
Apple App Store Scraper API vs official and roll-your-own
| Our API | DIY (requests / headless) | iTunes Lookup direct | |
|---|---|---|---|
| Input by id, bundle, or URL | Yes, all three | Manual fetch and parse per shape | id or bundleId only |
| Exact rating | Full decimal, unrounded | Often the rounded star from HTML | Full decimal |
| Setup | API key only | Proxies, headless browser, parsers | None, but bring your own IPs |
| Rate limits | By plan, retries handled | Bound by your proxy pool | Around 20 req/min/IP, then 403 |
| Anti-bot and proxies | Built in | You build and maintain it | Not included |
| Output | Validated JSON, stable schema | Whatever you parse | Raw Apple JSON, field names differ |
From free to high volume
| Plan | Price | Best for |
|---|---|---|
| Free | 1,000 requests | Testing and small jobs |
| Pro | $0.60 / 1k | Production workloads |
| Pay-as-you-go | $0.90 / 1k | Spiky or one-off volume |
Median response 2.6s. You only pay for successful requests.
FAQ
An Apple App Store scraper is a tool that reads a public app listing and returns it as structured data. Our Apple App Store scraper API takes an app id, a bundle id, or an apps.apple.com URL and returns the title, developer, rating, review count, price, version, release dates, description, screenshots, supported languages, and device list as JSON from a single request.
Send one GET request to our appstore/product endpoint. Pass id with the numeric App Store id (or an apps.apple.com URL, which we parse for the id), or pass bundleId with the reverse-DNS bundle such as com.spotify.client. Either key returns the same full listing. Add country to read a specific storefront.
No. You only need an appstorescraperapi key, passed as the api_key query parameter. There is no Apple developer account, no App Store Connect access, and no OAuth. The endpoint reads the public listing that any visitor can see, and the free tier includes 1,000 requests per month.
Yes. The rating field returns the full decimal average, for example 4.78005, and rating_current_version returns the average for the current build. That is the precise number behind the rounded star shown on the App Store page, which is what you need for tracking small movements over time.
Yes. Set the country parameter to a two-letter ISO storefront code. The default is us. Price, availability, and localized fields reflect the storefront you request, so you can compare a listing across regions.
Median end-to-end response is about 2.6 seconds, including proxy routing, anti-bot handling, retries, and parsing. Apple's own lookup endpoint throttles at roughly 20 requests per minute per IP and returns a 403 once you exceed it, which is exactly the limit our proxy rotation and retries absorb for you.