# Goodmoves Jobs Scraper (`automation-lab/goodmoves-jobs-scraper`) Actor

Scrape public Goodmoves charity and nonprofit job vacancies. Export titles, employers, salaries, locations, dates, apply links, descriptions and organisation metadata.

- **URL**: https://apify.com/automation-lab/goodmoves-jobs-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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

## Goodmoves Jobs Scraper

Scrape public Scottish charity and nonprofit job vacancies from Goodmoves.org.

Goodmoves Jobs Scraper turns Goodmoves search pages, browse pages, organisation pages, and direct vacancy URLs into clean structured job data.

It is built for recruiters, charity operations teams, labour-market researchers, salary benchmarkers, and automation teams that need Goodmoves data in CSV, JSON, Excel, Google Sheets, dashboards, or an API pipeline.

### What does Goodmoves Jobs Scraper do?

It collects public vacancy data from Goodmoves.

It saves one dataset row per vacancy.

It can start from a Goodmoves URL that you already use in your browser.

It can also build a simple search URL from keywords and location.

It extracts listing-card fields and, when enabled, opens each vacancy detail page for richer data.

### Who is it for?

🧑‍💼 Recruiters use it to monitor Scottish charity-sector hiring.

📊 Salary analysts use it to compare pay bands across employers and locations.

🏢 Nonprofit leaders use it to track competing vacancies and closing dates.

🧑‍🔬 Researchers use it to build repeatable labour-market datasets.

🤖 Automation teams use it to feed alerts, spreadsheets, CRMs, or BI tools.

### Why use it?

Goodmoves is a focused source for charity, nonprofit, social care, housing, youth, fundraising, policy, and third-sector vacancies in Scotland.

Manual copying is slow.

Search results change frequently.

Vacancy pages contain useful structured metadata such as JobPosting JSON-LD.

This actor lets you schedule the same search and export normalized vacancy rows.

### What data can it extract?

| Field | Description |
| --- | --- |
| `vacancyId` | Goodmoves vacancy identifier when visible |
| `title` | Vacancy title |
| `employer` | Hiring organisation |
| `salary` | Raw salary text |
| `salaryMin` / `salaryMax` | Parsed salary bounds from JSON-LD when available |
| `location` | Public location text or address fields |
| `workplaceType` | Hybrid, remote, onsite, or related text when visible |
| `employmentType` | Full time, part time, contract, or similar |
| `postedDate` | Advertised date from vacancy metadata |
| `closingDate` | Closing date/time |
| `detailUrl` | Goodmoves vacancy URL |
| `applyUrl` | Public apply URL when exposed |
| `applyEmail` | Public apply email when exposed |
| `descriptionHtml` | Description HTML |
| `descriptionText` | Clean description text |
| `organisationProfileUrl` | Goodmoves organisation profile URL |
| `organisationWebsite` | Public organisation website when exposed |
| `oscrCharityNumber` | Scottish charity number when exposed |
| `categories` | Industry/category tags from JobPosting metadata |
| `sourceUrl` | Listing/search URL that produced the row |
| `scrapedAt` | Timestamp for the scrape |

### How much does it cost to scrape Goodmoves jobs?

This Actor uses pay-per-event pricing.

There is a small `$0.005` run start event and a per-vacancy event.

| Apify plan tier | Price per vacancy | Approx. cost per 1,000 vacancies |
| --- | ---: | ---: |
| Free | `$0.00023286` | `$0.23` |
| Bronze | `$0.00020249` | `$0.20` |
| Silver | `$0.00015794` | `$0.16` |
| Gold | `$0.00012149` | `$0.12` |
| Platinum | `$0.000080996` | `$0.08` |
| Diamond | `$0.000056697` | `$0.06` |

Small test runs are inexpensive because you can keep `maxItems` low.

### How to scrape Goodmoves jobs

1. Open a Goodmoves search page in your browser.

2. Copy the URL.

3. Paste it into `startUrls`.

4. Set `maxItems` to the number of vacancies you need.

5. Keep `includeDetails` enabled if you want descriptions, posted dates, apply metadata, and organisation fields.

6. Run the actor.

7. Export the dataset as CSV, JSON, Excel, or via API.

### Input options

#### `startUrls`

Goodmoves search, browse, organisation, location, or direct vacancy URLs.

Examples:

- `https://goodmoves.org/search?keywords=fundraising`
- `https://goodmoves.org/search?keywords=policy`
- `https://goodmoves.org/vacancy/a4sP1000001jSh7IAE/fundraising-communications-manager`

#### `keywords`

Optional keyword text.

The actor builds a Goodmoves search URL for you.

#### `location`

Optional location text.

Use this when you want the actor to build a Goodmoves search URL.

#### `maxItems`

Maximum vacancy rows to save.

Use a small value for your first run.

#### `maxPages`

Maximum listing pages to scan.

This prevents accidental large crawls.

#### `includeDetails`

When true, the actor opens each vacancy page for full detail extraction.

### Example input

```json
{
  "startUrls": [
    { "url": "https://goodmoves.org/search?keywords=fundraising" }
  ],
  "maxItems": 25,
  "maxPages": 3,
  "includeDetails": true
}
````

### Example output

```json
{
  "vacancyId": "a4sP1000001jSh7IAE",
  "title": "Fundraising & Communications Manager",
  "employer": "The Rock Trust",
  "salary": "£38,716 – £43,600",
  "location": "Edinburgh North and Leith, City of Edinburgh, EH1 3QY",
  "employmentType": "Full time",
  "postedDate": "2026-05-27T14:43:12",
  "closingDate": "2026-06-10T22:59:00",
  "detailUrl": "https://goodmoves.org/vacancy/a4sP1000001jSh7IAE/fundraising-communications-manager",
  "descriptionText": "Mission Statement...",
  "sourceUrl": "https://goodmoves.org/search?keywords=fundraising",
  "scrapedAt": "2026-06-06T10:00:00.000Z"
}
```

### Tips for best results

Use Goodmoves URLs for advanced filters.

Keep `includeDetails` on for richer data.

Increase `maxPages` only when you need deeper result sets.

Schedule recurring runs for market monitoring.

Export CSV when sharing results with recruiting or operations teams.

### Integrations

Send vacancies to Google Sheets for weekly hiring dashboards.

Load JSON into a data warehouse for salary benchmarking.

Trigger alerts when new jobs match fundraising, policy, finance, or support-worker keywords.

Connect the Apify dataset API to a CRM or Airtable base.

Use webhooks to start downstream workflows after each run.

### API usage with Node.js

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/goodmoves-jobs-scraper').call({
  startUrls: [{ url: 'https://goodmoves.org/search?keywords=fundraising' }],
  maxItems: 25,
  maxPages: 3,
  includeDetails: true,
});
console.log(run.defaultDatasetId);
```

### API usage with Python

```python
from apify_client import ApifyClient

client = ApifyClient('MY-APIFY-TOKEN')
run = client.actor('automation-lab/goodmoves-jobs-scraper').call(run_input={
    'startUrls': [{'url': 'https://goodmoves.org/search?keywords=fundraising'}],
    'maxItems': 25,
    'maxPages': 3,
    'includeDetails': True,
})
print(run['defaultDatasetId'])
```

### API usage with cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~goodmoves-jobs-scraper/runs?token=MY-APIFY-TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"startUrls":[{"url":"https://goodmoves.org/search?keywords=fundraising"}],"maxItems":25,"maxPages":3,"includeDetails":true}'
```

### MCP usage

Use this actor from Claude Desktop, Claude Code, or another MCP client through Apify MCP.

MCP URL:

`https://mcp.apify.com/?tools=automation-lab/goodmoves-jobs-scraper`

Claude Code setup:

```bash
claude mcp add apify-goodmoves "https://mcp.apify.com/?tools=automation-lab/goodmoves-jobs-scraper"
```

Claude Desktop JSON config:

```json
{
  "mcpServers": {
    "apify-goodmoves": {
      "url": "https://mcp.apify.com/?tools=automation-lab/goodmoves-jobs-scraper"
    }
  }
}
```

Example prompts:

- "Run the Goodmoves Jobs Scraper for fundraising vacancies and summarize salary bands."
- "Find Goodmoves policy jobs in Edinburgh and export the dataset URL."
- "Compare employers and closing dates from the latest Goodmoves scrape."

### Scheduling

Create a schedule in Apify Console for recurring monitoring.

A daily or weekly schedule is useful for job-board changes.

Keep `maxItems` aligned with the volume you expect.

### Data quality notes

Goodmoves pages vary by employer and vacancy.

Some jobs expose apply email, some expose only an external apply URL, and some route through Goodmoves.

OSCR charity numbers are saved only when visible in public page content.

Salary min and max are parsed from structured metadata when available.

### FAQ

#### Can I scrape any Goodmoves search URL?

Yes. Paste a public Goodmoves search, browse, organisation, location, or vacancy URL into `startUrls`.

#### Does this actor need a proxy?

No proxy is configured for the MVP because Goodmoves returns public server-rendered HTML to normal HTTP requests.

#### Does it return one row per job?

Yes. Organisation metadata is merged into the vacancy row so CSV exports remain easy to use.

### Troubleshooting

#### Why did I get fewer rows than `maxItems`?

The Goodmoves query may have fewer public vacancies, or `maxPages` may be too low.

Increase `maxPages` or provide a broader search URL.

#### Why are apply fields empty?

Some vacancies do not publish a direct apply email or external apply URL in public HTML.

The actor leaves those fields null instead of guessing.

#### Why is the location different from the visible card?

Detail pages may expose richer structured address fields than listing cards.

The actor prefers structured detail metadata when `includeDetails` is enabled.

### Legality

This actor extracts publicly available Goodmoves pages.

You are responsible for using the data lawfully and respecting applicable terms, privacy rules, and data-protection obligations.

Do not scrape private accounts or use the data for prohibited purposes.

### Related scrapers

Explore other automation-lab actors for recruiting, jobs, lead generation, company data, and web monitoring.

Use related Apify actors when you need LinkedIn Jobs, Indeed-style job boards, company websites, or broader lead discovery.

### Changelog

Initial version supports Goodmoves search/listing/direct vacancy URLs, keyword and location filters, pagination limits, vacancy detail enrichment, and one-row-per-job output.

# Actor input Schema

## `startUrls` (type: `array`):

Goodmoves search, browse, location, organisation, or direct vacancy URLs. Leave empty to use the keyword/location filters below.

## `keywords` (type: `string`):

Optional Goodmoves keyword search, for example fundraising, policy, or support worker.

## `location` (type: `string`):

Optional Goodmoves location filter text, for example Edinburgh, Glasgow, or Remote.

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

Maximum number of vacancy rows to save.

## `maxPages` (type: `integer`):

Maximum Goodmoves listing/search pages to scan before stopping.

## `includeDetails` (type: `boolean`):

Open each vacancy page to extract full descriptions, JSON-LD dates/salary, apply links/emails, and organisation metadata.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://goodmoves.org/search?keywords=fundraising"
    }
  ],
  "keywords": "fundraising",
  "maxItems": 20,
  "maxPages": 3,
  "includeDetails": true
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "startUrls": [
        {
            "url": "https://goodmoves.org/search?keywords=fundraising"
        }
    ],
    "keywords": "fundraising",
    "maxItems": 20,
    "maxPages": 3,
    "includeDetails": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/goodmoves-jobs-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 = {
    "startUrls": [{ "url": "https://goodmoves.org/search?keywords=fundraising" }],
    "keywords": "fundraising",
    "maxItems": 20,
    "maxPages": 3,
    "includeDetails": True,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/goodmoves-jobs-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 '{
  "startUrls": [
    {
      "url": "https://goodmoves.org/search?keywords=fundraising"
    }
  ],
  "keywords": "fundraising",
  "maxItems": 20,
  "maxPages": 3,
  "includeDetails": true
}' |
apify call automation-lab/goodmoves-jobs-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Goodmoves Jobs Scraper",
        "description": "Scrape public Goodmoves charity and nonprofit job vacancies. Export titles, employers, salaries, locations, dates, apply links, descriptions and organisation metadata.",
        "version": "0.1",
        "x-build-id": "J6kEmqT0cGATNOyzD"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~goodmoves-jobs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-goodmoves-jobs-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/automation-lab~goodmoves-jobs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-goodmoves-jobs-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/automation-lab~goodmoves-jobs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-goodmoves-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "startUrls": {
                        "title": "Goodmoves URLs",
                        "type": "array",
                        "description": "Goodmoves search, browse, location, organisation, or direct vacancy URLs. Leave empty to use the keyword/location filters below.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "keywords": {
                        "title": "Keywords",
                        "type": "string",
                        "description": "Optional Goodmoves keyword search, for example fundraising, policy, or support worker."
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Optional Goodmoves location filter text, for example Edinburgh, Glasgow, or Remote."
                    },
                    "maxItems": {
                        "title": "Maximum vacancies",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of vacancy rows to save.",
                        "default": 20
                    },
                    "maxPages": {
                        "title": "Maximum listing pages",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum Goodmoves listing/search pages to scan before stopping.",
                        "default": 3
                    },
                    "includeDetails": {
                        "title": "Fetch vacancy detail pages",
                        "type": "boolean",
                        "description": "Open each vacancy page to extract full descriptions, JSON-LD dates/salary, apply links/emails, and organisation metadata.",
                        "default": true
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
