# Bassetlaw CVS Jobs Scraper (`memo23/bcvs-scraper`) Actor

Scrape bcvs.org.uk (Bassetlaw + Bolsover Drupal 10 site). HTML scrape captures title, body, closing date, contact email, AND the job-spec PDF attachment URL for downstream OCR. ~3-10 live vacancies. No anti-bot. JSON or CSV out, billed per result.

- **URL**: https://apify.com/memo23/bcvs-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Jobs, Agents, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.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.

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

## Bassetlaw CVS Jobs Scraper

**Scrape the Bassetlaw Community & Voluntary Service jobs board at bcvs.org.uk/latest-vacancies.** Drupal 10 site with REST API disabled — the actor HTML-scrapes the listing for `/job/<slug>` URLs and follows each detail page for body text, closing date, contact email/website, and the **job-spec PDF attachment URL**. JSON or CSV out, no compute charge per run, just per result.

#### How it works

![How Bassetlaw CVS Scraper works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-bcvs.png)

#### ✨ Why use this scraper?

BCVS hosts the voluntary-sector jobs board for Bassetlaw and Bolsover (north Nottinghamshire / Derbyshire). Tracking the local third-sector? Building a CVS network dashboard? Sourcing for paid roles at local charities?

- 🎯 **Two starting points.** The `/latest-vacancies` listing URL (default) or any direct `/job/<slug>` URL.
- ⚡ **Single HTTP call for the listing.** Drupal renders all 3-10 visible jobs in one SSR'd page.
- 📋 **Detail-page enrichment.** One-fetch-per-job extracts title (h1), body HTML, closing date (`field-closing-date`), contact email + website.
- 📄 **PDF attachment URL captured.** Real job specs live in PDFs at `field-person-specification`. We extract the URL + filename so downstream consumers can fetch / index the PDF separately.
- 🇬🇧 **Bassetlaw + Bolsover focus.** Member charities — Citizens Advice, parish councils, support services, faith-based orgs.
- 📤 **Clean exports.** One row per vacancy. JSON + CSV exported automatically.

#### 🎯 Use cases

| Team | What they build |
|------|-----------------|
| **Local CVS network** | Cross-region nonprofit hiring intelligence in north Notts / north Derbyshire |
| **Sector recruiters** | Daily new-vacancy feeds for Bassetlaw / Bolsover charities |
| **Researchers** | Local third-sector labour-market datasets |
| **PDF indexing services** | Auto-collect job-spec PDFs into searchable archives |
| **Workforce strategy** | Salary intelligence (post-PDF-OCR) across local charities |

#### 📥 Supported inputs

| URL pattern | Behaviour |
|---|---|
| `https://www.bcvs.org.uk/latest-vacancies` | **Full listing** (default) |
| `https://www.bcvs.org.uk/job/<slug>` | **Single job** — fetches detail page directly |

Leave `startUrls` empty for the full listing.

**Not supported:** REST API access (Drupal /jsonapi is disabled); hosts outside `bcvs.org.uk`.

#### 🔄 How it works

1. **Fetch `/latest-vacancies`** — Drupal HTML page (~33 KB).
2. **Harvest `/job/<slug>` anchors** — typically 3-10 jobs visible.
3. **For each (when `enrichDetail: true`)**, fetch the detail page.
4. **Parse Drupal field classes**:
   - `<h1>` → title
   - `.field--name-body` → body HTML + plain text
   - `.field--name-field-closing-date` → closing date
   - `.field--name-field-person-specification a[href$=".pdf"]` → job-spec PDF URL
5. **Extract contact email + website** from body (first `mailto:` and first non-bcvs http href).
6. **Push merged row** with original listing + detail enrichment.

#### ⚙️ Input parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `startUrls` | array | `["https://www.bcvs.org.uk/latest-vacancies"]` | Listing URL or single-job URLs. Empty = listing. |
| `enrichDetail` | boolean | `true` | When `true`, fetches each detail page. Disable for listing-only output (title + URL only). |
| `maxItems` | integer | `1000` | Hard cap on rows pushed (typically 3-10 live). |
| `maxConcurrency` | integer | `3` | Parallel detail-page fetch limit. |
| `maxRequestRetries` | integer | `5` | Retries before a failed request is given up. |
| `proxy` | object | No proxy | Site does not anti-bot. |

#### 📊 Output overview

Each scraped vacancy is one **single dataset row** of `type: "job"`. Listing fields (slug, URL, anchor title) merged with optional detail-page enrichment (body, closing date, PDF URL, contact info).

#### 📦 Output sample

```json
{
  "type": "job",
  "source": "bcvs.org.uk",
  "jobId": "clowne-parish-council-assistant-clerk",
  "slug": "clowne-parish-council-assistant-clerk",
  "jobUrl": "https://www.bcvs.org.uk/job/clowne-parish-council-assistant-clerk",
  "title": "Clowne Parish Council - Assistant Clerk",
  "description": "<p>Contact: bcvs@bcvs.org.uk…</p>",
  "descriptionText": "Contact: bcvs@bcvs.org.uk…",
  "companyName": null,
  "companyWebsite": null,
  "companyDomain": null,
  "location": "Bassetlaw / Bolsover, England",
  "remote": false,
  "salary": null,
  "salaryRaw": null,
  "categories": [],
  "employmentTypes": [],
  "contractType": null,
  "status": "publish",
  "postedDate": null,
  "closingDate": null,
  "modifiedDate": null,
  "applyType": "email",
  "applyUrl": "https://www.bcvs.org.uk/job/clowne-parish-council-assistant-clerk",
  "applyEmail": "bcvs@bcvs.org.uk",
  "externalApplyUrl": null,
  "jobSpecPdfUrl": "https://www.bcvs.org.uk/sites/default/files/2026-05/job%20advert%20final.pdf",
  "jobSpecPdfFilename": "job advert final.pdf",
  "scrapedAt": "2026-05-20T00:13:00.000Z"
}
````

#### 🗂 Key output fields

| Group | Fields |
|---|---|
| **Identifiers** | `type`, `source`, `jobId` (= slug), `slug`, `jobUrl`, `scrapedAt` |
| **Content** | `title` (from h1), `description` (HTML, from detail page), `descriptionText` (plain) |
| **Dates** | `closingDate` (from `field-closing-date`) |
| **Employer** | `companyName` (null — H1 typically reads "Employer - Role"), `companyWebsite`, `companyDomain` |
| **Location** | `location` (always "Bassetlaw / Bolsover, England") |
| **Apply flow** | `applyType` (`email`/`external`/`internal`), `applyUrl`, `applyEmail`, `externalApplyUrl` |
| **BCVS-specific** | `jobSpecPdfUrl`, `jobSpecPdfFilename` |

#### ❓ FAQ

**Why is `companyName` always null?**
BCVS's Drupal field structure doesn't separate employer name from job title — the H1 reads "<Employer> - <Role>". Downstream consumers can split on the first `-`.

**Why is `salary` always null?**
Salary information lives in the PDF attachment, which we don't parse. Use `jobSpecPdfUrl` to fetch + parse the PDF yourself (libraries like `pdf-parse` / `pdfjs-dist` work well).

**Why is `closingDate` sometimes null?**
Not all charities fill in the `field-closing-date` Drupal field — it's optional. Closing dates often appear in the PDF instead.

**Can I scrape private pages or applicant data?**
No. Only the public `/latest-vacancies` listing and public `/job/<slug>` pages.

**How do I limit results?**
Set `maxItems`. With only 3-10 live vacancies, `maxItems: 100` covers everything safely.

#### 💬 Support

- For issues or feature requests, please use the **Issues** tab on the actor's Apify Console page.
- Author's website: <https://muhamed-didovic.github.io/>
- Email: <muhamed.didovic@gmail.com>

#### 🛠 Additional services

- Custom output shape, additional fields, or one-off datasets: <muhamed.didovic@gmail.com>
- Bundled PDF-spec OCR for a richer dataset (extracts salary, hours, role description from the PDF): drop an email.
- Similar scrapers for other CVS / volunteer hubs (Doing Good Leeds, VA Rotherham, VAS Sheffield, Barnsley CVS, Community First Yorkshire): drop an email.

#### 🔎 Explore more scrapers

See other scrapers at [memo23's Apify profile](https://apify.com/memo23) — covering job boards, real estate, social media, and more.

***

### ⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Bassetlaw Community & Voluntary Service (BCVS), bcvs.org.uk, or any of their subsidiaries or affiliates. All trademarks mentioned are the property of their respective owners.

The scraper accesses only the publicly available `/latest-vacancies` listing page and public `/job/<slug>` detail pages on bcvs.org.uk — no authenticated endpoints, recruiter-only features, or content behind a login. Users are responsible for ensuring their use complies with bcvs.org.uk's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organisation.

***

### SEO Keywords

bcvs scraper, scrape bcvs.org.uk, bassetlaw cvs scraper, bolsover cvs scraper, bassetlaw voluntary sector jobs api, north nottinghamshire charity jobs scraper, north derbyshire charity jobs scraper, Apify bcvs, drupal scraper, drupal 10 html scraper, drupal node scraper, pdf job spec extractor, charity jobs pdf scraper, charityjob alternative scraper, doing good leeds alternative scraper, vassheffield alternative scraper, barnsleycvs alternative scraper, va rotherham alternative scraper, uk cvs jobs scraper, local nonprofit recruitment data

# Actor input Schema

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

Supported shapes: `https://www.bcvs.org.uk/latest-vacancies`, `https://www.bcvs.org.uk/search/node?keys=<keyword>` (paginated automatically; note search also surfaces expired vacancies), `https://www.bcvs.org.uk/job/<slug>`. Leave empty for the listing.

## `enrichDetail` (type: `boolean`):

When enabled, each job triggers one extra HTTP call to /job/<slug> to extract the body HTML, closing date, contact email/website, and the job-spec PDF attachment URL. Disable for listing-only output (title + URL only).

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

Hard cap on rows pushed. BCVS typically lists 3-10 live vacancies.

## `maxConcurrency` (type: `integer`):

Maximum detail-page fetches in parallel.

## `minConcurrency` (type: `integer`):

Minimum detail-page fetches in parallel.

## `maxRequestRetries` (type: `integer`):

Number of retries before a failed request is given up.

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

bcvs.org.uk does not anti-bot — proxy is optional. Defaults to no proxy.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.bcvs.org.uk/search/node?keys=vacancy"
  ],
  "enrichDetail": true,
  "maxItems": 1000,
  "maxConcurrency": 3,
  "minConcurrency": 1,
  "maxRequestRetries": 5,
  "proxy": {
    "useApifyProxy": false
  }
}
```

# 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": [
        "https://www.bcvs.org.uk/search/node?keys=vacancy"
    ],
    "proxy": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/bcvs-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": ["https://www.bcvs.org.uk/search/node?keys=vacancy"],
    "proxy": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/bcvs-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": [
    "https://www.bcvs.org.uk/search/node?keys=vacancy"
  ],
  "proxy": {
    "useApifyProxy": false
  }
}' |
apify call memo23/bcvs-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Bassetlaw CVS Jobs Scraper",
        "description": "Scrape bcvs.org.uk (Bassetlaw + Bolsover Drupal 10 site). HTML scrape captures title, body, closing date, contact email, AND the job-spec PDF attachment URL for downstream OCR. ~3-10 live vacancies. No anti-bot. JSON or CSV out, billed per result.",
        "version": "0.0",
        "x-build-id": "mWlQpxCh57BJpKIOm"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~bcvs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-bcvs-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/memo23~bcvs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-bcvs-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/memo23~bcvs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-bcvs-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": "bcvs.org.uk URLs",
                        "type": "array",
                        "description": "Supported shapes: `https://www.bcvs.org.uk/latest-vacancies`, `https://www.bcvs.org.uk/search/node?keys=<keyword>` (paginated automatically; note search also surfaces expired vacancies), `https://www.bcvs.org.uk/job/<slug>`. Leave empty for the listing.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "enrichDetail": {
                        "title": "Fetch each detail page for body, closing date, PDF URL (recommended)",
                        "type": "boolean",
                        "description": "When enabled, each job triggers one extra HTTP call to /job/<slug> to extract the body HTML, closing date, contact email/website, and the job-spec PDF attachment URL. Disable for listing-only output (title + URL only).",
                        "default": true
                    },
                    "maxItems": {
                        "title": "Maximum jobs to scrape",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Hard cap on rows pushed. BCVS typically lists 3-10 live vacancies.",
                        "default": 1000
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum detail-page fetches in parallel.",
                        "default": 3
                    },
                    "minConcurrency": {
                        "title": "Min concurrency",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Minimum detail-page fetches in parallel.",
                        "default": 1
                    },
                    "maxRequestRetries": {
                        "title": "Max request retries",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Number of retries before a failed request is given up.",
                        "default": 5
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "bcvs.org.uk does not anti-bot — proxy is optional. Defaults to no proxy.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
