# Multi Job Board Scraper - LinkedIn, Indeed, Glassdoor & More (`vero-api/multi-job-board-scraper-linkedin-indeed-glassdoor-more`) Actor

Scrape jobs from LinkedIn, Indeed, Glassdoor, Bayt, Naukri & BDJobs in one run. Get titles, companies, salaries, full descriptions, and company details as one clean dataset. No login or proxy needed.

- **URL**: https://apify.com/vero-api/multi-job-board-scraper-linkedin-indeed-glassdoor-more.md
- **Developed by:** [Veronica](https://apify.com/vero-api) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 57 total users, 27 monthly users, 97.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 job listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

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

## How to integrate an Actor?

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

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

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

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

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

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

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

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

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

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

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


# README

## Multi Job Board Scraper

Multi Job Board Scraper **aggregates job listings from up to 6 job boards in a single run** — **LinkedIn, Indeed, Glassdoor, Bayt, Naukri, and BDJobs** — into **one clean, de-duplicated dataset** you can download as JSON, CSV, Excel, or XML. No coding, **no logins, no API keys**.

One search, every board. Type what you're looking for and where, pick your boards, click **Start**, and watch a unified dataset fill up with structured jobs from all of them at once.

### What data does it extract?

Every result is **one job listing**, in the same shape no matter which board it came from:

| Data | Details |
|---|---|
| 🌐 **Source** | which `site` the job came from, plus the `searchTerm` that surfaced it |
| 💼 **Job** | title, posting URL, direct apply URL, posting date, employment type, remote flag |
| 🏢 **Company** | nested `company` object: name, page, website, logo, banner, industry, size, revenue, description, address, CEO, rating, reviews |
| 📍 **Location** | formatted location plus structured city, state, and country |
| 💰 **Salary** | min/max, currency, and pay interval — listed by the board or parsed from the description; optionally normalized to annual |
| 🧰 **Extras** | skills, seniority level, job function, experience range, badges, and emails found in the description |
| 📝 **Description** | the full job description as Markdown, HTML, or plain text — your choice |

### How do I scrape multiple job boards?

1. **Say what you want** — enter *Search keywords* and a *Location*.
2. **Pick your boards** — choose any of LinkedIn, Indeed, Glassdoor, Bayt, Naukri, BDJobs.
3. **Narrow it down** *(optional)* — filter by date posted, job type, remote, and easy-apply.
4. **Set how many** — *Max results per board* controls how many jobs each board returns.
5. **Click Start** — then download the unified results from the **Storage** tab, or push them anywhere with integrations.

> Want several queries at once? Add them under **Multiple search terms** — results are merged and de-duplicated, and each job records which term found it.

#### Choosing boards

Most boards are global, but a few are regional — pick the ones that fit your market:

- **LinkedIn, Indeed, Glassdoor** — global. Set **Country** so Indeed and Glassdoor search the right site.
- **Bayt** — Middle East (scopes by **Country**; pick a Gulf/MENA country). **Naukri** — Gulf & MENA (scopes by **Country**; pick a Gulf/MENA country). **BDJobs** — Bangladesh.

### Input example

```json
{
    "searchTerm": "software engineer",
    "location": "New York, NY",
    "sites": ["linkedin", "indeed", "glassdoor"],
    "maxResults": 25,
    "hoursOld": 168,
    "jobType": "fulltime",
    "isRemote": true,
    "country": "us",
    "descriptionFormat": "markdown",
    "deduplicate": true
}
````

Run several queries in one go:

```json
{
    "searchTerms": ["AI engineer", "machine learning engineer"],
    "location": "Remote",
    "sites": ["linkedin", "indeed"],
    "maxResults": 50,
    "fetchExtraJobInfo": true
}
```

### Output example (abridged)

```json
{
    "id": "indeed-620a09117e853bdf",
    "site": "indeed",
    "title": "Senior Software Engineer",
    "url": "https://www.indeed.com/viewjob?jk=620a09117e853bdf",
    "applyUrl": "https://careers.example.com/job/12345",
    "company": {
        "name": "Example Corp",
        "url": "https://www.indeed.com/cmp/Example-Corp",
        "website": "https://www.example.com",
        "logo": "https://.../logo.png",
        "bannerPhoto": "https://.../banner.png",
        "industry": "Software Development",
        "employeeCount": "1,000 to 5,000",
        "revenue": "more than $1B (USD)",
        "description": "Example Corp builds…",
        "address": "350 5th Ave, New York, NY",
        "ceoName": "Jane Doe",
        "rating": 4.1,
        "reviewsCount": null
    },
    "location": { "formatted": "New York, NY", "city": "New York", "state": "NY", "country": "United States" },
    "isRemote": true,
    "postedDate": "2026-06-12",
    "jobType": ["Full-time"],
    "salary": { "min": 165000, "max": 210000, "currency": "USD", "interval": "yearly", "source": "direct" },
    "jobLevel": "Mid-Senior level",
    "jobFunction": "Engineering and Information Technology",
    "skills": ["Python", "AWS", "Kubernetes"],
    "experienceRange": null,
    "benefits": ["Actively Hiring"],
    "listingType": null,
    "emails": ["careers@example.com"],
    "searchTerm": "software engineer",
    "descriptionText": "## About the role\nWe're hiring…",
    "descriptionHtml": "<div>About the role…</div>"
}
```

### Input reference

| Field | Type | Description |
|---|---|---|
| `searchTerm` | string | Job title, skill, or company to search for. |
| `searchTerms` | array | Up to 5 queries to run in one go (merged + de-duplicated). Overrides `searchTerm`. |
| `location` | string | City, state, country, or `Remote`. |
| `sites` | array | Boards to scrape: `linkedin`, `indeed`, `glassdoor`, `bayt`, `naukri`, `bdjobs`. |
| `maxResults` | integer | Max jobs per board per term (1–1000). Default `20`. |
| `isRemote` | boolean | Return only remote roles. Default `false`. |
| `jobType` | string | `fulltime`, `parttime`, `contract`, `internship`, or `temporary`. Empty = any. |
| `hoursOld` | integer | Only jobs posted within the last N hours. |
| `country` | string | Country for Indeed, Glassdoor, BDJobs, Naukri & Bayt, as a 2-letter code from the dropdown (e.g. `us`, `ae`, `eg`). Default `us`. |
| `offset` | integer | Skip the first N results (LinkedIn, Glassdoor, Naukri, BDJobs, Bayt). |
| `easyApply` | boolean | Only easy-apply jobs (Indeed, LinkedIn, Glassdoor, Naukri, Bayt). Default `false`. |
| `fetchExtraJobInfo` | boolean | Collect richer per-job data. LinkedIn, Naukri, BDJobs & Bayt open each job's detail page (LinkedIn: description, seniority, type, function, apply URL; Naukri: type, function, industry, benefits, work arrangement, salary; BDJobs: description, skills; Bayt: description, apply URL, skills, type, industry, salary, company details). Default `false`. |
| `descriptionFormat` | string | `markdown`, `html`, or `text`. Default `markdown`. |
| `enforceAnnualSalary` | boolean | Convert all salaries to annual. Default `false`. |
| `deduplicate` | boolean | Drop duplicate roles within/across boards. Default `true`. |

### Why scrape multiple job boards?

- **Complete market coverage** — no single board has every job; aggregating finds far more.
- **Job-market research** — compare demand for roles and skills across boards and regions.
- **Recruiting & sourcing** — see who's hiring everywhere, with company details and contact emails.
- **Salary benchmarking** — gather pay ranges across boards, normalized to annual for easy comparison.

### Pricing

This Actor uses **pay-per-event** pricing: a small fee when a run starts, plus a fee per job delivered. You only pay for the listings you actually receive — *Max results per board* controls your spend.

### Notes

- Reads each board's **public** job listings — the same ones anyone can browse — so there's no login to set up.
- Boards run **concurrently** and each handles its own errors: if one board is unavailable, the others still deliver. A per-board summary is written to the run's key-value store (`RUN_SUMMARY`).
- **Residential proxies are used automatically.** LinkedIn and Glassdoor rate-limit datacenter IPs hard; on the Apify platform the Actor always routes through Apify Residential proxy.
- The same role often appears on several boards (and several times on one). **Remove duplicates** (on by default) keeps the first copy by title + company + city.
- **Reliability varies by board.** LinkedIn, Indeed, Glassdoor, and Bayt are the most dependable. Naukri and BDJobs are **best-effort** and may return fewer results depending on region and timing. Region-specific boards return the most when searched within their region (Bayt = Middle East, Naukri = Gulf & MENA, BDJobs = Bangladesh).

# Actor input Schema

## `searchTerm` (type: `string`):

The job title, skill, or company to search for — what you'd type into a job board's search box (e.g. <code>software engineer</code>, <code>registered nurse</code>, <code>product manager</code>). Use <b>Multiple search terms</b> below to run several queries in one go.

## `searchTerms` (type: `array`):

Optional — run several queries in one run. Results from each are merged and de-duplicated, and every job records which term surfaced it (the <code>searchTerm</code> field). Example: <code>\["AI engineer", "machine learning engineer"]</code>. Max 5. Cost scales with the number of terms. Leave empty to use the single <b>Search keywords</b> above.

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

Country for Indeed, Glassdoor, BDJobs, Naukri, and Bayt searches. Indeed and Glassdoor run per-country; BDJobs uses it to scope overseas listings (pick <b>Bangladesh</b> for domestic jobs); Naukri and Bayt scope by country and cover the Gulf/MENA region best (pick a Gulf/MENA country for the most results). LinkedIn ignores it.

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

City, state, country, or region to search in (e.g. <code>Austin, TX</code>, <code>London</code>, <code>Remote</code>). Leave empty to search broadly. For Indeed and Glassdoor, set <b>Country</b> below to match. Naukri combines it with <b>Country</b> to narrow to a city (e.g. <code>uae, dubai</code>); leave empty to search the whole country.

## `sites` (type: `array`):

Which job boards to scrape. Note the regional ones: <b>Bayt</b> = Middle East, <b>Naukri</b> = Gulf & MENA, <b>BDJobs</b> = Bangladesh.

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

Maximum job listings to scrape from each board, per search term (1–1000). Total ≈ this × number of boards × number of search terms.

## `jobType` (type: `string`):

Filter by employment type. Leave as <code>Any</code> to include all types. On Indeed this can't be combined with the date filter (the date filter takes priority).

## `hoursOld` (type: `integer`):

Only return jobs posted within the last N hours (e.g. <code>24</code> = last day, <code>72</code> = last 3 days, <code>168</code> = last week). Leave empty for any time.

## `descriptionFormat` (type: `string`):

How to format the job description text. <code>Markdown</code> is clean and readable; <code>HTML</code> preserves original styling; <code>Plain text</code> strips all markup.

## `offset` (type: `integer`):

Skip the first N results — useful for paging through a large result set across runs. Applies to LinkedIn, Glassdoor, Naukri, BDJobs, and Bayt.

## `isRemote` (type: `boolean`):

Return only jobs tagged as remote. On Indeed this can't be combined with the date filter below (the date filter takes priority).

## `easyApply` (type: `boolean`):

Only return jobs you can apply to directly on the board (Indeed, LinkedIn, Glassdoor, Naukri, Bayt). On Indeed this can't be combined with the date filter.

## `fetchExtraJobInfo` (type: `boolean`):

Collect richer per-job data the search results omit. LinkedIn, Glassdoor, Naukri, BDJobs, and Bayt open each job's detail page (an extra request per job): LinkedIn adds the full description, seniority, employment type, job function, company industry, and direct apply URL; Glassdoor adds the full description, skills, benefits, job type, experience range, company website, industry, size, revenue, headquarters, CEO, and review count; Naukri adds employment type, job function, company industry, benefits, work arrangement, and the salary range; BDJobs adds the full description and skills; Bayt adds the full description, apply URL, skills, employment type, company industry, the salary range, and company details. Slower and more proxy usage on the boards that open detail pages.

## `enforceAnnualSalary` (type: `boolean`):

Convert all salary figures to annual equivalents (hourly × 2080, monthly × 12, etc.) so salaries are comparable across jobs.

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

Drop the same role when it appears more than once (same title, company, and city) — within a board or across boards. The first copy seen is kept.

## Actor input object example

```json
{
  "searchTerm": "software engineer",
  "country": "us",
  "sites": [
    "linkedin",
    "indeed",
    "glassdoor"
  ],
  "maxResults": 20,
  "jobType": "",
  "descriptionFormat": "markdown",
  "isRemote": false,
  "easyApply": false,
  "fetchExtraJobInfo": false,
  "enforceAnnualSalary": false,
  "deduplicate": true
}
```

# Actor output Schema

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

One row per job listing.

# 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 = {
    "searchTerm": "software engineer",
    "country": "us"
};

// Run the Actor and wait for it to finish
const run = await client.actor("vero-api/multi-job-board-scraper-linkedin-indeed-glassdoor-more").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 = {
    "searchTerm": "software engineer",
    "country": "us",
}

# Run the Actor and wait for it to finish
run = client.actor("vero-api/multi-job-board-scraper-linkedin-indeed-glassdoor-more").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 '{
  "searchTerm": "software engineer",
  "country": "us"
}' |
apify call vero-api/multi-job-board-scraper-linkedin-indeed-glassdoor-more --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=vero-api/multi-job-board-scraper-linkedin-indeed-glassdoor-more",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Multi Job Board Scraper - LinkedIn, Indeed, Glassdoor & More",
        "description": "Scrape jobs from LinkedIn, Indeed, Glassdoor, Bayt, Naukri & BDJobs in one run. Get titles, companies, salaries, full descriptions, and company details as one clean dataset. No login or proxy needed.",
        "version": "1.0",
        "x-build-id": "88J36BpsdU7i3nnz4"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/vero-api~multi-job-board-scraper-linkedin-indeed-glassdoor-more/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-vero-api-multi-job-board-scraper-linkedin-indeed-glassdoor-more",
                "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/vero-api~multi-job-board-scraper-linkedin-indeed-glassdoor-more/runs": {
            "post": {
                "operationId": "runs-sync-vero-api-multi-job-board-scraper-linkedin-indeed-glassdoor-more",
                "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/vero-api~multi-job-board-scraper-linkedin-indeed-glassdoor-more/run-sync": {
            "post": {
                "operationId": "run-sync-vero-api-multi-job-board-scraper-linkedin-indeed-glassdoor-more",
                "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": {
                    "searchTerm": {
                        "title": "Search keywords",
                        "type": "string",
                        "description": "The job title, skill, or company to search for — what you'd type into a job board's search box (e.g. <code>software engineer</code>, <code>registered nurse</code>, <code>product manager</code>). Use <b>Multiple search terms</b> below to run several queries in one go."
                    },
                    "searchTerms": {
                        "title": "Multiple search terms (OR search)",
                        "type": "array",
                        "description": "Optional — run several queries in one run. Results from each are merged and de-duplicated, and every job records which term surfaced it (the <code>searchTerm</code> field). Example: <code>[\"AI engineer\", \"machine learning engineer\"]</code>. Max 5. Cost scales with the number of terms. Leave empty to use the single <b>Search keywords</b> above.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "country": {
                        "title": "Country",
                        "enum": [
                            "dz",
                            "ar",
                            "au",
                            "at",
                            "bh",
                            "bd",
                            "be",
                            "br",
                            "bg",
                            "ca",
                            "cl",
                            "cn",
                            "co",
                            "cr",
                            "hr",
                            "cy",
                            "cz",
                            "dk",
                            "ec",
                            "eg",
                            "ee",
                            "fi",
                            "fr",
                            "de",
                            "gr",
                            "hk",
                            "hu",
                            "in",
                            "id",
                            "iq",
                            "ie",
                            "il",
                            "it",
                            "jp",
                            "jo",
                            "kw",
                            "lv",
                            "lb",
                            "ly",
                            "lt",
                            "lu",
                            "my",
                            "mt",
                            "mx",
                            "ma",
                            "nl",
                            "nz",
                            "ng",
                            "no",
                            "om",
                            "pk",
                            "ps",
                            "pa",
                            "pe",
                            "ph",
                            "pl",
                            "pt",
                            "qa",
                            "ro",
                            "sa",
                            "sg",
                            "sk",
                            "sl",
                            "so",
                            "za",
                            "kr",
                            "es",
                            "se",
                            "ch",
                            "tw",
                            "th",
                            "tr",
                            "ua",
                            "ae",
                            "gb",
                            "us",
                            "uy",
                            "ve",
                            "vn",
                            "ye"
                        ],
                        "type": "string",
                        "description": "Country for Indeed, Glassdoor, BDJobs, Naukri, and Bayt searches. Indeed and Glassdoor run per-country; BDJobs uses it to scope overseas listings (pick <b>Bangladesh</b> for domestic jobs); Naukri and Bayt scope by country and cover the Gulf/MENA region best (pick a Gulf/MENA country for the most results). LinkedIn ignores it.",
                        "default": "us"
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "City, state, country, or region to search in (e.g. <code>Austin, TX</code>, <code>London</code>, <code>Remote</code>). Leave empty to search broadly. For Indeed and Glassdoor, set <b>Country</b> below to match. Naukri combines it with <b>Country</b> to narrow to a city (e.g. <code>uae, dubai</code>); leave empty to search the whole country."
                    },
                    "sites": {
                        "title": "Job boards",
                        "type": "array",
                        "description": "Which job boards to scrape. Note the regional ones: <b>Bayt</b> = Middle East, <b>Naukri</b> = Gulf & MENA, <b>BDJobs</b> = Bangladesh.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "linkedin",
                                "indeed",
                                "glassdoor",
                                "bayt",
                                "naukri",
                                "bdjobs"
                            ],
                            "enumTitles": [
                                "LinkedIn",
                                "Indeed",
                                "Glassdoor",
                                "Bayt",
                                "Naukri",
                                "BDJobs"
                            ]
                        },
                        "default": [
                            "linkedin",
                            "indeed",
                            "glassdoor"
                        ]
                    },
                    "maxResults": {
                        "title": "Max results per board",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum job listings to scrape from each board, per search term (1–1000). Total ≈ this × number of boards × number of search terms.",
                        "default": 20
                    },
                    "jobType": {
                        "title": "Job type",
                        "enum": [
                            "",
                            "fulltime",
                            "parttime",
                            "contract",
                            "internship",
                            "temporary"
                        ],
                        "type": "string",
                        "description": "Filter by employment type. Leave as <code>Any</code> to include all types. On Indeed this can't be combined with the date filter (the date filter takes priority).",
                        "default": ""
                    },
                    "hoursOld": {
                        "title": "Posted within (hours)",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Only return jobs posted within the last N hours (e.g. <code>24</code> = last day, <code>72</code> = last 3 days, <code>168</code> = last week). Leave empty for any time."
                    },
                    "descriptionFormat": {
                        "title": "Description format",
                        "enum": [
                            "markdown",
                            "html",
                            "text"
                        ],
                        "type": "string",
                        "description": "How to format the job description text. <code>Markdown</code> is clean and readable; <code>HTML</code> preserves original styling; <code>Plain text</code> strips all markup.",
                        "default": "markdown"
                    },
                    "offset": {
                        "title": "Results offset",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Skip the first N results — useful for paging through a large result set across runs. Applies to LinkedIn, Glassdoor, Naukri, BDJobs, and Bayt."
                    },
                    "isRemote": {
                        "title": "Remote jobs only",
                        "type": "boolean",
                        "description": "Return only jobs tagged as remote. On Indeed this can't be combined with the date filter below (the date filter takes priority).",
                        "default": false
                    },
                    "easyApply": {
                        "title": "Easy apply only",
                        "type": "boolean",
                        "description": "Only return jobs you can apply to directly on the board (Indeed, LinkedIn, Glassdoor, Naukri, Bayt). On Indeed this can't be combined with the date filter.",
                        "default": false
                    },
                    "fetchExtraJobInfo": {
                        "title": "Fetch extra job info",
                        "type": "boolean",
                        "description": "Collect richer per-job data the search results omit. LinkedIn, Glassdoor, Naukri, BDJobs, and Bayt open each job's detail page (an extra request per job): LinkedIn adds the full description, seniority, employment type, job function, company industry, and direct apply URL; Glassdoor adds the full description, skills, benefits, job type, experience range, company website, industry, size, revenue, headquarters, CEO, and review count; Naukri adds employment type, job function, company industry, benefits, work arrangement, and the salary range; BDJobs adds the full description and skills; Bayt adds the full description, apply URL, skills, employment type, company industry, the salary range, and company details. Slower and more proxy usage on the boards that open detail pages.",
                        "default": false
                    },
                    "enforceAnnualSalary": {
                        "title": "Normalize salaries to annual",
                        "type": "boolean",
                        "description": "Convert all salary figures to annual equivalents (hourly × 2080, monthly × 12, etc.) so salaries are comparable across jobs.",
                        "default": false
                    },
                    "deduplicate": {
                        "title": "Remove duplicates",
                        "type": "boolean",
                        "description": "Drop the same role when it appears more than once (same title, company, and city) — within a board or across boards. The first copy seen is kept.",
                        "default": 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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
