# Job Salary Transparency Scraper (`coregent/job-salary-transparency-scraper`) Actor

Scrape public job listings and keep only jobs with visible salary. Returns flat, normalized salary rows - title, company, location, salary range, currency, pay period, remote status, and transparency tags. No login, no cookies, no residential proxy.

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

## Pricing

from $1.80 / 1,000 salary-job-results

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

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

## What's an Apify Actor?

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

## How to integrate an Actor?

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

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

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

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

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

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

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

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

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

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

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


# README

## Job Salary Transparency Scraper

![Job Salary Transparency Scraper](https://raw.githubusercontent.com/coregentdevspace/job-salary-transparency-scraper-assets/main/thumbnail-job-salary-transparency-scraper.png)

Scrape **public job listings** and keep only the jobs that show **real salary / pay data**, normalized into clean, flat, CSV-ready rows. Every row carries first-class compensation fields: **min/max salary, currency, pay period, range vs. exact, salary source, and a salary-transparency score**. Built for **compensation analysts, recruiters, HR-tech teams, labour-market researchers, and sales teams**.

**No login, no cookies, no session tokens, no residential proxy.** The actor uses free public sources over HTTP, so it stays fast and cost-predictable. You pay one flat event per unique **salary-visible** job row that passes your filters.

### ✨ Why this scraper

- **Salary-first** — unlike generic job scrapers, this one filters and normalizes compensation as the headline output. No salary, no charge.
- **Public sources only** — public ATS JSON APIs (Greenhouse, Lever, Ashby, SmartRecruiters), the Remotive search API, and any career page that exposes JSON-LD `JobPosting` data.
- **No AI, no paid salary vendors** — salary is parsed from structured fields, page JSON-LD, and visible text. Vague text like "competitive salary" is never turned into a fake number.
- **29 flat fields** — drops straight into Sheets/Excel/CRMs.
- **Pay-Per-Event** — one flat `salary-job-result` event per saved unique salary-visible job. Duplicates and filtered rows are never charged.

### 📥 Input

Provide at least one of **Start URLs** (URL mode) or **Search keywords** (query mode).

| Field                | Type    | Default                                              | Description                                                                                                                                 |
| -------------------- | ------- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `startUrls`          | array   | `[]`                                                 | Public board/career/job URLs. Greenhouse/Lever/Ashby/SmartRecruiters boards are detected automatically; any other page is read via JSON-LD. |
| `queries`            | array   | `[]`                                                 | Keyword search terms (searched via Remotive — the only free cross-company keyword source).                                                  |
| `location`           | string  | `""`                                                 | Optional location filter.                                                                                                                   |
| `country`            | string  | `"US"`                                               | Salary currency default + location parsing. One of `US, CA, UK, AU, DE, FR, IN, GLOBAL`.                                                    |
| `sources`            | array   | `["public_ats","remotive","google_jobs_compatible"]` | Sources for query mode. `custom_urls_only` uses Start URLs exclusively.                                                                     |
| `maxResults`         | integer | `100`                                                | Max saved unique salary-visible rows (1–50000).                                                                                             |
| `salaryRequired`     | boolean | `true`                                               | Save only rows with visible salary.                                                                                                         |
| `minSalary`          | integer | `null`                                               | Minimum salary (compared within matching period only).                                                                                      |
| `salaryPeriod`       | string  | `"any"`                                              | `any, hour, day, week, month, year`.                                                                                                        |
| `currency`           | string  | `"any"`                                              | `any, USD, CAD, GBP, AUD, EUR, INR`.                                                                                                        |
| `remoteOnly`         | boolean | `false`                                              | Keep only remote/hybrid jobs.                                                                                                               |
| `includeDescription` | boolean | `false`                                              | Store full job description (off = snippet only).                                                                                            |
| `deduplicate`        | boolean | `true`                                               | Drop duplicate rows by job ID / canonical URL.                                                                                              |
| `proxyConfiguration` | object  | `{ "useApifyProxy": true }`                          | Apify Datacenter / no proxy / custom URLs. Residential is rejected.                                                                         |

#### Sample input — URL mode (public ATS boards)

```json
{
    "startUrls": [
        "https://boards.greenhouse.io/figma",
        "https://jobs.lever.co/voiceflow",
        "https://jobs.ashbyhq.com/Notion"
    ],
    "salaryRequired": true,
    "currency": "USD",
    "maxResults": 100,
    "proxyConfiguration": { "useApifyProxy": true }
}
````

#### Sample input — query mode (Remotive keyword search)

```json
{
    "queries": ["software engineer", "data analyst"],
    "sources": ["remotive"],
    "country": "US",
    "salaryRequired": true,
    "salaryPeriod": "year",
    "minSalary": 90000,
    "remoteOnly": true,
    "maxResults": 100,
    "proxyConfiguration": { "useApifyProxy": true }
}
```

### 📤 Output

The dataset opens on the **Salary-visible jobs** table view — one flat row per salary-visible job (29 fields):

![Salary-visible jobs — table view](https://raw.githubusercontent.com/coregentdevspace/job-salary-transparency-scraper-assets/main/job-salary-transparency-scraper-output-salary-visible-jobs-table-view.png)

#### Sample record — Salary-visible jobs

```json
{
    "job_id": "rm_1919266",
    "job_url": "https://remotive.com/remote-jobs/software-development/senior-independent-ai-engineer-architect-1919266",
    "source": "remotive",
    "source_company_board_url": "https://remotive.com",
    "job_title": "Senior Independent AI Engineer / Architect",
    "company_name": "A.Team",
    "location": "Americas, Europe, Israel",
    "country": "US",
    "remote_type": "remote",
    "employment_type": "contract",
    "posted_at": "2026-05-16",
    "scraped_at": "2026-06-07T04:46:16.652Z",
    "salary_visible": true,
    "salary_text": "$120 - $170 /hour",
    "salary_min": 120,
    "salary_max": 170,
    "salary_currency": "USD",
    "salary_period": "hour",
    "salary_is_range": true,
    "salary_confidence": "medium",
    "salary_source": "description_text",
    "salary_context": "$120 - $170 /hour Senior Independent AI Engineer / Architect Remote | Americas, Europe, or Israel. A·Team is an invite-only network of senior AI engineers, ML engineers, and AI architects building production AI systems…",
    "transparency_reason_tags": "explicit_salary_range;hourly_pay_detected;currency_inferred_from_country;salary_from_description_text;remote_salary",
    "description_snippet": "Senior Independent AI Engineer / Architect Remote | Americas, Europe, or Israel. Most AI engineers can find work. Finding work worth doing is harder. A.Team is an invite-only network of senior AI engineers, ML engineers, and AI architects building production AI systems for startups, enterprises, and global companies…",
    "job_description": null,
    "input_url": "https://remotive.com",
    "input_query": "data analyst",
    "salary_transparency_score": 90,
    "salary_transparency_label": "strong"
}
```

The run also writes a `RUN_SUMMARY` record to the default key-value store with counts for inputs, raw results, salary-visible found, results saved, duplicates removed, filtered out, charged events, blocked requests, retries, sources used, and runtime.

### 💲 Pricing — Pay Per Event

One event: **`salary-job-result`**, charged once per unique salary-visible row that passed all filters and was successfully pushed to the dataset. Duplicates, filtered-out rows, and failed requests are never charged.

#### 🚦 Proxy policy

Use **Apify Datacenter** proxy or **no proxy** for normal runs — both work reliably for public ATS / career-page JSON at this actor's conservative concurrency.

**Apify Residential proxy is not supported.** The actor fails at startup if `apifyProxyGroups` includes `RESIDENTIAL`. Reason: in pay-per-event actors, residential bandwidth (~/GB) is billed to the developer, not the run user, so a single bandwidth-heavy run could exceed the per-result event revenue.

If you genuinely need residential routing, supply your own residential provider via the proxy editor's **Custom proxy URLs** field — that traffic goes through your provider, not Apify, and is unaffected:

```
http://user:pass@proxy.iproyal.com:12321
http://user:pass@proxy.brightdata.com:22225
http://user:pass@proxy.oxylabs.io:7777
```

### ℹ️ Notes & limits

- **Indeed and Seek are not supported in V1** — they are anti-bot heavy and unreliable over plain HTTP without a browser or residential proxy. They are planned as future sources.
- **Public ATS boards have no cross-company keyword search**, so keyword `queries` run through Remotive. To scrape an ATS board, paste its URL in `startUrls`.
- Salary is parsed from structured fields and JSON-LD first (high confidence), then from visible description text (medium/low). The original salary string is preserved verbatim in `salary_text`.
- No login, cookies, session tokens, or private API keys are used anywhere.

# Actor input Schema

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

Paste public job search, job listing, ATS board, or career page URLs. Supported ATS boards: Greenhouse, Lever, Ashby, SmartRecruiters. Any other career/job page is read via JSON-LD JobPosting data. Provide at least one of Start URLs or Search keywords.

## `queries` (type: `array`):

Keyword search terms, for example "software engineer", "data analyst". Searched against Remotive (the only free cross-company keyword source). Public ATS boards have no keyword search - use Start URLs for those.

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

Optional search/filter location, for example "New York", "Remote", "United States".

## `country` (type: `string`):

Selects country-specific salary currency defaults and location parsing.

## `sources` (type: `array`):

Which public sources to use in query (keyword) mode. Public ATS = Greenhouse/Lever/Ashby/SmartRecruiters (URL mode only). Remotive = keyword search. Google-jobs-compatible = generic JSON-LD career pages. Custom URLs only = use Start URLs exclusively. (Indeed and Seek are not supported in V1.)

## `maxResults` (type: `integer`):

Maximum number of saved unique salary-visible jobs across the whole run (not per source). Range 1-50000.

## `salaryRequired` (type: `boolean`):

Save only listings with visible salary. Turn off to also save rows where salary is not visible (salary\_visible=false) for audit use.

## `minSalary` (type: `integer`):

Minimum salary threshold applied after normalization. Compared only within a matching pay period (no cross-period conversion in V1). Set to 0 for no minimum.

## `salaryPeriod` (type: `string`):

Filter by pay period. Missing/unknown periods are dropped unless set to Any.

## `currency` (type: `string`):

Filter salary currency. Missing currencies are dropped unless set to Any.

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

Keep only jobs detected as remote or hybrid. Unknown workplace types are dropped.

## `includeDescription` (type: `boolean`):

Store the full cleaned job description (job\_description). When off, only a 500-character description snippet plus salary context is stored, reducing payload size.

## `deduplicate` (type: `boolean`):

Remove duplicate job rows by job ID and canonical URL so you are not charged for duplicates across overlapping sources.

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

Apify Proxy configuration. Defaults to Apify Proxy enabled. Apify Residential is NOT supported and will fail the run at startup; if you need residential routing, supply your own provider via Custom proxy URLs (proxyUrls).

## Actor input object example

```json
{
  "startUrls": [
    "https://boards.greenhouse.io/figma",
    "https://jobs.lever.co/voiceflow"
  ],
  "queries": [
    "software engineer",
    "data analyst"
  ],
  "location": "Remote",
  "country": "US",
  "sources": [
    "public_ats",
    "remotive",
    "google_jobs_compatible"
  ],
  "maxResults": 100,
  "salaryRequired": true,
  "minSalary": 0,
  "salaryPeriod": "any",
  "currency": "any",
  "remoteOnly": false,
  "includeDescription": false,
  "deduplicate": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Flat 29-field table view of every salary-visible job row pushed to the dataset, including job identity, company, location, normalized salary fields (min/max/currency/period), salary source + confidence, and the transparency score/label/reason tags.

# 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://boards.greenhouse.io/figma",
        "https://jobs.lever.co/voiceflow"
    ],
    "queries": [
        "software engineer",
        "data analyst"
    ],
    "location": "Remote",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("coregent/job-salary-transparency-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://boards.greenhouse.io/figma",
        "https://jobs.lever.co/voiceflow",
    ],
    "queries": [
        "software engineer",
        "data analyst",
    ],
    "location": "Remote",
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("coregent/job-salary-transparency-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://boards.greenhouse.io/figma",
    "https://jobs.lever.co/voiceflow"
  ],
  "queries": [
    "software engineer",
    "data analyst"
  ],
  "location": "Remote",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call coregent/job-salary-transparency-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Job Salary Transparency Scraper",
        "description": "Scrape public job listings and keep only jobs with visible salary. Returns flat, normalized salary rows - title, company, location, salary range, currency, pay period, remote status, and transparency tags. No login, no cookies, no residential proxy.",
        "version": "1.0",
        "x-build-id": "ufDzHcTg7rftqtQxZ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/coregent~job-salary-transparency-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-coregent-job-salary-transparency-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/coregent~job-salary-transparency-scraper/runs": {
            "post": {
                "operationId": "runs-sync-coregent-job-salary-transparency-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/coregent~job-salary-transparency-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-coregent-job-salary-transparency-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": "Start URLs (job / board / career pages)",
                        "type": "array",
                        "description": "Paste public job search, job listing, ATS board, or career page URLs. Supported ATS boards: Greenhouse, Lever, Ashby, SmartRecruiters. Any other career/job page is read via JSON-LD JobPosting data. Provide at least one of Start URLs or Search keywords.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "queries": {
                        "title": "Search keywords",
                        "type": "array",
                        "description": "Keyword search terms, for example \"software engineer\", \"data analyst\". Searched against Remotive (the only free cross-company keyword source). Public ATS boards have no keyword search - use Start URLs for those.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Optional search/filter location, for example \"New York\", \"Remote\", \"United States\".",
                        "default": ""
                    },
                    "country": {
                        "title": "Country",
                        "enum": [
                            "US",
                            "CA",
                            "UK",
                            "AU",
                            "DE",
                            "FR",
                            "IN",
                            "GLOBAL"
                        ],
                        "type": "string",
                        "description": "Selects country-specific salary currency defaults and location parsing.",
                        "default": "US"
                    },
                    "sources": {
                        "title": "Sources",
                        "type": "array",
                        "description": "Which public sources to use in query (keyword) mode. Public ATS = Greenhouse/Lever/Ashby/SmartRecruiters (URL mode only). Remotive = keyword search. Google-jobs-compatible = generic JSON-LD career pages. Custom URLs only = use Start URLs exclusively. (Indeed and Seek are not supported in V1.)",
                        "items": {
                            "type": "string",
                            "enum": [
                                "public_ats",
                                "remotive",
                                "google_jobs_compatible",
                                "custom_urls_only"
                            ],
                            "enumTitles": [
                                "Public ATS (Greenhouse/Lever/Ashby/SmartRecruiters)",
                                "Remotive",
                                "Google-jobs-compatible (JSON-LD)",
                                "Custom URLs only"
                            ]
                        },
                        "default": [
                            "public_ats",
                            "remotive",
                            "google_jobs_compatible"
                        ]
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Maximum number of saved unique salary-visible jobs across the whole run (not per source). Range 1-50000.",
                        "default": 100
                    },
                    "salaryRequired": {
                        "title": "Salary required",
                        "type": "boolean",
                        "description": "Save only listings with visible salary. Turn off to also save rows where salary is not visible (salary_visible=false) for audit use.",
                        "default": true
                    },
                    "minSalary": {
                        "title": "Minimum salary",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum salary threshold applied after normalization. Compared only within a matching pay period (no cross-period conversion in V1). Set to 0 for no minimum.",
                        "default": 0
                    },
                    "salaryPeriod": {
                        "title": "Pay period",
                        "enum": [
                            "any",
                            "hour",
                            "day",
                            "week",
                            "month",
                            "year"
                        ],
                        "type": "string",
                        "description": "Filter by pay period. Missing/unknown periods are dropped unless set to Any.",
                        "default": "any"
                    },
                    "currency": {
                        "title": "Currency",
                        "enum": [
                            "any",
                            "USD",
                            "CAD",
                            "GBP",
                            "AUD",
                            "EUR",
                            "INR"
                        ],
                        "type": "string",
                        "description": "Filter salary currency. Missing currencies are dropped unless set to Any.",
                        "default": "any"
                    },
                    "remoteOnly": {
                        "title": "Remote only",
                        "type": "boolean",
                        "description": "Keep only jobs detected as remote or hybrid. Unknown workplace types are dropped.",
                        "default": false
                    },
                    "includeDescription": {
                        "title": "Include full job description",
                        "type": "boolean",
                        "description": "Store the full cleaned job description (job_description). When off, only a 500-character description snippet plus salary context is stored, reducing payload size.",
                        "default": false
                    },
                    "deduplicate": {
                        "title": "Deduplicate",
                        "type": "boolean",
                        "description": "Remove duplicate job rows by job ID and canonical URL so you are not charged for duplicates across overlapping sources.",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Proxy configuration. Defaults to Apify Proxy enabled. Apify Residential is NOT supported and will fail the run at startup; if you need residential routing, supply your own provider via Custom proxy URLs (proxyUrls).",
                        "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
