# App Store & Google Play Reviews & ASO Scraper (`taroyamada/app-store-review-aso-scraper`) Actor

Scrape Apple App Store and Google Play customer reviews and app/ASO intelligence in bulk by app ID, store URL, bundle/package ID, or keyword search. Multi-country, full pagination, rating histograms, version breakdowns, sentiment and keyword signals. Public store endpoints only. Pay per result.

- **URL**: https://apify.com/taroyamada/app-store-review-aso-scraper.md
- **Developed by:** [naoki anzai](https://apify.com/taroyamada) (community)
- **Categories:** E-commerce, Developer tools, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.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/platform/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 & Google Play Reviews & ASO Scraper

Build **Apple App Store and Google Play review intelligence** and **ASO snapshots** in bulk — by app ID, store URL, bundle/package ID, or keyword search. Multi-country review samples are turned into rating histograms, version breakdowns, sentiment, and keyword signals. Uses **public store endpoints only** (no login, no cookies, no scraping tricks). Every row is tagged with its `platform` (`app_store` or `google_play`). **You pay only per result delivered.**

> Great for ASO teams, app marketers, product managers, and competitive/market research.

### What you get

For each app and storefront you can get:

- **Every recent customer review** (up to ~500 per storefront): rating, title, text, author, app version, helpful votes, date.
- **An app profile / ASO snapshot**: name, developer, price, genres, content rating, current version + release dates, official average rating and total rating count, plus computed signals from the review sample:
  - **Rating histogram** (1–5 stars)
  - **Sentiment breakdown** (positive / neutral / negative share)
  - **Versions seen** in recent reviews
  - **Top keywords** customers actually use

### Inputs

Provide any combination of sources:

| Field | Description |
| --- | --- |
| `appIds` | Apple numeric track IDs, e.g. `1232780281` |
| `appUrls` | App Store URLs, e.g. `https://apps.apple.com/us/app/notion/id1232780281` |
| `bundleIds` | Apple bundle identifiers, e.g. `com.notion.notion` |
| `searchTerms` | Keywords to discover App Store apps (ASO / competitor discovery) |
| `playAppIds` | Google Play package names, e.g. `com.spotify.music` |
| `playUrls` | Google Play URLs, e.g. `https://play.google.com/store/apps/details?id=com.spotify.music` |
| `countries` | Storefront codes, e.g. `["us","gb","jp"]` |
| `language` | Language code for Google Play requests, e.g. `en` |
| `maxReviewPages` | Pages of reviews per app per storefront (Apple ~50/page, Google Play ~100/page) |
| `reviewSort` | `mostRecent` or `mostHelpful` |
| `minRating` | Keep only reviews ≥ this rating (0 = all) |
| `includeReviews` / `includeAppProfile` | Toggle each output type |
| `emitUnchanged` / `baselineStableKeys` | For recurring monitoring, set `emitUnchanged: false` and pass stable keys from the previous run to emit and charge only new rows |

#### Example: same app on both stores

```json
{
  "appIds": ["1232780281"],
  "playAppIds": ["notion.id"],
  "countries": ["us"],
  "maxReviewPages": 5
}
````

#### Example: reviews for specific apps, two countries

```json
{
  "appIds": ["1232780281"],
  "countries": ["us", "gb"],
  "maxReviewPages": 10,
  "reviewSort": "mostRecent"
}
```

#### Example: discover competitors by keyword and snapshot them

```json
{
  "searchTerms": ["habit tracker", "budget app"],
  "maxAppsPerTerm": 10,
  "countries": ["us"],
  "includeReviews": true,
  "includeAppProfile": true
}
```

#### Example: recurring no-change-safe run

```json
{
  "appIds": ["1232780281"],
  "countries": ["us"],
  "maxReviewPages": 1,
  "includeReviews": true,
  "includeAppProfile": true,
  "emitUnchanged": false,
  "baselineStableKeys": [
    "appprofile:app_store:us:1232780281",
    "appreview:app_store:us:1232780281:1001"
  ],
  "dryRun": false
}
```

### Output

Each dataset item is either an `app_review` or an `app_profile` row.

**Review row (charged as `app-review`):**

```json
{
  "rowType": "app_review",
  "appId": "1438388363",
  "appName": "Habit Tracker",
  "country": "us",
  "reviewId": "14143606963",
  "author": "Chelsea123",
  "rating": 5,
  "title": "Love it",
  "content": "Keeps me consistent every day...",
  "appVersion": "2.14.11",
  "voteSum": 3,
  "voteCount": 4,
  "updated": "2026-06-03T08:58:57-07:00",
  "sourceUrl": "https://apps.apple.com/us/app/id1438388363"
}
```

**App profile row (charged as `app-profile`):**

```json
{
  "rowType": "app_profile",
  "appId": "1438388363",
  "appName": "Habit Tracker",
  "country": "us",
  "primaryGenre": "Productivity",
  "version": "2.14.12",
  "averageUserRating": 4.79,
  "userRatingCount": 141798,
  "ratingHistogram": { "1": 13, "2": 1, "3": 8, "4": 15, "5": 63 },
  "sentiment": { "positive": 78, "neutral": 8, "negative": 14, "positiveShare": 0.78 },
  "versionsSeen": [{ "version": "2.14.12", "count": 40 }],
  "topKeywords": [{ "word": "habits", "count": 24 }, { "word": "love", "count": 23 }]
}
```

### Pricing — pay for raw rows or ASO snapshots

| Event | Price | When |
| --- | --- | --- |
| `app-review` | **$0.003** | per customer review delivered when you need raw review text |
| `app-profile` | **$0.05** | per app per storefront — the ASO intelligence snapshot |

`app-review` is the commodity row. The differentiated output is `app-profile`: official rating + total ratings, **rating histogram**, **sentiment breakdown**, **top keywords**, and **versions seen**, in one row. Turn it off (`includeAppProfile: false`) if you only want raw reviews; keep it on for ASO, product, and competitive research workflows.

**How billing works (fair by design):**

- `app-review` is charged **per review delivered**. An app that returns no reviews produces **no review charges** — it's reported as a run warning only.
- `app-profile` is charged **once per app per storefront**, when the app's official profile is successfully retrieved. The profile carries value even with no recent reviews (official rating, total ratings, version, genre), so it is charged whenever you enable it and the app is found. If the app's metadata can't be retrieved, **no profile is emitted or charged**. Set `includeAppProfile: false` to never incur this event.
- Recurring monitoring can avoid repeat charges: set `emitUnchanged: false` and provide `baselineStableKeys` from a previous run. Matching rows are skipped, produce **0 dataset rows**, and generate **0 charges**.

### Use cases

- **ASO reports** — track keywords, ratings, and review themes for your app and competitors across storefronts.
- **Product** — surface bugs, churn drivers, and feature requests from recent reviews by version.
- **Market & competitive research** — snapshot a whole category by keyword and compare rating histograms and sentiment.
- **Review monitoring / alerting** — schedule recurring runs and feed new low-star reviews into your tools.

### FAQ

- **Does it need an account or API key?** No. It uses Apple's public iTunes Search/Lookup/Customer-Reviews-RSS endpoints and Google Play's public store endpoints.
- **How many reviews per app?** Apple exposes the most recent ~500 per storefront (10 pages × 50). Google Play is paginated via `maxReviewPages` (~100/page). Scrape more countries to widen coverage.
- **Which countries?** Any storefront via its two-letter code (`us`, `gb`, `jp`, `de`, ...).
- **Both stores?** Yes — provide Apple sources (`appIds`/`appUrls`/`bundleIds`/`searchTerms`) and/or Google Play sources (`playAppIds`/`playUrls`). Each row carries a `platform` field.

### Compliance

Only public, non-authenticated Apple endpoints are used. Output is for research and analytics. **Do not** use review data to identify, target, or contact individual reviewers, or to generate or post fake reviews. See `docs/source-compliance.md`.

# Actor input Schema

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

Numeric Apple App Store track IDs (e.g. 1232780281).

## `appUrls` (type: `array`):

Full App Store URLs (e.g. https://apps.apple.com/us/app/notion/id1232780281).

## `bundleIds` (type: `array`):

App bundle identifiers (e.g. com.notion.notion). Resolved to apps per storefront.

## `searchTerms` (type: `array`):

Keywords to discover Apple App Store apps. Useful for ASO and competitive monitoring.

## `playAppIds` (type: `array`):

Google Play app package names, e.g. com.spotify.music.

## `playUrls` (type: `array`):

Google Play store URLs, e.g. https://play.google.com/store/apps/details?id=com.spotify.music.

## `maxAppsPerTerm` (type: `integer`):

How many top apps to take from each search term.

## `countries` (type: `array`):

Two-letter App Store country codes to scrape (e.g. us, gb, jp, de). Reviews and ratings are per storefront.

## `language` (type: `string`):

Two-letter language code used for Google Play requests, e.g. en, ja, de.

## `maxReviewPages` (type: `integer`):

Each page returns up to 50 recent reviews (Apple exposes up to 10 pages = ~500 reviews per storefront).

## `reviewSort` (type: `string`):

Order reviews by most recent or most helpful.

## `includeReviews` (type: `boolean`):

Emit one row per customer review.

## `includeAppProfile` (type: `boolean`):

Emit one metadata + ASO + aggregate-rating row per app per storefront.

## `minRating` (type: `integer`):

Only keep reviews with at least this star rating (0 = keep all).

## `proxy` (type: `object`):

Optional. Apple's public endpoints generally work without a proxy; enable one only for very large runs.

## `dryRun` (type: `boolean`):

When true, emit illustrative sample rows without live calls or billing. Set to false to scrape real data.

## `emitUnchanged` (type: `boolean`):

Keep enabled for one-off exports. For recurring monitoring, disable it and provide baselineStableKeys to emit and charge only new review/profile rows.

## `baselineStableKeys` (type: `array`):

Optional stableKey values from a previous run. When emitUnchanged is false, matching rows are skipped and not charged.

## Actor input object example

```json
{
  "appIds": [
    "1232780281"
  ],
  "appUrls": [],
  "bundleIds": [],
  "searchTerms": [],
  "playAppIds": [],
  "playUrls": [],
  "maxAppsPerTerm": 5,
  "countries": [
    "us"
  ],
  "language": "en",
  "maxReviewPages": 5,
  "reviewSort": "mostRecent",
  "includeReviews": true,
  "includeAppProfile": true,
  "minRating": 0,
  "proxy": {
    "useApifyProxy": false
  },
  "dryRun": true,
  "emitUnchanged": true,
  "baselineStableKeys": []
}
```

# 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 = {
    "appIds": [
        "1232780281"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("taroyamada/app-store-review-aso-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 = { "appIds": ["1232780281"] }

# Run the Actor and wait for it to finish
run = client.actor("taroyamada/app-store-review-aso-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 '{
  "appIds": [
    "1232780281"
  ]
}' |
apify call taroyamada/app-store-review-aso-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "App Store & Google Play Reviews & ASO Scraper",
        "description": "Scrape Apple App Store and Google Play customer reviews and app/ASO intelligence in bulk by app ID, store URL, bundle/package ID, or keyword search. Multi-country, full pagination, rating histograms, version breakdowns, sentiment and keyword signals. Public store endpoints only. Pay per result.",
        "version": "0.1",
        "x-build-id": "QfwQwaRbTXkzVAByK"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/taroyamada~app-store-review-aso-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-taroyamada-app-store-review-aso-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/taroyamada~app-store-review-aso-scraper/runs": {
            "post": {
                "operationId": "runs-sync-taroyamada-app-store-review-aso-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/taroyamada~app-store-review-aso-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-taroyamada-app-store-review-aso-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": {
                    "appIds": {
                        "title": "App IDs",
                        "type": "array",
                        "description": "Numeric Apple App Store track IDs (e.g. 1232780281).",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "appUrls": {
                        "title": "App Store URLs",
                        "type": "array",
                        "description": "Full App Store URLs (e.g. https://apps.apple.com/us/app/notion/id1232780281).",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "bundleIds": {
                        "title": "Bundle IDs",
                        "type": "array",
                        "description": "App bundle identifiers (e.g. com.notion.notion). Resolved to apps per storefront.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "searchTerms": {
                        "title": "Search terms (App Store)",
                        "type": "array",
                        "description": "Keywords to discover Apple App Store apps. Useful for ASO and competitive monitoring.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "playAppIds": {
                        "title": "Google Play package names",
                        "type": "array",
                        "description": "Google Play app package names, e.g. com.spotify.music.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "playUrls": {
                        "title": "Google Play URLs",
                        "type": "array",
                        "description": "Google Play store URLs, e.g. https://play.google.com/store/apps/details?id=com.spotify.music.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "maxAppsPerTerm": {
                        "title": "Max apps per search term",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "How many top apps to take from each search term.",
                        "default": 5
                    },
                    "countries": {
                        "title": "Storefront countries",
                        "type": "array",
                        "description": "Two-letter App Store country codes to scrape (e.g. us, gb, jp, de). Reviews and ratings are per storefront.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "us"
                        ]
                    },
                    "language": {
                        "title": "Language (Google Play)",
                        "type": "string",
                        "description": "Two-letter language code used for Google Play requests, e.g. en, ja, de.",
                        "default": "en"
                    },
                    "maxReviewPages": {
                        "title": "Max review pages per app",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Each page returns up to 50 recent reviews (Apple exposes up to 10 pages = ~500 reviews per storefront).",
                        "default": 5
                    },
                    "reviewSort": {
                        "title": "Review sort",
                        "enum": [
                            "mostRecent",
                            "mostHelpful"
                        ],
                        "type": "string",
                        "description": "Order reviews by most recent or most helpful.",
                        "default": "mostRecent"
                    },
                    "includeReviews": {
                        "title": "Include reviews",
                        "type": "boolean",
                        "description": "Emit one row per customer review.",
                        "default": true
                    },
                    "includeAppProfile": {
                        "title": "Include app profile / ASO snapshot",
                        "type": "boolean",
                        "description": "Emit one metadata + ASO + aggregate-rating row per app per storefront.",
                        "default": true
                    },
                    "minRating": {
                        "title": "Minimum review rating",
                        "minimum": 0,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Only keep reviews with at least this star rating (0 = keep all).",
                        "default": 0
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional. Apple's public endpoints generally work without a proxy; enable one only for very large runs.",
                        "default": {
                            "useApifyProxy": false
                        }
                    },
                    "dryRun": {
                        "title": "Dry run",
                        "type": "boolean",
                        "description": "When true, emit illustrative sample rows without live calls or billing. Set to false to scrape real data.",
                        "default": true
                    },
                    "emitUnchanged": {
                        "title": "Emit unchanged rows",
                        "type": "boolean",
                        "description": "Keep enabled for one-off exports. For recurring monitoring, disable it and provide baselineStableKeys to emit and charge only new review/profile rows.",
                        "default": true
                    },
                    "baselineStableKeys": {
                        "title": "Baseline stable keys",
                        "type": "array",
                        "description": "Optional stableKey values from a previous run. When emitUnchanged is false, matching rows are skipped and not charged.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
