# Talent.com Scraper (`unfenced-group/talent-com-scraper`) Actor

Scrape job listings from Talent.com across 8 European countries. Keyword, location, job type, and daysOld filters included.

- **URL**: https://apify.com/unfenced-group/talent-com-scraper.md
- **Developed by:** [Unfenced Group](https://apify.com/unfenced-group) (community)
- **Categories:** Jobs, Developer tools, Automation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Talent.com Scraper
![Talent.com Scraper](https://i.imgur.com/MmkNuhB.png)



Extract structured job listings from [Talent.com](https://talent.com) across 8 European countries — Netherlands, Belgium, Germany, Switzerland, UK, Austria, Norway, and France. Built for HR tech teams, recruitment platforms, and data pipelines that need clean, machine-readable job data at scale.

---

### Why this scraper?

#### 🌍 Multi-country coverage
One actor covers 8 countries via a single `country` parameter. Switch between `nl`, `be`, `de`, `ch`, `uk`, `at`, `no`, and `fr` to target each country's Talent.com site with geo-accurate results.

#### 📝 Rich job data
Each result includes title, company, location (with GPS coordinates), salary range, contract type, remote status, category, and full job description in HTML, plain text, and Markdown formats.

#### 🔁 Repost detection
Built-in cross-run deduplication with a 90-day memory. Jobs that reappear after re-posting are flagged with `isRepost: true` and the original publish date — so your downstream pipeline never double-counts.

#### 📅 Date-based filtering
Filter by job age using the `daysOld` parameter. Only jobs indexed within the specified window are returned.

#### 🎯 Flexible input
Search by keyword and location, or supply your own Talent.com search URLs via `startUrls` for maximum control.

#### 💾 Export-ready output
Results download directly as JSON, CSV, or Excel from the Apify platform — no post-processing required.

---

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `country` | string | `nl` | Country to scrape: `nl`, `be`, `de`, `ch`, `uk`, `at`, `no`, `fr` |
| `searchQuery` | string | — | Job title or keyword, e.g. `developer`, `nurse` |
| `location` | string | — | City or region, e.g. `Amsterdam`, `Berlin` |
| `maxResults` | integer | `100` | Maximum number of results to return (1–10,000) |
| `daysOld` | integer | — | Only return jobs indexed within this many days |
| `jobType` | string | — | Filter by type: `fulltime`, `parttime`, `contractor`, `temporary`, `internship` |
| `fetchDetails` | boolean | `false` | Fetch each job's detail page for richer descriptions and salary data. Adds ~1–2 seconds per result. |
| `skipReposts` | boolean | `false` | Skip listings seen in previous runs |
| `startUrls` | array | — | Optional Talent.com search URLs to scrape directly |

---

### Output schema

Each result is a flat JSON object:

```json
{
    "id": "613485400125080276",
    "url": "https://nl.talent.com/view?id=613485400125080276",
    "applyUrl": "https://click.appcast.io/t/...",
    "title": "Senior Developer",
    "company": "QuantFlow",
    "location": "Amsterdam, North Holland, Netherlands",
    "city": "Amsterdam",
    "region": "North Holland",
    "country": "Netherlands",
    "latitude": 52.3676,
    "longitude": 4.9041,
    "description": "<p>We are looking for a senior developer...</p>",
    "descriptionText": "We are looking for a senior developer...",
    "descriptionMarkdown": "We are looking for a senior developer...",
    "salaryMin": 4500,
    "salaryMax": 6000,
    "salaryAvg": null,
    "salaryCurrency": "EUR",
    "salaryPeriod": "MONTH",
    "salaryText": "€4.500 - €6.000 per maand",
    "contractTypes": ["fulltime"],
    "isRemote": false,
    "category": "Information Technology",
    "language": "nl",
    "feedCode": "clickcast-appcast-li-nl-cpc",
    "isPPC": false,
    "publishDate": "2026-04-01",
    "publishDateISO": "2026-04-01",
    "scrapedAt": "2026-04-04T10:22:00.000Z",
    "contentHash": "a3f9b12c4d5e6f78",
    "summary": "Senior Developer · QuantFlow · Amsterdam, North Holland, Netherlands",
    "source": "nl.talent.com",
    "isRepost": false,
    "originalPublishDate": null,
    "originalUrl": null
}
````

***

### Examples

**Basic keyword search — Netherlands:**

```json
{
    "country": "nl",
    "searchQuery": "developer",
    "location": "Amsterdam",
    "maxResults": 100
}
```

**German full-time jobs with salary filtering — last 7 days:**

```json
{
    "country": "de",
    "searchQuery": "Softwareentwickler",
    "location": "Berlin",
    "jobType": "fulltime",
    "daysOld": 7,
    "maxResults": 500
}
```

**Belgium — skip previously seen listings:**

```json
{
    "country": "be",
    "searchQuery": "marketing manager",
    "location": "Brussels",
    "skipReposts": true,
    "maxResults": 200
}
```

**Direct URL scraping:**

```json
{
    "country": "nl",
    "startUrls": [
        { "url": "https://nl.talent.com/jobs?k=verpleegkundige&l=Rotterdam" }
    ],
    "maxResults": 50
}
```

**With detail pages — fuller descriptions and salary data:**

```json
{
    "country": "nl",
    "searchQuery": "accountant",
    "location": "Amsterdam",
    "maxResults": 50,
    "fetchDetails": true
}
```

***

### 💰 Pricing

**$1.50 per 1,000 results** — you only pay for successfully retrieved listings.
Failed retries and filtered reposts are never charged.

| Results | Cost |
|---------|------|
| 100 | ~$0.15 |
| 1,000 | ~$1.50 |
| 10,000 | ~$15.00 |
| 100,000 | ~$150.00 |

> Flat-rate alternatives typically charge $29–$49/month regardless of usage.
> At 10,000 results/month, this scraper costs significantly less with no commitment.

Use the **Max results** cap in the input to control your spend exactly.

***

### Performance

| Mode | Run size | Estimated time |
|------|----------|---------------|
| Standard | 50 results | ~15 seconds |
| Standard | 500 results | ~1–2 minutes |
| Standard | 5,000 results | ~10–15 minutes |
| With `fetchDetails` | 50 results | ~1–2 minutes |
| With `fetchDetails` | 500 results | ~10–15 minutes |

`fetchDetails` adds one residential proxy request per job, which increases both run time and proxy cost.

***

### Known limitations

- **Salary:** Structured salary data (`salaryMin`, `salaryMax`) is only populated when employers publish it explicitly. When unavailable, the scraper attempts to extract salary as plain text (`salaryText`) from the job description. Enable `fetchDetails` for the best salary coverage.
- **Description length:** List-page results include a description snippet (~300 characters). Enable `fetchDetails: true` to retrieve the full job description from the detail page.
- **Apply URL:** `applyUrl` is a click-tracking redirect provided by Talent.com. The final destination depends on the originating job board or employer site.
- **Date accuracy:** `publishDateISO` reflects the date Talent.com indexed the listing, not necessarily the original employer posting date.
- **Page limit:** Talent.com paginates in sets of ~19 results per page.

***

### Technical details

- **Source:** talent.com — multi-country job aggregator covering 75M+ monthly visitors
- **Memory:** 256 MB
- **Proxy:** Residential proxy with country pinning (matches the selected `country` input). Detail-page fetches (`fetchDetails: true`) use additional residential requests.
- **Repost storage:** KeyValueStore `talent-com-scraper-job-dedup`, 90-day TTL
- **Retry:** Automatic retry on network errors, exponential backoff, 3 attempts per request

***

### Additional services

Need a custom actor, additional filters, scheduled runs, or integration support?
Send an email to <info@unfencedgroup.nl> — we build on request.

***

*Built by [unfenced-group](https://apify.com/unfenced-group) · Issues? Open a ticket or send a message.*

# Actor input Schema

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

Country subdomain to scrape. Determines which Talent.com site is targeted and which proxy country is used.

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

Keyword(s) to search for, e.g. 'developer', 'nurse', 'marketing manager'.

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

City, region, or country to filter by, e.g. 'Amsterdam', 'Berlin', 'London'.

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

Maximum number of job listings to return.

## `daysOld` (type: `integer`):

Only return jobs indexed within this many days. Leave empty for all jobs.

## `jobType` (type: `string`):

Filter by employment type.

## `skipReposts` (type: `boolean`):

Skip jobs that have already been seen in previous runs (90-day memory).

## `fetchDetails` (type: `boolean`):

Fetch each job's detail page to retrieve the full description and salary data when available. Increases run time by roughly 1–2 seconds per result and raises proxy usage accordingly. Recommended when complete descriptions and salary data are important.

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

Optional list of Talent.com search result URLs to scrape directly, overriding the search parameters above.

## Actor input object example

```json
{
  "country": "nl",
  "searchQuery": "",
  "location": "",
  "maxResults": 100,
  "jobType": "",
  "skipReposts": false,
  "fetchDetails": false,
  "startUrls": []
}
```

# Actor output Schema

## `results` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("unfenced-group/talent-com-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("unfenced-group/talent-com-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{}' |
apify call unfenced-group/talent-com-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=unfenced-group/talent-com-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Talent.com Scraper",
        "description": "Scrape job listings from Talent.com across 8 European countries. Keyword, location, job type, and daysOld filters included.",
        "version": "0.0",
        "x-build-id": "z3ijN8SzEAyuomNcG"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/unfenced-group~talent-com-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-unfenced-group-talent-com-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/unfenced-group~talent-com-scraper/runs": {
            "post": {
                "operationId": "runs-sync-unfenced-group-talent-com-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/unfenced-group~talent-com-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-unfenced-group-talent-com-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "country": {
                        "title": "Country",
                        "enum": [
                            "nl",
                            "be",
                            "de",
                            "ch",
                            "uk",
                            "at",
                            "no",
                            "fr"
                        ],
                        "type": "string",
                        "description": "Country subdomain to scrape. Determines which Talent.com site is targeted and which proxy country is used.",
                        "default": "nl"
                    },
                    "searchQuery": {
                        "title": "Search query",
                        "type": "string",
                        "description": "Keyword(s) to search for, e.g. 'developer', 'nurse', 'marketing manager'.",
                        "default": ""
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "City, region, or country to filter by, e.g. 'Amsterdam', 'Berlin', 'London'.",
                        "default": ""
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of job listings to return.",
                        "default": 100
                    },
                    "daysOld": {
                        "title": "Max age (days)",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Only return jobs indexed within this many days. Leave empty for all jobs."
                    },
                    "jobType": {
                        "title": "Job type",
                        "enum": [
                            "",
                            "fulltime",
                            "parttime",
                            "contractor",
                            "temporary",
                            "internship"
                        ],
                        "type": "string",
                        "description": "Filter by employment type.",
                        "default": ""
                    },
                    "skipReposts": {
                        "title": "Skip reposts",
                        "type": "boolean",
                        "description": "Skip jobs that have already been seen in previous runs (90-day memory).",
                        "default": false
                    },
                    "fetchDetails": {
                        "title": "Fetch detail pages",
                        "type": "boolean",
                        "description": "Fetch each job's detail page to retrieve the full description and salary data when available. Increases run time by roughly 1–2 seconds per result and raises proxy usage accordingly. Recommended when complete descriptions and salary data are important.",
                        "default": false
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Optional list of Talent.com search result URLs to scrape directly, overriding the search parameters above.",
                        "default": [],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
