# Multi Job Board Scraper - LinkedIn, Indeed, Glassdoor & More (`veeronica/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/veeronica/multi-job-board-scraper-linkedin-indeed-glassdoor-more.md
- **Developed by:** [Veronica](https://apify.com/veeronica) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 7 total users, 4 monthly users, 100.0% 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, distance, and quick-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. **Naukri** — India. **BDJobs** — Bangladesh.

### Input example

```json
{
    "searchTerm": "software engineer",
    "location": "New York, NY",
    "sites": ["linkedin", "indeed", "glassdoor"],
    "maxResults": 25,
    "hoursOld": 168,
    "jobType": "fulltime",
    "isRemote": true,
    "countryIndeed": "usa",
    "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. |
| `countryIndeed` | string | Country for Indeed & Glassdoor (name or 2-letter code). Default `usa`. |
| `distance` | integer | Search radius in miles. Default `50`. |
| `offset` | integer | Skip the first N results (LinkedIn, Glassdoor, Naukri). |
| `easyApply` | boolean | Only quick-apply jobs. Default `false`. |
| `fetchExtraJobInfo` | boolean | Collect richer per-job data. LinkedIn & BDJobs open each job's detail page (LinkedIn: description, seniority, type, function, apply URL; BDJobs: description, skills); Naukri keeps the description already in its search response. Default `false`. |
| `linkedinCompanyIds` | array | Restrict LinkedIn to specific company IDs. |
| `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 = India, 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.

## `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.

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

Which job boards to scrape. Note the regional ones: <b>Bayt</b> = Middle East, <b>Naukri</b> = India, <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.

## `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).

## `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.

## `countryIndeed` (type: `string`):

Country for Indeed and Glassdoor searches. Accepts names or 2-letter codes (e.g. <code>usa</code>, <code>uk</code>, <code>canada</code>, <code>germany</code>, <code>india</code>, <code>uae</code>). Other boards ignore this. Defaults to the USA.

## `distance` (type: `integer`):

Radius around the location, in miles (Indeed, LinkedIn). Use <code>0</code> for the exact location only.

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

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

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

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

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

Collect richer per-job data the search results omit. LinkedIn and BDJobs 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; BDJobs adds the full description and skills. Naukri keeps the full description already in its search response (no extra request). Slower and more proxy usage on the boards that open detail pages.

## `linkedinCompanyIds` (type: `array`):

Restrict the LinkedIn search to specific companies by their numeric LinkedIn company ID (the <code>f\_C</code> value in a company's job-search URL). One per line.

## `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.

## `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",
  "location": "New York, NY",
  "sites": [
    "linkedin",
    "indeed",
    "glassdoor"
  ],
  "maxResults": 20,
  "isRemote": false,
  "jobType": "",
  "countryIndeed": "usa",
  "distance": 50,
  "easyApply": false,
  "fetchExtraJobInfo": false,
  "descriptionFormat": "markdown",
  "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",
    "location": "New York, NY"
};

// Run the Actor and wait for it to finish
const run = await client.actor("veeronica/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",
    "location": "New York, NY",
}

# Run the Actor and wait for it to finish
run = client.actor("veeronica/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",
  "location": "New York, NY"
}' |
apify call veeronica/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=veeronica/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": "7b4x1gme9STH9Bzgy"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/veeronica~multi-job-board-scraper-linkedin-indeed-glassdoor-more/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-veeronica-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/veeronica~multi-job-board-scraper-linkedin-indeed-glassdoor-more/runs": {
            "post": {
                "operationId": "runs-sync-veeronica-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/veeronica~multi-job-board-scraper-linkedin-indeed-glassdoor-more/run-sync": {
            "post": {
                "operationId": "run-sync-veeronica-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"
                        }
                    },
                    "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."
                    },
                    "sites": {
                        "title": "Job boards",
                        "type": "array",
                        "description": "Which job boards to scrape. Note the regional ones: <b>Bayt</b> = Middle East, <b>Naukri</b> = India, <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
                    },
                    "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
                    },
                    "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."
                    },
                    "countryIndeed": {
                        "title": "Country (Indeed & Glassdoor)",
                        "type": "string",
                        "description": "Country for Indeed and Glassdoor searches. Accepts names or 2-letter codes (e.g. <code>usa</code>, <code>uk</code>, <code>canada</code>, <code>germany</code>, <code>india</code>, <code>uae</code>). Other boards ignore this. Defaults to the USA.",
                        "default": "usa"
                    },
                    "distance": {
                        "title": "Search radius (miles)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Radius around the location, in miles (Indeed, LinkedIn). Use <code>0</code> for the exact location only.",
                        "default": 50
                    },
                    "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, and Naukri."
                    },
                    "easyApply": {
                        "title": "Quick apply only",
                        "type": "boolean",
                        "description": "Only return jobs you can apply to directly on the board (Indeed, LinkedIn, Glassdoor). 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 and BDJobs 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; BDJobs adds the full description and skills. Naukri keeps the full description already in its search response (no extra request). Slower and more proxy usage on the boards that open detail pages.",
                        "default": false
                    },
                    "linkedinCompanyIds": {
                        "title": "LinkedIn: target company IDs (advanced)",
                        "type": "array",
                        "description": "Restrict the LinkedIn search to specific companies by their numeric LinkedIn company ID (the <code>f_C</code> value in a company's job-search URL). One per line.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "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"
                    },
                    "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
