# App Store Reviews Scraper (`apihq/app-store-reviews-scraper`) Actor

Scrape Apple App Store reviews to JSON by app ID or URL. No Apple account. One record per review with rating, title, text, author, developer reply, and date. Sort by recent, helpful, favorable, or critical. Empty apps cost $0. $0.08 per 1,000 reviews.

- **URL**: https://apify.com/apihq/app-store-reviews-scraper.md
- **Developed by:** [apihq dev](https://apify.com/apihq) (community)
- **Categories:** Developer tools, Business, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.08 / 1,000 reviews

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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

## App Store Reviews Scraper

Export Apple App Store reviews and developer replies as clean JSON from an app id or apps.apple.com URL. No Apple account, no browser. Sort by recent, helpful, favorable, or critical, and pay only for reviews delivered at $0.08 per 1,000.

The contract is simple: **an app with no reviews never fails your run, and you only pay for reviews delivered.** Scrape a batch of apps and get one row per review with the rating, title, text, author, developer reply, and date. There is no per-run start fee, so apps that return nothing cost $0.

### See one run

Input:

```json
{
  "appIds": ["324684580", "9999999999"],
  "sort": "critical",
  "maxReviews": 3,
  "country": "us"
}
````

What comes back:

- 3 `success: true` review rows from Spotify (`324684580`), most critical first, billed
- 1 `success: false` row, `code: NO_REVIEWS`, for the nonexistent app `9999999999`, not billed
- Run status: **SUCCEEDED** (one bad app never fails the batch)
- Charged: 3 reviews = $0.00024

`appId` alone works too. Every knob above is optional: `sort` (`recent`, `helpful`, `favorable`, `critical`), `maxReviews`, and `country` (the App Store storefront, default `us`). Good input returns billed rows, a bad app returns a free error row in the same dataset, and the run still succeeds so one bad app never costs you a batch.

### Why this Actor

- **Developer replies included.** Each review carries the developer's public response (`reply_text`) and when it was last updated.
- **Sort every app four ways.** Order each app's reviews by `recent` (newest first), `helpful` (Apple's most-helpful ranking), `favorable` (highest ratings first), or `critical` (lowest first), so you pull the exact slice your analysis needs.
- **You pay only for reviews.** Billing fires on an explicit per-review event, not on dataset writes, so an app that returns nothing sits in your dataset for free. There is no per-run start fee, so an empty run costs zero.
- **No Apple account.** It reads public App Store reviews directly by app id, so there is nothing to log into and no key to provision.

### Best for

Data and AI workflows that turn app reviews into text: sentiment and brand-safety analysis, competitor and release-quality monitoring, and building review datasets for LLM pipelines. The failure-free billing matters most when the extraction runs unattended inside a larger pipeline, where one bad app should never take down the batch. It works fine for one-off manual pulls too.

### Input example

A single app, most critical reviews first:

```json
{
  "appId": "324684580",
  "maxReviews": 500,
  "sort": "critical"
}
```

A batch of apps, one country:

```json
{
  "appIds": [
    "324684580",
    "https://apps.apple.com/us/app/instagram/id389801252",
    "389801252"
  ],
  "maxReviews": 1000,
  "sort": "recent",
  "country": "us"
}
```

`appId` and `appIds` are merged and de-duplicated (a numeric id and its apps.apple.com URL count as the same app). Up to 50 unique apps run per job. `sort` and `country` apply to every app in the run.

`maxReviews` is a maximum target per app, not a guaranteed count. If fewer reviews are available, the app finishes normally with no diagnostic row. If a rate limit, outage, timeout, or service-capacity condition stops extraction early, the reviews already delivered are preserved, one free `success: false` diagnostic row is added, and the run finishes SUCCEEDED. You are charged only for reviews delivered. The Reliability section below shows the full contract.

### Output example

One record per review. The app's id is copied onto every row so each row stands alone:

```json
{
  "success": true,
  "review_id": "14282988831",
  "app_id": "324684580",
  "user_name": "Neightfrog",
  "rating": 1,
  "title": "App has become unreliable",
  "text": "The app has become unreliable and will stop playing randomly.",
  "posted_at": "2026-07-09T18:01:47Z",
  "is_edited": true,
  "reply_text": "Hello. We appreciate the review. We'd recommend a clean reinstall.",
  "reply_updated_at": "2026-07-08T18:15:11Z",
  "url": "https://apps.apple.com/us/app/id324684580?see-all=reviews"
}
```

An app that cannot be found lands in the same dataset and is not charged:

```json
{
  "success": false,
  "app_id": "9999999999",
  "code": "NO_REVIEWS",
  "error": "Apple App Store returned no reviews for app: 9999999999",
  "request_id": "req_911f37d2e55644ff9d9e4a3f",
  "status_code": 404
}
```

Split hits from misses on the `success` field. Quote `request_id` in any support issue and we can trace the exact request.

### What you get

Every review is one record with `success: true`:

| Field | Type | What it is |
|---|---|---|
| `success` | boolean | `true` for a review (billed). `false` for a diagnostic row (never billed): a single bad or empty app, or a global row marking that the walk stopped early. |
| `review_id` | string | Apple's unique review id. |
| `app_id` | string | The numeric App Store app id the review belongs to. |
| `user_name` | string | Reviewer display name. |
| `rating` | integer | Star rating, 1 to 5. |
| `title` | string | The review title. May be empty. |
| `text` | string | The review body. May be empty. |
| `posted_at` | string | ISO 8601 UTC timestamp the review was posted. |
| `is_edited` | boolean | True when the reviewer edited the review after first posting. |
| `reply_text` | string | The developer's reply body. Absent when there is no reply. |
| `reply_updated_at` | string | ISO 8601 UTC timestamp the developer reply was last modified. Absent when there is no reply. |
| `url` | string | App Store listing URL. |

Service-generated `success: false` rows carry `app_id`, a machine-readable `code`, a human-readable `error`, the service `request_id`, and the HTTP `status_code`, and are never charged. (The one exception is the `NO_INPUT` row when a run has no usable app id, which carries only `code` and `error`.) A `code` of `NO_REVIEWS` or `VALIDATION_FAILED` marks one bad or empty app while the rest of the batch continues. The codes `APP_STORE_RATE_LIMITED`, `APP_STORE_OVERLOAD`, `APP_STORE_UPSTREAM_UNAVAILABLE`, `APP_STORE_REVIEWS_TIMEOUT`, and `DEADLINE_EXCEEDED` mark a global early stop: the walk halted after the reviews already delivered. The Reliability section explains what to do with each.

### Pricing

Pay-per-review. One charge per review delivered: `$0.00008` each, which is `$0.08 per 1,000 reviews`. The charge fires only after a review row lands in your dataset.

- 1,000 delivered reviews cost $0.08.
- A run that hits only empty or nonexistent apps costs $0.
- There is no per-run start fee, so an empty run is genuinely free.

Platform compute is included in the per-review price, so there is no separate usage charge. Cap the maximum spend of a single run from Apify's Run Limits panel; the Actor honors the cap and stops cleanly mid-app when the budget runs out.

### What this Actor does not do

Honest scope, so you know before you run it:

- **No app-version or helpful-vote fields.** The review source this Actor reads does not carry the review's app version or its helpful-vote count, so those fields are not in the output. (Apple's public RSS feed exposes those two fields but is limited to about 500 reviews per country and sort.)
- **Reviews are per country.** Apple serves a country-specific storefront (default `us`). To cover another market, run the app again with a different `country`. One run is one country.
- **Developer replies appear only when the developer replied.** Most reviews have no reply; `reply_text` is simply absent on those rows, not an error.
- **Public reviews only.** It returns what a signed-out visitor sees on the App Store listing. Apple exposes no per-review permalink, so `url` is the app's listing page.

### How to use this Actor

1. Open the Actor in the Apify Console.
2. Set `appId` (single) or `appIds` (a list). Each accepts a numeric App Store id (for example `324684580`) or an apps.apple.com URL. Up to 50 unique apps run per job.
3. Set `maxReviews` to cap how many reviews to return per app, `sort` to `recent`, `helpful`, `favorable`, or `critical`, and optionally `country` for the App Store storefront.
4. Click Start. Each review is one `success: true` record. Apps that cannot be listed produce one `success: false` record and do not stop the run. Only reviews are charged.

The Actor is also callable from the Apify API and every official integration (Make, Zapier, n8n, Slack, webhooks). The API tab in the Console has ready-to-paste JavaScript, Python, and curl snippets.

### Reliability

**A bad app never fails the batch.** A mistyped id, a non-apps.apple.com URL, or an app with no reviews becomes a `success: false` record with a specific `code`. The run keeps going and finishes successfully.

**You never pay for a miss.** Billing fires on an explicit per-review charge event, not on dataset writes, so `success: false` records are free. There is no per-run start fee either.

**Partial results stay usable.** `maxReviews` is a maximum target, not a guaranteed count. If Apple rate-limits requests, becomes unavailable, or the extraction reaches a timeout or a service-capacity limit, the Actor stops the remaining walk instead of adding to the pressure. Reviews already delivered stay in the dataset, followed by one free `success: false` diagnostic row, and the run finishes SUCCEEDED. You are charged only for the reviews delivered.

```json
{
  "success": false,
  "app_id": "324684580",
  "code": "APP_STORE_RATE_LIMITED",
  "error": "Extraction stopped early: Apple rate-limited the request (persistent 429 after retries). Reviews already delivered are preserved; remaining apps were not processed to avoid worsening the upstream condition.",
  "request_id": "req_5f21c0e9a1b2483d",
  "status_code": 429
}
```

If this row follows 200 review rows from a `maxReviews: 500` request, you get 200 delivered and billed reviews, one free diagnostic row, and 300 reviews not processed. In a batch, the apps after the stop are skipped for the same reason. The early-stop codes are `APP_STORE_RATE_LIMITED`, `APP_STORE_OVERLOAD`, `APP_STORE_UPSTREAM_UNAVAILABLE`, `APP_STORE_REVIEWS_TIMEOUT`, and `DEADLINE_EXCEEDED`.

### FAQ

**Do I need an Apple account or API key?**

No. The Actor reads public App Store reviews directly by app id.

**How do I point it at an app?**

Use the numeric App Store id (`324684580`) or an apps.apple.com URL (`https://apps.apple.com/us/app/spotify/id324684580`). Both resolve to the same app. An unrecognizable value comes back as a `success: false` record with `code: VALIDATION_FAILED`, not a rejected run.

**How many reviews can I get per app?**

Up to your `maxReviews`, subject to what Apple serves and to upstream conditions. `maxReviews` is a target, not a guarantee: an app with fewer reviews, or an upstream rate limit, outage, timeout, or capacity stop, can return fewer. The next question covers what an early stop looks like.

**What if the Actor stops before maxReviews?**

You keep everything delivered so far. If Apple rate-limits, becomes unavailable, or the run reaches a timeout or a service-capacity limit, the Actor stops the remaining walk rather than adding to the pressure. The reviews already delivered stay in the dataset and are billed, one free `success: false` diagnostic row records why it stopped (for example `code: APP_STORE_RATE_LIMITED`), and the run still finishes SUCCEEDED. In a batch, the apps after the stop are skipped. You are never charged for the diagnostic row or for reviews that were not delivered.

**Can I get reviews from other countries?**

Yes. Set `country` (for example `gb`, `de`). Apple serves a country-specific storefront, so this selects which reviews you get. One run covers one country; run the app again per market for wider coverage.

**What if an app has no reviews?**

It comes back as a `success: false` record with `code: NO_REVIEWS`. You are not charged.

**Can I also scrape Google Play reviews?**

Yes, with the sibling Actor: [Google Play Reviews Scraper](https://apify.com/apihq/google-play-reviews-scraper). Same failure-free, pay-per-review contract for the Android side.

**Can I use this Actor from my own code?**

Yes. Use the Apify API or one of the official SDKs (Node.js: `apify-client`, Python: `apify-client`). The Console shows ready-to-paste code samples on the API tab.

**How does billing know an app returned nothing?**

Billing fires on an explicit per-review charge event, not on dataset writes. The Actor only fires it when a review is delivered, so `success: false` records sit in your dataset for free. You get every result in one place and still branch on `success` and `code`, with a `request_id` for support correlation.

### Found a bug or want a feature?

Open an issue on this Actor's Issues tab and include the `request_id` from any error record you saw. We respond within one business day.

# Actor input Schema

## `appId` (type: `string`):

A single app, as a numeric App Store id (e.g. '324684580') or an apps.apple.com URL. An unrecognizable value comes back as a success:false record (code VALIDATION\_FAILED), not a rejected run.

## `appIds` (type: `array`):

List of apps (numeric App Store ids or apps.apple.com URLs). Merged with appId and de-duplicated; up to 50 unique apps are processed per run. An app with no reviews comes back as a success:false record, so one bad app never blocks the batch.

## `maxReviews` (type: `integer`):

Maximum target per app, not a guaranteed count. The Actor may return fewer when fewer reviews are available, or when an upstream rate limit, outage, timeout, or capacity stop ends the walk early (reviews already delivered are kept, the run still succeeds, and only delivered reviews are charged).

## `sort` (type: `string`):

Review order. 'recent' (default) is most recent first; 'helpful' is Apple's most-helpful ranking; 'favorable' surfaces the highest ratings first; 'critical' the lowest.

## `country` (type: `string`):

Two-letter App Store country code (e.g. 'us', 'gb', 'de'). Apple serves a country-specific storefront, so this selects which reviews you get. Defaults to 'us'.

## Actor input object example

```json
{
  "appId": "324684580",
  "maxReviews": 100,
  "sort": "recent",
  "country": "us"
}
```

# Actor output Schema

## `reviews` (type: `string`):

One record per review. success:true carries the review fields; success:false carries the error code and message for an app that returned nothing or failed.

# 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 = {
    "appId": "324684580",
    "maxReviews": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("apihq/app-store-reviews-scraper").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 = {
    "appId": "324684580",
    "maxReviews": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("apihq/app-store-reviews-scraper").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 '{
  "appId": "324684580",
  "maxReviews": 100
}' |
apify call apihq/app-store-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=apihq/app-store-reviews-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "App Store Reviews Scraper",
        "description": "Scrape Apple App Store reviews to JSON by app ID or URL. No Apple account. One record per review with rating, title, text, author, developer reply, and date. Sort by recent, helpful, favorable, or critical. Empty apps cost $0. $0.08 per 1,000 reviews.",
        "version": "0.1",
        "x-build-id": "aiL5KTphys0fzJSMc"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/apihq~app-store-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-apihq-app-store-reviews-scraper",
                "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/apihq~app-store-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-apihq-app-store-reviews-scraper",
                "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/apihq~app-store-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-apihq-app-store-reviews-scraper",
                "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": {
                    "appId": {
                        "title": "App (id or URL)",
                        "type": "string",
                        "description": "A single app, as a numeric App Store id (e.g. '324684580') or an apps.apple.com URL. An unrecognizable value comes back as a success:false record (code VALIDATION_FAILED), not a rejected run."
                    },
                    "appIds": {
                        "title": "Multiple apps",
                        "type": "array",
                        "description": "List of apps (numeric App Store ids or apps.apple.com URLs). Merged with appId and de-duplicated; up to 50 unique apps are processed per run. An app with no reviews comes back as a success:false record, so one bad app never blocks the batch.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxReviews": {
                        "title": "Max reviews per app",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum target per app, not a guaranteed count. The Actor may return fewer when fewer reviews are available, or when an upstream rate limit, outage, timeout, or capacity stop ends the walk early (reviews already delivered are kept, the run still succeeds, and only delivered reviews are charged)."
                    },
                    "sort": {
                        "title": "Sort by",
                        "enum": [
                            "recent",
                            "helpful",
                            "favorable",
                            "critical"
                        ],
                        "type": "string",
                        "description": "Review order. 'recent' (default) is most recent first; 'helpful' is Apple's most-helpful ranking; 'favorable' surfaces the highest ratings first; 'critical' the lowest.",
                        "default": "recent"
                    },
                    "country": {
                        "title": "Country",
                        "type": "string",
                        "description": "Two-letter App Store country code (e.g. 'us', 'gb', 'de'). Apple serves a country-specific storefront, so this selects which reviews you get. Defaults to 'us'.",
                        "default": "us"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
