# Working Nomads Jobs Scraper: Salary & Companies (`deepmine/working-nomads-jobs-scraper`) Actor

Working Nomads jobs scraper for its whole public board: every remote job with title, company, category, job type, level, locations, salary (and a yearly USD figure), tags, apply link and description, plus each company's website, LinkedIn, X, founded year, hiring regions and benefits.

- **URL**: https://apify.com/deepmine/working-nomads-jobs-scraper.md
- **Developed by:** [DeepMine](https://apify.com/deepmine) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.79 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Working Nomads Jobs Scraper: Salary & Companies

Working Nomads scraper: get every job on Working Nomads' public board, or the ones for your keywords, categories and countries, with salary (and a yearly US-dollar figure), job type, level, locations, skill tags, apply link and the full description, plus each company's website, LinkedIn, X, founded year, hiring regions, remote policy, about text and benefits.

| 💼 Title | 🏢 Company | 📍 Location | 💰 Salary | 🕒 Job Type | 📅 Posted |
|---|---|---|---|---|---|
| Software Engineer 4 - TV Product UI | Netflix | USA | USD 250,000 - 413,000 per year | Full-time | 2026-10-23 |
| Principal Software Engineer - Search Infra - Elasticsearch | Elastic | Portugal | EUR 67,000 - 106,000 per year | Full-time | 2026-10-23 |
| Senior AI Research Scientist (Model-based RL) | Phaidra | UK | GBP 84,000 - 132,000 per year | Full-time | 2026-10-23 |

<sub>Collected 2026-10-23.</sub>

**$0.99 per 1,000 jobs** on the Starter plan ($1.18 Free, $0.89 Scale, $0.79 Business). The prefilled run (up to 50 jobs: the latest Working Nomads jobs, with company details) costs about $0.05.

It reads Working Nomads' own job search, the one its site uses, page by page as far as your search needs: every public job on the board (5,245 on 2026-10-23, the last 30 days), not just the 40 or so of its latest-jobs feed. Categories, job types, levels, the salary floor and the date are filtered on Working Nomads' side, so a narrow search reads only what it needs. Each company's Working Nomads page is read once per run for its details. No login, no browser, no cookies.

Want remote jobs from more boards in one list? [Remote Jobs Aggregator](https://apify.com/deepmine/remote-jobs-aggregator) searches Working Nomads' latest jobs together with Remote OK, Himalayas, We Work Remotely, Jobicy, Relomote and Arbeitnow.

### What you can do with it

- **Job-hunt remotely from anywhere**: `country` keeps the jobs open to a country's residents, including jobs for its region (Europe, EMEA, LATAM, APAC) and jobs open anywhere; `boardCategories`, `employmentTypes`, `seniority` and `postedWithinDays` narrow it down.
- **Benchmark remote pay**: open the **💰 With Salary** list (about half of Working Nomads' jobs publish pay), or sort the whole board by pay with `sortBy` `salary`. Every row with pay has its range as numbers plus `annualSalaryUsd`, one yearly US-dollar figure that compares across currencies and hourly or monthly pay.
- **Build company and lead lists**: the **🏢 Companies** view shows each hiring company's website, LinkedIn, founded year, headquarters, hiring regions, remote policy, open jobs and benefits.
- **Feed a job board, newsletter or Slack channel**: schedule a daily run with `postedWithinDays` set to 1 or 2 and send the rows on with `webhookUrl` or an Apify integration.

### Input

```json
{
  "keywords": ["python", "customer support"],
  "boardCategories": ["Development", "Customer Success"],
  "postedWithinDays": 7,
  "maxJobsPerKeyword": 50,
  "includeCompanyDetails": true
}
```

| Field | What it does |
|---|---|
| `keywords` | Words to search for, one per line: python, customer support, data analyst, figma. Each is its own search, matched on the job's title, tags, category and description (role words like design or sales on the title and tags only). Leave empty for the latest jobs of every kind. You pay per job delivered. |
| `searchUrl` | Optional. A search page from workingnomads.com: https://www.workingnomads.com/jobs?tag=python\&category=development\&location=usa, /remote-python-jobs, /remote-design-jobs-europe or /remote-jobs-that-pay-100k. Its tags, categories, locations, job types, levels, posted date and salary range become this run's filters, in the fields you leave empty, searched the way its site searches them: the same jobs its search lists. One URL per run. |
| `boardCategories` | Optional. Keep only jobs in these Working Nomads categories (Administration, Consulting, Customer Success, Design, Development, Education, Finance, Healthcare, Human Resources, Legal, Management, Marketing, Sales, System Administration, Writing). Leave empty for every category. |
| `postedWithinDays` | Keep only jobs posted in the last N days (Working Nomads lists the last 30 days); older ones cost nothing. 0 means any date. Handy for a daily or weekly scheduled run. |
| `maxJobsPerKeyword` | The jobs to keep per keyword (or in all, with no keyword), newest first. You pay per job, so this caps the cost per keyword. 0 means every job (its whole board: about 5,000). Default 100. |
| `includeCompanyDetails` | Read each company's Working Nomads page once per run: logo, website, LinkedIn, X, Facebook, Instagram, founded year, headquarters, hiring regions, remote policy, job counts, about and benefits. Same price; turn it off for a faster run. |
| `location` | More filters. Optional. Text the job's listed locations must contain: USA, Europe, UK, Canada, Latin America, Anywhere, Germany. Leave empty for every place (or use `country`, just below, for every job a country's residents can take). |
| `country` | More filters. Optional. A country you live in (United States, Germany, India, Brazil...): keeps the jobs open to its residents, including jobs open anywhere and jobs for its region (Europe, EMEA, LATAM, APAC, North America). Type Worldwide for only the jobs open to anyone, anywhere. Leave empty for every job. |
| `employmentTypes` | More filters. Optional. Keep only these job types (Working Nomads' full-time, part-time and freelance/contract). Leave empty for every type. |
| `seniority` | More filters. Optional. Keep only these levels (Working Nomads' entry, mid and senior; a job it gives none for counts by a clear title word). Leave empty for every level. |
| `minSalary` | More filters. Optional. Keep only jobs whose pay, as Working Nomads' yearly US-dollar figure (the top of the range, converted), is at least this. About half its jobs list pay; the rest are left out. 0 means no salary filter. |
| `maxSalary` | More filters. Optional. Keep only jobs whose yearly US-dollar pay (the top of the range) is at most this, as Working Nomads' own salary range filter does. Jobs without listed pay are left out. 0 means no top. |
| `sortBy` | More filters. Newest first, or the best-paid first (jobs with no listed salary after them). |
| `tags` | More filters. Optional. Keep only jobs that carry at least one of these Working Nomads skill tags: python, react, sql, salesforce, figma. Leave empty for every tag. |
| `benefits` | More filters. Optional. Keep only jobs whose description or tags mention every one of these words or phrases: equity, 401k, health insurance, 4 day week, async. Leave empty for every job. |
| `boardLocations` | More filters. Hidden in the form: a search URL's location filter, Working Nomads' own (USA also keeps jobs open Anywhere or in North America). Names: USA, UK, Europe, Latin America, APAC, EMEA, Germany... |
| `strictLocation` | More filters. Hidden in the form: with `boardLocations`, only jobs listing those places themselves (its 'strict location'). |
| `categories` | More filters. Hidden in the form: `boardCategories` (Working Nomads' own) does this. The engine's common categories. |
| `timezone` | More filters. Hidden in the form: Working Nomads lists no time zones. |
| `maxResults` | Advanced. Stop after this many jobs in total. You pay per job, so this caps the run's cost. |
| `startUrls` | Advanced. Hidden in the form: another way to give the search URL (`[{"url": "https://www.workingnomads.com/jobs?..."}]`); one per run. |
| `maxItems` | Advanced. Hidden in the form: the run's total, as other Working Nomads scrapers name it (sets `maxResults`, every job per keyword). |
| `includeDescription` | Advanced. The full job description as plain text. Same price either way; turn it off for smaller rows. |
| `includeDescriptionHtml` | Advanced. Also the board's description as HTML (links and lists kept), in descriptionHtml. Same price; rows get about twice as big. |
| `findContactEmails` | Advanced. For jobs whose description gives no email, look for one on the company's own website (confirmed from the company's name). Charged per job that gets an email this way ($); emails a description gives are always free. Slower. |
| `webhookUrl` | Advanced. Optional. At the end of the run, every job row is POSTed to this URL as JSON, 50 rows a request ({"runId", "batch", "batches", "items": \[...]}). A receiver that fails is reported in the run summary; the jobs stay in the dataset. |
| `webhookSecret` | Advanced. Optional. Sent with each webhook request in the X-Scraper-Secret header. |
| `proxyConfiguration` | Advanced. Apify Proxy (datacenter) by default; the boards' feeds are public, so it only spreads the requests over several IPs. Residential and SERP proxies are replaced with datacenter. Turn it off to connect directly. |
| `boards` | Advanced. Fixed to `workingnomads` (hidden in the form). |
| `fullBoard` | Advanced. Fixed on (hidden in the form): Working Nomads' whole public board, not its latest-jobs feed. |

A keyword, category or other list entry that is blank is refused by the form (and by the API with an error naming the field), so a stray empty line never starts a run.

### Output

One row per job, newest first (or best paid first). A job that several keywords find comes once, under the first keyword that found it. Working Nomads often lists one role once per country (the same title at the same company, a different job page): each is its own row.

Two datasets, both with the same rows:

- **💼 All Jobs** (default dataset). Views: **🌍 Working Nomads** (🖼️ Logo, 💼 Title, 🏢 Company, 📍 Location, 🕒 Job Type, 🎚️ Seniority, 🗂️ Category, 💰 Salary, 📅 Posted, 📝 Apply, 🔗 Job Page), then **📊 Overview**, **📈 Stats**, **📝 Details**, **📇 Contacts** and **🏢 Companies**.
- **💰 With Salary**: the delivered jobs that publish a salary, at no extra charge.

#### Output fields

In row order:

- `companyLogo`: the company's logo from its Working Nomads page.
- `title`: job title, as the employer wrote it.
- `company`: company name.
- `location`: where the job is open, as Working Nomads lists it: `USA`, `Europe`, `Canada, USA`, `Anywhere`.
- `locationDetails`: Working Nomads' own words on where, when it adds any: `USA, Canada, Ireland or UK only`, `CET (+/- 3 hours)`.
- `isWorldwide`: `true` when the job is open anywhere.
- `isRemote`: always `true`: Working Nomads lists remote jobs only.
- `isFeatured`: `true` for a featured (paid, pinned) listing.
- `employmentType`: `Full-time`, `Part-time` or `Contract` (its freelance/contract).
- `seniority`: `Entry-level`, `Mid-level` or `Senior`, from Working Nomads' level (or a clear title word when it gives none).
- `category`: the job's category in common words (Software Development, Operations, Sales...).
- `salary`: the pay the job lists, e.g. `USD 153,000 - 376,000 per year`. Empty when it lists none.
- `salaryMin`: the lowest pay in the range, as a number.
- `salaryMax`: the highest pay in the range, as a number.
- `salaryCurrency`: ISO currency code, e.g. `USD`, `EUR`, `CAD`, `GBP`, `PLN`.
- `salaryPeriod`: `year`, `month`, `day` or `hour`.
- `salaryText`: the pay exactly as Working Nomads prints it (`$153k-$376k per year`), also when it isn't a plain range.
- `annualSalaryUsd`: Working Nomads' yearly US-dollar figure for that pay (the top of the range, converted). `minSalary` and `sortBy` use it.
- `postedAt`: when the job was posted on Working Nomads, in UTC (`2026-10-23T11:19:01Z`).
- `expiresAt`: empty: Working Nomads gives no end date.
- `jobUrl`: the job's page on Working Nomads.
- `applyUrl`: where to apply: the employer's own application link (its ATS), else the Working Nomads page.
- `contactEmail`: the email to apply to, or one the description gives (or, with `findContactEmails`, the company's website).
- `contactEmailSource`: the page the email was found on.
- `companyWebsite`: the company's own website, from its Working Nomads page (or found by `findContactEmails`).
- `companyUrl`: the company's page on Working Nomads.
- `companySlug`: the company's id on Working Nomads.
- `companyLinkedIn`: the company's LinkedIn page.
- `companyTwitter`: the company's X (Twitter) account.
- `companyFacebook`: the company's Facebook page.
- `companyInstagram`: the company's Instagram account.
- `companyFounded`: the year the company was founded.
- `companyHeadquarters`: where the company is based, when its page says.
- `hiringRegions`: where the company hires: `USA, Singapore`.
- `companyRemotePolicy`: `Fully remote`, `Remote-first` or `Remote-friendly`, by its page.
- `companyOpenJobs`: the company's open roles on Working Nomads now.
- `companyJobsPosted`: every job the company has posted on Working Nomads.
- `companyAbout`: the company's description from its page.
- `companyBenefits`: the employee benefits its page lists.
- `locations`: every location the job lists.
- `timezones`: empty: Working Nomads lists no time zones.
- `tags`: the job's skill tags (`python`, `machine learning`, `cloud`...).
- `boardCategory`: Working Nomads' own category (`Development`, `Management`, `Sales`...).
- `description`: the full job description as plain text (on by default).
- `descriptionHtml`: the description as HTML. Only with `includeDescriptionHtml`.
- `sources`: `Working Nomads`.
- `sourceUrls`: the job's page on Working Nomads.
- `jobId`: Working Nomads' job id.
- `keywords`: your keywords that found the job. Empty for a run without any.
- `scrapedAt`: when this run read the job (UTC).

The company keys (`companyLinkedIn` to `companyBenefits`) are there with `includeCompanyDetails` (on by default); a company whose page is gone or didn't answer has them empty, and its jobs still go out.

Example row (description and about text shortened):

```json
{
  "companyLogo": "https://www.workingnomads.com/media/logos/Figma.jpg",
  "title": "Data Platform Engineer",
  "company": "Figma",
  "location": "USA",
  "locationDetails": null,
  "isWorldwide": false,
  "isRemote": true,
  "isFeatured": false,
  "employmentType": "Full-time",
  "seniority": "Senior",
  "category": "Software Development",
  "salary": "USD 153,000 - 376,000 per year",
  "salaryMin": 153000,
  "salaryMax": 376000,
  "salaryCurrency": "USD",
  "salaryPeriod": "year",
  "salaryText": "$153k-$376k per year",
  "annualSalaryUsd": 376000,
  "postedAt": "2026-10-23T11:19:01Z",
  "expiresAt": null,
  "jobUrl": "https://www.workingnomads.com/jobs/data-platform-engineer-figma-1966358",
  "applyUrl": "https://boards.greenhouse.io/figma/jobs/6201407004?gh_jid=6201407004",
  "contactEmail": "accommodations-ext@figma.com",
  "contactEmailSource": "https://www.workingnomads.com/jobs/data-platform-engineer-figma-1966358",
  "companyWebsite": "https://www.figma.com/",
  "companyUrl": "https://www.workingnomads.com/remote-company/figma",
  "companySlug": "figma",
  "companyLinkedIn": null,
  "companyTwitter": "https://twitter.com/figma",
  "companyFacebook": "https://www.facebook.com/figmadesign",
  "companyInstagram": "https://www.instagram.com/figma/",
  "companyFounded": "2012",
  "companyHeadquarters": "San Francisco, California",
  "hiringRegions": "USA, Singapore",
  "companyRemotePolicy": "Remote-friendly",
  "companyOpenJobs": 71,
  "companyJobsPosted": 2506,
  "companyAbout": "Figma is a company that offers a cloud-based design and prototyping tool for digital designers and teams to build together. In the design services ind...",
  "companyBenefits": [
    "💰 Competitive salary & equity",
    "👩‍⚕️ Health, Dental, & Vision",
    "🛡️ Retirement with company contribution",
    "👶 Parental leave & fertility support",
    "🧠 Mental health and wellness benefits",
    "🏝️ Generous PTO",
    "🌟 Company recharge days",
    "📚 Learning & development stipend",
    "🏠 Work from home stipend",
    "📱 Cell phone reimbursement"
  ],
  "locations": [
    "USA"
  ],
  "timezones": null,
  "tags": [
    "platform engineer",
    "engineer",
    "python",
    "machine learning",
    "cloud"
  ],
  "boardCategory": "Development",
  "description": "Figma is growing our team of passionate creatives and builders on a mission to make design accessible to all. Figma’s platform helps teams bring ideas...",
  "descriptionHtml": null,
  "sources": [
    "Working Nomads"
  ],
  "sourceUrls": [
    "https://www.workingnomads.com/jobs/data-platform-engineer-figma-1966358"
  ],
  "jobId": "1966358",
  "keywords": null,
  "scrapedAt": "2026-10-23T21:52:57Z"
}
```

The run's **🧾 Run summary** (the OUTPUT record in the key-value store) shows how much of Working Nomads' board the run read (`workingNomadsBoard`: jobs matching the filters on its side, jobs read, whether it read the board to its end, company pages read, gone or failed), the jobs matched per keyword, and any error.

### Credit the boards

Keep each job's `sourceUrls` (a link to the original posting on Working Nomads) and name the board from `sources` when you show its jobs. Don't submit its jobs to third-party job sites such as Google Jobs, LinkedIn Jobs or Jooble as your own.

### When something goes wrong

- If Working Nomads' search doesn't answer, or answers in a format we can't read, the run ends as **failed** with the reason in the status message and the run summary, so you notice. If a later page fails, the jobs read so far go out and the run summary says the board wasn't read to its end.
- A company page that is gone or doesn't answer leaves that company's details empty; its jobs still go out, and the run summary counts them.
- A search with no matching job gives a clean empty result ("No job matched"), and costs nothing.
- When `maxResults` or your spending limit is reached, the run stops after delivering every job the limit pays for; you pay only for the jobs delivered.

### Pricing

You pay per job delivered: $0.99 per 1,000 jobs on the Starter plan ($1.18 Free, $0.89 Scale, $0.79 Business). Company details, salaries, descriptions and webhook delivery are included at the same price. No start fee. With `findContactEmails` on, a job that gets its contact email from the company's website adds $0.98 per 1,000 such jobs. Requests, retries, company pages, jobs left out by your filters and the 💰 With Salary list cost nothing.

Examples: the prefilled run (up to 50 jobs) about $0.05; 1,000 jobs $0.99; the whole board (about 5,000 jobs) about $5.

### FAQ

**How many jobs does it reach?** Every public job on Working Nomads: 5,245 on 2026-10-23, posted in the last 30 days, from 574 companies, in 15 categories (Development 1,368, Management 980, Sales 665...). Working Nomads keeps its older jobs and a few others for its paid Premium members (it advertises about 50,000); those need a Premium login, which this Actor doesn't use.

**Can I paste a search from workingnomads.com?** Yes: choose filters on its job search, copy the address and paste it into 🔗 searchUrl (or send `{"searchUrl": "...", "maxItems": 500}` through the API). Its tags are searched the way its site searches them (title:, AND, the title, description and company), so the run gets the jobs its search lists; the rows come newest first (its site orders a tag search by relevance).

**Is `annualSalaryUsd` the same as `salaryMax`?** For yearly US-dollar pay, yes. For other currencies and hourly or monthly pay it is Working Nomads' own conversion to US dollars a year, so you can compare and filter every job's pay on one scale.

**Does it collect personal data?** Rows hold jobs and companies, no recruiter profiles. A job that asks you to apply by email carries that address.

### Feedback

Missing a field or a filter? Open an issue on the Issues tab and we'll look at it. If the data helped you, a short review on this page helps other people find it.

# Actor input Schema

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

Words to search for, one per line: python, customer support, data analyst, figma. Each is its own search, matched on the job's title, tags, category and description (role words like design or sales on the title and tags only). Leave empty for the latest jobs of every kind. You pay per job delivered.

## `searchUrl` (type: `string`):

Optional. A search page from workingnomads.com: https://www.workingnomads.com/jobs?tag=python\&category=development\&location=usa, /remote-python-jobs, /remote-design-jobs-europe or /remote-jobs-that-pay-100k. Its tags, categories, locations, job types, levels, posted date and salary range become this run's filters, in the fields below you leave empty, searched the way its site searches them: the same jobs its search lists. One URL per run.

## `boardCategories` (type: `array`):

Optional. Keep only jobs in these Working Nomads categories. Leave empty for every category.

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

Keep only jobs posted in the last N days (Working Nomads lists the last 30 days); older ones cost nothing. 0 means any date. Handy for a daily or weekly scheduled run.

## `maxJobsPerKeyword` (type: `integer`):

The jobs to keep per keyword (or in all, with no keyword), newest first. You pay per job, so this caps the cost per keyword. 0 means every job (its whole board: about 5,000). Default 100.

## `includeCompanyDetails` (type: `boolean`):

Read each company's Working Nomads page once per run: logo, website, LinkedIn, X, Facebook, Instagram, founded year, headquarters, hiring regions, remote policy, job counts, about and benefits. Same price; turn it off for a faster run.

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

Optional. Text the job's listed locations must contain: USA, Europe, UK, Canada, Latin America, Anywhere, Germany. Leave empty for every place (or use 🌍 Open to candidates in, just below, for every job a country's residents can take).

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

Optional. A country you live in (United States, Germany, India, Brazil...): keeps the jobs open to its residents, including jobs open anywhere and jobs for its region (Europe, EMEA, LATAM, APAC, North America). Type Worldwide for only the jobs open to anyone, anywhere. Leave empty for every job.

## `employmentTypes` (type: `array`):

Optional. Keep only these job types (Working Nomads' full-time, part-time and freelance/contract). Leave empty for every type.

## `seniority` (type: `array`):

Optional. Keep only these levels (Working Nomads' entry, mid and senior; a job it gives none for counts by a clear title word). Leave empty for every level.

## `minSalary` (type: `integer`):

Optional. Keep only jobs whose pay, as Working Nomads' yearly US-dollar figure (the top of the range, converted), is at least this. About half its jobs list pay; the rest are left out. 0 means no salary filter.

## `maxSalary` (type: `integer`):

Optional. Keep only jobs whose yearly US-dollar pay (the top of the range) is at most this, as Working Nomads' own salary range filter does. Jobs without listed pay are left out. 0 means no top.

## `sortBy` (type: `string`):

Newest first, or the best-paid first (jobs with no listed salary after them).

## `tags` (type: `array`):

Optional. Keep only jobs that carry at least one of these Working Nomads skill tags: python, react, sql, salesforce, figma. Leave empty for every tag.

## `benefits` (type: `array`):

Optional. Keep only jobs whose description or tags mention every one of these words or phrases: equity, 401k, health insurance, 4 day week, async. Leave empty for every job.

## `boardLocations` (type: `array`):

Hidden in the form: a search URL's location filter (its own: USA also keeps jobs open Anywhere or in North America). Region or country names: USA, UK, Europe, Latin America, APAC, EMEA, Germany.

## `strictLocation` (type: `boolean`):

Hidden in the form: with Working Nomads locations, only jobs listing those places themselves (its 'strict location').

## `categories` (type: `array`):

Hidden in the form: 🗂️ Categories (Working Nomads' own) does this. The engine's common categories.

## `timezone` (type: `string`):

Optional UTC offset you work in, e.g. UTC-5, UTC+1, UTC+5:30. Keeps Himalayas jobs that accept it (the only board that lists time zones) and, from the other boards, only jobs open worldwide.

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

Stop after this many jobs in total. You pay per job, so this caps the run's cost.

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

Hidden in the form: another way to give the search URL (\[{"url": "https://www.workingnomads.com/jobs?..."}]); one per run.

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

Hidden in the form: the run's total, as other Working Nomads scrapers name it (sets Max results, every job per keyword).

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

The full job description as plain text. Same price either way; turn it off for smaller rows.

## `includeDescriptionHtml` (type: `boolean`):

Also the board's description as HTML (links and lists kept), in descriptionHtml. Same price; rows get about twice as big.

## `findContactEmails` (type: `boolean`):

For jobs whose description gives no email, look for one on the company's own website (confirmed from the company's name). Charged per job that gets an email this way ($); emails a description gives are always free. Slower.

## `webhookUrl` (type: `string`):

Optional. At the end of the run, every job row is POSTed to this URL as JSON, 50 rows a request ({"runId", "batch", "batches", "items": \[...]}). A receiver that fails is reported in the run summary; the jobs stay in the dataset.

## `webhookSecret` (type: `string`):

Optional. Sent with each webhook request in the X-Scraper-Secret header.

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

Apify Proxy (datacenter) by default; the boards' feeds are public, so it only spreads the requests over several IPs. Residential and SERP proxies are replaced with datacenter. Turn it off to connect directly.

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

Fixed to Working Nomads in this Actor. To search seven remote job boards at once, use Remote Jobs Aggregator.

## `fullBoard` (type: `boolean`):

Fixed on in this Actor: Working Nomads' whole public board, not its latest-jobs feed.

## Actor input object example

```json
{
  "keywords": [],
  "postedWithinDays": 0,
  "maxJobsPerKeyword": 50,
  "includeCompanyDetails": true,
  "minSalary": 0,
  "maxSalary": 0,
  "sortBy": "newest",
  "maxResults": 1000,
  "includeDescription": true,
  "includeDescriptionHtml": false,
  "findContactEmails": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "boards": [
    "workingnomads"
  ],
  "fullBoard": true
}
```

# Actor output Schema

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

No description

## `withSalaryUrl` (type: `string`):

No description

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

No description

# 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 = {
    "keywords": [],
    "maxJobsPerKeyword": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("deepmine/working-nomads-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 = {
    "keywords": [],
    "maxJobsPerKeyword": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("deepmine/working-nomads-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 '{
  "keywords": [],
  "maxJobsPerKeyword": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call deepmine/working-nomads-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,deepmine/working-nomads-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/lR17BcnRbsTlIqtJY/builds/XK3TmcpDqOwaX4pwH/openapi.json
