FunnelHound / Guides / iTunes Search API

iTunes Search API: look up any app's App Store ID, ratings and metadata in one request

Short version: GET https://itunes.apple.com/lookup?id=6793297146&country=us returns the public listing of any App Store app as JSON: name, bundle ID, developer, price, rating and rating count, version, release notes, screenshot URLs, icon. No key, no login. Swap lookup?id= for search?term= to find apps by name, add &country= to pick the storefront, and stay under about twenty calls a minute.

GET itunes.apple.com/lookup ?id=6793297146&country=us "resultCount": 1, "results": [{ "trackId": 6793297146, "bundleId": "no.self.FunnelHound", "trackName": "FunnelHound: App Sales…", "averageUserRating": 5, "userRatingCount": 1, "version": "1.11.2", "artworkUrl512": "https://…512x512bb.jpg", … }] one GET, no header about 50 fields back
The lookup response, trimmed to the fields most scripts keep. The full object runs about fifty keys.

Two endpoints

EndpointUse it whenKey parameters
https://itunes.apple.com/searchYou know a name or a keyword, not an IDterm (URL-encoded), country, entity=software, limit (up to 200), lang
https://itunes.apple.com/lookupYou have an App Store ID, a bundle ID or a developer IDid (comma-separated list allowed), bundleId, country, entity

The fields worth keeping

FieldWhat it isWhy you want it
trackIdApp Store ID, the ten digits after id in store linksAttribution SDKs, review prompts, every "enter your app ID" box
bundleIdReverse-DNS identifier of the binaryMatching store data to your own builds and crash reports
trackName, sellerName, artistIdApp name, developer name, developer IDCompetitor lists, developer portfolios
averageUserRating, userRatingCountStar average and rating count for the storefrontLogged daily, this is a free rating-velocity tracker
averageUserRatingForCurrentVersion, userRatingCountForCurrentVersionSame, since the latest releaseDid the update land badly
version, currentVersionReleaseDate, releaseNotesLatest version, when, and the What's New textRelease cadence of competitors, without opening the store
price, currency, formattedPriceUpfront price in the storefront's currencyPricing surveys; in-app prices are not included
primaryGenreName, genresCategory and secondary categoriesWhich category peers actually chose
screenshotUrls, ipadScreenshotUrlsArrays of screenshot URLsCompetitor product page archives
artworkUrl512, artworkUrl100Icon URLsDashboards; edit the size segment in the URL for other sizes
minimumOsVersion, fileSizeBytes, supportedDevices, languageCodesISO2ARequirements and localizationsLocalization coverage of the field
trackViewUrlCanonical store linkLinks that survive name changes

What the API does not return: download counts, revenue, keyword rankings, in-app purchase prices, or anything from App Store Connect. Those are private to the developer and come from the Analytics Reports API with a signed token.

Recipes

# Any app's ID and bundle ID from its name, German storefront
curl -s "https://itunes.apple.com/search?term=fahrtenbuch&country=de&entity=software&limit=5" \
  | jq -r '.results[] | "\(.trackId)\t\(.bundleId)\t\(.trackName)"'

# One app by bundle ID, US storefront
curl -s "https://itunes.apple.com/lookup?bundleId=no.self.FunnelHound&country=us" \
  | jq '.results[0] | {trackId, version, averageUserRating, userRatingCount}'

# Several competitors in one call
curl -s "https://itunes.apple.com/lookup?id=6793297146,284882215,310633997&country=us" \
  | jq -r '.results[] | "\(.trackName)\t\(.userRatingCount)\t\(.version)"'
import requests, datetime

IDS = ["6793297146", "284882215"]
r = requests.get("https://itunes.apple.com/lookup",
                 params={"id": ",".join(IDS), "country": "us"}, timeout=20).json()
today = datetime.date.today().isoformat()
for app in r["results"]:
    print(today, app["trackId"], app["trackName"], app["userRatingCount"], app["version"])

Run the Python version from a daily cron and append the lines to a file, and you have a rating-count and release-date history for any set of apps, which no console gives you for apps you do not own.

What do you have? a name or keyword /search?term=…&entity=software an ID or bundle ID /lookup?id=… or ?bundleId=… always &country=xx · batch IDs with commas · about 20 calls a minute
Two branches, three rules. The country rule is the one people forget until a Japanese app "does not exist".

Limits and quirks

Where FunnelHound uses it

FunnelHound reads your private numbers through the App Store Connect API, but it fetches your apps' icons through this public lookup, asking your own storefront first and a handful of large ones after, one request per app, cached on the device. Public data for the picture, private data for the funnel. If you are hunting for your own app's ID rather than a competitor's, the App Store ID guide is shorter, and the identifiers overview sorts trackId from the other nine IDs Apple hands you.

Public for the icon, private for the funnel

FunnelHound signs the App Store Connect API on your iPhone for impressions, installs, deletions and proceeds, and uses the public lookup only for artwork. Every app on your account, one funnel each.

Get FunnelHound

Share this on X

Data notes: endpoints, parameters and the approximate 20 calls per minute guidance per Apple's iTunes Search API documentation as of 2026. Field names and the example values (bundle ID no.self.FunnelHound, version 1.11.2, one rating at the time of writing) come from a live lookup of FunnelHound (6793297146) on 3 Nov 2026; Apple adds and renames fields without notice, so read the keys of your own first response. The second and third IDs in the examples are illustrative.