# Net-Empregos.pt Scraper: Portugal Jobs, Salaries and Employers (`santamaria-automations/net-empregos-pt-scraper`) Actor

Scrape job listings from Net-Empregos.com, Portugal's number-one job board. Returns title, company, location, Portuguese distrito, contract type, salary in EUR, experience level, education level, and full description.

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

## Pricing

Pay per event

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Net-Empregos.pt Scraper: Portugal Jobs, Salaries and Employers

Extract structured job listings from [Net-Empregos.com](https://www.net-empregos.com), Portugal's leading job board with over 59,000 active listings. Each result includes job title, company, Portuguese district (Lisboa/Porto/Braga/etc), job category, contract type under Portuguese employment law, salary in EUR, experience level, education requirements, and full description. Results are returned newest-first by default.

### What you get

- **Job fields**: title, job\_url, company\_name, company\_logo\_url, company\_profile\_url
- **Location**: location, country (`PT`), district (all 18 Portuguese distritos), city
- **Dates**: posted\_at\_text, posted\_at\_datetime (ISO 8601)
- **Employment**: employment\_type, contract\_type\_pt (Sem termo / Termo certo / Estagio profissional / Prestacao de servicos), job\_category (Informatica / Saude / Engenharia / etc)
- **Candidate requirements**: experience\_level (Sem experiencia / 1-3 anos / 3-5 anos / 5+ anos), education\_level (Licenciatura / Mestrado / 12 ano / etc)
- **Salary**: salary\_min, salary\_max, salary\_currency (`EUR`), salary\_period, salary\_text
- **Description**: description (snippet), description\_full (plain text), description\_html, description\_md
- **Contacts**: contact\_emails, contact\_phones, contact\_urls, apply\_url

### Input

| Field | Type | Description |
|---|---|---|
| `searchQueries` | string\[] | Portuguese keywords, e.g. `programador`, `enfermeiro`, `contabilista` |
| `searchUrls` | string\[] | Net-Empregos search URLs to crawl directly |
| `startUrls` | string\[] | Direct job detail page URLs |
| `location` | string | City or district filter: Lisboa, Porto, Braga, Coimbra |
| `contractType` | string | Filter by contract: any, sem-termo, termo-certo, estagio-profissional, prestacao-servicos |
| `remoteOnly` | boolean | Return only teletrabalho (remote work) listings |
| `sortBy` | string enum | Sort order. Net-Empregos.com only exposes its native newest-first order (no server-side sort dropdown or URL parameter). Only supported value: `"newest"` (default). Present for fleet consistency. |
| `includeJobDetails` | boolean | Fetch full job detail page per listing (description, salary, contacts). Charges `job-detail-result` PPE event |
| `includeCompanyDetails` | boolean | Include company logo and company profile URL from detail page |
| `maxResults` | integer | Total cap (default 10, max 5,000) |
| `maxResultsPerQuery` | integer | Cap per search query |

### Sample output

```json
{
  "_type": "job",
  "id": "15931638",
  "title": "Programador .NET & IA (M/F) - Figueira da Foz",
  "job_url": "https://www.net-empregos.com/15931638/programador-net-ia-m-f-figueira-da-foz/",
  "source_platform": "net-empregos.com",
  "company_name": "LogicPulse",
  "company_profile_url": "https://www.net-empregos.com/emprego-empresa-id/127635/logicpulse/",
  "company_logo_url": "https://upload.net-empregos.com/uploads/960f12.../logo-net-empregos.png",
  "location": "Coimbra",
  "country": "PT",
  "district": "Coimbra",
  "city": null,
  "posted_at_text": "2-9-2026",
  "posted_at_datetime": "2026-09-02T00:00:00Z",
  "employment_type": "full-time",
  "contract_type_pt": "Sem termo",
  "job_category": "Informatica ( Programacao )",
  "experience_level": "3-5 anos",
  "education_level": "Licenciatura",
  "salary_min": null,
  "salary_max": null,
  "salary_currency": null,
  "salary_period": null,
  "salary_text": null,
  "description": "A Logicpulse Technologies, empresa tecnologica portuguesa com presenca internacional...",
  "contact_emails": [],
  "contact_phones": [],
  "contact_urls": ["https://www.logicpulse.com/pt/recrutamento"],
  "apply_url": null,
  "search_query": "programador",
  "scraped_at": "2026-09-02T09:55:00Z"
}
```

### Pricing

Charges **3 PPE events** per run:

| Event | Cost | When |
|---|---|---|
| `actor-start` | $0.001 | Once per run |
| `job-serp-result` | $0.003 | Per job (SERP data only) |
| `job-detail-result` | $0.005 | Per job when `includeJobDetails: true` |

3 results with details = $0.001 + (3 x $0.005) = **$0.016**.

New Apify accounts include **$5 free monthly credit**: enough for several hundred jobs.

### Tips

- Use Portuguese keywords for best results: `programador`, `engenheiro`, `enfermeiro`, `gestor`, `comercial`
- Filter by district: `Lisboa`, `Porto`, `Braga`, `Coimbra`, `Aveiro`
- Enable `includeJobDetails: true` to get full descriptions, contract types, job category, company profile URLs, and salary data
- Net-Empregos uses ISO-8859-1 encoding internally; all output is delivered as proper UTF-8 with correct character encoding
- Results are returned newest-first by default (native sort order of net-empregos.com)

### Related Actors

- [Indeed Scraper](https://apify.com/santamaria-automations/indeed-scraper): Portugal + worldwide
- [LinkedIn Jobs Scraper](https://apify.com/santamaria-automations/linkedin-go-scraper): LinkedIn Portugal listings
- [InfoJobs Scraper](https://apify.com/santamaria-automations/infojobs-scraper): Spain's number-one job board (Iberian peer)
- [Computrabajo Scraper](https://apify.com/santamaria-automations/computrabajo-go-scraper): Latin America + Spain
- [HelloWork FR Scraper](https://apify.com/santamaria-automations/hellowork-fr-scraper): French job board (EU peer)
- [Reed UK Scraper](https://apify.com/santamaria-automations/reed-uk-go-scraper): UK jobs
- [StepStone DE Scraper](https://apify.com/santamaria-automations/stepstone-de-go-scraper): German jobs

### Issues

Found a bug or a field that is not populating? Open an issue at the [Issues tab](https://console.apify.com/actors/santamaria-automations/net-empregos-pt-scraper/issues).

### Support

Questions? Contact us at <contact@nanoscrape.com>.

# Actor input Schema

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

One or more job titles or keywords to search on Net-Empregos. Each entry runs as a separate search. Examples: 'programador', 'enfermeiro', 'contabilista'. Use Portuguese keywords for best results.

## `searchUrls` (type: `array`):

Direct Net-Empregos search URLs to crawl. Example: https://www.net-empregos.com/pesquisa-empregos.asp?chaves=programador

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

Direct Net-Empregos job detail page URLs to scrape. Example: https://www.net-empregos.com/15900688/farmaceutico-tecnico-de-farmacia/

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

Portuguese city or district to filter results. Examples: 'Lisboa', 'Porto', 'Braga', 'Coimbra'. Leave empty for all of Portugal.

## `contractType` (type: `string`):

Filter by Portuguese contract type. Select a specific type or leave as 'any' for all.

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

When enabled, only return jobs with remote work (teletrabalho) options.

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

How to order results. Net-Empregos.com only exposes a single native order (newest posted first) — the site has no sort dropdown or sort URL parameter. This field is present for fleet consistency; the sole supported value is 'newest'.

## `includeJobDetails` (type: `boolean`):

When enabled, fetches the full job detail page for each listing to populate description\_full, description\_html, description\_md, contract\_type\_pt, salary, experience\_level, education\_level, job\_category, company\_profile\_url, and contact fields. Charges the job-detail-result PPE event instead of job-serp-result.

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

Surface company logo URL and company profile URL from the job detail page. Requires a detail page fetch per listing.

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

Total cap across all search queries.

## `maxResultsPerQuery` (type: `integer`):

Maximum results per individual search keyword or URL.

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

Maximum number of parallel detail page fetches (when includeJobDetails=true).

## Actor input object example

```json
{
  "searchQueries": [
    "programador"
  ],
  "location": "Lisboa",
  "contractType": "any",
  "remoteOnly": false,
  "sortBy": "newest",
  "includeJobDetails": false,
  "includeCompanyDetails": false,
  "maxResults": 10,
  "maxResultsPerQuery": 10,
  "maxConcurrency": 5
}
```

# Actor output Schema

## `jobListings` (type: `string`):

Dataset containing scraped Net-Empregos Portuguese job listings. Each row includes title, company, company\_profile\_url, location, district, contract\_type\_pt, job\_category, salary, experience\_level, education\_level, and 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 = {
    "searchQueries": [
        "programador"
    ],
    "contractType": "any",
    "remoteOnly": false,
    "sortBy": "newest",
    "includeJobDetails": false,
    "includeCompanyDetails": false,
    "maxResults": 10,
    "maxResultsPerQuery": 10,
    "maxConcurrency": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("santamaria-automations/net-empregos-pt-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": ["programador"],
    "contractType": "any",
    "remoteOnly": False,
    "sortBy": "newest",
    "includeJobDetails": False,
    "includeCompanyDetails": False,
    "maxResults": 10,
    "maxResultsPerQuery": 10,
    "maxConcurrency": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("santamaria-automations/net-empregos-pt-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": [
    "programador"
  ],
  "contractType": "any",
  "remoteOnly": false,
  "sortBy": "newest",
  "includeJobDetails": false,
  "includeCompanyDetails": false,
  "maxResults": 10,
  "maxResultsPerQuery": 10,
  "maxConcurrency": 5
}' |
apify call santamaria-automations/net-empregos-pt-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,santamaria-automations/net-empregos-pt-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/a6WA3RLKgOzWhGOE1/builds/Ug2LFRneg3GXla4jB/openapi.json
