# Google Play Scraper (Cheap) (`data_api/google-play-scraper-cheap`) Actor

Google Play Store scraper that extracts app listings, ratings, downloads, developer info, and user reviews by keyword search, category browse, or top charts, so you can track competitors and analyze any app market without writing a single line of code.

- **URL**: https://apify.com/data\_api/google-play-scraper-cheap.md
- **Developed by:** [Data API](https://apify.com/data_api) (community)
- **Categories:** Developer tools, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Google Play App Data Scraper

![Google Play App Data Scraper](cover.jpg)

Pulling app data off Google Play by hand is slow: you click into each listing, copy the rating, scroll for the install count, hunt down the developer email. This scraper does the clicking for you. Give it a keyword, a category, a top chart, or a list of package IDs, and it returns each app as one clean row with the title, star rating, installs, price, and developer details already split into fields. Turn on the profile and review options when you need the full picture. One app or a thousand, the output stays the same shape, ready for a spreadsheet or a model.

### What you get

Each app comes back as a single row with a steady set of columns, so loading the results into a sheet or database stays predictable. The data falls into a few groups:

- **App basics** — `appId`, `appTitle`, `storeUrl`, `publisher`, `categoryName`, `categoryCode`, `ageRating`
- **Ratings and pricing** — `starRating`, `ratingsTotal`, `freeApp`, `priceLabel`, `priceAmount`, `installCount`, `iapRange`
- **Version and content** — `versionName`, `androidMinimum`, `updatedDate`, `changelog`, `description`
- **Media** — `iconUrl`, `thumbnailUrl`, `bannerUrl`, `screenshotUrls`, `promoVideoUrl`
- **Developer** — `devName`, `devWebsite`, `devEmail`, `devAddress`
- **Run context** — `reviewList`, `queryUsed`, `collectedAt`, `errorMessage`

### Quick start

1. Press **Try for free** and open the input form.
2. Choose how to find apps: type a keyword in **Search term**, paste **App IDs**, set a **Store category**, or pick a **Ranking list**.
3. Flip on **Pull full app profile** and **Collect reviews** if you want the long description, screenshots, and user reviews.
4. Set a **Results limit**, press **Start**, then export the data as JSON, CSV, Excel, or XML.

![How it works](how-it-works.jpg)

### Use cases

- **App store research** — size up a category, see who ranks, and track ratings and install bands over time
- **Competitor monitoring** — watch rival apps for price changes, version bumps, and rating shifts
- **ASO and keyword work** — pull the apps that surface for a search term and study their titles, categories, and descriptions
- **Lead generation** — collect developer names, websites, and contact emails from a category or chart
- **Review mining** — gather user reviews to read sentiment, surface bugs, and spot feature requests
- **Market sizing** — compare install counts and rating volumes across regions using the language and country settings

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `queryTerm` | string | One of `queryTerm`, `appPackages`, `categoryFilter`, or `chartType` | Keyword to search on Google Play, such as `habit tracker`. |
| `appPackages` | array of strings | Optional | Package IDs to pull directly, e.g. `com.whatsapp`. Use alone or with a search term. |
| `categoryFilter` | string | Optional | Browse a category instead of searching, e.g. `PRODUCTIVITY` or `GAME_PUZZLE`. |
| `chartType` | string | Optional | Pull a ranked chart: `topselling_free`, `topselling_paid`, or `topgrossing`. |
| `deviceFilter` | string | No | Limit results to a device class: phone, tablet, tv, chromebook, watch, or car. |
| `fetchFullProfile` | boolean | No | Pull the full profile (description, installs, version, screenshots, developer info) per app. Adds one request each. Default `false`. |
| `fetchReviews` | boolean | No | Collect user reviews for each app. Default `false`. |
| `reviewsPerApp` | integer | No | Most reviews to gather per app when review collection is on. Default `25`. |
| `languageCode` | string | No | Two-letter language code for results. Default `en`. |
| `regionCode` | string | No | Two-letter country code for the storefront region. Default `us`. |
| `resultsLimit` | integer | No | Most apps to return per run. Default `30`. |
| `timeoutSeconds` | integer | No | Seconds to wait on each request before timing out. Default `45`. |

#### Example input

```json
{
    "queryTerm": "habit tracker",
    "categoryFilter": "PRODUCTIVITY",
    "fetchFullProfile": true,
    "fetchReviews": true,
    "reviewsPerApp": 25,
    "languageCode": "en",
    "regionCode": "us",
    "resultsLimit": 30,
    "timeoutSeconds": 45
}
````

### Output

Every app in the run becomes one row. Search results give you the basics; turning on the full profile and reviews fills in the rest. Fields the store does not publish for a given app come back as `null` so your dataset stays rectangular.

#### Example output

```json
{
    "appId": "com.habitify.android",
    "appTitle": "Habitify: Habit Tracker",
    "storeUrl": "https://play.google.com/store/apps/details?id=com.habitify.android",
    "publisher": "Unstatic Ltd.",
    "categoryName": "Productivity",
    "categoryCode": "PRODUCTIVITY",
    "ageRating": "Everyone",
    "starRating": 4.6,
    "ratingsTotal": 41208,
    "freeApp": true,
    "priceLabel": "Free",
    "priceAmount": 0.0,
    "installCount": "1,000,000+",
    "iapRange": "$1.99 - $59.99 per item",
    "versionName": "12.3.1",
    "androidMinimum": "8.0",
    "updatedDate": "Jun 12, 2026",
    "changelog": "Bug fixes and a faster home screen.",
    "description": "Habitify helps you build and keep daily habits with simple tracking, streaks, and reminders.",
    "iconUrl": "https://play-lh.googleusercontent.com/example-icon=s512",
    "thumbnailUrl": "https://play-lh.googleusercontent.com/example-thumb=s256",
    "bannerUrl": "https://play-lh.googleusercontent.com/example-banner=w1024",
    "screenshotUrls": [
        "https://play-lh.googleusercontent.com/example-shot-1=w720",
        "https://play-lh.googleusercontent.com/example-shot-2=w720"
    ],
    "promoVideoUrl": "https://www.youtube.com/embed/exampleVideoId",
    "devName": "Unstatic Ltd.",
    "devWebsite": "https://www.habitify.me",
    "devEmail": "support@habitify.me",
    "devAddress": "71-75 Shelton Street, London, WC2H 9JQ, United Kingdom",
    "reviewList": [
        {
            "reviewId": "gp:AOqpTOExampleReviewId",
            "reviewerName": "Maya R.",
            "reviewerAvatar": "https://play-lh.googleusercontent.com/example-avatar=s64",
            "reviewRating": 5,
            "reviewText": "Clean design and the streaks actually keep me going.",
            "likes": 38,
            "reviewDate": "June 18, 2026",
            "reviewIsoDate": "2026-06-18T09:14:00Z",
            "appVersion": "12.3.1",
            "developerReply": "Thank you! Glad the streaks help.",
            "developerReplyDate": "2026-06-19T11:02:00Z"
        }
    ],
    "queryUsed": "habit tracker",
    "collectedAt": "2026-06-29T12:00:00.000000+00:00",
    "errorMessage": null
}
```

#### Output fields

| Field | Type | Description |
|-------|------|-------------|
| `appId` | string | Package identifier, e.g. com.discord |
| `appTitle` | string | App title |
| `storeUrl` | string | Link to the Play Store page |
| `publisher` | string | Publisher or studio name |
| `categoryName` | string | Category label |
| `categoryCode` | string | Category code |
| `ageRating` | string | Maturity rating, e.g. Everyone, Teen, Mature 17+ |
| `starRating` | number | Mean user score from 1 to 5 |
| `ratingsTotal` | number | How many ratings were submitted |
| `freeApp` | boolean | True when the app costs nothing |
| `priceLabel` | string | Display price text, e.g. $3.99 |
| `priceAmount` | number | Numeric price, zero for free apps |
| `installCount` | string | Install-count text, e.g. 500,000,000+ |
| `iapRange` | string | In-app purchase price range |
| `versionName` | string | Version currently published |
| `androidMinimum` | string | Lowest supported Android version |
| `updatedDate` | string | Date of the most recent update |
| `changelog` | string | Notes from the latest release |
| `description` | string | Complete store description |
| `iconUrl` | string | App icon image link |
| `thumbnailUrl` | string | Thumbnail link from search results |
| `bannerUrl` | string | Feature graphic or banner image link |
| `screenshotUrls` | array | List of screenshot links |
| `promoVideoUrl` | string | Promo clip link (YouTube embed) |
| `devName` | string | Developer name |
| `devWebsite` | string | Developer website link |
| `devEmail` | string | Developer support email |
| `devAddress` | string | Developer mailing address |
| `reviewList` | array | Collected user reviews when review collection is on |
| `queryUsed` | string | Search term that produced the row |
| `collectedAt` | string | ISO 8601 capture timestamp |
| `errorMessage` | string | Failure note when something went wrong; `null` otherwise |

### Tips for best results

- **Start with a small `resultsLimit`.** Run 10 to 20 apps first to confirm the output fits your pipeline, then raise the cap for the full pull.
- **Leave the profile off for quick counts.** `fetchFullProfile` adds a request per app. Keep it off when you only need titles, ratings, and prices; turn it on for descriptions, screenshots, and developer info.
- **Mix search inputs.** A search term, a category, a chart, and a list of package IDs all work together in one run, so you can combine a keyword with a few known apps.
- **Match `languageCode` and `regionCode`.** Set both to the market you care about, e.g. `de` and `de`, to get region-correct prices, descriptions, and charts.
- **Keep `reviewsPerApp` modest at first.** Reviews are paginated, so a high cap across many apps means more requests; start around 25 and raise it once the run looks right.
- **Raise `timeoutSeconds`** if you see timeouts on large runs or slower regions.

### How can I use Google Play app data?

**How can I use the Google Play App Data Scraper to track competitor apps?**
Paste the package IDs of the apps you follow into `appPackages`, turn on `fetchFullProfile`, and run it on a schedule. Each row carries `starRating`, `ratingsTotal`, `installCount`, `priceLabel`, and `versionName`, so you can watch rating trends, price moves, and version releases over time.

**How can I scrape Google Play search results for app store optimization?**
Put your target keyword in `queryTerm` and set `resultsLimit` to the depth you want. The scraper returns every app that surfaces for that term with its `appTitle`, `categoryName`, `starRating`, and `description`, giving you a clear read on which apps rank and how they position themselves.

**How can I collect Google Play developer contacts for lead generation?**
Set a `categoryFilter` or a `chartType`, switch on `fetchFullProfile`, and export the run. Rows include `devName`, `devWebsite`, `devEmail`, and `devAddress`, turning a category or top chart into a structured contact list you can filter and import into your CRM.

**How can I mine Google Play reviews for product feedback?**
Enable `fetchReviews` and set `reviewsPerApp` to the volume you need. The `reviewList` field returns each review with its rating, text, date, and any developer reply, so you can read sentiment, surface recurring bugs, and gather feature requests in one export.

### Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### Support

Questions, feature requests, or a field you'd like added? Reach out at <data.apify@proton.me> and we'll get back to you.

# Actor input Schema

## `queryTerm` (type: `string`):

A keyword to look up on Google Play, such as 'meditation app', 'budget tracker', or 'language learning'.

## `appPackages` (type: `array`):

One or more package identifiers to pull directly, for example 'com.whatsapp' or 'com.canva.editor'. Works on its own or together with a search term.

## `categoryFilter` (type: `string`):

Browse a whole category rather than running a keyword search. Accepted codes include GAME, GAME\_PUZZLE, GAME\_ACTION, SOCIAL, PRODUCTIVITY, EDUCATION, HEALTH\_AND\_FITNESS, FINANCE, PHOTOGRAPHY, TOOLS, COMMUNICATION, ENTERTAINMENT, SHOPPING, TRAVEL\_AND\_LOCAL, SPORTS, MUSIC\_AND\_AUDIO, and NEWS\_AND\_MAGAZINES.

## `chartType` (type: `string`):

Grab a ranked chart in place of a search.

## `deviceFilter` (type: `string`):

Narrow the listing to apps built for a specific device class.

## `fetchFullProfile` (type: `boolean`):

Pull the complete profile for every app — long description, install count, version, screenshots, and developer info. This adds one request per app and stays off unless you switch it on.

## `fetchReviews` (type: `boolean`):

Gather user reviews for each app in the run.

## `reviewsPerApp` (type: `integer`):

Upper limit on how many reviews to gather for each app while review collection is turned on.

## `languageCode` (type: `string`):

Two-letter language code that controls the result language, for example 'en', 'de', 'fr', or 'tr'.

## `regionCode` (type: `string`):

Two-letter country code that picks the storefront region, for example 'us', 'gb', 'de', or 'tr'.

## `resultsLimit` (type: `integer`):

Cap on how many apps come back in a single run.

## `timeoutSeconds` (type: `integer`):

How long to wait on each request before giving up, in seconds.

## Actor input object example

```json
{
  "queryTerm": "habit tracker",
  "fetchFullProfile": false,
  "fetchReviews": false,
  "reviewsPerApp": 25,
  "languageCode": "en",
  "regionCode": "us",
  "resultsLimit": 30,
  "timeoutSeconds": 45
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queryTerm": "habit tracker",
    "languageCode": "en",
    "regionCode": "us"
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_api/google-play-scraper-cheap").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "queryTerm": "habit tracker",
    "languageCode": "en",
    "regionCode": "us",
}

# Run the Actor and wait for it to finish
run = client.actor("data_api/google-play-scraper-cheap").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queryTerm": "habit tracker",
  "languageCode": "en",
  "regionCode": "us"
}' |
apify call data_api/google-play-scraper-cheap --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=data_api/google-play-scraper-cheap",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Play Scraper (Cheap)",
        "description": "Google Play Store scraper that extracts app listings, ratings, downloads, developer info, and user reviews by keyword search, category browse, or top charts, so you can track competitors and analyze any app market without writing a single line of code.",
        "version": "0.0",
        "x-build-id": "nHNNhsft1EMtPiZtg"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/data_api~google-play-scraper-cheap/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-data_api-google-play-scraper-cheap",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/data_api~google-play-scraper-cheap/runs": {
            "post": {
                "operationId": "runs-sync-data_api-google-play-scraper-cheap",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/data_api~google-play-scraper-cheap/run-sync": {
            "post": {
                "operationId": "run-sync-data_api-google-play-scraper-cheap",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "queryTerm": {
                        "title": "Search term",
                        "type": "string",
                        "description": "A keyword to look up on Google Play, such as 'meditation app', 'budget tracker', or 'language learning'."
                    },
                    "appPackages": {
                        "title": "App IDs",
                        "type": "array",
                        "description": "One or more package identifiers to pull directly, for example 'com.whatsapp' or 'com.canva.editor'. Works on its own or together with a search term.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "categoryFilter": {
                        "title": "Store category",
                        "type": "string",
                        "description": "Browse a whole category rather than running a keyword search. Accepted codes include GAME, GAME_PUZZLE, GAME_ACTION, SOCIAL, PRODUCTIVITY, EDUCATION, HEALTH_AND_FITNESS, FINANCE, PHOTOGRAPHY, TOOLS, COMMUNICATION, ENTERTAINMENT, SHOPPING, TRAVEL_AND_LOCAL, SPORTS, MUSIC_AND_AUDIO, and NEWS_AND_MAGAZINES."
                    },
                    "chartType": {
                        "title": "Ranking list",
                        "enum": [
                            "topselling_free",
                            "topselling_paid",
                            "topgrossing"
                        ],
                        "type": "string",
                        "description": "Grab a ranked chart in place of a search."
                    },
                    "deviceFilter": {
                        "title": "Target device",
                        "enum": [
                            "phone",
                            "tablet",
                            "tv",
                            "chromebook",
                            "watch",
                            "car"
                        ],
                        "type": "string",
                        "description": "Narrow the listing to apps built for a specific device class."
                    },
                    "fetchFullProfile": {
                        "title": "Pull full app profile",
                        "type": "boolean",
                        "description": "Pull the complete profile for every app — long description, install count, version, screenshots, and developer info. This adds one request per app and stays off unless you switch it on.",
                        "default": false
                    },
                    "fetchReviews": {
                        "title": "Collect reviews",
                        "type": "boolean",
                        "description": "Gather user reviews for each app in the run.",
                        "default": false
                    },
                    "reviewsPerApp": {
                        "title": "Reviews per app",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Upper limit on how many reviews to gather for each app while review collection is turned on.",
                        "default": 25
                    },
                    "languageCode": {
                        "title": "Result language",
                        "type": "string",
                        "description": "Two-letter language code that controls the result language, for example 'en', 'de', 'fr', or 'tr'.",
                        "default": "en"
                    },
                    "regionCode": {
                        "title": "Store region",
                        "type": "string",
                        "description": "Two-letter country code that picks the storefront region, for example 'us', 'gb', 'de', or 'tr'.",
                        "default": "us"
                    },
                    "resultsLimit": {
                        "title": "Results limit",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Cap on how many apps come back in a single run.",
                        "default": 30
                    },
                    "timeoutSeconds": {
                        "title": "Request timeout (seconds)",
                        "minimum": 5,
                        "maximum": 120,
                        "type": "integer",
                        "description": "How long to wait on each request before giving up, in seconds.",
                        "default": 45
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
