# Eurofirms Portugal Jobs Scraper: Ofertas de Emprego Change Feed (`getascraper/eurofirms-portugal-jobs-scraper`) Actor

Scrape public Eurofirms Portugal job offers (ofertas de emprego) by function, district, town, hours, offer type and posting date. Add vacancies, requirements, languages and printed salary, and monitor a saved search for new, changed and withdrawn offers. No login needed.

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

## Pricing

from $1.60 / 1,000 job offers

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

## 💼 Eurofirms Portugal Jobs Scraper: Ofertas de Emprego Change Feed

<table width="100%" style="margin-bottom:0">
<tr>
<td style="padding:24px 28px;background:#EEF3FB;border:1px solid #C5D6F1;border-top:4px solid #1F5FBF;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Every open Eurofirms job in Portugal, filtered your way and tracked between runs.</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Collect the public Eurofirms Portugal ofertas de emprego with vacancies, requirements, languages, schedule and printed salary. Schedule a saved search to see which offers are new, changed or withdrawn.</span>
</td>
</tr>
</table>
<table width="100%" style="margin-top:0">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C5D6F1;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#174A96">🎯 Filters the site has</span><br>
<span style="font-size:12px;color:#57534E">Function, district, town, hours, offer type and posting date, applied by Eurofirms itself.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C5D6F1;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#174A96">🧾 Full offer detail</span><br>
<span style="font-size:12px;color:#57534E">Vacancies, requirements, education, languages, weekly hours and closing date.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C5D6F1;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#174A96">💶 Printed pay, parsed</span><br>
<span style="font-size:12px;color:#57534E">Salary range, period and gross or net, only when the ad shows one.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C5D6F1;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#174A96">🔔 Change feed</span><br>
<span style="font-size:12px;color:#57534E">Label each offer NEW, UPDATED or REMOVED between scheduled runs.</span>
</td>
</tr>
</table>

Collect the public job listings on the Eurofirms Portugal job board (ofertas de emprego, trabalho temporário e seleção) with the filters the site offers and a few it does not. Each offer comes back as a clean row you can export to a spreadsheet, a database or an alert.

This Actor is not affiliated with or endorsed by Eurofirms. It reads only job listings that anyone can open without an account.

### 🔍 What does this Actor do?

The Eurofirms Portugal board lists around 1,300 open offers for logistics, industry, retail, hospitality, cleaning, driving and office roles. Reading them by hand means paging through 66 result pages and opening every offer.

This Actor does that for you:

- Narrows the board with the same function, district, town, hours, offer type and posting-date filters the site has.
- Adds filters the site lacks: words to include or exclude, client sector, languages, minimum salary, minimum vacancies and sorting.
- Opens each offer, when you ask, for the description, requirements, education, languages, vacancies, weekly hours, applicant count and closing date.
- Parses printed salaries into a minimum, maximum, period and gross or net value. Offers that say "salary to be defined" simply have no salary fields.
- Tracks a saved search between runs and labels every offer NEW, UPDATED, UNCHANGED or REMOVED.

### 🎯 What can I use it for?

- **Staffing and recruitment agencies:** watch a competitor's openings by district and function, and see which roles they fill and withdraw.
- **Labour-market analysts:** count open offers per district, function and client sector, and track pay where it is printed.
- **Job aggregators and newsletters:** feed new Portuguese offers into a board or a daily digest.
- **Inclusive hiring programmes:** pull the Eurofirms Foundation offers for people with a disability certificate.
- **Bulk hiring research:** sort out the offers that hire five, ten or more people at once.

### 🚀 How to use it

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#EEF3FB;border:1px solid #C5D6F1;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#1F5FBF;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Choose what you want</span><br>
<span style="font-size:12px;color:#57534E">Pick functions, districts, towns and the site filters, or leave everything open for the whole board.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EEF3FB;border:1px solid #C5D6F1;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#1F5FBF;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Run it</span><br>
<span style="font-size:12px;color:#57534E">Start with the default of 20 offers, then raise the limit or switch on full offer details.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EEF3FB;border:1px solid #C5D6F1;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#1F5FBF;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Export or monitor</span><br>
<span style="font-size:12px;color:#57534E">Download as CSV, Excel or JSON, or add a monitor name and schedule the run for a change feed.</span>
</td>
</tr>
</table>

### 📥 Input

All fields are optional. The defaults return the 20 newest offers on the board.

| Field | Type | Required | Description |
|---|---|---|---|
| Search words | text | No | Words searched by the Eurofirms site itself, for example `motorista`. Empty browses every open offer. |
| Job functions | array of text | No | Eurofirms job functions such as `Soldador/a` or `Motorista de camião`. A partial name like `motorista` expands to every matching function. |
| Districts (distritos) | array of enum | No | Only offers in these districts. Empty means all of Portugal, including Madeira and the Azores. |
| Towns and municipalities | array of text | No | Towns the board lists offers for, for example `Mem Martins` or `Funchal`. Can be combined with a district. |
| Offer type | enum | No | All offers, direct hire (Seleção), or Eurofirms Foundation offers for people with a disability certificate. |
| Working hours | enum | No | Any, full-time or part-time. |
| On-site or remote | enum | No | Any, on-site, or remote (teletrabalho). Remote is often an empty list. |
| Posted within | enum | No | Any time, last 24 hours, last 7 days or last 15 days. |
| No experience required | boolean | No | Only offers flagged as open to candidates without experience. |
| No formal education required | boolean | No | Only offers flagged as open to candidates without formal education. |
| Own vehicle | enum | No | Any, own vehicle required, or own vehicle not required. |
| Must mention any of | array of text | No | Keep an offer only if its title, summary or full text contains one of these words. Accents are ignored. |
| Must not mention | array of text | No | Drop an offer when its text contains any of these words, for example `noturno`. |
| Client sector | array of text | No | Keep offers whose ad names one of these client sectors, for example `Automóvel` or `Logística`. |
| Required languages | array of text | No | Keep offers whose language requirements mention one of these, for example `Inglês`. |
| Only offers with a salary | boolean | No | Keep only offers that print a salary figure. |
| Minimum monthly salary (EUR) | integer | No | Keep offers whose printed salary reaches this monthly amount. Yearly salaries are divided by 12. 0 turns it off. |
| Minimum open vacancies | integer | No | Keep offers hiring at least this many people. 1 turns it off. |
| Sort results | enum | No | Site order (newest first), posted date, highest salary, or title A to Z. |
| Maximum offers | integer | No | Stop after this many offers. Default 20, up to 1,500. |
| Maximum result pages per search | integer | No | Each page holds 20 offers. Default 5. |
| Add full offer details | boolean | No | Opens each offer page for description, requirements, education, languages, vacancies, weekly hours, applicants and closing date. |
| Monitor name | text | No | A stable name that turns on change tracking between runs. Letters, numbers, underscores and hyphens. |
| Also output unchanged offers | boolean | No | With a monitor name, also receive offers that did not change. |
| Eurofirms URLs | array of URLs | No | Optional search pages or single offer pages from jobs.eurofirms.com/pt/pt. When used, the search and site filters above are ignored. |
| Proxy configuration | object | No | Leave as is. The Actor connects directly and falls back to proxies by itself if needed. |

### 📊 Data table

Fields the offer does not show are left out of the row. Nothing is filled with placeholders.

| Field | Type | Description |
|---|---|---|
| `title` | text | Offer title as published. |
| `reference` | text | Eurofirms reference code, for example `107-001745`. |
| `jobUrl` | text | Link to the public offer page. |
| `offerId` | text | Eurofirms internal offer identifier. |
| `jobFunction` | text | Eurofirms job function (Função). Needs full offer details. |
| `location` | text | Town and district as one line. |
| `locality` | text | Town. |
| `province` | text | District (distrito). |
| `postedAt` | text | Publication date, `YYYY-MM-DD`. |
| `validThrough` | text | Last day the offer is open, `YYYY-MM-DD`. Needs full offer details. |
| `isNew` | boolean | True when the site marks the offer as new (Nova). |
| `directHire` | boolean | True for direct hire (Seleção) offers placed straight into the client company. |
| `disabilityCertificate` | boolean | True for Eurofirms Foundation offers for people with a disability certificate. |
| `salaryText` | text | Salary exactly as printed. Present only when the ad shows one. |
| `salaryMin / salaryMax` | number | Lowest and highest printed amount. |
| `salaryCurrency` | text | `EUR` when the amount is in euros. |
| `salaryPeriod` | text | `month` or `year`, as printed. |
| `salaryBasis` | text | `gross` or `net`, as printed. |
| `workSchedule` | text | Schedule text as published. Needs full offer details. |
| `workingHours` | text | `full-time` or `part-time` when the schedule says so. |
| `weeklyHours` | number | Weekly hours when the schedule states them. |
| `vacancies` | integer | Number of open positions. Needs full offer details. |
| `applicantsCount` | integer | Applicants registered so far. Needs full offer details. |
| `summary` | text | Short description shown on the results page. |
| `description` | text | Full description. Needs full offer details. |
| `requirements` | array of text | Requirements (Requisitos), one per line. |
| `education` | array of text | Education (Formação), one per line. |
| `languages` | array of text | Language requirements (Línguas), one per line. |
| `clientSector` | text | Sector the ad names for the client company, for example `Automóvel`. Present only when the ad names one. |
| `experienceNotRequired / educationNotRequired` | boolean | The site's own flags for openness to candidates without experience or formal education. |
| `changeType` | text | `NEW`, `UPDATED`, `UNCHANGED` or `REMOVED`. Present only when a monitor name is set. |
| `changedFields` | array of text | Which fields changed on an UPDATED offer. |
| `firstSeenAt` | text | When the monitor first saw the offer. |
| `sourceUrl` | text | The results page the offer came from. |
| `scrapedAt` | text | Collection time. |

**Example row (full offer details on):**

```json
{
  "title": "Empregado de Mesa (M/F) - Mealhada",
  "reference": "107-001745",
  "jobUrl": "https://jobs.eurofirms.com/pt/pt/mealhada/empregado-de-mesa---mealhada-107-001745",
  "jobFunction": "Empregado/a de mesa",
  "location": "Mealhada, Aveiro",
  "province": "Aveiro",
  "postedAt": "2026-10-14",
  "validThrough": "2026-10-29",
  "workingHours": "full-time",
  "weeklyHours": 40,
  "vacancies": 5,
  "applicantsCount": 0,
  "languages": ["Português falado e escrito corretamente", "Inglês falado e escrito corretamente."],
  "clientSector": "Restauração",
  "directHire": false,
  "scrapedAt": "2026-10-14T19:06:19.762Z"
}
```

### 💰 Pricing

You pay per offer saved. A run that finds no offers costs nothing, and there are no subscriptions or start fees. The default run of 20 offers is a small, quick test.

### ⭐ Enjoying Eurofirms Portugal Jobs Scraper: Ofertas de Emprego Change Feed?

<table width="100%" style="display:table;width:100%">
<tr>
<td style="padding:20px 24px 14px;background:#EEF3FB;border:1px solid #C5D6F1;border-left:5px solid #1F5FBF;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">Skipping a daily check of 1,300 offers is worth a quick rating.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other recruiters and labour-market analysts find this Actor. Your feedback also tells us which filters to add next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#1F5FBF;border:1px solid #C5D6F1;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/eurofirms-portugal-jobs-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ❓ FAQ

#### Como ver as ofertas de emprego da Eurofirms em Portugal?

Leave the filters empty to get the newest offers, or pick districts, functions and the other filters, then start the run. The offers appear in the Output tab, ready to download as CSV, Excel or JSON.

#### Como receber só as ofertas de emprego novas da Eurofirms?

Type a monitor name, for example `lisboa-logistica`, set your filters, and put the run on an Apify schedule. The first run saves every match up to your limit and remembers it. Later runs return only NEW and UPDATED offers, plus REMOVED offers that Eurofirms has withdrawn. Use a different monitor name for each saved search.

#### Does it need a Eurofirms account?

No. The Actor reads the public listing and offer pages. It never asks for a login, password, cookie or API key, and it does not apply to jobs for you.

#### Why do most offers have no salary?

About 1 in 20 Eurofirms offers prints a salary. The rest say the salary is to be defined, so the salary fields are left out. Use "Only offers with a salary" to keep just the ones that show a figure.

#### Why does the remote filter return nothing?

Eurofirms rarely marks offers as teleworking. When none are marked, a remote search is an empty run, which is a correct answer and costs nothing.

#### Can I send new offers to Slack, email or a spreadsheet?

Yes. Apify integrations and webhooks can forward each finished run to Slack, email, Google Sheets, Zapier, Make or your own endpoint, so a scheduled change feed becomes an alert without any code.

#### How long does a run take?

A plain list of 20 offers finishes in a few seconds. Full offer details open one page per offer: 100 detailed offers take under a minute, and the complete board of about 1,300 offers with full details takes around ten minutes. The Actor keeps the number of parallel requests low on purpose.

#### What are the "Must mention" and "Client sector" filters based on?

They read the offer page, so the Actor opens it automatically for each candidate. Client sector is the sector the ad itself names, for example "empresa do Setor Automóvel". Offers that name no sector cannot match a sector filter.

### 🔗 Other actors

- [Net-Empregos Portugal Jobs Scraper: Vagas de Emprego, No Login](https://apify.com/getascraper/net-empregos-jobs-scraper) ↗ - Portuguese job offers from net-empregos.com by district, category and keyword.
- [Standvirtual Scraper: Used Cars Portugal, Prices & Mileage Data](https://apify.com/getascraper/standvirtual-cars-scraper) ↗ - Used car listings in Portugal with prices and mileage.
- [EURAXESS Jobs Scraper: PhD and Postdoc Positions Across Europe](https://apify.com/getascraper/euraxess-jobs-scraper) ↗ - Research jobs and fellowships across Europe.
- [Ireland Jobs Scraper: jobs.ie & IrishJobs.ie Combined + Salary](https://apify.com/getascraper/ireland-jobs-feed) ↗ - Irish job listings from two boards with salary data.
- [NoFluffJobs Scraper: Tech Jobs, Salaries and Skills, No Login](https://apify.com/getascraper/nofluffjobs-scraper) ↗ - Tech jobs with salary ranges and skills from Central Europe.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/eurofirms-portugal-jobs-scraper/changelog.md

# Actor input Schema

## `searchQuery` (type: `string`):

Words searched by the Eurofirms site itself (for example motorista or soldador). Leave empty to browse every open offer.

## `jobFunctions` (type: `array`):

Eurofirms job functions such as Operador/a de armazém, Soldador/a or Motorista de camião. A partial name like motorista expands to every matching function. Up to 12 entries.

## `provinces` (type: `array`):

Only offers in these districts. Leave empty for the whole of Portugal.

## `towns` (type: `array`):

Towns the board lists offers for, for example Mem Martins, Leiria or Funchal. Combine with a district to limit the match. Up to 12 entries.

## `offerType` (type: `string`):

Direct hire (Seleção) offers hire you straight into the client company. Eurofirms Foundation offers are for people with a disability certificate.

## `workingHours` (type: `string`):

Full-time or part-time schedule, as classified by the site.

## `workMode` (type: `string`):

Remote returns only offers flagged as teleworking, which is often an empty list.

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

Only offers published inside this window. The site supports 24 hours, 7 days and 15 days.

## `noExperienceRequired` (type: `boolean`):

Only offers the site flags as open to candidates without experience.

## `noEducationRequired` (type: `boolean`):

Only offers the site flags as open to candidates without formal education (sem estudos).

## `vehicle` (type: `string`):

Required keeps offers that need your own vehicle, not required keeps those that do not.

## `includeKeywords` (type: `array`):

Keep an offer only when its title, summary or full text contains at least one of these words (accents ignored). Needs the offer page, so it is fetched automatically for each candidate.

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

Drop an offer when its title, summary or text contains any of these words, for example noturno or estágio.

## `clientSectors` (type: `array`):

Keep offers whose ad names one of these client sectors, for example Automóvel, Logística or Restauração. Only offers that state a sector can match.

## `languages` (type: `array`):

Keep offers whose language requirements mention one of these, for example Inglês or Espanhol.

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

Most Eurofirms offers say salary to be defined. Turn this on to keep only the offers that print a figure.

## `minMonthlySalary` (type: `integer`):

Keep offers whose printed salary reaches this monthly amount (yearly salaries are divided by 12). Offers without a printed salary are dropped. 0 turns the filter off.

## `minVacancies` (type: `integer`):

Keep offers that hire at least this many people at once, useful for finding bulk hiring. 1 turns the filter off.

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

Applied to the results collected in this run. The site order is newest first.

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

Stop after this many offers. The whole board holds about 1,300 open offers.

## `maxPages` (type: `integer`):

Each page holds 20 offers. Raise it together with Maximum offers, or when refine filters reject many offers.

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

Opens every offer page to add the full description, requirements, education, languages, vacancies, weekly hours, applicant count, closing date and client sector. One extra request per offer.

## `monitorName` (type: `string`):

Give a stable name to track this search between runs. Each offer is then labelled NEW or UPDATED, and withdrawn offers are reported as REMOVED. Letters, numbers, underscores and hyphens only. Leave empty for a plain run.

## `includeUnchanged` (type: `boolean`):

With a monitor name set, unchanged offers are skipped by default. Turn this on to receive every offer with its change status.

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

Optional. Paste Eurofirms Portugal search pages or single offer pages (https://jobs.eurofirms.com/pt/pt/...). When used, the search and site filters above are ignored and only the refine filters apply.

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

Leave as is: the Actor connects directly and automatically falls back to Apify datacenter and then residential proxy if the site refuses a request. Set a proxy here only to force one.

## Actor input object example

```json
{
  "searchQuery": "",
  "jobFunctions": [],
  "provinces": [],
  "towns": [],
  "offerType": "any",
  "workingHours": "any",
  "workMode": "any",
  "postedWithin": "any",
  "noExperienceRequired": false,
  "noEducationRequired": false,
  "vehicle": "any",
  "includeKeywords": [],
  "excludeKeywords": [],
  "clientSectors": [],
  "languages": [],
  "onlyWithSalary": false,
  "minMonthlySalary": 0,
  "minVacancies": 1,
  "sortBy": "site",
  "maxItems": 20,
  "maxPages": 5,
  "includeDetails": false,
  "monitorName": "",
  "includeUnchanged": false,
  "startUrls": [],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (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 = {
    "searchQuery": "",
    "jobFunctions": [],
    "provinces": [],
    "towns": [],
    "offerType": "any",
    "workingHours": "any",
    "workMode": "any",
    "postedWithin": "any",
    "noExperienceRequired": false,
    "noEducationRequired": false,
    "vehicle": "any",
    "includeKeywords": [],
    "excludeKeywords": [],
    "clientSectors": [],
    "languages": [],
    "onlyWithSalary": false,
    "minMonthlySalary": 0,
    "minVacancies": 1,
    "sortBy": "site",
    "maxItems": 20,
    "maxPages": 5,
    "includeDetails": false,
    "monitorName": "",
    "includeUnchanged": false,
    "startUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/eurofirms-portugal-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 = {
    "searchQuery": "",
    "jobFunctions": [],
    "provinces": [],
    "towns": [],
    "offerType": "any",
    "workingHours": "any",
    "workMode": "any",
    "postedWithin": "any",
    "noExperienceRequired": False,
    "noEducationRequired": False,
    "vehicle": "any",
    "includeKeywords": [],
    "excludeKeywords": [],
    "clientSectors": [],
    "languages": [],
    "onlyWithSalary": False,
    "minMonthlySalary": 0,
    "minVacancies": 1,
    "sortBy": "site",
    "maxItems": 20,
    "maxPages": 5,
    "includeDetails": False,
    "monitorName": "",
    "includeUnchanged": False,
    "startUrls": [],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/eurofirms-portugal-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 '{
  "searchQuery": "",
  "jobFunctions": [],
  "provinces": [],
  "towns": [],
  "offerType": "any",
  "workingHours": "any",
  "workMode": "any",
  "postedWithin": "any",
  "noExperienceRequired": false,
  "noEducationRequired": false,
  "vehicle": "any",
  "includeKeywords": [],
  "excludeKeywords": [],
  "clientSectors": [],
  "languages": [],
  "onlyWithSalary": false,
  "minMonthlySalary": 0,
  "minVacancies": 1,
  "sortBy": "site",
  "maxItems": 20,
  "maxPages": 5,
  "includeDetails": false,
  "monitorName": "",
  "includeUnchanged": false,
  "startUrls": [],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call getascraper/eurofirms-portugal-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/eurofirms-portugal-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/b5lRBuWeQMrjSpmIt/builds/3ymGa1My0lDMr6hCV/openapi.json
