# TikTok Shop Competitor & Product Monitor (`thescrapelab/tiktok-shop-competitor-product-monitor`) Actor

Scrape and monitor US TikTok Shop products, prices, sales, stock, sellers, reviews, variants, and public creator signals with field-level change detection.

- **URL**: https://apify.com/thescrapelab/tiktok-shop-competitor-product-monitor.md
- **Developed by:** [Inus Grobler](https://apify.com/thescrapelab) (community)
- **Categories:** E-commerce, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.49 / 1,000 product 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 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

Turn public US TikTok Shop listings into structured product research and repeatable competitor intelligence. Give it keywords or public product and store URLs as input; get typed product, seller, review, creator-signal, change, and error datasets as output. Clear limitations and troubleshooting cover blocked pages, CAPTCHA behavior, missing fields, and cost controls.

Use it as a **TikTok Shop scraper**, **competitor price tracker**, **product research API**, **seller monitor**, or **TikTok Shop analytics data source**—without building a browser workflow or cleaning nested page data yourself.

### What you can do

- Find US TikTok Shop products for a keyword.
- Prioritize keyword-relevant products when TikTok mixes merchandising modules into a result page.
- Research competing stores, assortments, pricing, discounts, stock signals, and variants.
- Track price, availability, public sold count, rating, review count, seller, and SKU changes.
- Export clean product, shop, review, creator-signal, change, and error tables.
- Feed TikTok Shop data into Google Sheets, Airtable, Make, Zapier, webhooks, databases, or your own app through Apify integrations and API.
- Estimate product opportunity with a transparent `current price × public sold count` GMV proxy.

### Input examples

The easiest first run needs only one field:

```json
{
  "targets": ["wireless earbuds"]
}
````

Keywords and public TikTok Shop URLs can be mixed in the same list:

```json
{
  "targets": [
    "portable blender",
    "https://shop.tiktok.com/us/pdp/example-product/1234567890123456789",
    "https://shop.tiktok.com/us/store/example-store/7495000000000000000"
  ],
  "maxProducts": 10
}
```

The Actor detects each line automatically. Leave `maxProducts` at 5 for a quick first run, then increase it when you need a larger dataset.

### Output datasets

| Dataset view | Typical fields |
| --- | --- |
| **Products** | Product ID and URL, discovery query/source, title, description, category, brand, visible listing price, price source, original price, currency, discount, availability, public sold count, rating, review count, estimated GMV, seller, variants, images, properties, shipping, coverage flags, change status |
| **Shops** | Seller ID, shop name and URL, rating, followers, public sold count, product count, review count, logo, identity label |
| **Reviews** | Review ID, public reviewer name, rating, text, date, country, variant, verified-purchase signal, images |
| **Creator signals** | Public creator identity, handle, shoppable video, followers, attributed sales signal when embedded by TikTok |
| **Changes** | `baseline`, `new`, `updated`, or `removed` status, changed fields, old and new values, percentage change, first/previous seen timestamps |
| **Errors** | Failed URL, safe error type and message, retryability, and actionable warnings |

Every product contains `fieldCoverage` and `warnings`, so downstream workflows can distinguish a genuine zero from data TikTok did not expose. `fieldCoverage.productDetails` explicitly identifies whether product-page enrichment succeeded.

#### Output example

```json
{
  "recordType": "product",
  "region": "US",
  "productId": "1234567890123456789",
  "title": "Example wireless earbuds",
  "price": 19.99,
  "originalPrice": 39.99,
  "currency": "USD",
  "priceSource": "discovery-listing",
  "discountPercent": 50,
  "availability": "InStock",
  "soldCount": 18420,
  "rating": 4.7,
  "reviewCount": 2310,
  "estimatedGmv": 368215.8,
  "estimateMethod": "currentPriceTimesPublicSoldCount",
  "shopName": "Example Audio",
  "variants": [],
  "changeStatus": "updated",
  "fieldCoverage": {
    "price": true,
    "availability": true,
    "soldCount": true,
    "reviews": true,
    "variants": false,
    "seller": true,
    "creatorSignals": false
  }
}
```

### Input options

| Input | Description | Default |
| --- | --- | --- |
| `targets` | Keywords, brand names, niches, or public TikTok Shop URLs; one per line | `wireless earbuds` |
| `maxProducts` | Maximum unique products returned; 1–1,000 | `5` |

That is the complete Console input. US keyword routing, relevance ranking, monitoring detection, request pacing, retries, proxy fallback, and browser fallback are automatic.

The Actor also chooses the safest data path from the target. A keyword, store, or category performs a fast market scan from the public listing data. A pasted product URL opens that product directly for its richer public detail fields. This avoids turning a simple keyword run into a chain of blocked detail requests.

Existing API integrations remain compatible with the earlier advanced keys, including `startUrls`, `searchQueries`, `categoryUrls`, `includeProductDetails`, `includeReviews`, `monitorMode`, `monitorKey`, and `outputMode`. New integrations should use `targets` unless they specifically need an override. API clients can set `includeProductDetails: true` to enrich every product discovered by a keyword or store scan.

### Simple, result-based pricing

Introductory launch pricing is deliberately low: you pay only for successful data—not failed requests or scraper retries. Apify automatically applies the price for your subscription plan, so there is nothing extra to configure.

| Successful result | Free | Bronze | Silver | Gold, Platinum & Diamond |
| --- | ---: | ---: | ---: | ---: |
| Listing-level product | $4.99 / 1,000 | $4.49 / 1,000 | $3.99 / 1,000 | **$3.49 / 1,000** |
| Detail-enriched product | $7.99 / 1,000 | $7.19 / 1,000 | $6.39 / 1,000 | **$5.59 / 1,000** |
| Public review | $0.50 / 1,000 | $0.45 / 1,000 | $0.40 / 1,000 | **$0.35 / 1,000** |

A detail-enriched product is charged as a detailed product, not again as a listing-level product. Shop profiles, creator signals, monitoring change rows, and error diagnostics are included without a result event charge. Apify also applies its standard **$0.00005 Actor-start charge** for runs using up to 1 GB of memory. These prices include platform usage; there is no separate compute or proxy line item for customers. The run budget is enforced before paid rows are written, and the minimum selectable budget is only **$0.01**.

### Limitations and market coverage

**Validated keyword, product, and store coverage:** United States (`US`).

Public TikTok Shop URLs from other markets can be supplied in `targets` and are attempted as **best effort**. They are labeled `tier2` in the output. At the time of validation, many non-US public-web routes returned an empty response or a security check even through a matching-country residential proxy, so they are not offered for keyword discovery or presented as reliable coverage.

TikTok can change regional availability and public fields without notice. A market embedded in a supplied URL is detected automatically. The Actor does not silently substitute US results for a failed regional request.

### Competitor and product monitoring

Monitoring compares stable business fields—not timestamps or page noise.

1. Create an **Apify Task** from this Actor and keep its input stable.
2. Run the Task once to create the baseline.
3. Run the same Task again whenever you want a comparison.
4. Read the **Changes** dataset view or use `outputMode: "changesOnly"`.

With `monitorMode: "auto"`, Task runs automatically share private history. One-off Actor runs remain snapshots unless you provide the same random `monitorKey` each time. `compare` mode fails early if neither a Task nor a monitor key is available.

The Actor stores only a hash of a custom monitor key in its monitoring namespace, but the value is still part of your run input. Use a random identifier—not a password or API secret.

`removed` is emitted only when a complete source assortment can be established. The Actor avoids claiming removals after partial or blocked crawls.

### Run through the Apify API

Use the deployed Actor name below and replace only the token placeholder.

#### cURL

```bash
curl -X POST \
  'https://api.apify.com/v2/acts/thescrapelab~tiktok-shop-competitor-product-monitor/runs' \
  -H 'Authorization: Bearer <YOUR_APIFY_TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{
    "targets": ["skincare organizer"],
    "maxProducts": 10
  }'
```

#### JavaScript

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('thescrapelab/tiktok-shop-competitor-product-monitor').call({
    targets: ['skincare organizer'],
    maxProducts: 10,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
actor_client = client.actor("thescrapelab/tiktok-shop-competitor-product-monitor")
run = actor_client.call(
    run_input={
        "targets": ["skincare organizer"],
        "maxProducts": 10,
    }
)

items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

The run's `OUTPUT` key-value-store record contains a compact summary with counts, request methods, coverage, monitoring state, data-quality counts, billing event totals, budget-limit status, and notices.

### Reliability and cost controls

The Actor first requests TikTok Shop's public server-rendered product data. It uses its configured proxy and a Playwright browser only when needed. This keeps common runs fast while retaining a fallback for temporary blocking.

- Customers pay the published result-event prices above, not a variable compute or proxy surcharge.
- Product detail enrichment adds approximately one page per discovered product and uses the detail-enriched product event only when it succeeds.
- Reviews and creator signals do not invent or backfill unavailable data.
- Failed detail pages retain useful discovery-level product data and add an error row instead of discarding the whole run.
- Security-check pages are reported; the Actor does not solve CAPTCHAs.

### Common use cases

- TikTok Shop competitor price monitoring
- Trending-product and product-opportunity research
- Seller and assortment benchmarking
- Discount, stock, rating, and review tracking
- Product catalog enrichment
- Public sales-count and estimated-GMV analysis
- TikTok Shop data exports for spreadsheets, dashboards, alerts, and lead scoring

### FAQ

#### Is `estimatedGmv` actual seller revenue?

No. It is a transparent directional estimate: current public price multiplied by the public sold count. It does not account for historical prices, refunds, coupons, taxes, shipping, fees, or whether the sold count is rounded or scoped differently by TikTok.

#### Why are some values `null`?

TikTok does not expose every field on every page, product, or region. Check `fieldCoverage` and `warnings`. A missing value is returned as `null` instead of being guessed.

#### Can it scrape private Seller Center or affiliate-account data?

No. This Actor is designed for public TikTok Shop pages. It does not log in to accounts or access private dashboards.

#### Will the Actor automatically run every day?

No schedule is created for you. Save the configuration as an Apify Task and add a schedule only if and when you want recurring monitoring.

#### Does it work forever without maintenance?

No scraper can promise that. TikTok can change page structures, blocking, regional availability, and field visibility. Errors are isolated per URL and surfaced in a dedicated view so you can diagnose partial runs.

### Responsible use

Use this Actor only where you have a lawful purpose and in accordance with applicable laws, TikTok's terms, and Apify's platform rules. Collect only the data you need, avoid sensitive-person profiling, and set appropriate retention and access controls.

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by TikTok or ByteDance. “TikTok” is used only to identify the supported public website.

### Troubleshooting and support

- If a URL fails, open the **Errors** dataset view and check `errorType`, `retryable`, and `warnings`.
- If fields are `null`, inspect `fieldCoverage` and the product-level `warnings`; the Actor never guesses hidden values.
- If blocking increases, keep the residential proxy fallback enabled, lower concurrency, and retry later. CAPTCHA pages are reported, not solved.

For a reproducible support request, include the run ID, affected public URL or query, region, expected field, and the relevant Errors-view row. Never include your Apify token or account credentials.

# Actor input Schema

## `targets` (type: `array`):

Enter product keywords, brand names, competitor niches, or public shop.tiktok.com product/store/category URLs—one per line. Keywords and URLs can be mixed.

## `maxProducts` (type: `integer`):

Leave this at 5 for a quick first run. Increase it only when you need a larger dataset.

## Actor input object example

```json
{
  "targets": [
    "wireless earbuds"
  ],
  "maxProducts": 5
}
```

# Actor output Schema

## `products` (type: `string`):

Open the typed product records collected in this run.

## `shops` (type: `string`):

Open the seller and shop records connected to collected products.

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

Open public review records when review collection is enabled and data is exposed.

## `creators` (type: `string`):

Open public creator, affiliate, and shoppable-video signals when available.

## `changes` (type: `string`):

Open baseline, new, updated, and removed monitoring events.

## `errors` (type: `string`):

Open isolated request failures with safe diagnostics and retry guidance.

## `runSummary` (type: `string`):

Open run counts, request methods, monitoring state, coverage, data-quality totals, charged event counts, and budget-limit status.

# 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 = {
    "targets": [
        "wireless earbuds"
    ],
    "maxProducts": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("thescrapelab/tiktok-shop-competitor-product-monitor").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 = {
    "targets": ["wireless earbuds"],
    "maxProducts": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("thescrapelab/tiktok-shop-competitor-product-monitor").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 '{
  "targets": [
    "wireless earbuds"
  ],
  "maxProducts": 5
}' |
apify call thescrapelab/tiktok-shop-competitor-product-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=thescrapelab/tiktok-shop-competitor-product-monitor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TikTok Shop Competitor & Product Monitor",
        "description": "Scrape and monitor US TikTok Shop products, prices, sales, stock, sellers, reviews, variants, and public creator signals with field-level change detection.",
        "version": "0.1",
        "x-build-id": "ZDQRTRbElJ5PUC5q2"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/thescrapelab~tiktok-shop-competitor-product-monitor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-thescrapelab-tiktok-shop-competitor-product-monitor",
                "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/thescrapelab~tiktok-shop-competitor-product-monitor/runs": {
            "post": {
                "operationId": "runs-sync-thescrapelab-tiktok-shop-competitor-product-monitor",
                "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/thescrapelab~tiktok-shop-competitor-product-monitor/run-sync": {
            "post": {
                "operationId": "run-sync-thescrapelab-tiktok-shop-competitor-product-monitor",
                "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": {
                    "targets": {
                        "title": "What do you want to research or monitor?",
                        "maxItems": 50,
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Enter product keywords, brand names, competitor niches, or public shop.tiktok.com product/store/category URLs—one per line. Keywords and URLs can be mixed.",
                        "items": {
                            "type": "string",
                            "minLength": 1
                        },
                        "default": [
                            "wireless earbuds"
                        ]
                    },
                    "maxProducts": {
                        "title": "Maximum products (optional)",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Leave this at 5 for a quick first run. Increase it only when you need a larger dataset.",
                        "default": 5
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
