# Levels.fyi Scraper (`crawlerbros/levels-fyi-scraper`) Actor

Scrape Levels.fyi compensation data with base salary, equity, bonus, and total compensation by company, role, level, and location. Pulls from public Next.js hydration data; no auth, structured output.

- **URL**: https://apify.com/crawlerbros/levels-fyi-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Developer tools, Jobs, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 16 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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.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

## Levels.fyi Scraper

Scrape compensation data from **Levels.fyi** — base salary, equity, bonus, and total comp by company, role, level, and location. Pulls structured data from the public Next.js hydration blob; no auth required, fast, and deterministic.

### What this actor does

- Reads compensation data straight from the `__NEXT_DATA__` JSON Levels.fyi already ships in every page response — no DOM scraping, no rate limits beyond Cloudflare.
- Eight modes covering every reliable Levels.fyi lookup axis: by company, by company × role, by company × role × level, by role, by role × location, popular companies, top locations, and free-form URL.
- Auto-escalates to Apify residential proxy if Cloudflare blocks the direct fetch (toggle in input).
- Emits flat per-sample records (one row per submitted offer) plus level aggregates and percentile summaries — pick what you want via toggles.

### Modes

| Mode | URL pattern | What you get |
|---|---|---|
| `byCompany` | `/companies/<slug>/salaries` | Company overview (median TC across all roles, highest- / lowest-paying job-family, every job-family with median TC). |
| `byCompanyByRole` | `/companies/<slug>/salaries/<role>` | Per-level aggregates, percentile summary, **and** every individual offer Levels.fyi shows for that company × role. |
| `byCompanyByRoleLevel` | `/companies/<slug>/salaries/<role>/levels/<level>` | Single-bucket detail: median base / TC / stock / bonus + sample offers at that level. |
| `byRole` | `/t/<role>` | Top companies and top locations for a role. |
| `byRoleLocation` | `/t/<role>/locations/<location>` | Geo compensation breakdown — percentile histogram, top companies in that city, top locations for that role. |
| `searchCompanies` | `/companies?search=<q>` | List of popular companies (filterable by substring on name/slug). |
| `topCompanies` | `/locations` | Index of every Levels.fyi region/location and every job-family slug — useful for discovery. |
| `byUrl` | any | Paste any Levels.fyi URL; auto-routes to the right mode. |

### Output records

Every record is omit-empty (no `null`, no `""`, no `[]`). `recordType` tags the row.

Common record types:

- `companyOverview` — mode=byCompany. Company metadata + median TC + highest / lowest paying role.
- `levelAggregate` — one row per level for a company × role with median base / TC / stock / bonus and sample count.
- `salarySample` — one row per individual offer (uuid, level, YOE, location, base, TC, stock, bonus, focus tag, education).
- `percentiles` — single record with p10/p25/p50/p75/p90 base & TC for the (company × role) or (role × location) bucket.
- `topCompany`, `topLocation`, `company`, `jobFamily` — listing/discovery rows.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | enum | `byCompanyByRole` | One of the 8 modes above. |
| `company` | string | `google` | Company slug (required for byCompany* modes). |
| `role` | enum | `software-engineer` | Job-family slug. |
| `level` | string | – | Level slug (e.g. `L4`, `IC3`) — required for `byCompanyByRoleLevel`. |
| `locationSlug` | enum | `san-francisco-bay-area` | Location slug for byRoleLocation. |
| `url` | string | – | Levels.fyi URL (mode=byUrl). |
| `search` | string | – | Substring filter for searchCompanies. |
| `minTotalCompensation` | int | – | Drop samples below this TC. |
| `maxTotalCompensation` | int | – | Drop samples above this TC. |
| `minYearsOfExperience` | int | – | Drop samples below this YOE. |
| `maxYearsOfExperience` | int | – | Drop samples above this YOE. |
| `includeSamples` | bool | `true` | Emit individual salary submissions. |
| `includeAggregates` | bool | `true` | Emit per-level + percentile aggregates. |
| `useResidentialProxyOnBlock` | bool | `true` | Auto-escalate on Cloudflare 403/429. |
| `maxItems` | int | `200` | Hard cap (1-5000). |

#### Examples

**Google software-engineer offers**
```json
{
  "mode": "byCompanyByRole",
  "company": "google",
  "role": "software-engineer",
  "maxItems": 200
}
````

**SF Bay Area top SWE compensation**

```json
{
  "mode": "byRoleLocation",
  "role": "software-engineer",
  "locationSlug": "san-francisco-bay-area"
}
```

**Just paste a URL**

```json
{
  "mode": "byUrl",
  "url": "https://www.levels.fyi/companies/meta/salaries/product-manager"
}
```

### FAQ

**How fresh is the data?** It's whatever Levels.fyi shows on the page right now — Levels.fyi hydrates every page server-side, so what you see is what you get.

**Does it work for non-US locations?** Yes — see the locationSlug dropdown for 30+ regions / cities. Currency and exchange rate are emitted on each record where Levels.fyi provides one.

**Why are some fields missing?** The actor omits any field Levels.fyi didn't fill in for a given record (e.g., `gender`, `ethnicity`, `firstYearStockGrant`). If a sample submitter left a field blank, you get a clean record without `null`s.

**Cloudflare blocks me.** Leave `useResidentialProxyOnBlock` enabled — the actor retries through Apify residential proxy after the first 403 / 429.

**Is the leaderboard / `/highest-paid/` endpoint supported?** No — those pages are aggressively gated and return 403 even with chrome131 impersonation. The same data is available via `byRole` (top companies) and `byRoleLocation` (top locations) and is what we expose.

### Limitations

- Levels.fyi shows up to ~30 individual samples per (company × role) page. To get more, drill into specific levels via `byCompanyByRoleLevel`.
- The leaderboard (`/leaderboard/`, `/highest-paid/`) is heavily protected and not exposed; equivalent data comes from `byRole` and `byRoleLocation`.

# Actor input Schema

## `mode` (type: `string`):

What to scrape from Levels.fyi.

## `company` (type: `string`):

Levels.fyi company slug (mode=byCompany / byCompanyByRole / byCompanyByRoleLevel). Examples: `google`, `meta`, `apple`, `amazon`, `microsoft`, `netflix`, `openai`, `anthropic`. Visit `https://www.levels.fyi/companies/<slug>/salaries` to verify.

## `role` (type: `string`):

Job-family slug (mode=byCompanyByRole / byCompanyByRoleLevel / byRole / byRoleLocation). Pick from common slugs or pass any valid Levels.fyi job-family slug.

## `level` (type: `string`):

Levels.fyi level slug (mode=byCompanyByRoleLevel). Examples: `L3`, `L4`, `L5`, `IC3`, `E4`, `M1`. Slugs are company-specific — find them on the company×role page.

## `locationSlug` (type: `string`):

Levels.fyi location slug (mode=byRoleLocation). Common: `united-states`, `san-francisco-bay-area`, `greater-seattle-area`, `new-york-city-area`, `europe`, `india`, `canada`, `germany`, `united-kingdom`, `japan`.

## `url` (type: `string`):

Any levels.fyi URL — `/companies/<slug>/salaries`, `/companies/<slug>/salaries/<role>`, `/t/<role>/locations/<loc>`, `/companies`, etc. Auto-routes to the right scraper.

## `search` (type: `string`):

Substring match against the popular-companies catalog (case-insensitive). Empty = return all listed popular companies.

## `minTotalCompensation` (type: `integer`):

Drop salary samples / level rows with totalCompensation below this value (USD-equivalent at the page's exchange rate).

## `maxTotalCompensation` (type: `integer`):

Drop salary samples / level rows with totalCompensation above this value.

## `minYearsOfExperience` (type: `integer`):

Drop salary samples below this YOE.

## `maxYearsOfExperience` (type: `integer`):

Drop salary samples above this YOE.

## `includeSamples` (type: `boolean`):

Emit one record per individual salary submission inside each level (mode=byCompany / byCompanyByRole). When false, only level-aggregate rows are emitted.

## `includeAggregates` (type: `boolean`):

Emit one record per level (and an overall percentiles record) summarising compensation.

## `useResidentialProxyOnBlock` (type: `boolean`):

If Cloudflare blocks the direct fetch, retry through Apify residential proxy.

## `maxItems` (type: `integer`):

Hard cap on emitted records.

## Actor input object example

```json
{
  "mode": "byCompanyByRole",
  "company": "google",
  "role": "software-engineer",
  "locationSlug": "san-francisco-bay-area",
  "includeSamples": true,
  "includeAggregates": true,
  "useResidentialProxyOnBlock": true,
  "maxItems": 200
}
```

# Actor output Schema

## `records` (type: `string`):

Dataset containing all scraped Levels.fyi records.

# 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 = {
    "mode": "byCompanyByRole",
    "company": "google",
    "role": "software-engineer",
    "locationSlug": "san-francisco-bay-area",
    "includeSamples": true,
    "includeAggregates": true,
    "useResidentialProxyOnBlock": true,
    "maxItems": 200
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/levels-fyi-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 = {
    "mode": "byCompanyByRole",
    "company": "google",
    "role": "software-engineer",
    "locationSlug": "san-francisco-bay-area",
    "includeSamples": True,
    "includeAggregates": True,
    "useResidentialProxyOnBlock": True,
    "maxItems": 200,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/levels-fyi-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 '{
  "mode": "byCompanyByRole",
  "company": "google",
  "role": "software-engineer",
  "locationSlug": "san-francisco-bay-area",
  "includeSamples": true,
  "includeAggregates": true,
  "useResidentialProxyOnBlock": true,
  "maxItems": 200
}' |
apify call crawlerbros/levels-fyi-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Levels.fyi Scraper",
        "description": "Scrape Levels.fyi compensation data with base salary, equity, bonus, and total compensation by company, role, level, and location. Pulls from public Next.js hydration data; no auth, structured output.",
        "version": "1.0",
        "x-build-id": "T7uP7NCKEgT3AbK1T"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~levels-fyi-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-levels-fyi-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/crawlerbros~levels-fyi-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-levels-fyi-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/crawlerbros~levels-fyi-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-levels-fyi-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",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "byCompany",
                            "byCompanyByRole",
                            "byCompanyByRoleLevel",
                            "byRole",
                            "byRoleLocation",
                            "searchCompanies",
                            "topCompanies",
                            "byUrl"
                        ],
                        "type": "string",
                        "description": "What to scrape from Levels.fyi.",
                        "default": "byCompanyByRole"
                    },
                    "company": {
                        "title": "Company slug",
                        "type": "string",
                        "description": "Levels.fyi company slug (mode=byCompany / byCompanyByRole / byCompanyByRoleLevel). Examples: `google`, `meta`, `apple`, `amazon`, `microsoft`, `netflix`, `openai`, `anthropic`. Visit `https://www.levels.fyi/companies/<slug>/salaries` to verify.",
                        "default": "google"
                    },
                    "role": {
                        "title": "Role / job-family slug",
                        "enum": [
                            "software-engineer",
                            "product-manager",
                            "data-scientist",
                            "data-engineer",
                            "machine-learning-engineer",
                            "hardware-engineer",
                            "site-reliability-engineer",
                            "security-software-engineer",
                            "engineering-manager",
                            "technical-program-manager",
                            "product-designer",
                            "ux-researcher",
                            "solution-architect",
                            "management-consultant",
                            "investment-banker",
                            "marketing",
                            "sales",
                            "recruiter",
                            "human-resources",
                            "financial-analyst",
                            "business-analyst",
                            "accountant",
                            "venture-capitalist",
                            "chief-of-staff",
                            "biomedical-engineer",
                            "civil-engineer",
                            "mechanical-engineer",
                            "chemical-engineer"
                        ],
                        "type": "string",
                        "description": "Job-family slug (mode=byCompanyByRole / byCompanyByRoleLevel / byRole / byRoleLocation). Pick from common slugs or pass any valid Levels.fyi job-family slug.",
                        "default": "software-engineer"
                    },
                    "level": {
                        "title": "Level slug",
                        "type": "string",
                        "description": "Levels.fyi level slug (mode=byCompanyByRoleLevel). Examples: `L3`, `L4`, `L5`, `IC3`, `E4`, `M1`. Slugs are company-specific — find them on the company×role page."
                    },
                    "locationSlug": {
                        "title": "Location slug",
                        "enum": [
                            "united-states",
                            "san-francisco-bay-area",
                            "greater-seattle-area",
                            "new-york-city-area",
                            "los-angeles",
                            "boston",
                            "austin",
                            "chicago",
                            "denver",
                            "atlanta",
                            "europe",
                            "united-kingdom",
                            "germany",
                            "france",
                            "netherlands",
                            "ireland",
                            "switzerland",
                            "asia",
                            "india",
                            "japan",
                            "singapore",
                            "china",
                            "south-korea",
                            "canada",
                            "toronto",
                            "vancouver",
                            "australia",
                            "latin-america",
                            "brazil",
                            "mexico",
                            "africa"
                        ],
                        "type": "string",
                        "description": "Levels.fyi location slug (mode=byRoleLocation). Common: `united-states`, `san-francisco-bay-area`, `greater-seattle-area`, `new-york-city-area`, `europe`, `india`, `canada`, `germany`, `united-kingdom`, `japan`.",
                        "default": "san-francisco-bay-area"
                    },
                    "url": {
                        "title": "Levels.fyi URL (mode=byUrl)",
                        "type": "string",
                        "description": "Any levels.fyi URL — `/companies/<slug>/salaries`, `/companies/<slug>/salaries/<role>`, `/t/<role>/locations/<loc>`, `/companies`, etc. Auto-routes to the right scraper."
                    },
                    "search": {
                        "title": "Company name filter (mode=searchCompanies)",
                        "type": "string",
                        "description": "Substring match against the popular-companies catalog (case-insensitive). Empty = return all listed popular companies."
                    },
                    "minTotalCompensation": {
                        "title": "Min total compensation",
                        "minimum": 0,
                        "maximum": 10000000,
                        "type": "integer",
                        "description": "Drop salary samples / level rows with totalCompensation below this value (USD-equivalent at the page's exchange rate)."
                    },
                    "maxTotalCompensation": {
                        "title": "Max total compensation",
                        "minimum": 0,
                        "maximum": 10000000,
                        "type": "integer",
                        "description": "Drop salary samples / level rows with totalCompensation above this value."
                    },
                    "minYearsOfExperience": {
                        "title": "Min years of experience",
                        "minimum": 0,
                        "maximum": 60,
                        "type": "integer",
                        "description": "Drop salary samples below this YOE."
                    },
                    "maxYearsOfExperience": {
                        "title": "Max years of experience",
                        "minimum": 0,
                        "maximum": 60,
                        "type": "integer",
                        "description": "Drop salary samples above this YOE."
                    },
                    "includeSamples": {
                        "title": "Include individual salary samples",
                        "type": "boolean",
                        "description": "Emit one record per individual salary submission inside each level (mode=byCompany / byCompanyByRole). When false, only level-aggregate rows are emitted.",
                        "default": true
                    },
                    "includeAggregates": {
                        "title": "Include level aggregates / percentiles",
                        "type": "boolean",
                        "description": "Emit one record per level (and an overall percentiles record) summarising compensation.",
                        "default": true
                    },
                    "useResidentialProxyOnBlock": {
                        "title": "Auto-escalate to Apify residential on 403/429",
                        "type": "boolean",
                        "description": "If Cloudflare blocks the direct fetch, retry through Apify residential proxy.",
                        "default": true
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Hard cap on emitted records.",
                        "default": 200
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
