# All-in-One Jobs Scraper (`robertosan16/all-in-one-jobs-scraper`) Actor

Search LinkedIn and 12 more job sites at once by keyword and country: Dice, Welcome to the Jungle, StepStone, SEEK, Jobstreet, JobsDB, Reed, InfoJobs and Greenhouse, Lever, Ashby and Workday career sites. One format, no duplicates.

- **URL**: https://apify.com/robertosan16/all-in-one-jobs-scraper.md
- **Developed by:** [Robert Khairislamov](https://apify.com/robertosan16) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.00 / 1,000 jobs

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## All-in-One Jobs Scraper

**Search LinkedIn and 12 more job sites at once.** Enter keywords and countries, and get jobs from LinkedIn, Dice, Welcome to the Jungle, StepStone, SEEK, Jobstreet, JobsDB, Reed and InfoJobs, plus any Greenhouse, Lever, Ashby or Workday career site you add, in one format, without duplicates. Salary as numbers, full descriptions, apply links. **$1 per 1,000 jobs, no start fee.**

One search, many job sites: the Actor sends your keywords to every job board that covers your countries, reads the career sites of the companies you list, and merges everything into one clean table. The same job posted on two sites is saved once, and duplicates are free. Each job keeps its source, so you always know where it came from. Run it on a schedule to get **only new jobs** from all sites at once. No browser, no login.

### What can this all-in-one jobs scraper do?

- 🌍 **34 countries, 13 job sites**: pick countries, and the right sites are searched for each one (see the table below).
- 🔗 **LinkedIn included**: public LinkedIn job listings in every country, without login, with seniority, job function and number of applicants. The residential proxies LinkedIn needs are included in the price.
- 🔎 **One simple input**: keywords, countries and, for one country, a city. No site-specific settings needed.
- 🏢 **Company career sites by link**: paste any Greenhouse, Lever, Ashby or Workday job board link; the system is recognized automatically. Your keywords pick jobs by title.
- 🧹 **No duplicates**: the same job from two sites or two searches is saved once, and you do not pay for duplicates.
- 💰 **Salary as numbers** in the local currency: "$120k - $140k p.a.", "RM 3,800 – RM 5,000 per month" or "€75,000-85,000" become `min`, `max`, `currency` and `interval`.
- 🎛️ **Filters for all sites**: remote only, posted in the last N days, only jobs with a salary, title must contain, exclude words.
- 🆕 **Only new jobs since the last run**: one daily job alert across all sites.
- 🏷️ **Source of every job** in the `ats` field: `linkedin`, `dice`, `wttj`, `stepstone`, `seek`, `jobstreet`, `jobsdb`, `reed`, `infojobs`, `greenhouse`, `lever`, `ashby` or `workday`.

### Which sites cover which countries?

| Countries | Job sites |
|---|---|
| Every country in this table | LinkedIn |
| United States | Dice, Welcome to the Jungle |
| Germany | StepStone, Welcome to the Jungle |
| United Kingdom | Reed, Welcome to the Jungle |
| Spain | InfoJobs (a city that is a province, such as Madrid, searches that province), Welcome to the Jungle |
| Ireland, France, Belgium, Netherlands, Luxembourg, Italy, Canada | Welcome to the Jungle |
| Australia, New Zealand | SEEK |
| Malaysia, Singapore, Philippines, Indonesia | Jobstreet |
| Hong Kong, Thailand | JobsDB |
| Austria, Switzerland, Portugal, Poland, Sweden, Denmark, Norway, Finland, United Arab Emirates, Saudi Arabia, India, Japan, South Africa, Brazil, Mexico | LinkedIn |
| Any country | Greenhouse, Lever, Ashby and Workday career sites you add |

### What data does it extract?

| Field | Example |
|---|---|
| `ats` | dice (the site the job came from) |
| `title` | Human Capital and Personnel Data Analyst |
| `companyName` | Booz Allen Hamilton |
| `location` / `locations` | Springfield, Virginia, USA |
| `remote` / `workplaceType` | false / onsite |
| `employmentType` | full-time |
| `salary` | `{ "min": 77600, "max": 176000, "currency": "USD", "interval": "year" }` |
| `postedAt` / `validThrough` | 2026-09-18 / 2026-10-28 |
| `jobUrl` / `applyUrl` | https://www.dice.com/job-detail/b707fbf4-… |
| `descriptionText` / `descriptionHtml` | full job description |

Each site adds its own extra fields, such as `seniorityLevel`, `industries` and `applicants` on LinkedIn, `skills` on Dice, `benefits` on StepStone, `companyIndustry` and `companySize` on SEEK, Jobstreet and JobsDB, or `department` on company career sites.

### How to scrape jobs from many sites at once

1. Enter **job titles or keywords**, one search per line, for example `data analyst`.
2. Pick the **countries**. For a single country you can add a **city or region**, such as `Berlin` or `Sydney NSW`.
3. Optionally add **company career site links**, limit the **job sites**, or turn on **remote only**, **only jobs with a salary** or a **date range**.
4. Click **Start**. Download the jobs as JSON, CSV, Excel or HTML, or get them through the API.

#### Example input

```json
{
  "searchQueries": ["data analyst"],
  "countries": ["US", "DE", "AU", "SG"],
  "companies": ["https://boards.greenhouse.io/airbnb"],
  "postedWithinDays": 7,
  "onlyWithSalary": true
}
```

#### Example output

```json
{
  "ats": "dice",
  "company": "3ea34b07-fec0-5f54-a0e9-202d447a70d7",
  "companyName": "Booz Allen Hamilton",
  "jobId": "b707fbf4-050d-439f-9593-e4777bf0e0d7",
  "title": "Human Capital and Personnel Data Analyst",
  "location": "Springfield, Virginia, USA",
  "locations": ["Springfield, Virginia, USA"],
  "remote": false,
  "workplaceType": "onsite",
  "employmentType": "full-time",
  "salary": { "min": 77600, "max": 176000, "currency": "USD", "interval": "year", "text": "USD 77,600.00 - 176,000.00 per year", "source": "listing" },
  "postedAt": "2026-09-18T14:49:45.000Z",
  "updatedAt": "2026-09-27T08:10:08.000Z",
  "jobUrl": "https://www.dice.com/job-detail/b707fbf4-050d-439f-9593-e4777bf0e0d7",
  "applyUrl": "https://www.dice.com/job-detail/b707fbf4-050d-439f-9593-e4777bf0e0d7",
  "descriptionText": "Job Number: R0249209\n\nHuman Capital and Personnel Data Analyst\nThe Opportunity:…",
  "descriptionHtml": "<b>Job Number: R0249209</b>…",
  "skills": ["HR Analytics", "SQL", "Python", "Tableau", "Data Analysis"],
  "employerType": "Direct Hire",
  "validThrough": "2026-10-28T08:10:08.000Z",
  "scrapedAt": "2026-09-27T11:14:02.769Z"
}
```

In the same run, a StepStone job from Berlin ("€75,000-85,000" as EUR per year), a SEEK job from Melbourne (AUD) and a Jobstreet job from Singapore ("$3,800 – $4,500 per month" as SGD per month) arrive in the same format.

### Use cases

- **International recruiting**: one daily feed of new roles for a skill across the US, Europe and Asia-Pacific.
- **Job boards and aggregators**: fill a multi-country job board from one Actor and one schema.
- **Labor market research**: compare demand and pay for a role across countries and sites.
- **Sales and lead generation**: find companies hiring for a function in many markets at once.
- **AI agents**: give an agent one tool that searches every supported job site.

### How much does it cost?

You pay only for the jobs you get: **$1 per 1,000 jobs**. There is no start fee, and the residential proxies for LinkedIn are included. Duplicates and jobs filtered out by your settings are free. The Apify free plan covers about 5,000 jobs every month.

### Tips

- **Daily job alerts**: save your input as a task, turn on **Only new jobs since the last run** and add a schedule.
- **Big searches**: set **Maximum jobs per search or career site** to keep every site in the results.
- **Site-specific filters**: for filters that only one site has, such as SEEK classifications or StepStone contract types, use our single-site scrapers listed at the end of this page. They have the same output.
- **Errors per source**: if one site fails, the others still run. See the `SUMMARY` record in the run's key-value store.

### FAQ

**Why are there no LinkedIn jobs in remote searches?** LinkedIn does not show visitors who are not logged in which jobs are remote, so **Remote jobs only** leaves LinkedIn out. To find remote LinkedIn jobs, add `remote` to your keywords instead.

**Why is Indeed not included?** This Actor covers job sites with reliable public access. Indeed is not supported.

**How are duplicates found?** Two jobs are the same when title, company and city match after normalizing case, accents and punctuation. Jobs from the same search are never merged, so several openings with one title stay.

**Does it collect recruiter contact details?** No. There are no fields for recruiters' names, emails or phone numbers. The job description is saved as the employer wrote it.

**Is it legal to scrape these sites?** The Actor reads public job listings that the sites show to every visitor. Check the terms that apply to your use case.

### Integrations and API

- **Google Sheets, Slack, email and CRMs**: connect the Actor to Make, Zapier or n8n, or use the **Integrations** tab of this Actor. With **Only new jobs since the last run** and a schedule, each run sends only the new jobs.
- **Webhooks**: call your own URL when a run finishes, for example to load the new jobs into your database.
- **AI agents (MCP)**: add `https://mcp.apify.com?tools=robertosan16/all-in-one-jobs-scraper` as an MCP server in Claude, Cursor or VS Code, and your agent can search jobs with this Actor. Tell it how many jobs you need, so it sets **Maximum jobs in total**.
- **LangChain and LlamaIndex**: load the jobs into your LLM app with the Apify loaders.
- **API**: one request runs the Actor and returns the jobs, for runs of up to 5 minutes. Start longer runs with the `runs` endpoint and read the dataset when they finish.

```bash
curl -X POST "https://api.apify.com/v2/acts/robertosan16~all-in-one-jobs-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries":["data analyst"],"countries":["US","DE","AU"],"maxItems":30}'
```

### More job scrapers with the same output

- [Greenhouse Jobs Scraper](https://apify.com/robertosan16/greenhouse-jobs-scraper): every job of any company on Greenhouse, with salary ranges
- [Lever Jobs Scraper](https://apify.com/robertosan16/lever-jobs-scraper): every job of any company on Lever, including EU sites
- [Ashby Jobs Scraper](https://apify.com/robertosan16/ashby-jobs-scraper): startup jobs from Ashby job boards, with compensation
- [Workday Jobs Scraper](https://apify.com/robertosan16/workday-jobs-scraper): every job from any Workday career site, past the 2,000 search limit
- [Dice Jobs Scraper](https://apify.com/robertosan16/dice-jobs-scraper): US tech jobs from Dice.com, with skills and salaries
- [Welcome to the Jungle Jobs Scraper](https://apify.com/robertosan16/welcome-to-the-jungle-jobs-scraper): startup jobs in France, Europe, the UK and the US
- [SEEK Jobs Scraper](https://apify.com/robertosan16/seek-jobs-scraper): jobs in Australia and New Zealand, with salaries as numbers
- [StepStone Jobs Scraper](https://apify.com/robertosan16/stepstone-jobs-scraper): jobs in Germany, with benefits and English-language jobs
- [Jobstreet Jobs Scraper](https://apify.com/robertosan16/jobstreet-jobs-scraper): jobs in Malaysia, Singapore, the Philippines and Indonesia, with salaries as numbers
- [JobsDB Jobs Scraper](https://apify.com/robertosan16/jobsdb-jobs-scraper): jobs in Hong Kong and Thailand, with salaries as numbers
- [Reed Jobs Scraper](https://apify.com/robertosan16/reed-jobs-scraper): UK jobs from Reed.co.uk, with salaries, contract type and hybrid or remote
- [InfoJobs Jobs Scraper](https://apify.com/robertosan16/infojobs-jobs-scraper): jobs in Spain from InfoJobs.net, with salaries and remote policy
- [LinkedIn Jobs Scraper](https://apify.com/robertosan16/linkedin-jobs-scraper): public LinkedIn job listings without login, with full job details

Missing a field or a feature? Open an issue in the Issues tab and we will reply quickly.

# Actor input Schema

## `searchQueries` (type: `array`):

What to search, for example <code>data analyst</code> or <code>registered nurse</code>. Each line is a separate search on every chosen site.

## `countries` (type: `array`):

Where to search. LinkedIn covers every country here, and each country also goes to the other sites that cover it: the United States to Dice and Welcome to the Jungle; Germany to StepStone and Welcome to the Jungle; the UK to Reed and Welcome to the Jungle; Spain to InfoJobs and Welcome to the Jungle; Australia and New Zealand to SEEK; Malaysia, Singapore, the Philippines and Indonesia to Jobstreet; Hong Kong and Thailand to JobsDB; Canada and western Europe to Welcome to the Jungle.

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

For example <code>New York, NY</code>, <code>Berlin</code> or <code>Sydney NSW</code>. Used when you pick one country; Welcome to the Jungle always searches the whole country.

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

Search only these sites. Leave empty for every site that covers your countries.

## `companies` (type: `array`):

Links to company job boards on Greenhouse, Lever, Ashby or Workday, for example <code>https://boards.greenhouse.io/airbnb</code>. Jobs whose title contains your keywords are added; without keywords, all their jobs.

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

Keep only fully remote jobs. LinkedIn does not show visitors which jobs are remote, so it is left out of remote searches.

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

Keep jobs published in the last N days: 1 means today and yesterday. Leave empty or 0 for any date.

## `excludeKeywords` (type: `array`):

Skip jobs whose title contains any of these, for example <code>intern</code> or <code>senior</code>. Common word endings are included.

## `keywords` (type: `array`):

Keep only jobs whose title contains any of these words or phrases. Each job site searches descriptions too, so this makes results stricter. Add <code>*</code> for any ending: <code>data*</code>.

## `onlyWithSalary` (type: `boolean`):

Keep only jobs that state a pay range or rate.

## `onlyNew` (type: `boolean`):

For scheduled runs: save only jobs that were not seen in earlier runs of the same saved task. The first run saves all current jobs and remembers them. Jobs that did not match your filters are remembered too.

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

Open each job page for the full description (text and HTML) and every detail the site offers. Turn off for fast results with a short summary instead.

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

Stop after saving this many jobs. Leave empty or 0 for no limit. The example is kept small so the first run takes seconds.

## `maxItemsPerCompany` (type: `integer`):

Save at most this many jobs from each search or career site. Leave empty or 0 for no limit.

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

The Actor connects directly, which is fastest, and LinkedIn always goes through Apify residential proxies. If a site starts limiting requests, it switches to Apify Proxy automatically. Turn on a proxy here only to use it for every site from the start.

## Actor input object example

```json
{
  "searchQueries": [
    "python developer"
  ],
  "countries": [
    "US"
  ],
  "remoteOnly": false,
  "onlyWithSalary": false,
  "onlyNew": false,
  "includeDescription": true,
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Job postings with title, company, locations, salary, dates, description and links.

## `summary` (type: `string`):

Jobs found, matched and saved for each company, with errors.

# 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 = {
    "searchQueries": [
        "python developer"
    ],
    "countries": [
        "US"
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

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

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

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

```

## Python example

```python
from apify_client import ApifyClient

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

# Prepare the Actor input
run_input = {
    "searchQueries": ["python developer"],
    "countries": ["US"],
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": False },
}

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

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

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

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "python developer"
  ],
  "countries": [
    "US"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call robertosan16/all-in-one-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,robertosan16/all-in-one-jobs-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/87CojrF4QkSb4eaW7/builds/gSbfpB6TvyAfypLKe/openapi.json
