# NHS Job Extractor (`kawsar/nhs-job-extractor`) Actor

NHS Jobs Scraper that pulls vacancy listings from jobs.nhs.uk by keyword, location, and filter, so recruiters and analysts get clean structured job data without manual searching.

- **URL**: https://apify.com/kawsar/nhs-job-extractor.md
- **Developed by:** [Kawsar](https://apify.com/kawsar) (community)
- **Categories:** Jobs, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.99 / 1,000 results

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

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

## What's an Apify Actor?

Actors are 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

## NHS Jobs Scraper

NHS Jobs Scraper collects job listings from jobs.nhs.uk. Enter one or more keyword+location pairs, and the actor runs each search independently, collecting up to your item limit per pair. All results land in a single dataset with each record tagged by the keyword and location that produced it.

### How pairing works

Keywords and locations are matched line by line:

| Keywords | Locations | Pair |
|----------|-----------|------|
| nurse | London | nurse + London |
| doctor | Manchester | doctor + Manchester |
| radiographer | | radiographer + all UK |

If you provide fewer locations than keywords, the remaining keywords search across all UK locations. Filters (contract type, working pattern, salary range) apply to every pair in the run.

`maxItems` is the limit **per pair**, not a global total. Three keywords with `maxItems: 100` can return up to 300 jobs.

### What it collects

For every matching job listing, the actor returns:

- Job title and direct link to the full advert
- NHS Jobs reference number (e.g. C9152-26-0547)
- Hiring employer or NHS Trust name
- Location and postcode
- Salary range or salary description
- Date posted and application closing date
- Contract type: Permanent, Fixed-Term, Locum, Apprenticeship, and more
- Working pattern: Full time, Part time, Flexible, Remote, and more
- Search keyword and location that produced the result
- Timestamp of when the record was collected

### Features

- Multiple keyword+location pairs in a single run
- Per-pair item limit -- each search is independent
- Filter every pair by contract type, working pattern, employer, and salary range
- Automatic pagination across hundreds of result pages per pair
- Resume from any page number if a previous run was interrupted
- Covers all NHS job categories: nursing, clinical, administrative, and support roles
- Clean structured output with `searchKeyword` and `searchLocation` fields for easy filtering
- Exports to JSON, CSV, or Excel via the Apify dataset

### Use cases

- Recruitment pipelines: pull live NHS vacancies for multiple roles and cities in one run
- Salary benchmarking: compare pay bands for the same role across different regions
- Closing date monitoring: track application deadlines for dozens of roles without daily manual checks
- Job board population: feed structured NHS listings into a custom healthcare job board
- Research and analysis: study NHS hiring by contract type, working pattern, or geography across roles
- Alert automation: combine with Zapier or Make to send notifications when new roles appear

### How it works

1. You enter one or more keywords and optionally one location per keyword.
2. The actor pairs each keyword with its corresponding location (extras default to all UK).
3. For each pair, it builds a search URL using your keyword, location, and filter settings.
4. It fetches the first page of results and parses each job listing.
5. If more pages exist and the per-pair limit has not been reached, it fetches the next page.
6. Each job record is tagged with `searchKeyword` and `searchLocation` before being stored.
7. When all pairs are done, the full dataset is available to download.

### Input

#### Search

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `keywords` | string list | `nurse` | One keyword per line. Paired line-by-line with locations |
| `locations` | string list | | One location per line (town, city, or postcode). Optional |

#### Filters

These apply to every keyword+location pair in the run.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `distance` | integer | `10` | Search radius in miles from each location (5, 10, 20, 30, 50, or 100) |
| `employer` | string | | Filter to a specific employer or NHS Trust name |
| `contractType` | string | | Permanent, Fixed-Term, Locum, Apprenticeship, Voluntary, Training, Secondment, Honorary, Bank |
| `workingPattern` | string | | full-time, part-time, job-share, flexible-working, remote-working, compressed-hours, term-time-hours, annualised-hours |
| `salaryFrom` | integer | `0` | Minimum annual salary. Use 0 for no lower limit |
| `salaryTo` | integer | `0` | Maximum annual salary. Use 0 for no upper limit |

#### Limits

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `startPage` | integer | `1` | Page to begin scraping from. Applies to every pair |
| `maxItems` | integer | `100` | Maximum jobs per keyword+location pair (up to 1000) |
| `requestTimeoutSecs` | integer | `30` | Per-request timeout in seconds |

#### Example inputs

Search for nurses in London and doctors in Manchester, up to 200 results per pair:

```json
{
    "keywords": ["nurse", "doctor"],
    "locations": ["London", "Manchester"],
    "maxItems": 200
}
````

Search for physiotherapists, radiographers, and paramedics across all UK locations:

```json
{
    "keywords": ["physiotherapist", "radiographer", "paramedic"],
    "maxItems": 100
}
```

Search for permanent full-time nurses and midwives in Birmingham and Leeds, salary above £30,000:

```json
{
    "keywords": ["nurse", "midwife"],
    "locations": ["Birmingham", "Leeds"],
    "contractType": "Permanent",
    "workingPattern": "full-time",
    "salaryFrom": 30000,
    "maxItems": 300
}
```

### Output

Each job listing is one record in the Apify dataset. The `searchKeyword` and `searchLocation` fields identify which pair produced it.

#### Example output record

```json
{
    "jobTitle": "Staff Nurse - Registered Nurse",
    "jobUrl": "https://www.jobs.nhs.uk/candidate/jobadvert/C9152-26-0547",
    "referenceNumber": "C9152-26-0547",
    "employer": "Dorset HealthCare University NHS Foundation Trust",
    "location": "Weymouth DT40QE",
    "salary": "£32,073 to £39,043 a year",
    "datePosted": "21 May 2026",
    "closingDate": "4 June 2026",
    "contractType": "Permanent",
    "workingPattern": "Full time",
    "searchKeyword": "nurse",
    "searchLocation": "London",
    "scrapedAt": "2026-05-23T10:00:00+00:00"
}
```

#### Output fields

| Field | Type | Description |
|-------|------|-------------|
| `jobTitle` | string | Job title as listed on the portal |
| `jobUrl` | string | Direct link to the full job advert page |
| `referenceNumber` | string | NHS Jobs reference number (e.g. C9152-26-0547) |
| `employer` | string | Hiring organisation or NHS Trust name |
| `location` | string | Town, city, or postcode where the role is based |
| `salary` | string | Salary range or description. May read "Depends on experience" |
| `datePosted` | string | Date the listing was published on NHS Jobs |
| `closingDate` | string | Application closing date |
| `contractType` | string | Permanent, Fixed-Term, Locum, Apprenticeship, etc. |
| `workingPattern` | string | Full time, Part time, Flexible working, etc. |
| `searchKeyword` | string | The keyword used in the search that returned this result |
| `searchLocation` | string | The location paired with the keyword. Null if no location was set |
| `scrapedAt` | string | ISO 8601 UTC timestamp of when this record was collected |

### Export formats

Download results from the Apify dataset in:

- JSON -- for APIs, databases, and custom scripts
- CSV -- for Excel, Google Sheets, or BI tools
- XLSX -- direct Excel format
- XML and other formats via the Apify API

### Frequently asked questions

**How many total results can I collect?**
Up to 1,000 per keyword+location pair. With 5 keywords, that is up to 5,000 jobs per run. NHS Jobs returns 10 listings per page.

**Does it scrape the full job description?**
No. The actor collects data visible on search results pages: title, employer, location, salary, dates, contract type, and working pattern. Full job descriptions are on individual advert pages and are not included.

**What if I have more keywords than locations?**
The extra keywords run without a location filter and search across all UK. For example, 3 keywords with 1 location gives pairs: (kw1, loc1), (kw2, all UK), (kw3, all UK).

**What happens if a field is missing from a listing?**
Missing fields return `null`. Some listings omit salary or show "Depends on experience"; these are captured as-is.

**How do I get results for just one keyword?**
Enter one keyword and leave locations blank. The actor runs a single search across all UK locations.

**How often does NHS Jobs update?**
New listings appear daily. Schedule this actor on Apify Schedules to run every 24 hours to stay current.

### Scheduling

Run this actor on a schedule via Apify Schedules to keep your dataset fresh. A daily run at midnight captures any listings posted in the previous 24 hours.

### Integrations

Connect NHS Jobs Scraper with other apps using [Apify integrations](https://apify.com/integrations). Works with Make, Zapier, Slack, Airbyte, GitHub, Google Sheets, Google Drive, and more. Use [webhooks](https://docs.apify.com/integrations/webhooks) to trigger downstream actions the moment results land.

Common integration patterns:

- Send a Slack or email alert when a new role appears for a saved keyword
- Append each new NHS listing to a Google Sheet for daily tracking
- Trigger a Make or Zapier scenario to post vacancies to a job board
- Sync results to a CRM or ATS via the Apify API

# Actor input Schema

## `keywords` (type: `array`):

One keyword per line. Each keyword is paired with the corresponding location on the same line number. For example: nurse on line 1 pairs with London on line 1.

## `locations` (type: `array`):

One location per line, paired with the keyword on the same line number. Leave blank to search all UK locations for every keyword.

## `distance` (type: `integer`):

Search radius in miles from each location. Accepted values: 5, 10, 20, 30, 50, 100. Applies to all keyword+location pairs.

## `employer` (type: `string`):

Filter results to a specific employer or NHS Trust name.

## `contractType` (type: `string`):

Filter by contract type. Leave blank to include all types.

## `workingPattern` (type: `string`):

Filter by working pattern. Leave blank to include all patterns.

## `salaryFrom` (type: `integer`):

Minimum annual salary filter. Use 0 for no lower limit.

## `salaryTo` (type: `integer`):

Maximum annual salary filter. Use 0 for no upper limit.

## `startPage` (type: `integer`):

Page number to begin scraping from. Applies to every keyword+location pair. Use this to resume an interrupted run.

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

Maximum number of jobs to collect per keyword+location pair. If you have 3 keywords and set this to 100, the actor collects up to 300 jobs total.

## `requestTimeoutSecs` (type: `integer`):

Per-request timeout in seconds.

## Actor input object example

```json
{
  "keywords": [
    "nurse",
    "doctor",
    "radiographer"
  ],
  "locations": [
    "London",
    "Manchester",
    "Birmingham"
  ],
  "distance": 10,
  "employer": "NHS Business Services Authority",
  "contractType": "",
  "workingPattern": "",
  "salaryFrom": 25000,
  "salaryTo": 50000,
  "startPage": 1,
  "maxItems": 100,
  "requestTimeoutSecs": 30
}
```

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

// Run the Actor and wait for it to finish
const run = await client.actor("kawsar/nhs-job-extractor").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 = { "keywords": ["nurse"] }

# Run the Actor and wait for it to finish
run = client.actor("kawsar/nhs-job-extractor").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 '{
  "keywords": [
    "nurse"
  ]
}' |
apify call kawsar/nhs-job-extractor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=kawsar/nhs-job-extractor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "NHS Job Extractor",
        "description": "NHS Jobs Scraper that pulls vacancy listings from jobs.nhs.uk by keyword, location, and filter, so recruiters and analysts get clean structured job data without manual searching.",
        "version": "0.0",
        "x-build-id": "I5ZcpbByQ2B6ugfiC"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/kawsar~nhs-job-extractor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-kawsar-nhs-job-extractor",
                "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/kawsar~nhs-job-extractor/runs": {
            "post": {
                "operationId": "runs-sync-kawsar-nhs-job-extractor",
                "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/kawsar~nhs-job-extractor/run-sync": {
            "post": {
                "operationId": "run-sync-kawsar-nhs-job-extractor",
                "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": [
                    "keywords"
                ],
                "properties": {
                    "keywords": {
                        "title": "Keywords",
                        "type": "array",
                        "description": "One keyword per line. Each keyword is paired with the corresponding location on the same line number. For example: nurse on line 1 pairs with London on line 1.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "One location per line, paired with the keyword on the same line number. Leave blank to search all UK locations for every keyword.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "distance": {
                        "title": "Distance (miles)",
                        "minimum": 5,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Search radius in miles from each location. Accepted values: 5, 10, 20, 30, 50, 100. Applies to all keyword+location pairs.",
                        "default": 10
                    },
                    "employer": {
                        "title": "Employer",
                        "type": "string",
                        "description": "Filter results to a specific employer or NHS Trust name.",
                        "default": ""
                    },
                    "contractType": {
                        "title": "Contract type",
                        "enum": [
                            "",
                            "Permanent",
                            "Fixed-Term",
                            "Apprenticeship",
                            "Voluntary",
                            "Locum",
                            "Training",
                            "Secondment",
                            "Honorary",
                            "Bank"
                        ],
                        "type": "string",
                        "description": "Filter by contract type. Leave blank to include all types.",
                        "default": ""
                    },
                    "workingPattern": {
                        "title": "Working pattern",
                        "enum": [
                            "",
                            "full-time",
                            "part-time",
                            "job-share",
                            "flexible-working",
                            "remote-working",
                            "compressed-hours",
                            "term-time-hours",
                            "annualised-hours"
                        ],
                        "type": "string",
                        "description": "Filter by working pattern. Leave blank to include all patterns.",
                        "default": ""
                    },
                    "salaryFrom": {
                        "title": "Minimum salary",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum annual salary filter. Use 0 for no lower limit.",
                        "default": 0
                    },
                    "salaryTo": {
                        "title": "Maximum salary",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum annual salary filter. Use 0 for no upper limit.",
                        "default": 0
                    },
                    "startPage": {
                        "title": "Start page",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Page number to begin scraping from. Applies to every keyword+location pair. Use this to resume an interrupted run.",
                        "default": 1
                    },
                    "maxItems": {
                        "title": "Max items per keyword",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of jobs to collect per keyword+location pair. If you have 3 keywords and set this to 100, the actor collects up to 300 jobs total.",
                        "default": 100
                    },
                    "requestTimeoutSecs": {
                        "title": "Request timeout (seconds)",
                        "minimum": 5,
                        "maximum": 120,
                        "type": "integer",
                        "description": "Per-request timeout in seconds.",
                        "default": 30
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
