> For the complete documentation index, see [llms.txt](https://docs.pullbay.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.pullbay.com/documentation/api-and-references/google-play-store.md).

# 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

| Endpoint                       | Description                            | Pagination            |
| ------------------------------ | -------------------------------------- | --------------------- |
| `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**

```bash
GET /google-play/apps
Authorization: Bearer YOUR_API_KEY
```

**Parameters**

| Parameter | Type   | Required | Default | Description                                                                                  |
| --------- | ------ | -------- | ------- | -------------------------------------------------------------------------------------------- |
| `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**

```bash
curl -G "https://api.pullbay.com/google-play/apps" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d appId=com.instagram.android \
  -d country=us
```

**Response**

```json
{
  "status": 200,
  "message": "OK",
  "success": true,
  "data": [
    {
      "title": "Instagram",
      "appId": "com.instagram.android",
      "url": "/api/apps/com.instagram.android",
      "icon": "https://play-lh.googleusercontent.com/VRMWkE5p3CkWhJs6nv-9ZsLAs1QOg5ob1_3qg-rckwYW7yp1fMrYZqnEFpk0IoVP4LM",
      "headerImage": "https://play-lh.googleusercontent.com/CgUPurtUp8SB709wsQcKLMv6JdIh1em0ka_58V69AorznLv42TV39etS2rt28wv9Rz8",
      "summary": "Create &amp; share photos, stories, &amp; reels with friends you love",
      "description": "Little moments lead to big friendships. Share yours on Instagram.",
      "descriptionHTML": "Little moments lead to big friendships. Share yours on Instagram. <br>—From Meta",
      "score": 4.0182447,
      "scoreText": "4.0",
      "ratings": 167461256,
      "reviews": 4568306,
      "histogram": { "1": 30279668, "2": 5233417, "3": 7039797, "4": 13507336, "5": 111401011 },
      "free": true,
      "price": 0,
      "priceText": "Free",
      "currency": "USD",
      "offersIAP": true,
      "adSupported": true,
      "installs": "5,000,000,000+",
      "minInstalls": 5000000000,
      "maxInstalls": 7427343782,
      "androidVersion": "VARY",
      "androidVersionText": "Varies with device",
      "updated": 1777328205000,
      "genre": "Social",
      "genreId": "SOCIAL",
      "developer": "Instagram",
      "developerId": "Instagram",
      "developerEmail": "instagram-android@meta.com",
      "developerWebsite": "http://help.instagram.com/",
      "developerInternalID": "Instagram",
      "privacyPolicy": "http://instagram.com/legal/privacy/",
      "playstoreUrl": "https://play.google.com/store/apps/details?id=com.instagram.android&hl=en&gl=us",
      "screenshots": ["https://play-lh.googleusercontent.com/hZ2Ob6d0MqLse2lIdNOGgl93H5y82uhX4hC6mWDUpdwK8LjXAunweDQZ6Hocy0riv4KX0lTIzKJz6lhRDV_BiHg"]
    }
  ],
  "pricing": { "creditsCharged": 1 }
}
```

**Response Schema**

| Field                    | Type   | Description                                                         |
| ------------------------ | ------ | ------------------------------------------------------------------- |
| `data`                   | array  | Array containing a single [Application object](#application-object) |
| `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**

```bash
GET /google-play/search
Authorization: Bearer YOUR_API_KEY
```

**Parameters**

| Parameter | Type   | Required | Default | Description                                                            |
| --------- | ------ | -------- | ------- | ---------------------------------------------------------------------- |
| `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**

```bash
curl -G "https://api.pullbay.com/google-play/search" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d search="photo editor" \
  -d price=free \
  -d country=us
```

**Response**

```json
{
  "status": 200,
  "message": "OK",
  "success": true,
  "data": [
    {
      "title": "Instagram",
      "appId": "com.instagram.android",
      "url": "/api/apps/com.instagram.android",
      "icon": "https://play-lh.googleusercontent.com/VRMWkE5p3CkWhJs6nv-9ZsLAs1QOg5ob1_3qg-rckwYW7yp1fMrYZqnEFpk0IoVP4LM",
      "summary": "Create &amp; share photos, stories, &amp; reels with friends you love",
      "score": 4.0182447,
      "scoreText": "4.0",
      "free": true,
      "price": 0,
      "currency": "USD",
      "playstoreUrl": "https://play.google.com/store/apps/details?id=com.instagram.android",
      "developer": "Instagram",
      "developerId": "Instagram"
    }
  ],
  "pricing": { "creditsCharged": 1 }
}
```

**Response Schema**

| Field                    | Type   | Description                                                         |
| ------------------------ | ------ | ------------------------------------------------------------------- |
| `data`                   | array  | Array of [Application summary objects](#application-summary-object) |
| `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**

```bash
GET /google-play/similar
Authorization: Bearer YOUR_API_KEY
```

**Parameters**

| Parameter | Type   | Required | Default | Description                                                   |
| --------- | ------ | -------- | ------- | ------------------------------------------------------------- |
| `appId`   | string | Yes      | —       | Package name, max 255 characters, letters/digits/`.`/`_` only |

**Example**

```bash
curl -G "https://api.pullbay.com/google-play/similar" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d appId=com.instagram.android
```

**Response**

```json
{
  "status": 200,
  "message": "OK",
  "success": true,
  "data": [
    {
      "title": "Instagram",
      "appId": "com.instagram.android",
      "url": "/api/apps/com.instagram.android",
      "icon": "https://play-lh.googleusercontent.com/VRMWkE5p3CkWhJs6nv-9ZsLAs1QOg5ob1_3qg-rckwYW7yp1fMrYZqnEFpk0IoVP4LM",
      "summary": "Create &amp; share photos, stories, &amp; reels with friends you love",
      "score": 4.0182447,
      "scoreText": "4.0",
      "free": true,
      "price": 0,
      "currency": "USD",
      "playstoreUrl": "https://play.google.com/store/apps/details?id=com.instagram.android",
      "developer": "Instagram",
      "developerId": "Instagram"
    }
  ],
  "pricing": { "creditsCharged": 1 }
}
```

**Response Schema**

| Field                    | Type   | Description                                                         |
| ------------------------ | ------ | ------------------------------------------------------------------- |
| `data`                   | array  | Array of [Application summary objects](#application-summary-object) |
| `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**

```bash
GET /google-play/reviews
Authorization: Bearer YOUR_API_KEY
```

**Parameters**

| Parameter  | Type    | Required | Default | Description                                                                                                 |
| ---------- | ------- | -------- | ------- | ----------------------------------------------------------------------------------------------------------- |
| `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**

```bash
curl -G "https://api.pullbay.com/google-play/reviews" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d appId=com.instagram.android \
  -d country=us \
  -d sort=NEWEST
```

**Response**

```json
{
  "status": 200,
  "message": "OK",
  "success": true,
  "data": [
    {
      "id": "045b1b4e-b207-40f7-8a9e-d4e81664965e",
      "userName": "Jane Doe",
      "userImage": "https://example.com/reviewer-photo.jpg",
      "date": "2025-01-12T22:37:55.959Z",
      "score": 1,
      "scoreText": "1",
      "url": "https://play.google.com/store/apps/details?id=com.instagram.android&reviewId=045b1b4e-b207-40f7-8a9e-d4e81664965e",
      "title": null,
      "text": "The new update is so buggy.",
      "replyDate": null,
      "replyText": null,
      "version": "362.0.0.33.241",
      "thumbsUp": 10224,
      "country": "US",
      "criterias": [
        { "criteria": "vaf_mark_message_as_read", "rating": 1 }
      ]
    }
  ],
  "pagination": { "page": null, "hasNextPage": null, "cursor": null, "offset": null },
  "pricing": { "creditsCharged": 1 }
}
```

**Response Schema**

| Field                                                              | Type             | Description                                                                                 |
| ------------------------------------------------------------------ | ---------------- | ------------------------------------------------------------------------------------------- |
| `data`                                                             | array            | Array of [Review objects](#review-object)                                                   |
| `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**

```bash
GET /google-play/permissions
Authorization: Bearer YOUR_API_KEY
```

**Parameters**

| Parameter | Type   | Required | Default | Description                                                   |
| --------- | ------ | -------- | ------- | ------------------------------------------------------------- |
| `appId`   | string | Yes      | —       | Package name, max 255 characters, letters/digits/`.`/`_` only |

**Example**

```bash
curl -G "https://api.pullbay.com/google-play/permissions" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d appId=com.instagram.android
```

**Response**

```json
{
  "status": 200,
  "message": "OK",
  "success": true,
  "data": [
    { "permission": "find accounts on the device", "type": "Identity" }
  ],
  "pricing": { "creditsCharged": 1 }
}
```

**Response Schema**

| Field                    | Type   | Description                                       |
| ------------------------ | ------ | ------------------------------------------------- |
| `data`                   | array  | Array of [Permission objects](#permission-object) |
| `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**

```bash
GET /google-play/data-safety
Authorization: Bearer YOUR_API_KEY
```

**Parameters**

| Parameter | Type   | Required | Default | Description                                                   |
| --------- | ------ | -------- | ------- | ------------------------------------------------------------- |
| `appId`   | string | Yes      | —       | Package name, max 255 characters, letters/digits/`.`/`_` only |

**Example**

```bash
curl -G "https://api.pullbay.com/google-play/data-safety" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d appId=com.instagram.android
```

**Response**

```json
{
  "status": 200,
  "message": "OK",
  "success": true,
  "data": [
    {
      "sharedData": [
        { "data": "Name", "purpose": "Fraud prevention, security, and compliance", "type": "Personal info", "optional": false }
      ],
      "collectedData": [
        { "data": "Name", "purpose": "Fraud prevention, security, and compliance", "type": "Personal info", "optional": false }
      ],
      "securityPractices": [
        { "practice": "Data is encrypted in transit", "description": "Your data is transferred over a secure connection" }
      ],
      "privacyPolicyUrl": "http://instagram.com/legal/privacy/"
    }
  ],
  "pricing": { "creditsCharged": 1 }
}
```

**Response Schema**

| Field                    | Type   | Description                                                         |
| ------------------------ | ------ | ------------------------------------------------------------------- |
| `data`                   | array  | Array containing a single [Data Safety object](#data-safety-object) |
| `pricing.creditsCharged` | number | Credits charged for this request                                    |

**Credit cost:** dynamic, returned in `pricing.creditsCharged`.

***

## Errors

All non-2xx responses share the same envelope:

```json
{
  "status": 400,
  "message": "Bad request",
  "success": false,
  "error": { "code": "BAD_REQUEST" }
}
```

| Status | Meaning                                                          |
| ------ | ---------------------------------------------------------------- |
| `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

| Field                                                                                       | Type                               | Description                                            |
| ------------------------------------------------------------------------------------------- | ---------------------------------- | ------------------------------------------------------ |
| `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.

| Field                         | Type                      | Description                                  |
| ----------------------------- | ------------------------- | -------------------------------------------- |
| `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

| Field                     | Type                                                        | Description                                                      |
| ------------------------- | ----------------------------------------------------------- | ---------------------------------------------------------------- |
| `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](#review-criteria-object) | Rating breakdown by sub-criteria, if the developer collects them |

### Review criteria object

| Field      | Type    | Description                                                            |
| ---------- | ------- | ---------------------------------------------------------------------- |
| `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

| Field        | Type   | Description                                                                |
| ------------ | ------ | -------------------------------------------------------------------------- |
| `permission` | string | Human-readable permission description (e.g. `find accounts on the device`) |
| `type`       | string | Permission category (e.g. `Identity`)                                      |

### Data Safety object

| Field               | Type                                                            | Description                            |
| ------------------- | --------------------------------------------------------------- | -------------------------------------- |
| `sharedData`        | array of [Data Safety item objects](#data-safety-item-object)   | Data types shared with third parties   |
| `collectedData`     | array of [Data Safety item objects](#data-safety-item-object)   | Data types collected by the app        |
| `securityPractices` | array of [Security practice objects](#security-practice-object) | Declared security practices            |
| `privacyPolicyUrl`  | string                                                          | Link to the developer's privacy policy |

### Data Safety item object

| Field      | Type    | Description                                       |
| ---------- | ------- | ------------------------------------------------- |
| `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

| Field         | Type   | Description                                                         |
| ------------- | ------ | ------------------------------------------------------------------- |
| `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

* `country` is 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`, ...).
* `lang` matches 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:

```python
import requests

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.pullbay.com"

def get_all_reviews(app_id, country="us", max_requests=10):
    all_reviews = []
    cursor = None
    requests_made = 0

    while requests_made < max_requests:
        params = {"appId": app_id, "country": country, "sort": "NEWEST"}
        if cursor:
            params["cursor"] = cursor

        resp = requests.get(
            f"{BASE_URL}/google-play/reviews",
            headers={"Authorization": f"Bearer {API_KEY}"},
            params=params,
        )
        resp.raise_for_status()
        body = resp.json()
        all_reviews.extend(body["data"])
        requests_made += 1

        cursor = body.get("pagination", {}).get("cursor")
        if not cursor:
            break

    return all_reviews

reviews = get_all_reviews("com.instagram.android")
print(f"Fetched {len(reviews)} reviews")
```

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

<details>

<summary>How do I find an app's package name?</summary>

Visit the app's page on the Google Play Store. Look at the URL — it contains `?id=` followed by the package name. For example, `https://play.google.com/store/apps/details?id=com.instagram.android` → `com.instagram.android`.

</details>

<details>

<summary>What countries are supported?</summary>

Any 2-letter code is accepted by the API — it isn't restricted to a published list of supported countries.

</details>

<details>

<summary>How many reviews can I fetch in one call?</summary>

Up to 500 with `maxItems`, or page through with `cursor` (page size isn't fixed by the spec). `cursor` and `maxItems` are mutually exclusive — use one or the other per request.

</details>

<details>

<summary>Can I filter reviews by star rating?</summary>

The API only supports sorting (`NEWEST`, `RATING`, or `HELPFULNESS`), not server-side filtering by rating. Fetch the reviews you need and filter client-side on the `score` field.

</details>

<details>

<summary>What's the credit cost per request?</summary>

It's dynamic — every response includes `pricing.creditsCharged` with the exact amount for that call. There's no fixed published rate per endpoint or per result.

</details>

<details>

<summary>Can I check what data an app collects before integrating with it?</summary>

Yes — use Get Permissions for the Android permissions the app requests, and Get Data Safety for the developer's declared data collection, sharing, and security practices.

</details>

## Next Steps

* [**API Integration Guide**](broken://pages/68e75ab1a73d266350bd68301be87ff97cad563e) — integrate the Pullbay API into your backend application.
* [**n8n Integration Guide**](broken://pages/4308164455b56bbc694cf74c9768ea689c2fe719) — set up automated workflows using n8n with no coding required.
* [**Services Overview**](broken://pages/0d55376cbcca70097a683a71a593d3077825dbf1) — explore all available Pullbay services.
