# SimplyHired Jobs Scraper (`memo23/simplyhired-jobs-scraper`) Actor

Turn SimplyHired into structured US hiring data. Structured salaries, real map coordinates, employer ratings, and full descriptions from any search URL — job type, min-pay, and recency filters included. Expired listings skipped automatically. JSON or CSV out, billed per result.

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

## Pricing

from $1.50 / 1,000 result (one job)s

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/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

## SimplyHired Jobs Scraper

**Turn SimplyHired into structured US hiring data — with salary numbers and map coordinates on every row.** Scrape every job from any SimplyHired search URL — title, employer (with star rating and logo), location with real lat/lng, structured salary (min/max/unit/currency), qualifications, benefits, job types, posted date, and the full HTML description — pulled from SimplyHired's own JSON data routes. JSON or CSV out, billed per result.

#### How it works

![How SimplyHired Jobs Scraper works](https://api.apify.com/v2/key-value-stores/kfhOjcH2i0WGbrGGn/records/how-it-works-simplyhired.png)

#### ✨ Why use this scraper?

- **Structured salary on most rows** — `min`/`max`/`unit`/`currency` parsed by SimplyHired itself, not regexed from text.
- **Real map coordinates** — latitude/longitude on every located job, ready for radius filters and mapping.
- **Employer ratings** — each job carries the company's SimplyHired star rating, logo, and company-page URL.
- **JSON data routes, not HTML scraping** — fields come from the site's own framework payloads, so they don't break when the layout changes.
- **No proxy cost** — the scraper's TLS fingerprinting passes SimplyHired's Cloudflare gate without residential proxies (a fallback is built in).
- **Expired listings skipped automatically** — you're never billed for dead jobs; stale search results are detected at the detail step and dropped.

#### 🎯 Use cases

| Who | What they do with it |
|---|---|
| **Recruitment agencies** | Monitor open roles by metro, title, and pay band across the US |
| **HR / comp & ben teams** | Benchmark real posted salary ranges by title and city |
| **Job aggregators** | Ingest deduplicated structured postings with stable job keys |
| **Market researchers** | Track hiring volume and wage trends over time (`fdb` recency filters built in) |
| **Sales / lead-gen teams** | Find companies actively hiring — with optional contact-email enrichment |
| **Data scientists** | Geo-coded, salary-labelled job records for modelling |

#### 📥 Supported inputs

| Input | Example | What happens |
|---|---|---|
| Search URL | `https://www.simplyhired.com/search?q=nurse&l=Chicago%2C+IL` | Walks the full result set via cursor pagination |
| Search with filters | `/search?q=driver&l=Dallas%2C+TX&t=fulltime&fdb=7&mip=50000` | All filter params pass through (job type, days back, min pay, sort) |
| Remote search | `/search?q=developer&l=Remote` | Location accepts "Remote" like the site does |
| Direct job URL | `/job/{jobKey}` | Scraped as a single job |
| Keyword + location fields | `keyword: "accountant"`, `location: "New York, NY"` | Used when Start URLs is empty |

**Not supported:** company browse pages (`/browse-jobs/companies/…`) as start URLs, and features behind a SimplyHired/Indeed login.

#### 🔄 How it works

1. **Bootstrap** — one page fetch reads SimplyHired's `__NEXT_DATA__` blob: the current `buildId`, locale, and page 1 of results come free.
2. **Stream the search data route** — 20 jobs per page, cursor-based pagination; details start processing while later pages are still being fetched.
3. **Fetch each job's detail JSON** — description HTML, structured salary, coordinates, qualifications, employer rating, dates, flags.
4. **Skip expired listings and duplicates**, apply the optional recency filter.
5. **Push one merged row per job** — capped exactly at `maxItems`. If the site deploys mid-run, the `buildId` is refreshed automatically.

#### ⚙️ Input parameters

| Field | Type | Default | Description |
|---|---|---|---|
| `startUrls` | array | `["https://www.simplyhired.com/search?q=accountant&l=New+York%2C+NY"]` | Search and/or direct job URLs |
| `keyword` | string | — | Keyword search; used when `startUrls` is empty |
| `location` | string | — | Location (city/state, zip, or "Remote"); used when `startUrls` is empty |
| `postedWithinDays` | integer | — | SimplyHired's own 1/3/7/14-day filter; used when `startUrls` is empty |
| `fetchJobDetails` | boolean | `true` | Fetch full detail per job (description, salary, coordinates, rating) |
| `enrichEmails` | boolean | `false` | Experimental employer contact-email discovery |
| `postedWithinHours` | integer | — | Finer-grained recency filter on `postedDate` |
| `maxItems` | integer | `1000` | Hard cap on jobs collected |
| `maxConcurrency` | integer | `10` | Parallel detail requests |
| `proxy` | object | none | Usually not needed — honoured as an explicit override only |

#### 📊 Output overview

Each dataset row is **one job** with everything merged inline: stable `jobId` (SimplyHired's job key), employer block (name, rating, logo, company-page URL), location with coordinates, structured + raw salary, qualifications and benefits chips, both description formats, ISO dates, and status flags (`expired`, `sponsored`, `isIndeedApply`). Fields the source doesn't provide are `null` — columns never disappear between rows.

#### 📦 Output sample

```json
{
    "type": "job",
    "source": "simplyhired",
    "jobId": "DTze1mPz7QetYNmEDpKkcJUoFj3d69Qc-VA52lz7sK8h7076bnWzKQ",
    "jobUrl": "https://www.simplyhired.com/job/DTze1mPz7QetYNmEDpKkcJUoFj3d69Qc-VA52lz7sK8h7076bnWzKQ",
    "title": "Accountant-Hybrid Schedule",
    "companyName": "Columbia University",
    "companyRating": 4.1,
    "companyProfileUrl": "https://www.simplyhired.com/browse-jobs/companies/Columbia-University",
    "location": "Manhattanville, NY",
    "addressLocality": "Manhattanville",
    "addressRegion": "NY",
    "coordinates": { "latitude": 40.81694, "longitude": -73.95583 },
    "remote": false,
    "salary": { "currency": "USD", "min": 72000, "max": 82000, "unit": "YEAR", "raw": "$72,000 - $82,000 a year" },
    "salaryRaw": "$72,000 - $82,000 a year",
    "employmentTypes": ["Full-time"],
    "qualifications": ["Microsoft Excel", "Customer service", "Word embeddings", "Productivity software"],
    "postedDate": "2026-04-30T05:00:00.000Z",
    "description": "<div>…full HTML description…</div>",
    "descriptionText": "Bachelor's degree in accounting, business or related field…",
    "expired": false,
    "sponsored": false,
    "isIndeedApply": false,
    "applyType": "internal",
    "applyUrl": "https://www.simplyhired.com/job/DTze1mPz7QetYNmEDpKkcJUoFj3d69Qc-VA52lz7sK8h7076bnWzKQ",
    "scrapedAt": "2026-07-12T03:48:55.180Z"
}
````

#### 🗂 Key output fields

| Group | Fields |
|---|---|
| **Identity** | `jobId` (stable job key), `jobUrl`, `title`, `normalizedTitle` |
| **Employer** | `companyName`, `companyRating`, `companyProfileUrl`, `logoUrl` |
| **Location** | `location`, `addressLocality`, `addressRegion`, `coordinates.{latitude,longitude}`, `remote` |
| **Compensation** | `salary.{currency,min,max,unit,raw}` (structured), `salaryRaw` |
| **Classification** | `employmentTypes`, `workSettings`, `qualifications[]`, `benefits[]`, `requirements[]` (search-card chips), `skillTags[]` |
| **Dates** | `postedDate`, `dateOnIndeed`, `closingDate` (ISO-8601) |
| **Content** | `description` (HTML), `descriptionText` (plain), `snippet` |
| **Flags** | `expired`, `sponsored`, `isIndeedApply` |

#### ❓ FAQ

**Do I need a proxy?**
Usually not. The scraper's browser-grade TLS fingerprinting passes SimplyHired's Cloudflare check directly, and a residential fallback engages automatically on retries. A user-supplied proxy is honoured as an override.

**Does it return the employer's direct apply link?**
No — SimplyHired routes applications through a session-bound redirect that can't be reliably resolved server-side. `applyUrl` is the canonical SimplyHired job page (one click from the real form), and `isIndeedApply` tells you when the job uses Indeed's apply flow. If a resolved ATS URL matters to you, check the eFinancialCareers actor pattern or email for a custom build.

**Why did I get slightly fewer rows than `maxItems`?**
Search results can include listings that expired minutes ago. Those are detected at the detail step and skipped (logged as `skipped` in the run stats) rather than pushed as junk rows.

**Can I filter by job type, minimum pay, or recency?**
Yes — either put the site's own params on your start URL (`t=fulltime`, `mip=50000`, `fdb=7`) or use the `postedWithinDays` / `postedWithinHours` inputs.

**What happens when SimplyHired deploys a new site version mid-run?**
The data routes briefly 404; the scraper detects this, re-reads the new `buildId`, and continues — you'll see `buildIdRefreshes` in the stats.

#### 💬 Support

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

#### 🛠 Additional services

- Custom output shape, additional fields, or one-off datasets: <muhamed.didovic@gmail.com>
- Need a similar scraper for other job boards (eFinancialCareers, TotalJobs, CharityJob, s1jobs, etc.)? Drop an email.
- For API access (no Apify fee, just a usage fee for the API): <muhamed.didovic@gmail.com>

#### 🔎 Explore more scrapers

If this SimplyHired Scraper was useful, see other scrapers and actors at [memo23's Apify profile](https://apify.com/memo23) — covering job boards, real estate, social media, and more.

***

### ⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by SimplyHired, Indeed, Recruit Holdings, or any of their subsidiaries or affiliates. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available job listings and the public JSON payloads that power the SimplyHired website — no authenticated endpoints, candidate data, or content behind a SimplyHired or Indeed login. Users are responsible for ensuring their use complies with SimplyHired's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organisation.

***

### SEO Keywords

simplyhired scraper, scrape simplyhired, simplyhired api, simplyhired jobs scraper, Apify simplyhired, us jobs scraper, job postings api, job listings scraper, salary data scraper, posted salary benchmark, jobs with coordinates api, geo-coded jobs data, employer rating data, us hiring trends, recruitment data scraper, job market research data, indeed alternative scraper, ziprecruiter alternative scraper, glassdoor alternative scraper, job board scraper, job aggregator data feed

# Actor input Schema

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

Full SimplyHired URLs to crawl. Mix search and job URLs in the same array if useful. Leave empty to use the keyword/location fields below instead.

## `keyword` (type: `string`):

Keyword search, e.g. `registered nurse`, `software engineer`. Only used when Start URLs is empty (add `?q=…` to a start URL otherwise).

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

Location filter, e.g. `New York, NY`, `Chicago, IL`, `Remote`, or a zip code. Only used when Start URLs is empty.

## `postedWithinDays` (type: `integer`):

Only jobs posted within the last N days — SimplyHired supports 1, 3, 7, or 14. Only used when Start URLs is empty (add `&fdb=N` to a start URL otherwise).

## `fetchJobDetails` (type: `boolean`):

When enabled, each job also fetches its detail JSON: full HTML description, structured salary (min/max/unit/currency), latitude + longitude, qualifications, work settings, employer rating + logo + company-page URL, posted date, and expired/sponsored flags. Adds one fast request per job. When disabled, rows carry only the search-card fields.

## `enrichEmails` (type: `boolean`):

If enabled, tries to find a contact email for each employer by discovering the company's website and reading its contact/about pages. Adds contactEmail + contactWebsite columns plus a detailed emailEnrichment object. Best-effort.

## `postedWithinHours` (type: `integer`):

Filters on each job's posted date (requires 'Fetch full job detail'). Set 24 for the last day, 72 for the last 3 days. Leave empty (or 0) to return everything.

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

Hard cap on the number of jobs collected. Use this cap to limit billing.

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

Maximum number of job detail requests processed in parallel.

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

Minimum number of job detail requests processed in parallel.

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

Number of retries before a failed request is given up.

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

Usually NOT needed — the scraper's TLS fingerprinting passes SimplyHired's Cloudflare gate without a proxy, and a residential fallback is built in. Configure one only if you see persistent blocks; it is honoured as an explicit override.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.simplyhired.com/search?q=accountant&l=New+York%2C+NY"
  ],
  "fetchJobDetails": true,
  "enrichEmails": false,
  "maxItems": 1000,
  "maxConcurrency": 10,
  "minConcurrency": 1,
  "maxRequestRetries": 5,
  "proxy": {
    "useApifyProxy": false
  }
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

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

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        "https://www.simplyhired.com/search?q=accountant&l=New+York%2C+NY"
    ],
    "proxy": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/simplyhired-jobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": ["https://www.simplyhired.com/search?q=accountant&l=New+York%2C+NY"],
    "proxy": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/simplyhired-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    "https://www.simplyhired.com/search?q=accountant&l=New+York%2C+NY"
  ],
  "proxy": {
    "useApifyProxy": false
  }
}' |
apify call memo23/simplyhired-jobs-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "SimplyHired Jobs Scraper",
        "description": "Turn SimplyHired into structured US hiring data. Structured salaries, real map coordinates, employer ratings, and full descriptions from any search URL — job type, min-pay, and recency filters included. Expired listings skipped automatically. JSON or CSV out, billed per result.",
        "version": "0.0",
        "x-build-id": "u9SW7oWwfqnHXA7Ck"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~simplyhired-jobs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-simplyhired-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/memo23~simplyhired-jobs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-simplyhired-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/memo23~simplyhired-jobs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-simplyhired-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "startUrls": {
                        "title": "SimplyHired URLs",
                        "type": "array",
                        "description": "Full SimplyHired URLs to crawl. Mix search and job URLs in the same array if useful. Leave empty to use the keyword/location fields below instead.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "keyword": {
                        "title": "Keyword",
                        "type": "string",
                        "description": "Keyword search, e.g. `registered nurse`, `software engineer`. Only used when Start URLs is empty (add `?q=…` to a start URL otherwise)."
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Location filter, e.g. `New York, NY`, `Chicago, IL`, `Remote`, or a zip code. Only used when Start URLs is empty."
                    },
                    "postedWithinDays": {
                        "title": "Posted within N days",
                        "minimum": 1,
                        "maximum": 30,
                        "type": "integer",
                        "description": "Only jobs posted within the last N days — SimplyHired supports 1, 3, 7, or 14. Only used when Start URLs is empty (add `&fdb=N` to a start URL otherwise)."
                    },
                    "fetchJobDetails": {
                        "title": "Fetch full job detail (HTML description + salary + coordinates + employer rating)",
                        "type": "boolean",
                        "description": "When enabled, each job also fetches its detail JSON: full HTML description, structured salary (min/max/unit/currency), latitude + longitude, qualifications, work settings, employer rating + logo + company-page URL, posted date, and expired/sponsored flags. Adds one fast request per job. When disabled, rows carry only the search-card fields.",
                        "default": true
                    },
                    "enrichEmails": {
                        "title": "Enrich with employer contact emails (experimental)",
                        "type": "boolean",
                        "description": "If enabled, tries to find a contact email for each employer by discovering the company's website and reading its contact/about pages. Adds contactEmail + contactWebsite columns plus a detailed emailEnrichment object. Best-effort.",
                        "default": false
                    },
                    "postedWithinHours": {
                        "title": "Only jobs posted in the last N hours",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Filters on each job's posted date (requires 'Fetch full job detail'). Set 24 for the last day, 72 for the last 3 days. Leave empty (or 0) to return everything."
                    },
                    "maxItems": {
                        "title": "Maximum items to scrape",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Hard cap on the number of jobs collected. Use this cap to limit billing.",
                        "default": 1000
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of job detail requests processed in parallel.",
                        "default": 10
                    },
                    "minConcurrency": {
                        "title": "Min concurrency",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Minimum number of job detail requests processed in parallel.",
                        "default": 1
                    },
                    "maxRequestRetries": {
                        "title": "Max request retries",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Number of retries before a failed request is given up.",
                        "default": 5
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Usually NOT needed — the scraper's TLS fingerprinting passes SimplyHired's Cloudflare gate without a proxy, and a residential fallback is built in. Configure one only if you see persistent blocks; it is honoured as an explicit override.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
