Appstore
The Pullbay App Store API provides programmatic access to iOS app metadata, search, similar-app recommendations, reviews, and developer catalogs from the Apple App Store. Integrate App Store data into your applications, dashboards, and analytics pipelines without scraping or manual lookups.
Base URL: https://api.pullbay.com
Overview
The App Store service lets you:
Look up a single app by its numeric App ID or its Bundle ID
Search the App Store by keyword
Find apps similar to a given app
Fetch reviews for an app, sorted by recency or helpfulness
List every app published by a given developer
All endpoints are read-only GET requests against public App Store data — you don't need to own or register an app of your own.
Common Use Cases
Competitor Analysis — Pull a competitor's app metadata and reviews to track positioning, version cadence, and rating trends over time.
Sentiment Monitoring — Collect reviews on a schedule and feed the title/text fields into your own sentiment-analysis or alerting pipeline.
Market Research — Use Search Apps and Get Similar Apps together to map out a category and see how apps cluster around features and audiences.
Product Development — Mine review text for recurring feature requests and complaints to help prioritize a roadmap.
Developer Portfolio Tracking — Use Get Developer Apps to see everything a given publisher has shipped, useful for due diligence or competitive landscape work.
Endpoints
GET /appstore/apps
Get a single app by App ID or Bundle ID
—
GET /appstore/search
Search apps by term
page / maxItems
GET /appstore/similar
Get apps similar to a given app
—
GET /appstore/reviews
Get reviews for an app
page / maxItems
GET /appstore/developer
Get all apps published by a developer
—
Get App
Returns a single application. Provide exactly one of appId or bundleId.
Request
Parameters
appId
string
One of appId/bundleId
—
Numeric App Store ID, 8–12 digits (e.g. 389801252)
bundleId
string
One of appId/bundleId
—
Bundle identifier, up to 255 characters (e.g. com.burbn.instagram)
country
string
No
—
2-letter storefront code. Not restricted to a fixed list — any 2-letter code is accepted.
lang
string
No
—
Language code for localized text, 2–3 letters with an optional region subtag (e.g. en, en-us)
Example
Response
Response Schema
pricing.creditsCharged
number
Credits charged for this request
Credit cost: charged dynamically per request; the exact amount is always returned in pricing.creditsCharged. There is no published flat rate — read the figure from the response.
Search Apps
Search the App Store for apps matching a term.
Request
Parameters
term
string
Yes
—
Search term, 1–255 characters
country
string
No
—
2-letter storefront code
lang
string
No
—
Language code for localized text
page
integer
No
—
Page number, 1–5. Mutually exclusive with maxItems
maxItems
integer
No
—
One-shot bulk pull, 1–200 results. Mutually exclusive with page
Example
Response
Response Schema
pagination.page
integer, nullable
Current page number (only set when using page)
pagination.hasNextPage
boolean, nullable
Whether another page is available
pagination.cursor / pagination.offset
string, nullable
Unused by this endpoint — always null here
pricing.creditsCharged
number
Credits charged for this request
Credit cost: dynamic, returned in pricing.creditsCharged. No flat per-page or per-result rate is published — read the figure from each response.
Get Similar Apps
Returns apps similar to a given app. Provide exactly one of appId or bundleId.
Request
Parameters
appId
string
One of appId/bundleId
—
Numeric App Store ID, 8–12 digits
bundleId
string
One of appId/bundleId
—
Bundle identifier
country
string
No
—
2-letter storefront code
lang
string
No
—
Language code for localized text
Example
Response
Response Schema
pricing.creditsCharged
number
Credits charged for this request
Credit cost: dynamic, returned in pricing.creditsCharged.
Get Reviews
Returns reviews for one app. Provide exactly one of appId or bundleId.
Request
Parameters
appId
string
One of appId/bundleId
—
Numeric App Store ID, 8–12 digits
bundleId
string
One of appId/bundleId
—
Bundle identifier
country
string
No
—
2-letter storefront code
sort
string
No
—
recent or helpful
page
integer
No
—
Page number, 1–10. Mutually exclusive with maxItems
maxItems
integer
No
—
One-shot bulk pull, 1–500 results. Mutually exclusive with page
Example
Response
Response Schema
pagination.page
integer, nullable
Current page number (only set when using page)
pagination.hasNextPage
boolean, nullable
Whether another page is available
pricing.creditsCharged
number
Credits charged for this request
Credit cost: dynamic, returned in pricing.creditsCharged. No flat per-page or per-review rate is published.
Get Developer Apps
Returns the list of apps published by a single developer.
Request
Parameters
developerId
string
Yes
—
Numeric developer ID, 8–12 digits
country
string
No
—
2-letter storefront code
Example
Response
Response Schema
pricing.creditsCharged
number
Credits charged for this request
Credit cost: dynamic, returned in pricing.creditsCharged.
Errors
All non-2xx responses share the same envelope:
400
Bad request — missing/invalid parameters, or both appId and bundleId supplied
402
Insufficient credits
404
App, developer, or review set not found
Object Schema
Application object
id
integer
Numeric App Store ID
appId
string
Bundle identifier
title
string
App name
url
string
App Store listing URL
description
string
App description
icon
string
Icon image URL
genres / genreIds
array
Genre names and IDs
primaryGenre / primaryGenreId
string / integer
Primary genre name and ID
contentRating
string
Age rating (e.g. 12+)
languages
array
Supported language codes
size
string
App size in bytes
requiredOsVersion
string
Minimum iOS version
released / updated
string (date-time)
Initial release and last update timestamps
releaseNotes
string
"What's New" text for the current version
version
string
Current version number
price / currency / free
number / string / boolean
Pricing info
developerId / developer
integer / string
Developer ID and name
developerUrl / developerWebsite
string
Developer's App Store page and external site
score / reviews
number / integer
All-time rating and review count
currentVersionScore / currentVersionReviews
number / integer
Rating and review count for the current version
screenshots / ipadScreenshots / appletvScreenshots
array
Screenshot URLs per device class
supportedDevices
array
Compatible device identifiers
Review object
id
string
Review ID
date
string (date-time)
When the review was posted
userName
string
Reviewer's display name
userUrl
string
Link to the reviewer's profile
version
string
App version the review was left for
score
integer
Rating, 1–5
title
string
Review title
text
string
Review body
url
string
Permalink to the review
country
string
Storefront country the review was posted on
Note: the Review object does not include a helpful-vote count or "verified purchase" flag — only the fields listed above are returned.
Finding App IDs and Bundle IDs
App ID: the numeric ID in an App Store URL, e.g.
https://apps.apple.com/us/app/instagram/id389801252→389801252.Bundle ID: the package identifier shown on a developer's site or in App Store Connect, e.g.
com.burbn.instagram.Either ID resolves the same app — use whichever you already have on hand. Don't pass both in the same request.
Country and Language Codes
countryaccepts any 2-letter code (the schema only constrains it to exactly 2 characters) — it isn't validated against a fixed allow-list in the spec, so pass a standard ISO 3166-1 alpha-2 storefront code (us,gb,jp,de, ...).langaccepts a 2–3 letter language code, optionally with a region subtag (en,en-us,pt-br) — also not restricted to a fixed list.Neither parameter has a documented default in the API spec. If you omit them, behavior is determined by the underlying App Store lookup rather than a guaranteed Pullbay default — pass both explicitly if you need a predictable storefront/locale.
Python Example: Paginating Through Reviews
This example fetches reviews for an app a page at a time, stopping when pagination.hasNextPage is false or the page cap (10) is reached:
Each request is billed independently, with the charged amount reported in that response's pricing.creditsCharged — there's no separate "fetch everything in one call" endpoint, so a multi-page pull like this makes one request per page.
FAQ
Last updated