# Job Board Scraper — Greenhouse, Lever & Ashby (`funny_ground/public-job-board-aggregator`) Actor

Collect and normalize public jobs from Greenhouse, Lever, and Ashby. Filter by keyword, location, remote status, or date and track changes across runs. No browser, login, API key, or residential proxy. Just $0.001 per job ($1 per 1,000).

- **URL**: https://apify.com/funny\_ground/public-job-board-aggregator.md
- **Developed by:** [Coor Yu](https://apify.com/funny_ground) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Job Board Scraper — Greenhouse, Lever & Ashby

Monitor public company job boards without building and maintaining three separate integrations. Add Greenhouse, Lever, or Ashby board URLs and receive one normalized dataset ready for alerts, analytics, search, or a careers product.

### Why users choose this Actor

- Supports Greenhouse, Lever, and Ashby in the same run.
- Filters by keyword, location, remote status, and publication date.
- Detects new, updated, unchanged, and removed jobs between runs.
- Uses public JSON endpoints—no browser, login, API key, CAPTCHA solver, or residential proxy.

### Budget-friendly pay-per-result pricing

- **Result fee:** `$0.001` per job — **$1 per 1,000 output jobs**.
- A small Actor start event and normal Apify platform usage may also apply; see the **Pricing** tab.
- Rows filtered out before they reach the dataset do not incur the per-result fee.

Add one or more supported job boards in **Input**, choose your filters, and click **Start**.

### Why this Actor

- No accounts, cookies, CAPTCHA solvers, API keys, browsers, or residential proxies.
- Uses documented public JSON endpoints instead of fragile page selectors.
- Fetches boards concurrently and normally needs only one or two compressed HTTP requests per board.
- Normalizes different sources into a stable job schema.
- Supports keyword, location, remote, and publication-date filters.
- Detects new, updated, unchanged, and removed jobs between runs.
- Keeps healthy source results when another board temporarily fails.

### Supported sources

| Provider | Accepted URL examples | Data source |
|---|---|---|
| Greenhouse | `https://boards.greenhouse.io/stripe`<br>`https://job-boards.greenhouse.io/stripe` | Public Greenhouse Job Board API |
| Lever | `https://jobs.lever.co/company`<br>`https://jobs.eu.lever.co/company` | Public Lever Postings API |
| Ashby | `https://jobs.ashbyhq.com/company` | Public Ashby Job Postings API |

Only the listed provider domains are accepted. This prevents accidental requests to private networks or arbitrary URLs.

### Input

Minimal example:

```json
{
  "jobBoards": [
    { "url": "https://boards.greenhouse.io/stripe", "company": "Stripe" },
    { "url": "https://jobs.eu.lever.co/lever", "company": "Lever" },
    { "url": "https://jobs.ashbyhq.com/ashby", "company": "Ashby" }
  ]
}
````

Filtered monitoring example:

```json
{
  "jobBoards": [
    { "url": "https://boards.greenhouse.io/stripe" }
  ],
  "includeKeywords": ["software", "machine learning", "data"],
  "excludeKeywords": ["manager", "director"],
  "locations": ["Singapore", "Remote"],
  "changeMode": "new-and-updated",
  "stateKey": "apac-engineering"
}
```

#### Main options

| Field | Default | Description |
|---|---:|---|
| `jobBoards` | required | Up to 100 public Greenhouse, Lever, or Ashby board URLs. |
| `includeDescriptions` | `true` | Include clean text and source HTML descriptions. |
| `includeCompensation` | `true` | Include source compensation or infer an explicit salary range. |
| `maxJobsPerBoard` | `0` | Maximum matching jobs per board; `0` is unlimited. |
| `includeKeywords` | `[]` | Keep a job if any keyword matches. |
| `excludeKeywords` | `[]` | Remove a job if any keyword matches. |
| `locations` | `[]` | Case-insensitive partial location matching. |
| `remoteOnly` | `false` | Keep only explicitly remote jobs. |
| `publishedAfter` | unset | ISO date in `YYYY-MM-DD` form. Undated jobs are retained. |
| `changeMode` | `all` | `all`, `new-and-updated`, or `all-changes`. |
| `maxConcurrency` | `15` | Concurrent boards, from 1 to 50. |
| `requestTimeoutSecs` | `30` | Per-request timeout. |
| `maxRetries` | `3` | Retries for timeouts, 429s, and 5xx responses. |

### Output

Every dataset item follows one normalized schema, including:

- stable `id` and provider `externalId`
- company, title, location, department, team, and employment type
- remote and workplace type indicators
- published and updated timestamps when exposed by the source
- clean description text and original description HTML
- job and application URLs
- structured salary when published or safely recognized
- source provider and board URL
- `changeStatus`: `new`, `updated`, `unchanged`, or `removed`
- content fingerprint and scrape timestamp

The `OUTPUT` key-value store record contains counts, source timings, failures, and explicit `proxyUsed: false` and `residentialProxyUsed: false` fields.

### Incremental monitoring

The Actor stores a source-and-filter-scoped snapshot in a named key-value store. Use the same board list, filters, and `stateKey` for comparable runs:

- `all`: output the complete current snapshot.
- `new-and-updated`: suppress unchanged jobs.
- `all-changes`: output new, updated, and removed jobs.

A failed board is never treated as if all of its jobs were removed. Its previous snapshot is preserved until the source succeeds again.

### Performance and proxy policy

This Actor deliberately does not create or accept an Apify proxy configuration. It uses direct HTTPS requests to public, documented endpoints. Performance comes from:

- concurrent board fetching;
- JSON APIs rather than browser rendering;
- HTTP compression and connection reuse provided by Node.js `fetch`;
- bounded request timeouts;
- exponential retry with jitter for temporary failures;
- one batched dataset write per 500 output records.

If a provider later stops making its public endpoint available without a residential proxy, support for that provider should be paused or explicitly redesigned. A residential proxy must never be silently enabled.

### Local development

```bash
npm install
npm test
npm run build
```

Create `storage/key_value_stores/default/INPUT.json`, then run:

```bash
npm start
```

### Responsible use

The Actor only reads published job listings and does not submit applications or access candidate data. Users remain responsible for complying with applicable website terms, privacy rules, and laws.

# Actor input Schema

## `jobBoards` (type: `array`):

Public company job board URLs. Supported examples: boards.greenhouse.io/company, jobs.lever.co/company, jobs.eu.lever.co/company, jobs.ashbyhq.com/company.

## `includeDescriptions` (type: `boolean`):

Return both cleaned plain text and source HTML descriptions.

## `includeCompensation` (type: `boolean`):

Return structured compensation when the source publishes it, otherwise try to recognize a salary range from the description.

## `maxJobsPerBoard` (type: `integer`):

0 means no limit. The limit is applied after filtering.

## `includeKeywords` (type: `array`):

Keep a job when at least one keyword appears in its title, description, department, or team. Leave empty to include all jobs.

## `excludeKeywords` (type: `array`):

Remove a job when any keyword appears in its title, description, department, or team.

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

Keep jobs whose location contains at least one supplied value. Matching is case-insensitive.

## `remoteOnly` (type: `boolean`):

Keep only jobs explicitly marked remote by the source or location text.

## `publishedAfter` (type: `string`):

Optional ISO date such as 2026-01-01. Jobs with no published/updated date are retained.

## `changeMode` (type: `string`):

All jobs returns the current snapshot. New and updated suppresses unchanged jobs. All changes also emits removed jobs from successful boards.

## `stateKey` (type: `string`):

Runs with the same board list and state key compare against the same saved snapshot.

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

Each board normally needs one or two lightweight API requests.

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

Abort an individual public API request after this many seconds.

## `maxRetries` (type: `integer`):

Retries temporary timeouts, rate limits, and server errors with exponential backoff.

## `failOnBoardError` (type: `boolean`):

Disabled by default so healthy boards still return results. Failures are always included in the run summary.

## Actor input object example

```json
{
  "jobBoards": [
    {
      "url": "https://boards.greenhouse.io/stripe",
      "company": "Stripe"
    },
    {
      "url": "https://jobs.eu.lever.co/lever",
      "company": "Lever"
    },
    {
      "url": "https://jobs.ashbyhq.com/ashby",
      "company": "Ashby"
    }
  ],
  "includeDescriptions": true,
  "includeCompensation": true,
  "maxJobsPerBoard": 0,
  "includeKeywords": [],
  "excludeKeywords": [],
  "locations": [],
  "remoteOnly": false,
  "changeMode": "all",
  "stateKey": "default",
  "maxConcurrency": 15,
  "requestTimeoutSecs": 30,
  "maxRetries": 3,
  "failOnBoardError": false
}
```

# Actor output Schema

## `jobs` (type: `string`):

Normalized job records in the default dataset.

## `summary` (type: `string`):

Counts, timing, source status, and confirmation that no proxy was used.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("funny_ground/public-job-board-aggregator").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("funny_ground/public-job-board-aggregator").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 '{}' |
apify call funny_ground/public-job-board-aggregator --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Job Board Scraper — Greenhouse, Lever & Ashby",
        "description": "Collect and normalize public jobs from Greenhouse, Lever, and Ashby. Filter by keyword, location, remote status, or date and track changes across runs. No browser, login, API key, or residential proxy. Just $0.001 per job ($1 per 1,000).",
        "version": "1.0",
        "x-build-id": "HkCbCbMzMUmtnWPpf"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/funny_ground~public-job-board-aggregator/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-funny_ground-public-job-board-aggregator",
                "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/funny_ground~public-job-board-aggregator/runs": {
            "post": {
                "operationId": "runs-sync-funny_ground-public-job-board-aggregator",
                "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/funny_ground~public-job-board-aggregator/run-sync": {
            "post": {
                "operationId": "run-sync-funny_ground-public-job-board-aggregator",
                "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": [
                    "jobBoards"
                ],
                "properties": {
                    "jobBoards": {
                        "title": "Job boards",
                        "minItems": 1,
                        "maxItems": 100,
                        "type": "array",
                        "description": "Public company job board URLs. Supported examples: boards.greenhouse.io/company, jobs.lever.co/company, jobs.eu.lever.co/company, jobs.ashbyhq.com/company.",
                        "items": {
                            "type": "object",
                            "properties": {
                                "url": {
                                    "title": "Job board URL",
                                    "description": "HTTPS URL of a public Greenhouse, Lever, or Ashby job board.",
                                    "type": "string",
                                    "editor": "textfield",
                                    "pattern": "^https://.+"
                                },
                                "company": {
                                    "title": "Company name (optional)",
                                    "description": "Overrides the company name inferred from the board.",
                                    "type": "string",
                                    "editor": "textfield"
                                }
                            },
                            "required": [
                                "url"
                            ],
                            "additionalProperties": false
                        },
                        "default": [
                            {
                                "url": "https://boards.greenhouse.io/stripe",
                                "company": "Stripe"
                            },
                            {
                                "url": "https://jobs.eu.lever.co/lever",
                                "company": "Lever"
                            },
                            {
                                "url": "https://jobs.ashbyhq.com/ashby",
                                "company": "Ashby"
                            }
                        ]
                    },
                    "includeDescriptions": {
                        "title": "Include job descriptions",
                        "type": "boolean",
                        "description": "Return both cleaned plain text and source HTML descriptions.",
                        "default": true
                    },
                    "includeCompensation": {
                        "title": "Include compensation",
                        "type": "boolean",
                        "description": "Return structured compensation when the source publishes it, otherwise try to recognize a salary range from the description.",
                        "default": true
                    },
                    "maxJobsPerBoard": {
                        "title": "Maximum jobs per board",
                        "minimum": 0,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "0 means no limit. The limit is applied after filtering.",
                        "default": 0
                    },
                    "includeKeywords": {
                        "title": "Include keywords",
                        "type": "array",
                        "description": "Keep a job when at least one keyword appears in its title, description, department, or team. Leave empty to include all jobs.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "excludeKeywords": {
                        "title": "Exclude keywords",
                        "type": "array",
                        "description": "Remove a job when any keyword appears in its title, description, department, or team.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "Keep jobs whose location contains at least one supplied value. Matching is case-insensitive.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "remoteOnly": {
                        "title": "Remote jobs only",
                        "type": "boolean",
                        "description": "Keep only jobs explicitly marked remote by the source or location text.",
                        "default": false
                    },
                    "publishedAfter": {
                        "title": "Published or updated after",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                        "type": "string",
                        "description": "Optional ISO date such as 2026-01-01. Jobs with no published/updated date are retained."
                    },
                    "changeMode": {
                        "title": "Incremental output mode",
                        "enum": [
                            "all",
                            "new-and-updated",
                            "all-changes"
                        ],
                        "type": "string",
                        "description": "All jobs returns the current snapshot. New and updated suppresses unchanged jobs. All changes also emits removed jobs from successful boards.",
                        "default": "all"
                    },
                    "stateKey": {
                        "title": "State key",
                        "type": "string",
                        "description": "Runs with the same board list and state key compare against the same saved snapshot.",
                        "default": "default"
                    },
                    "maxConcurrency": {
                        "title": "Maximum concurrent boards",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Each board normally needs one or two lightweight API requests.",
                        "default": 15
                    },
                    "requestTimeoutSecs": {
                        "title": "Request timeout",
                        "minimum": 5,
                        "maximum": 120,
                        "type": "integer",
                        "description": "Abort an individual public API request after this many seconds.",
                        "default": 30
                    },
                    "maxRetries": {
                        "title": "Maximum retries",
                        "minimum": 0,
                        "maximum": 8,
                        "type": "integer",
                        "description": "Retries temporary timeouts, rate limits, and server errors with exponential backoff.",
                        "default": 3
                    },
                    "failOnBoardError": {
                        "title": "Fail the run if any board fails",
                        "type": "boolean",
                        "description": "Disabled by default so healthy boards still return results. Failures are always included in the run summary.",
                        "default": 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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
