# Jobbird Jobs Scraper — Netherlands Jobs, Salary & Company Data (`zapticx/jobbird-jobs-scraper`) Actor

Scrape Dutch job vacancies from Jobbird.com: title, company, company website, city, province, salary range, hours, contract type, education level, category, apply link and full description.

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

## Pricing

$0.90 / 1,000 job results

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

## 🇳🇱 Jobbird Jobs Scraper — Netherlands Jobs, Salary & Company Data

Collect Dutch job vacancies from [Jobbird](https://www.jobbird.com/nl), one of the Netherlands' job boards, as clean, structured data. Search by keyword, location and radius, or by Jobbird's own filters: category, contract type, hours per week, education level, posting date and employer type. For every vacancy you get the title, company, company website, city and province, the salary range in euros, hours, contract type, education level, how to apply, and the full job description in plain text, Markdown or HTML.

The Actor is built for recruiters, labour-market researchers, HR-tech and job-aggregation teams, and anyone who needs Dutch job data in a spreadsheet, database or AI pipeline. Export results as **CSV, Excel, JSON or XML**, send them to **Google Sheets**, or pull them through the **Apify API** into your own dashboards and automations (Zapier, Make, n8n, webhooks).

**Pricing: $0.90 per 1,000 jobs** ($0.0009 per job saved), with or without full details. No start fee, and Apify platform usage is included. You pay only for jobs saved to your dataset.

### How to use this Actor

- 👉 Register for a free Apify account — no credit card required.
- 🎉 Just click [Sign up free on Apify →](https://console.apify.com/sign-up?fpr=1h3gvi) and complete a quick signup.
- 💰 A free Apify account includes $5 in monthly credits — enough to test this Actor.
- ⏳ Start on Apify's free plan, with no commitment or upfront payment required.
- 💼 Open the Actor and enter your Jobbird search filters, or paste a supported Jobbird URL.
- ▶️ Click Start and export the results to JSON, CSV, Excel, or use them through the API.

### What data can you extract?

| Group | Data |
|---|---|
| Job | Title, Jobbird job ID and link, category, posted/refreshed date, promoted listing flag |
| Company | Company name and ID, company website, logo, who posted it (employer or agency) |
| Location | City, province, postcode and street address (when published), country |
| Salary | Minimum and maximum in euros, pay period when Jobbird states it |
| Employment | Hours per week, full-time/part-time, contract types, education level, languages |
| Description | Full job description as plain text, Markdown or HTML |
| Application | Apply link, whether you apply on Jobbird or elsewhere, WhatsApp apply number (when offered) |
| Metadata | Whether the job is still open, whether full details were loaded, scrape time |

### Why use this Jobbird scraper?

- **Recruiting and sourcing:** see which companies are hiring for a role in a region, with their website and apply link.
- **Salary benchmarking:** collect published salary ranges by job title, category, education level and location.
- **Lead generation:** find employers that are actively hiring, grouped by company, category and province.
- **Labour-market research:** track demand per category, region, contract type or working hours over time.
- **Job alerts and aggregation:** pull the newest vacancies on a schedule and push them into your own site, Slack or CRM.
- **AI and analytics:** feed full descriptions in Markdown or text into LLM workflows, classifiers and search indexes.

### Features

- **Keyword, location and radius search.** Use a Dutch city, town or postcode (e.g. `1012AB`), with a radius of 1–100 km.
- **Jobbird's own filters:** category, contract type, hours per week, education level, posted within (2, 7 or 30 days), employer type and application method. Sort by newest or most relevant.
- **Start URLs:** paste a Jobbird search, listing page (e.g. `/nl/vacatures/amsterdam/ict`) or individual job URLs.
- **Full job details (optional):** description, company website, province, category, languages, apply link and address where published.
- **Description formats:** plain text, Markdown, the original HTML, or all three.
- **Honest results:** if Jobbird has no job for your keywords, or does not recognise your location, the run saves nothing and tells you why. It does not hand back unrelated jobs from all over the country.
- **Deduplicated by Jobbird job ID** across pages and across several searches in one run.
- **maxResults is exact.** The run stops as soon as enough unique jobs are saved and does not open job pages it doesn't need.
- **Closed jobs are skipped** and counted in the run summary instead of being saved as empty records.
- **Salary is never invented:** a missing minimum, maximum or pay period stays empty.
- **No residential proxy needed:** Jobbird works with Apify's standard datacenter proxy.

### How to scrape jobbird.com

1. Open [Jobbird Jobs Scraper](https://apify.com/zapticx/jobbird-jobs-scraper) in Apify Console.
2. Type a job keyword, such as `verpleegkundige`, `chauffeur` or `software engineer`.
3. Optionally add a Dutch city, town or postcode, and a radius in kilometres.
4. Narrow the search with Jobbird's filters if you need to: category, contract type, hours per week, education level, posted within, employer type or application method.
5. Set `maxResults` to the number of jobs you want.
6. Keep `includeDetails` on when you need full descriptions, company websites and apply links. Turn it off for a quick list from search results.
7. Click **Start**.
8. Export the results as JSON, CSV, Excel or XML, send them to Google Sheets, or use them through the Apify API, Make, Zapier or n8n.

### How it works

1. You enter keywords, a location and filters, or paste Jobbird URLs.
2. The Actor loads Jobbird's search results for that search, 15 jobs per page.
3. It moves through the result pages until it has enough jobs or the results run out.
4. Every job is deduplicated by its Jobbird job ID, so a job found twice is saved once.
5. With **Include full job details** on, it opens each job page for the description, company website, province, apply link and other detail fields.
6. Each job is saved as one clean row in your dataset, and a run summary lists anything skipped and why.

### Input

| Field | What it does | Default |
|---|---|---|
| `query` | Keywords: job title, skill or company (Dutch or English). Empty = all jobs. | – |
| `location` | Dutch city, town or postcode. Empty = the whole Netherlands. Provinces are not supported as a location. | – |
| `radiusKm` | Distance around the location, 1–100 km. | 30 |
| `maxResults` | Maximum number of unique jobs to save (1–10,000). | 50 |
| `includeDetails` | Open each job page for the full description and extra fields. Turn off for a faster list from search results only. | on |
| `descriptionFormat` | `text`, `markdown`, `html` or `all`. | `text` |
| `categories` | Jobbird categories, e.g. ICT, Healthcare & medical, Logistics. | all |
| `contractTypes` | Full-time, part-time, temporary, internship, freelance (ZZP), side job and more. | all |
| `workingHours` | Hours-per-week ranges, e.g. 33–36 or 37+. | all |
| `educationLevels` | MBO, HBO, WO and more. | all |
| `postedWithin` | Any time, last 2, 7 or 30 days. | any time |
| `employerTypes` | Directly by the employer, or by a temp, secondment or recruitment agency. | all |
| `applicationMethods` | Apply on Jobbird, on the employer's website, via WhatsApp, or no cover letter required. | all |
| `sortBy` | `newest` or `relevance`. | `newest` |
| `startUrls` | Jobbird Netherlands URLs to scrape instead of the search fields. | – |
| `maxConcurrency` | Job pages loaded in parallel (1–10). | 5 |
| `proxyConfiguration` | Apify Proxy settings. The default datacenter proxy is enough. | datacenter |

#### Example: new ICT jobs around Utrecht

```json
{
  "query": "developer",
  "location": "Utrecht",
  "radiusKm": 30,
  "categories": ["ict"],
  "postedWithin": "7days",
  "maxResults": 200,
  "includeDetails": true,
  "descriptionFormat": "markdown"
}
```

#### Example: nursing vacancies, search results only (fast)

```json
{
  "query": "verpleegkundige",
  "maxResults": 500,
  "includeDetails": false
}
```

#### Example: start from Jobbird URLs

```json
{
  "startUrls": [
    { "url": "https://www.jobbird.com/nl/vacatures/amsterdam/ict" },
    { "url": "https://www.jobbird.com/nl/vacature?s=chauffeur&p=Rotterdam&rad=10" },
    { "url": "https://www.jobbird.com/nl/vacature/25905685-metroloog-meettechnicus-elektrische-meettechniek" }
  ],
  "maxResults": 100
}
```

Jobbird shows at most 7,500 jobs for a single search. To collect more, split your search into several narrower ones (for example one Start URL per category or city). Jobs that appear in more than one search are saved only once.

### Output

Each job is one flat row, easy to use in Excel or Google Sheets. Every column is always present and is empty (`null`) when Jobbird does not publish that value for the job. A real record, with the description shortened:

```json
{
  "id": 25811598,
  "url": "https://www.jobbird.com/nl/vacature/25811598-bim-engineer-installatietechniek-fulltime",
  "title": "BIM Engineer Installatietechniek (fulltime)",
  "company": "Workster",
  "companyId": 81301,
  "companyWebsite": "www.workster.nl",
  "companyLogoUrl": "https://res.cloudinary.com/hippo-hr/image/upload/s--LCO5-mQn--/c_lpad,h_200,w_200/f_png/q_auto:best/v1/jobbird/nl_nl/recruiterlogos/wy0nsnqt7gzpr1nskb6h.png?_a=BAAHWXH8",
  "city": "Zwolle",
  "province": "Overijssel",
  "postalCode": null,
  "streetAddress": "Koelmalaan 350",
  "country": "NL",
  "salaryMin": 3050,
  "salaryMax": 4100,
  "salaryCurrency": "EUR",
  "salaryPeriod": null,
  "hoursPerWeekMin": null,
  "hoursPerWeekMax": null,
  "hoursPerWeekText": null,
  "workingHoursType": null,
  "contractTypes": ["fulltime"],
  "educationLevelMin": "MBO",
  "educationLevelMax": "MBO",
  "category": "Techniek",
  "skills": [],
  "benefits": [],
  "languages": ["Dutch"],
  "employerType": "direct_employer",
  "isPremium": true,
  "isActive": true,
  "applyUrl": "https://www.workster.nl/vacatures/bim-engineer-installatietechniek-22e3f5?utm_medium=feed&utm_source=jobbird&utm_campaign=dubbeltest&utm_content=duplicaat",
  "applyOnJobbird": false,
  "whatsappApplyNumber": null,
  "postedAt": "2026-09-29T03:01:06+02:00",
  "descriptionText": "Word BIM Engineer bij Jansen Installatietechniek Wil jij als BIM Engineer werken aan innovatieve installatieprojecten waarbij techniek en digitalisering samenkomen? …",
  "descriptionMarkdown": null,
  "descriptionHtml": null,
  "detailsIncluded": true,
  "scrapedAt": "2026-09-30T00:39:28.651Z"
}
```

#### Key fields

| Field | Notes |
|---|---|
| `id`, `url` | Jobbird job ID and link. The ID is stable and used for deduplication. |
| `company`, `companyId`, `companyWebsite` | Employer or agency as shown on Jobbird. The website is published as the employer typed it, often without `https://`. |
| `city`, `province`, `postalCode`, `streetAddress` | Job location. Address fields are filled only when the employer publishes an address. |
| `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod` | Euros. `salaryPeriod` (`hour`, `week`, `four_weeks`, `month`, `year`) is filled only when Jobbird states it, which is uncommon. We never guess it from the amount. |
| `hoursPerWeekMin`, `hoursPerWeekMax`, `workingHoursType` | Weekly hours and full-time/part-time, when stated. |
| `contractTypes` | As labelled by Jobbird, e.g. `fulltime`, `parttime`, `permanent`, `sideline`, and `workAtHome` when working from home is possible. |
| `employerType` | Jobbird's label for who posted the job: `direct_employer`, `temp_agency`, `secondment_agency` or `recruitment_agency`. Not every job is labelled. |
| `applyUrl`, `applyOnJobbird` | Where to apply. External apply links are often tracking/redirect links from the employer's job feed. |
| `whatsappApplyNumber` | Only when the employer offers WhatsApp applications publicly on the job. |
| `postedAt` | When the job was posted or last refreshed on Jobbird. |
| `detailsIncluded` | `false` for search-result-only rows (`includeDetails` off). |

**Fields that need full job details** (`includeDetails: true`): `descriptionText`/`descriptionMarkdown`/`descriptionHtml`, `companyWebsite`, `postalCode`, `streetAddress`, `country`, `isActive`, `applyUrl`, `applyOnJobbird`. `province`, `category`, `languages`, `contractTypes` and `employerType` are usually also only available with details. Title, company, city, salary, hours, education and posting date usually come from the search results already.

In the Apify Console the dataset has three ready-made tables: **Jobs overview**, **Salary & conditions** and **Employers & applying**. The key-value store record `RUN_SUMMARY` shows how many jobs were saved, skipped as duplicates, or skipped as closed, plus any warnings.

### Use cases

- **Recruitment agencies:** monitor which Dutch employers are hiring for your specialisms and reach them before your competitors do.
- **Salary research:** build salary benchmarks per role, education level and region from published ranges.
- **Labour-market intelligence:** measure vacancy volume per category, province and contract type week by week.
- **Employer research:** see every open role of a company, its website and how candidates apply.
- **Workforce planning:** understand demand for MBO/HBO/WO profiles and part-time vs full-time work in your region.
- **Data pipelines and AI:** schedule daily runs sorted by newest, and load the Markdown descriptions into a vector database or LLM.

### Integrations and API

Run the Actor from the Apify Console, on a schedule, or from code:

- **Apify API** and the official **Python** and **JavaScript** clients
- **Zapier**, **Make** and **n8n** through Apify's integrations
- **Webhooks** when a run finishes
- **Google Sheets** export and **CSV/Excel/JSON** downloads

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("zapticx/jobbird-jobs-scraper").call(run_input={
    "query": "software engineer",
    "location": "Amsterdam",
    "radiusKm": 10,
    "maxResults": 100,
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(job["title"], job["company"], job["salaryMin"], job["salaryMax"])
```

### How much does it cost to scrape jobbird.com?

This Actor uses [pay-per-event](https://docs.apify.com/platform/actors/paid-actors/pay-per-event) pricing. You pay only for jobs saved to your dataset:

| Event | Price |
|---|---|
| Run start | $0 |
| Per job saved | $0.0009 |
| Per 1,000 jobs | $0.90 |

Apify platform usage (compute, proxy, storage) is included. The price is the same with `includeDetails` on or off.

**Never charged:** duplicate jobs, closed or removed jobs, job pages that fail to load, search pages, retries, and runs that save no jobs.

| Jobs | Cost |
|---|---|
| 10 | $0.009 |
| 25 | $0.0225 |
| 50 | $0.045 |
| 100 | $0.09 |
| 200 | $0.18 |
| 500 | $0.45 |
| 1,000 | $0.90 |

To control spending, set `maxResults`, or a maximum cost per run in the run options. The run stops once that limit is reached. Apify's free plan gives you $5 to spend in the Apify Store every month, which covers more than 5,000 jobs.

### FAQ

**Can I scrape full job descriptions?**
Yes. With **Include full job details** on (the default), each job includes its full description as plain text, Markdown, HTML or all three.

**Can I scrape more than 7,500 jobs?**
Jobbird shows at most 7,500 jobs per search. Add several narrower searches as Start URLs, for example one per category or city. Jobs found by more than one search are saved once. One run can save up to 10,000 jobs.

**Can I search by postcode?**
Yes. Enter a Dutch postcode such as `1012AB` as the location and choose a radius.

**Can I filter by salary?**
Not as a search filter: Jobbird's minimum-salary filter doesn't return reliable results, so it isn't offered. Export the data and filter on `salaryMin` / `salaryMax` instead.

**Are duplicate jobs charged?**
No. A job found more than once in the same run is saved and charged once. Each run is independent, though: a job saved in an earlier run is saved and charged again if a later run finds it.

**Are closed or removed jobs charged?**
No. They are skipped and counted in the run summary.

**Does the Actor need residential proxies?**
No. Apify's standard datacenter proxy (the default) works, and proxy usage is included in the price.

**Can I schedule this Actor to run daily?**
Yes, with Apify Schedules. For daily monitoring, sort by **Newest first** and set **Posted within** to the last 2 days.

**Can I export to CSV, Excel, JSON and Google Sheets?**
Yes. Download from the Output tab in any of these formats, or send results to Google Sheets through Apify's integrations.

### Troubleshooting

| Problem | What to do |
|---|---|
| No jobs returned | Jobbird has no job matching your keywords, or your filters are too narrow. The run's status message says so when the keywords or the location had no match. Try broader keywords or fewer filters. |
| Location not recognised | Use a Dutch city, town or postcode (e.g. `Den Haag` or `1012AB`). Provinces and unknown place names are not accepted by Jobbird. |
| Fewer results than expected | Jobbird may have fewer matching jobs than `maxResults`, some jobs may have closed during the run, or the search hit Jobbird's 7,500-job limit. Check `RUN_SUMMARY` in the run's key-value store. |
| Salary is empty | The employer did not publish a salary. The pay period is often not stated either, and it is never guessed. |
| A job was skipped as closed | The job was closed or removed on Jobbird before its page could be opened. Closed jobs are not saved and not charged. |

### Limitations

- Only public job data from Jobbird's Dutch site (jobbird.com/nl) is collected. No login, no candidate data.
- Which fields are filled varies per job: many employers don't publish a salary, hours, address or education level.
- Salary periods are often not stated by Jobbird. Amounts are then given without a period rather than guessed.
- Jobbird shows at most 7,500 jobs per search. Split large searches to reach more.
- Closed or removed jobs are skipped. A job can close between the search and the moment its page is opened.
- External apply links belong to employers or job-feed platforms and may redirect or expire.
- Filters work exactly as Jobbird applies them; for example, a contract-type filter only matches jobs where the employer stated a contract type.
- Changes to Jobbird's website can temporarily affect extraction. The Actor is monitored and maintained.

### Search keywords

jobbird scraper, jobbird jobs scraper, jobbird api, jobbird jobs api, apify jobbird, apify jobbird scraper, jobbird data extraction, jobbird job data, jobbird vacancies, jobbird vacatures, netherlands jobs scraper, dutch jobs scraper, dutch vacancies scraper, nederland vacatures scraper, job vacancy scraper, job listings scraper, job board scraper, job data extraction, netherlands job data, dutch job data, salary data scraper, salary jobs scraper, recruiter data scraper, employer data scraper, job descriptions scraper, job search scraper, job aggregation scraper, recruitment data scraper, labour market data netherlands, dutch labour market data, jobs netherlands, vacatures nederland, amsterdam jobs scraper, rotterdam jobs scraper, utrecht jobs scraper, eindhoven jobs scraper, job board api, recruitment api

***

Built and maintained by [Zapticx](https://www.zapticx.com/). Questions or a field you need? Open an issue on the Actor's Issues tab.

*Disclaimer: This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Jobbird, Jobster Media B.V. or YoungCapital Holding B.V.*

# Actor input Schema

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

Job title, skill or company, as you would type it on Jobbird (Dutch or English), e.g. 'verpleegkundige' or 'software engineer'. Leave empty to get all jobs that match your other filters. If Jobbird has no job for your keywords, the run saves nothing and says so. It never returns unrelated jobs.

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

Dutch city, town or postcode, e.g. 'Amsterdam', 'Den Haag' or '1012AB'. Leave empty for the whole Netherlands. Provinces are not supported as a location. If Jobbird does not recognise the place, the run stops and tells you instead of returning jobs from everywhere.

## `radiusKm` (type: `integer`):

Search radius around the location. Only used when a location is set.

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

The run stops once this many unique jobs are saved. Duplicates are not counted. Jobbird shows at most 7,500 jobs per search, so to collect more, split them across several searches (e.g. by category or location) with Start URLs.

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

Opens each job page to add the full description, company website, province, category, languages, apply link, address and more. Turn off for a faster, lighter list built from search results only. Many of those fields will then be empty.

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

How to save the job description (only when full job details are included). 'All' fills all three description columns.

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

Only jobs in these Jobbird categories (beroepsgroepen).

## `contractTypes` (type: `array`):

Only jobs with these contract types. Many Jobbird jobs do not state one ('Not stated').

## `workingHours` (type: `array`):

Only jobs in these weekly-hours ranges.

## `educationLevels` (type: `array`):

Only jobs asking for these education levels.

## `postedWithin` (type: `string`):

Only jobs posted or refreshed on Jobbird within this period.

## `employerTypes` (type: `array`):

Only jobs posted directly by the employer, or only by a given type of agency. Jobbird does not label every job, so this filter narrows results substantially.

## `applicationMethods` (type: `array`):

Only jobs with these application options.

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

Order in which Jobbird returns jobs. 'Newest first' is best for monitoring new vacancies.

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

Optional. Paste Jobbird Netherlands URLs instead of using the search fields: a search results page (jobbird.com/nl/vacature?...), a listing page (e.g. jobbird.com/nl/vacatures/amsterdam/ict or /nl/beroepsgroep/ict), or single job pages. When Start URLs are given, the search fields and filters above are ignored.

## `maxConcurrency` (type: `integer`):

How many job pages to load at the same time. The default is fast and gentle on Jobbird. Raising it rarely helps.

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

Jobbird works with Apify's standard datacenter proxy (the default). Residential proxies are not needed.

## Actor input object example

```json
{
  "query": "verpleegkundige",
  "location": "Utrecht",
  "radiusKm": 30,
  "maxResults": 20,
  "includeDetails": true,
  "descriptionFormat": "text",
  "postedWithin": "any",
  "sortBy": "newest",
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Every saved job in the overview table.

## `allFields` (type: `string`):

Every field of every saved job.

## `csv` (type: `string`):

All jobs as a CSV file for Excel or Google Sheets.

## `runSummary` (type: `string`):

Counts of saved, duplicate, removed and failed jobs, and any warnings.

# 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 = {
    "query": "developer",
    "maxResults": 20,
    "includeDetails": true,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("zapticx/jobbird-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 = {
    "query": "developer",
    "maxResults": 20,
    "includeDetails": True,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("zapticx/jobbird-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 '{
  "query": "developer",
  "maxResults": 20,
  "includeDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call zapticx/jobbird-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zapticx/jobbird-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/mibS8vOcJjwHHmBao/builds/I6lWNymzgzfxO4C86/openapi.json
