Google Play Store
The Pullbay Google Play API provides programmatic access to Android app metadata, search, similar-app recommendations, reviews, permissions, and Data Safety declarations from the Google Play Store. Integrate Google Play data into your applications, dashboards, and analytics pipelines without scraping or manual lookups.
Base URL: https://api.pullbay.com
Overview
The Google Play service lets you:
Look up a single app by its package name (e.g.
com.instagram.android)Search the Google Play Store by keyword
Find apps similar to a given app
Fetch reviews for an app, sorted by recency, rating, or helpfulness
List the Android permissions an app requests
Retrieve the developer-declared Data Safety section (data collected, data shared, security practices)
All endpoints are read-only GET requests against public Google Play 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, install-count tier, and rating trends over time.
Sentiment Monitoring — Collect reviews on a schedule and feed the text field 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.
Privacy and Compliance Review — Use Get Permissions and Get Data Safety to audit what an app collects, shares, and declares before integrating with it or evaluating it as a competitor.
Product Development — Mine review text for recurring feature requests and complaints to help prioritize a roadmap.
Endpoints
GET /google-play/apps
Get a single app by App ID
—
GET /google-play/search
Search apps by term
—
GET /google-play/similar
Get apps similar to a given app
—
GET /google-play/reviews
Get reviews for an app
cursor / maxItems
GET /google-play/permissions
Get permissions requested by an app
—
GET /google-play/data-safety
Get the Data Safety section for an app
—
Get App
Returns full details for a single app on the Google Play Store, identified by its package name.
Request
Parameters
appId
string
Yes
—
Package name, max 255 characters, letters/digits/./_ only (e.g. com.instagram.android)
country
string
No
—
Exactly 2 characters. Not restricted to a fixed list — any 2-letter code is accepted.
lang
string
No
—
Language code for localized text, pattern ^[a-z]{2,3}(-[a-z]{2,3})?$ (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 Google Play Store for apps matching a term. Returns lightweight summaries.
Request
Parameters
search
string
Yes
—
Search term, 1–255 characters
price
string
No
—
Filter by pricing: all, free, or paid
country
string
No
—
Exactly 2 characters. Not restricted to a fixed list.
lang
string
No
—
Language code for localized text, pattern ^[a-z]{2,3}(-[a-z]{2,3})?$
Example
Response
Response Schema
pricing.creditsCharged
number
Credits charged for this request
Credit cost: dynamic, returned in pricing.creditsCharged. No flat per-result rate is published — read the figure from each response.
Get Similar Apps
Returns apps Google Play surfaces as similar to the supplied app.
Request
Parameters
appId
string
Yes
—
Package name, max 255 characters, letters/digits/./_ only
Example
Response
Response Schema
pricing.creditsCharged
number
Credits charged for this request
Credit cost: dynamic, returned in pricing.creditsCharged.
Get Reviews
Returns reviews for an app. Use cursor to paginate or maxItems for a one-shot bulk pull (mutually exclusive).
Request
Parameters
appId
string
Yes
—
Package name, max 255 characters, letters/digits/./_ only
country
string
No
—
Exactly 2 characters. Not restricted to a fixed list.
lang
string
No
—
Language code for localized text, pattern ^[a-z]{2,3}(-[a-z]{2,3})?$
sort
string
No
—
NEWEST, RATING, or HELPFULNESS
maxItems
integer
No
—
One-shot bulk pull, 1–500 results. Mutually exclusive with cursor
cursor
string
No
—
Opaque pagination cursor from a previous response's pagination.cursor. Mutually exclusive with maxItems
Example
Response
Response Schema
pagination.cursor
string, nullable
Cursor to pass as the cursor parameter on the next request, if more reviews are available
pagination.page / pagination.hasNextPage / pagination.offset
nullable
Unused by this endpoint — always null here; use pagination.cursor instead
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 — read the figure from each response.
Get Permissions
Returns the list of Android permissions the app requests, grouped by category.
Request
Parameters
appId
string
Yes
—
Package name, max 255 characters, letters/digits/./_ only
Example
Response
Response Schema
pricing.creditsCharged
number
Credits charged for this request
Credit cost: dynamic, returned in pricing.creditsCharged.
Get Data Safety
Returns the developer-declared Data Safety information: data shared, data collected, security practices, and privacy policy URL.
Request
Parameters
appId
string
Yes
—
Package name, max 255 characters, letters/digits/./_ only
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 or invalid parameters
402
Insufficient credits
404
App, review set, permission set, or Data Safety record not found
Object Schema
Application object
title
string
App name
appId
string
Package name
url
string
Relative API URL for the app detail endpoint
icon
string
Icon image URL
headerImage
string
Feature graphic image URL
summary
string
Short tagline shown on the store listing
description / descriptionHTML
string
Full description, plain text and HTML
score / scoreText
number / string
Average rating, numeric and display string
ratings / reviews
integer
Total rating count and total review count
histogram
object
Rating counts keyed by star value (1–5)
free / price / priceText / currency
boolean / number / string / string
Pricing info
offersIAP
boolean
Whether the app offers in-app purchases
adSupported
boolean
Whether the app shows ads
installs / minInstalls / maxInstalls
string / integer / integer
Install count range, display string and numeric bounds
androidVersion / androidVersionText
string
Minimum Android version, raw and display form
updated
integer
Last update timestamp, Unix milliseconds
genre / genreId
string
Category name and ID
developer / developerId / developerEmail / developerWebsite / developerInternalID
string
Developer identity and contact info
privacyPolicy
string
Developer's privacy policy URL
playstoreUrl
string
Public Google Play listing URL
screenshots
array
Screenshot image URLs
Application summary object
Lightweight app reference returned by the search and similar-apps endpoints.
title
string
App name
appId
string
Package name
url
string
Relative API URL for the app detail endpoint
icon
string
Icon image URL
summary
string
Short tagline shown on the store listing
score / scoreText
number / string
Average rating, numeric and display string
free / price / currency
boolean / number / string
Pricing info
playstoreUrl
string
Public Google Play listing URL
developer / developerId
string
Developer name and ID
Review object
id
string
Review ID
userName
string
Reviewer's display name
userImage
string
Reviewer's avatar URL
date
string (date-time)
When the review was posted
score / scoreText
integer / string
Rating, 1–5, numeric and display string
url
string
Permalink to the review
title
string, nullable
Review title (often null on Google Play)
text
string
Review body
replyDate / replyText
string / string, nullable
Developer's reply timestamp and text, if any
version
string
App version the review was left for
thumbsUp
integer
Helpful-vote count
country
string
Storefront country the review was posted on
criterias
array of Review criteria objects
Rating breakdown by sub-criteria, if the developer collects them
Review criteria object
criteria
string
Internal name of the rated criterion (e.g. vaf_mark_message_as_read)
rating
integer
Rating given for that specific criterion
Permission object
permission
string
Human-readable permission description (e.g. find accounts on the device)
type
string
Permission category (e.g. Identity)
Data Safety object
privacyPolicyUrl
string
Link to the developer's privacy policy
Data Safety item object
data
string
Type of data (e.g. Name)
purpose
string
Stated purpose for collecting or sharing the data
type
string
Data category (e.g. Personal info)
optional
boolean
Whether providing this data is optional
Security practice object
practice
string
Name of the security practice (e.g. Data is encrypted in transit)
description
string
Explanation of the practice
Finding App IDs
App ID: the Android package name, visible in a Google Play URL, e.g.
https://play.google.com/store/apps/details?id=com.instagram.android→com.instagram.android.Package names are dot-separated identifiers made up of letters, digits, periods, and underscores (pattern
^[A-Za-z0-9._]+$) — there is no separate numeric ID like on the App Store.
Country and Language Codes
countryis constrained by the spec only to exactly 2 characters — it isn't validated against a fixed allow-list, so pass a standard ISO 3166-1 alpha-2 storefront code (us,gb,jp,de, ...).langmatches the pattern^[a-z]{2,3}(-[a-z]{2,3})?$— 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 Google Play 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 using cursor-based pagination, stopping when pagination.cursor comes back empty or a request cap 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 cursor advance. Alternatively, pass maxItems (1–500) instead of paginating with cursor if a single bulk pull is enough for your use case.
FAQ
Next Steps
API Integration Guide — integrate the Pullbay API into your backend application.
n8n Integration Guide — set up automated workflows using n8n with no coding required.
Services Overview — explore all available Pullbay services.
Last updated