# Oleeo / TAL.net Job Board Scraper (`blackfalcondata/oleeo-scraper`) Actor

Scrape any Oleeo (TAL.net) job board — publicjobs.ie, Royal Household, FCDO, Cabinet Office, Metropolitan Police, Police Scotland, Welsh Government, and 15+ more UK and Irish public sector boards.

- **URL**: https://apify.com/blackfalcondata/oleeo-scraper.md
- **Developed by:** [Black Falcon Data](https://apify.com/blackfalcondata) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 job listings

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

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

## What's an Apify Actor?

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

## How to integrate an Actor?

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

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.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

### What does Oleeo / TAL.net Job Board Scraper do?

Oleeo (formerly TAL.net) is the recruitment platform used by the UK and Irish public sector — from Ireland's civil service to the Royal Household, the Welsh Government, and police forces across Britain. This actor scrapes any Oleeo / TAL.net job board and returns structured job data including titles, salaries, descriptions, closing dates, and organisation names.

A single run can cover multiple boards at once. Select boards by name from the built-in list, filter by keyword, and paginate through all pages automatically.

### Use cases

- **Job alert monitoring** — Schedule a daily or weekly run to track new vacancies across one or more boards. Pipe results to Slack, Google Sheets, or email via Apify integrations or webhooks.
- **Multi-board aggregation** — Consolidate listings from 19 UK and Irish public sector boards into a single dataset for further filtering or display in your own tooling.
- **Recruitment & competitive intelligence** — Monitor hiring activity across government departments, police forces, and public bodies in real time to inform sourcing strategies.
- **Academic & policy research** — Analyse public sector hiring trends: which roles are advertised, at what salary bands, how frequently, and how long vacancies stay open.
- **AI agent pipelines** — Feed structured job data directly to LLMs via the Apify MCP Server or API. Use `compact: true` and `descriptionMaxLength` to keep payloads within context-window limits.
- **Candidate job search** — Build a personalised job feed by querying specific keywords (e.g. `"data analyst"`, `"project manager"`) across all boards and filtering by location or contract type.

### Supported boards

Select any of these boards using the `boards` input. You can also pass a raw `startUrls` for any Oleeo / TAL.net board not listed here.

#### Ireland

| Organisation | Domain |
|---|---|
| Irish Public Sector (publicjobs.ie) | `publicjobs.tal.net` |
| Courts Service of Ireland | `csoi.tal.net` |
| Central Statistics Office Ireland | `csorecruitment.tal.net` |
| Dept. of Public Expenditure Ireland | `dper.tal.net` |

#### UK Government

| Organisation | Domain |
|---|---|
| Welsh Government (Cais) | `cais.tal.net` |
| Welsh Government | `cymru-wales.tal.net` |
| UK Cabinet Office | `cabinetofficejobs.tal.net` |
| FCDO (Foreign Commonwealth & Development) | `fcdo.tal.net` |
| Ministry of Justice (SCS) | `scsrecruitment.tal.net` |
| The Royal Household | `theroyalhousehold.tal.net` |
| Eurofound (EU research agency) | `eurofound.tal.net` |

#### UK Police & Law Enforcement

| Organisation | Domain |
|---|---|
| Police Scotland | `policescotland-spacareers.tal.net` |
| British Transport Police | `btp.tal.net` |
| Avon & Somerset Police | `asp.tal.net` |
| Greater Manchester Police | `greatermanchesterpolice.tal.net` |
| Wiltshire Police | `wiltshirepolice.tal.net` |
| Police Jobs Wales | `policejobswales.tal.net` |
| Scottish Prison Service | `sps.tal.net` |
| Oleeo (own jobs) | `oleeo-jobs.tal.net` |

Any other Oleeo / TAL.net board works too — navigate to the job listings page on the target site, copy the URL, and use it as a `startUrl`. The URL typically contains `/candidate/jobboard/vacancy/`.

### Output fields

Each job result contains:

- **`jobId`** — numeric job ID extracted from the URL
- **`title`** — job title
- **`organisation`** — hiring organisation or department
- **`location`** — city, county, or office location
- **`vacancyType`** — e.g. `publicjobs`, `External Recruiter`, `State Boards`
- **`contractType`** — e.g. `Permanent`, `Fixed Term Contract`, `Apprenticeship`
- **`workingPattern`** — e.g. `Full-Time`, `Part-Time`
- **`roleType`** — e.g. `Civil Service`, `Police Officer`, `Administrative`
- **`salary`** — raw salary text (e.g. `£37,020 - £39,276`, `£60,000 per annum`) — available when listed on the board
- **`advertisedDate`** — date the job was posted
- **`closingDate`** — application deadline
- **`description`** — full job description (requires `includeDetails: true`)
- **`requirements`** — essential requirements and qualifications (requires `includeDetails: true`)
- **`benefits`** — benefits and reward package (requires `includeDetails: true`)
- **`referenceNumber`** — internal vacancy reference number
- **`organisationUrl`** — hiring organisation's website URL (requires `includeDetails: true`)
- **`organisationInfo`** — description of the hiring organisation (requires `includeDetails: true`)
- **`url`** — direct link to the job posting
- **`boardUrl`** — the SERP URL this job was found on
- **`sourceDomain`** — TAL.net subdomain (e.g. `publicjobs.tal.net`)
- **`detailFetched`** — `true` if the detail page was fetched and parsed
- **`fetchedAt`** — ISO timestamp of when the record was collected

### Input

| Parameter | Type | Default | Description |
|---|---|---|---|
| `boards` | string[] | — | Domain names from the built-in list (e.g. `publicjobs.tal.net`). The actor resolves each to its SERP URL automatically. |
| `startUrls` | string[] | — | Raw Oleeo / TAL.net job board listing URLs. Use for boards not in the built-in list. |
| `query` | string | — | Keyword search applied across all selected boards. Searches vacancy title, description, and duties. Leave empty for all jobs. |
| `maxItems` | integer | `0` | Maximum total results across all boards. `0` = unlimited. |
| `includeDetails` | boolean | `true` | Fetch each job detail page to extract salary, full description, contract type, and more. Adds one request per job. |
| `descriptionMaxLength` | integer | `0` | Truncate description/requirements/benefits to N characters. `0` = no truncation. |
| `compact` | boolean | `false` | Return core fields only — ideal for AI-agent and MCP workflows. |

### Input examples

**Irish public sector jobs** — all active vacancies from publicjobs.ie.

```json
{
  "boards": ["publicjobs.tal.net"],
  "maxItems": 0
}
````

**Keyword search across all Irish boards** — find engineering roles across all Irish public sector boards.

```json
{
  "boards": ["publicjobs.tal.net", "csoi.tal.net", "csorecruitment.tal.net", "dper.tal.net"],
  "query": "engineer",
  "maxItems": 0
}
```

**UK police jobs — multiple forces** — scrape all UK police boards in a single run.

```json
{
  "boards": [
    "btp.tal.net",
    "asp.tal.net",
    "greatermanchesterpolice.tal.net",
    "wiltshirepolice.tal.net",
    "policescotland-spacareers.tal.net",
    "policejobswales.tal.net"
  ],
  "maxItems": 0
}
```

**Royal Household quick preview** — first 10 results without full description text.

```json
{
  "boards": ["theroyalhousehold.tal.net"],
  "maxItems": 10,
  "includeDetails": false
}
```

**Compact output for AI pipelines** — core fields only, all active Irish public sector jobs.

```json
{
  "boards": ["publicjobs.tal.net"],
  "compact": true
}
```

**Custom board URL** — any Oleeo / TAL.net board not in the built-in list.

```json
{
  "startUrls": ["https://example.tal.net/candidate/jobboard/vacancy/3/adv/"],
  "maxItems": 0
}
```

### Sample output

```json
{
  "jobId": "185432",
  "title": "Senior Data Analyst",
  "organisation": "Revenue Commissioners",
  "location": "Dublin, Ireland",
  "vacancyType": "publicjobs",
  "contractType": "Permanent",
  "workingPattern": "Full-Time",
  "roleType": "Civil Service",
  "salary": "€57,921 - €74,087",
  "advertisedDate": "2025-04-10",
  "closingDate": "2025-05-02",
  "description": "The Revenue Commissioners are seeking a Senior Data Analyst to join the Analytics & Insights division...",
  "requirements": "A degree in a numerate discipline (statistics, mathematics, computer science or equivalent). Minimum 3 years' experience working with large datasets...",
  "benefits": "Competitive Civil Service salary. Flexible working arrangements. Access to the Civil Service pension scheme...",
  "referenceNumber": "REV-2025-DA-012",
  "organisationUrl": "https://www.revenue.ie",
  "organisationInfo": "Revenue is the Irish Tax and Customs administration. We collect taxes and duties, and implement customs controls...",
  "url": "https://publicjobs.tal.net/candidate/jobboard/vacancy/3/adv/?f_item_page_index=1&id=185432",
  "boardUrl": "https://publicjobs.tal.net/candidate/jobboard/vacancy/3/adv/",
  "sourceDomain": "publicjobs.tal.net",
  "detailFetched": true,
  "fetchedAt": "2025-04-22T09:14:33.000Z"
}
```

### How to find the board URL for any Oleeo site

1. Go to the target organisation's careers page
2. Click through to "Current Vacancies" or "Search Jobs"
3. You will land on a `*.tal.net` URL containing `/candidate/jobboard/vacancy/`
4. Copy that URL and use it as a `startUrl`

The `xf-` session hash in the URL (e.g. `xf-abc123`) is a server-side session token that rotates — the actor handles this automatically.

### Pricing

This actor uses Pay Per Event pricing:

| Event | Price |
|---|---|
| Actor start | $0.0015 |
| Per job listing | $0.003 |

A full scrape of publicjobs.ie (~340 jobs) costs approximately **$1.02**.
A full scrape of Greater Manchester Police (~24 jobs) costs approximately **$0.07**.

#### Example: recurring monitoring costs

These examples show the cost of running the scraper on a schedule. Costs scale linearly with the number of jobs returned.

| Scenario | Boards | Jobs / run | Cost / run | Weekly (4×) | Daily (30×) |
|---|---|---:|---:|---:|---:|
| Single board — quick check | 1 | ~50 | $0.15 | $0.60 | $4.65 |
| Full publicjobs.ie | 1 | ~340 | $1.02 | $4.10 | $30.75 |
| All UK police boards (6) | 6 | ~150 | $0.45 | $1.82 | $13.65 |
| All 19 boards | 19 | ~800 | $2.40 | $9.62 | $72.15 |

Use `maxItems` to cap costs on large boards when you only need recent listings.

### FAQ

#### Can I scrape multiple boards in one run?

Yes. Use the `boards` input to select any combination of the 19 built-in boards. All boards run in parallel — a run covering all boards completes in roughly the same time as scraping one.

#### Do I need a proxy?

No. Oleeo / TAL.net boards are publicly accessible without authentication or bot protection. The actor uses plain HTTPS requests with no proxy required.

#### Can I search for specific job titles across all boards?

Yes. Set the `query` parameter (e.g. `"engineer"` or `"officer"`) and the actor will apply the keyword search on every selected board. The search covers vacancy titles, job descriptions, and main duties.

#### Does it work with any TAL.net board, not just the built-in list?

Yes. Pass any TAL.net job board listing URL as a `startUrl`. The URL typically contains `/candidate/jobboard/vacancy/`. The built-in `boards` list covers the most common UK and Irish public sector boards but is not exhaustive.

#### Can I integrate this actor with other apps?

Yes. This actor works with Apify's [integrations](https://apify.com/integrations?fpr=1h3gvi) to connect with tools like Zapier, Make, Google Sheets, Slack, and more. You can also use webhooks to trigger actions when a run completes.

#### Can I use this actor via the Apify API?

Yes. You can start runs, manage inputs, and retrieve results programmatically through the [Apify API](https://docs.apify.com/api/v2). Client libraries are available for JavaScript and Python.

#### Can I use this actor through an MCP Server?

Yes. Apify provides an [MCP Server](https://apify.com/apify/actors-mcp-server?fpr=1h3gvi) that lets AI assistants and agents call this actor directly. Use `compact: true` and `descriptionMaxLength` to keep payloads manageable for LLM context windows.

#### Is it legal to scrape Oleeo / TAL.net job boards?

This actor extracts publicly available job listings from Oleeo / TAL.net boards. Web scraping of public information is generally considered legal, but you should always review the target site's terms of service and ensure your use case complies with applicable laws and regulations, including GDPR where relevant.

#### Your feedback

If you have questions, need a feature, or found a bug, please [open an issue](https://apify.com/blackfalcondata/oleeo-scraper/issues?fpr=1h3gvi) on the actor's page. Your feedback helps us improve.

### You might also like

- [ITJobs.pt Jobs Scraper](https://apify.com/blackfalcondata/itjobs-scraper?fpr=1h3gvi) — Scrape itjobs.pt — Portugal's leading tech job board. Full job details, salary data, and company info.
- [eFinancialCareers Scraper](https://apify.com/blackfalcondata/efinancialcareers-scraper?fpr=1h3gvi) — Scrape efinancialcareers.com — the global job board for finance, banking, and fintech professionals.
- [Actiris Brussels Job Scraper](https://apify.com/blackfalcondata/actiris-scraper?fpr=1h3gvi) — Scrape all active job listings from actiris.brussels — official Brussels public employment service.
- [Arbetsformedlingen Job Scraper](https://apify.com/blackfalcondata/arbetsformedlingen-scraper?fpr=1h3gvi) — Scrape arbetsformedlingen.se (Platsbanken) — Sweden's official employment portal with 40+ fields.
- [Naukrigulf Scraper](https://apify.com/blackfalcondata/naukrigulf-scraper?fpr=1h3gvi) — Scrape naukrigulf.com — the leading job board for UAE, Saudi Arabia, Qatar, Kuwait, and the Gulf region.

### Getting started with Apify

New to Apify? [Create a free account with $5 credit](https://console.apify.com/sign-up?fpr=1h3gvi) — no credit card required.

1. Sign up — $5 platform credit included
2. Open this actor and configure your input
3. Click **Start** — export results as JSON, CSV, or Excel

Need more later? [See Apify pricing](https://apify.com/pricing?fpr=1h3gvi).

# Actor input Schema

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

Enter one or more board domain names from the built-in list. The scraper resolves each to its SERP URL automatically. Available: publicjobs.tal.net, csoi.tal.net, csorecruitment.tal.net, dper.tal.net, cais.tal.net, cymru-wales.tal.net, cabinetofficejobs.tal.net, fcdo.tal.net, scsrecruitment.tal.net, theroyalhousehold.tal.net, policescotland-spacareers.tal.net, btp.tal.net, asp.tal.net, wiltshirepolice.tal.net, greatermanchesterpolice.tal.net, policejobswales.tal.net, sps.tal.net, eurofound.tal.net, oleeo-jobs.tal.net

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

One or more Oleeo / TAL.net job board listing URLs to scrape. Use this for boards not in the list above. The URL typically contains /candidate/jobboard/vacancy/. You can pass the xf- session hash URL or the base URL without it; both work.

## `query` (type: `string`):

Filter jobs by keyword across all selected boards. Searches vacancy title, job description, and main duties. Leave empty to return all jobs.

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

Maximum total number of job listings to return across all boards. 0 = unlimited.

## `includeDetails` (type: `boolean`):

Fetch each job detail page to extract salary, full description, contract type, and other fields not shown on the listing page. Adds one request per job.

## `descriptionMaxLength` (type: `integer`):

Truncate description/requirements/benefits to N characters. 0 = no truncation.

## `compact` (type: `boolean`):

Return core fields only (jobId, title, organisation, location, salary, contractType, closingDate, url, sourceDomain). Ideal for AI-agent and MCP workflows.

## Actor input object example

```json
{
  "maxItems": 20,
  "includeDetails": true,
  "descriptionMaxLength": 0,
  "compact": false
}
```

# Actor output Schema

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

Structured job listings from Oleeo / TAL.net job boards

# 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 = {
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("blackfalcondata/oleeo-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 = { "maxItems": 20 }

# Run the Actor and wait for it to finish
run = client.actor("blackfalcondata/oleeo-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 '{
  "maxItems": 20
}' |
apify call blackfalcondata/oleeo-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Oleeo / TAL.net Job Board Scraper",
        "description": "Scrape any Oleeo (TAL.net) job board — publicjobs.ie, Royal Household, FCDO, Cabinet Office, Metropolitan Police, Police Scotland, Welsh Government, and 15+ more UK and Irish public sector boards.",
        "version": "0.1",
        "x-build-id": "BD0ELIKUzGAWZmlWt"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/blackfalcondata~oleeo-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-blackfalcondata-oleeo-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/blackfalcondata~oleeo-scraper/runs": {
            "post": {
                "operationId": "runs-sync-blackfalcondata-oleeo-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/blackfalcondata~oleeo-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-blackfalcondata-oleeo-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": {
                    "boards": {
                        "title": "Known Boards",
                        "type": "array",
                        "description": "Enter one or more board domain names from the built-in list. The scraper resolves each to its SERP URL automatically. Available: publicjobs.tal.net, csoi.tal.net, csorecruitment.tal.net, dper.tal.net, cais.tal.net, cymru-wales.tal.net, cabinetofficejobs.tal.net, fcdo.tal.net, scsrecruitment.tal.net, theroyalhousehold.tal.net, policescotland-spacareers.tal.net, btp.tal.net, asp.tal.net, wiltshirepolice.tal.net, greatermanchesterpolice.tal.net, policejobswales.tal.net, sps.tal.net, eurofound.tal.net, oleeo-jobs.tal.net",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Custom Board URLs",
                        "type": "array",
                        "description": "One or more Oleeo / TAL.net job board listing URLs to scrape. Use this for boards not in the list above. The URL typically contains /candidate/jobboard/vacancy/. You can pass the xf- session hash URL or the base URL without it; both work.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "query": {
                        "title": "Keyword Search",
                        "type": "string",
                        "description": "Filter jobs by keyword across all selected boards. Searches vacancy title, job description, and main duties. Leave empty to return all jobs."
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum total number of job listings to return across all boards. 0 = unlimited.",
                        "default": 0
                    },
                    "includeDetails": {
                        "title": "Include Detail Pages",
                        "type": "boolean",
                        "description": "Fetch each job detail page to extract salary, full description, contract type, and other fields not shown on the listing page. Adds one request per job.",
                        "default": true
                    },
                    "descriptionMaxLength": {
                        "title": "Description Max Length",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Truncate description/requirements/benefits to N characters. 0 = no truncation.",
                        "default": 0
                    },
                    "compact": {
                        "title": "Compact Output",
                        "type": "boolean",
                        "description": "Return core fields only (jobId, title, organisation, location, salary, contractType, closingDate, url, sourceDomain). Ideal for AI-agent and MCP workflows.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
