# Greenhouse, Lever & Ashby Jobs Scraper - New Postings Mode (`halvenlabs/ats-jobs-scraper`) Actor

Scrape every job posting from any company's Greenhouse, Lever, or Ashby careers board into one clean, unified schema. Modes report only freshly posted jobs, or jobs that closed since your last run. Includes title, department, location, compensation, and apply URL.

- **URL**: https://apify.com/halvenlabs/ats-jobs-scraper.md
- **Developed by:** [Halven Labs](https://apify.com/halvenlabs) (community)
- **Categories:** Jobs, Lead generation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.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.

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

## Greenhouse, Lever & Ashby Jobs Scraper — New Postings Mode

Scrape **every job posting** from any company's **Greenhouse**, **Lever**, or **Ashby** careers board into one clean, **unified schema** — title, department, location, employment type, remote flag, description, and apply URL. Mix and match companies from all three platforms in a single run. Export to **CSV, Excel, JSON, or Google Sheets**.

Ideal for job aggregators, recruiters and sourcers, market/compensation research, and competitive hiring intelligence.

---

### 🎯 Why use this actor

- **Skip the manual career-page checking** — get every open role from any company across three platforms in one run, instead of clicking through boards one by one.
- **Spot hiring signals early** — a company ramping up hiring in a department is a strong buying/investment/competitive signal, before it's public news.
- **Never miss a change** — new-postings and closed-postings mode tell you exactly what's new or gone since your last check, so you can run this on a schedule instead of re-checking by hand.

---

### ✨ Features

- **Three ATS platforms, one schema** — Greenhouse, Lever, and Ashby jobs come back with identical fields, so you never write per-platform mapping code.
- **Whole board in one run** — pulls the complete list of open roles per company.
- **Flexible board input** — accept `greenhouse:token`, `lever:token`, `ashby:token`, or full board URLs (`https://boards.greenhouse.io/…`, `https://jobs.lever.co/…`, `https://jobs.ashbyhq.com/…`).
- **Built-in filtering** — keep only jobs matching title keywords and/or a location.
- **Clean descriptions** — plain-text description always included; raw HTML optional.
- **Remote detection** — normalized `remote` boolean and `workplaceType` across all three platforms.
- **Compensation, when published** — Ashby's salary/equity ranges come through in `compensationSummary`.
- **New-postings mode** — every row is flagged `isNew`; turn on `onlyNewJobs` to get only postings that didn't exist last time you ran this actor. Perfect for scheduled runs.
- **Closed-postings detection** — optionally emit a row (`isClosed`) for jobs that disappeared from a board since your last run — filled or taken down.
- **Fast & cheap** — reads the official public JSON boards over plain HTTP; no browser needed.
- **Bounded & robust** — `maxItems` caps output; a bad board never crashes the run.

---

### 🚀 Quick start

1. Add company boards in **Company job boards** (e.g. `greenhouse:gitlab`, `lever:palantir`, `ashby:ashby`).
2. (Optional) Add **title keywords** or a **location** filter, or raise **Max jobs**.
3. Click **Start**. The default input runs successfully with zero edits.

#### Example input

```json
{
  "boards": ["greenhouse:gitlab", "https://jobs.lever.co/palantir", "ashby:ashby"],
  "maxItems": 100,
  "titleKeywords": ["engineer", "product"],
  "locationQuery": "remote",
  "includeDescriptionHtml": false,
  "onlyNewJobs": false,
  "includeClosedJobs": false,
  "proxyConfiguration": { "useApifyProxy": true }
}
````

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `boards` | array | *(required)* | Boards as `greenhouse:token`, `lever:token`, `ashby:token`, or full board URLs. |
| `maxItems` | integer | `100` | Max jobs across all boards. `0` = no limit. |
| `titleKeywords` | array | `[]` | Keep only jobs whose title contains one of these (case-insensitive). Empty = all. |
| `locationQuery` | string | `""` | Keep only jobs whose location contains this text. Empty = all. |
| `includeDescriptionHtml` | boolean | `false` | Add a raw-HTML `descriptionHtml` field. |
| `onlyNewJobs` | boolean | `false` | Monitor mode — only output jobs not seen in a previous run. |
| `includeClosedJobs` | boolean | `false` | Also emit a row for jobs seen before but no longer listed on a board checked this run. |
| `proxyConfiguration` | object | Apify Proxy (auto) | Proxy settings. |

#### 🔎 Finding a company's board token

- **Greenhouse:** the board URL looks like `https://boards.greenhouse.io/gitlab` → token is `gitlab`.
- **Lever:** the board URL looks like `https://jobs.lever.co/palantir` → token is `palantir`.
- **Ashby:** the board URL looks like `https://jobs.ashbyhq.com/ashby` → token is `ashby`.

***

### 📦 Output

One flat row per job posting, unified across all three platforms:

```json
{
  "source": "greenhouse",
  "company": "gitlab",
  "companyName": "GitLab",
  "jobId": "8503792002",
  "title": "AI Engineer",
  "department": "Enterprise Applications",
  "team": "Enterprise Applications",
  "location": "Remote, US",
  "allLocations": "United States",
  "commitment": null,
  "workplaceType": "remote",
  "remote": true,
  "country": null,
  "jobUrl": "https://job-boards.greenhouse.io/gitlab/jobs/8503792002",
  "applyUrl": "https://job-boards.greenhouse.io/gitlab/jobs/8503792002",
  "publishedAt": "2026-05-01T10:00:00-04:00",
  "updatedAt": "2026-06-05T16:18:10-04:00",
  "requisitionId": "REQ-123",
  "compensationSummary": null,
  "isNew": true,
  "isClosed": false,
  "descriptionText": "Join us & help build..."
}
```

> Platform notes: `commitment` (Full-time/Part-time) comes from Lever and Ashby; `country` from Lever and Ashby; `requisitionId` from Greenhouse; `compensationSummary` from Ashby (when the company has published a range). Missing values are `null` so the schema stays consistent.

#### Output fields

| Field | Type | Description |
|-------|------|-------------|
| `source` | string | `greenhouse`, `lever`, or `ashby`. |
| `company` | string | The board token you supplied. |
| `companyName` | string | Company display name. |
| `jobId` | string | Platform-specific job ID. |
| `title` | string | null | Job title. |
| `department` | string | null | Department. |
| `team` | string | null | Team, when distinct from department. |
| `location` | string | null | Primary listed location. |
| `allLocations` | string | All locations, comma-separated. |
| `commitment` | string | null | Full-time/Part-time/etc. (Lever, Ashby). |
| `workplaceType` | string | null | `remote` / `hybrid` / `onsite`. |
| `remote` | boolean | Normalized remote flag. |
| `country` | string | null | Country (Lever, Ashby). |
| `jobUrl` | string | null | Public job posting URL. |
| `applyUrl` | string | null | Application URL. |
| `publishedAt` | string | null | ISO publish date. |
| `updatedAt` | string | null | ISO last-updated date. |
| `requisitionId` | string | null | Internal requisition ID (Greenhouse). |
| `compensationSummary` | string | null | Salary/equity range, when published (Ashby). |
| `isNew` | boolean | Not seen in a previous run (see below). |
| `isClosed` | boolean | This is a closed-posting row (see below). |
| `descriptionText` | string | Plain-text job description. |
| `descriptionHtml` | string | *(optional)* Raw HTML description, only when `includeDescriptionHtml` is on. |

#### 🆕 New-postings mode

Every row includes `isNew` — `true` if that job wasn't present the last time you ran this actor (tracked per Apify account, across all boards, refreshed each run). On your very first run, everything is `isNew: true` since there's no history yet.

Turn on `onlyNewJobs` to have the actor output *only* newly-appeared postings — ideal for a scheduled run (e.g. daily) that should alert you to fresh openings instead of re-delivering the whole board each time. "Last seen" history is retained for 90 days of inactivity per job before it's dropped, so removing and later re-adding a board after a long gap resets its history.

#### 🔒 Closed-postings detection

Turn on `includeClosedJobs` to also get a row (`isClosed: true`) for each job that was seen in a previous run but no longer appears on its board this run — a strong signal it was filled or taken down. These rows carry only what was recorded when last seen (`title`, `department`, `location`, `jobUrl`); fields the actor can't know after the fact (like `publishedAt` or `descriptionText`) are `null`/empty. Only boards actually included and successfully checked in *this* run are considered — dropping a board from your input, or a transient failure, never causes its old jobs to show up as falsely "closed." Closed rows count toward `maxItems` like any other row.

***

### 💡 Use cases

- **Job boards & aggregators** — continuously ingest fresh roles from many companies.
- **Recruiting & sourcing** — monitor competitors' open roles and hiring focus.
- **Talent-market research** — analyze departments, locations, and remote trends at scale.
- **Sales intelligence** — track which companies are hiring (a strong growth signal).
- **Scheduled alerts** — run daily with `onlyNewJobs` to catch freshly posted roles as they go live.

***

### 💳 Pricing (pay-per-event)

| Event | Price |
|-------|-------|
| Actor start | $0.005 per run |
| Job scraped | $0.001 per posting |

Scraping 1,000 jobs costs about **$1.01**. Set `maxItems` to cap your spend exactly.

***

### ❓ FAQ

**Which ATS platforms are supported?**
Greenhouse, Lever, and Ashby — three of the most widely used company career boards.

**How do I find the token?**
It's the last path segment of the public board URL (see "Finding a company's board token" above). You can also paste the full URL.

**Can I filter to just engineering or a city?**
Yes — use `titleKeywords` (e.g. `["engineer"]`) and/or `locationQuery` (e.g. `"London"` or `"remote"`).

**Do these boards need a proxy?**
Usually no — the public JSON APIs are lightweight. A proxy is on by default and helps only on very large runs.

**How does "new postings" tracking work across runs?**
Each run compares the current board contents against a per-account history of previously-seen job IDs and refreshes it — no setup needed. It's separate from `titleKeywords`/`locationQuery`, so a job is "new" based on whether it existed before, regardless of your filters.

**How do closed jobs get detected?**
The same per-account history used for "new postings" also records each job's title/department/location/URL. If a board you actually ran this time no longer lists a job that was in that history, it's reported as closed.

***

### ⚖️ Legal

This actor reads publicly available job-posting data from official Greenhouse, Lever, and Ashby board endpoints. You are responsible for using the data in compliance with applicable laws and each platform's terms.

# Actor input Schema

## `boards` (type: `array`):

Which company career boards to scrape. Each entry can be a prefixed token like 'greenhouse:gitlab', 'lever:palantir', or 'ashby:ashby', or a full board URL (e.g. 'https://boards.greenhouse.io/gitlab', 'https://jobs.lever.co/palantir', or 'https://jobs.ashbyhq.com/ashby'). The company token is usually the last part of the board URL.

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

Maximum number of job postings to scrape across all boards. Use 0 for no limit. Keeps runs bounded and predictable.

## `titleKeywords` (type: `array`):

Optional. Only keep jobs whose title contains at least one of these keywords (case-insensitive), e.g. \['engineer','designer']. Leave empty for all jobs.

## `locationQuery` (type: `string`):

Optional. Only keep jobs whose location contains this text (case-insensitive), e.g. 'remote' or 'London'. Leave empty for all locations.

## `includeDescriptionHtml` (type: `boolean`):

Include the full HTML job description in a 'descriptionHtml' field. A clean plain-text 'descriptionText' is always included. Default off keeps the output lighter.

## `onlyNewJobs` (type: `boolean`):

Only output jobs not seen in a previous run of this Actor (tracked per-account, across all boards). Every row always includes an 'isNew' field regardless of this setting. Turn this on for scheduled runs that should report freshly posted jobs only — the first run always includes everything, since there's no prior history yet.

## `includeClosedJobs` (type: `boolean`):

Also emit a row (isClosed: true) for each job that was seen in a previous run but is no longer listed on its board this run — e.g. filled or taken down. Only applies to boards successfully checked this run. Counts toward maxItems like any other row.

## `proxyConfiguration` (type: `object`):

Proxy settings. Apify Proxy (auto) is recommended and enabled by default. These public ATS APIs are lightweight and rarely need a proxy, but it helps avoid rate limits on large runs.

## Actor input object example

```json
{
  "boards": [
    "https://boards.greenhouse.io/gitlab",
    "lever:palantir",
    "ashby:ashby"
  ],
  "maxItems": 100,
  "titleKeywords": [
    "engineer",
    "product"
  ],
  "locationQuery": "",
  "includeDescriptionHtml": false,
  "onlyNewJobs": false,
  "includeClosedJobs": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Unified job postings from Greenhouse, Lever, and Ashby, one flat row per job.

# 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 = {
    "boards": [
        "greenhouse:gitlab",
        "lever:palantir",
        "ashby:ashby"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("halvenlabs/ats-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 = { "boards": [
        "greenhouse:gitlab",
        "lever:palantir",
        "ashby:ashby",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("halvenlabs/ats-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 '{
  "boards": [
    "greenhouse:gitlab",
    "lever:palantir",
    "ashby:ashby"
  ]
}' |
apify call halvenlabs/ats-jobs-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Greenhouse, Lever & Ashby Jobs Scraper - New Postings Mode",
        "description": "Scrape every job posting from any company's Greenhouse, Lever, or Ashby careers board into one clean, unified schema. Modes report only freshly posted jobs, or jobs that closed since your last run. Includes title, department, location, compensation, and apply URL.",
        "version": "1.3",
        "x-build-id": "2DHaTdeUrj7VVuUzs"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/halvenlabs~ats-jobs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-halvenlabs-ats-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/halvenlabs~ats-jobs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-halvenlabs-ats-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/halvenlabs~ats-jobs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-halvenlabs-ats-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",
                "required": [
                    "boards"
                ],
                "properties": {
                    "boards": {
                        "title": "Company job boards",
                        "type": "array",
                        "description": "Which company career boards to scrape. Each entry can be a prefixed token like 'greenhouse:gitlab', 'lever:palantir', or 'ashby:ashby', or a full board URL (e.g. 'https://boards.greenhouse.io/gitlab', 'https://jobs.lever.co/palantir', or 'https://jobs.ashbyhq.com/ashby'). The company token is usually the last part of the board URL.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Max jobs",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of job postings to scrape across all boards. Use 0 for no limit. Keeps runs bounded and predictable.",
                        "default": 100
                    },
                    "titleKeywords": {
                        "title": "Filter by title keywords",
                        "type": "array",
                        "description": "Optional. Only keep jobs whose title contains at least one of these keywords (case-insensitive), e.g. ['engineer','designer']. Leave empty for all jobs.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "locationQuery": {
                        "title": "Filter by location",
                        "type": "string",
                        "description": "Optional. Only keep jobs whose location contains this text (case-insensitive), e.g. 'remote' or 'London'. Leave empty for all locations.",
                        "default": ""
                    },
                    "includeDescriptionHtml": {
                        "title": "Include raw HTML description",
                        "type": "boolean",
                        "description": "Include the full HTML job description in a 'descriptionHtml' field. A clean plain-text 'descriptionText' is always included. Default off keeps the output lighter.",
                        "default": false
                    },
                    "onlyNewJobs": {
                        "title": "Monitor mode: only new postings",
                        "type": "boolean",
                        "description": "Only output jobs not seen in a previous run of this Actor (tracked per-account, across all boards). Every row always includes an 'isNew' field regardless of this setting. Turn this on for scheduled runs that should report freshly posted jobs only — the first run always includes everything, since there's no prior history yet.",
                        "default": false
                    },
                    "includeClosedJobs": {
                        "title": "Monitor mode: include closed postings",
                        "type": "boolean",
                        "description": "Also emit a row (isClosed: true) for each job that was seen in a previous run but is no longer listed on its board this run — e.g. filled or taken down. Only applies to boards successfully checked this run. Counts toward maxItems like any other row.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. Apify Proxy (auto) is recommended and enabled by default. These public ATS APIs are lightweight and rarely need a proxy, but it helps avoid rate limits on large runs.",
                        "default": {
                            "useApifyProxy": 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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
