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.
Why it is hard
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.
Quickstart
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"]) 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. |
Use it for
App Store Optimization
Competitor monitoring
App catalogs and directories
Rating and version alerts
Under the hood
- id, bundle id, or URL input Look an app up by its numeric track id, its reverse-DNS bundle id, or a full apps.apple.com URL, all resolved server side.
- Unrounded ratings We return the average user rating as a full decimal, e.g. 4.78005, plus the current-version rating, not just the rounded star.
- Anti-bot and proxy rotation Rotating residential and datacenter proxies with anti-bot handling keep lookups flowing past Apple's per-IP throttling.
- Auto-retry across pools A throttled or blocked fetch retries through paid-residential, datacenter, and free proxy tiers before a response is returned.
Pricing
| 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
What is an Apple App Store scraper?
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.
How do I get App Store data by app id or bundle id?
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.
Do I need an Apple developer account or API key?
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.
Can I get the exact app rating instead of the rounded star?
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.
Can I read another country's App Store?
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.
How fast is the Apple App Store scraper API?
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.