# Robert Walters Scraper - Jobs & Salary Data (`studio-amba/robertwalters-scraper`) Actor

Scrape job listings from Robert Walters across the UK, France, Belgium, Netherlands and Germany. Extract titles, salaries, consultants, specialisms, industries, and apply links. No login or cookies required.

- **URL**: https://apify.com/studio-amba/robertwalters-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 result scrapeds

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

### What does Robert Walters Scraper do?

**Robert Walters Scraper** extracts job listings from [Robert Walters](https://www.robertwalters.com), a global professional recruitment agency, across five markets on one actor: the UK, France, Belgium, the Netherlands and Germany. Give it a market, a keyword, and it returns structured data for every matching job: title, recruitment consultant, specialism, sub-specialism (focus), industry, salary (with the correct currency and pay period), contract type, workplace type (on-site/hybrid/remote), experience level, full description, posting and expiry dates, and a direct apply link.

Robert Walters blocks automated traffic with PerimeterX, so this actor routes every request through Bright Data Web Unlocker. No login, no cookies -- just a Bright Data API key.

Run it on the Apify platform to get recruitment market data via API, schedule recurring scrapes, and pipe results into tools like Zapier, Make, Google Sheets, Airtable, and Slack.

### How to scrape Robert Walters data

1. Go to the Robert Walters Scraper on the Apify Store.
2. Click **Try for free** to open the actor in the Apify Console.
3. Pick a market: United Kingdom, France, Belgium, Netherlands, or Germany.
4. Enter a search query in the local language (e.g. "accountant" for UK/Belgium/Netherlands, "comptable" for France, "buchhalter" for Germany). Leave it empty to use a sensible default for the selected market.
5. Set the maximum number of results you want (default: 50).
6. Enter your Bright Data API key (get one at [brightdata.com](https://brightdata.com)) -- required to bypass Robert Walters' PerimeterX bot wall.
7. Click **Start** and wait for the run to finish.
8. Download your data as JSON, CSV, Excel, or HTML from the Output tab, or pull it via the Apify API.

### Why use Robert Walters Scraper?

- **Cross-market salary benchmarking** -- compare advertised pay across the UK, France, Belgium, the Netherlands and Germany, with currency and pay period attached to every figure.
- **Recruitment intelligence** -- see which consultants, specialisms and industries are active on which roles, and spot hiring trends at a global agency before your competitors do.
- **Labour market analysis** -- understand demand across sectors, seniority levels and work patterns (on-site, hybrid, remote) in five European markets.
- **Lead generation** -- Robert Walters listings surface active hiring employers by industry and region, useful for targeting B2B services, tools, or staffing solutions at companies currently recruiting.
- **Job aggregation** -- feed structured multi-country listings into your own job board, career site, or candidate-alert system.
- **Academic and policy research** -- clean, structured data for labour economics, skills-gap studies, and cross-border workforce reports.

### About Robert Walters

Robert Walters is a listed, global specialist professional recruitment consultancy operating in dozens of markets. It focuses on white-collar roles -- accountancy & finance, banking, HR, legal, procurement & supply chain, sales & marketing, technology, and more. Key characteristics:

- **Coverage**: This actor covers five European markets on one shared schema -- UK, France, Belgium, Netherlands, Germany.
- **Confidential employers**: Robert Walters is a recruitment agency, not a job board -- most roles are posted under Robert Walters' own name with the actual hiring company kept confidential until a candidate applies. The scraper captures the assigned consultant instead of a company name.
- **Salary data**: Most adverts show a specific range with currency and pay period (annual, daily, hourly). When a role is marked "Negotiable" or similar, the numeric salary fields are `null` but the `salaryRaw` field preserves what was actually shown.
- **Work patterns**: Permanent, contract, and temporary roles, with on-site, hybrid, and remote workplace types.

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `market` | string | No | Country site to search: `UK`, `FR`, `BE`, `NL`, `DE`. Defaults to `UK`. |
| `searchQuery` | string | No | Job keyword to search for, in the local language. Defaults to a sensible term for the selected market if empty. |
| `maxResults` | integer | No | Maximum number of listings to scrape. Default `50`. Each result costs one extra Bright Data request to fetch the full job description and salary. |
| `brightDataApiKey` | string | Yes | Your Bright Data Web Unlocker API key. Required to bypass Robert Walters' PerimeterX bot wall. Can also be supplied via the `BRIGHT_DATA_API_KEY` environment variable. |
| `proxyConfiguration` | object | No | Not used -- this actor routes all traffic through Bright Data Web Unlocker, not Apify proxies. |

#### Example input

```json
{
  "market": "FR",
  "searchQuery": "comptable",
  "maxResults": 50,
  "brightDataApiKey": "your-bright-data-api-key"
}
```

### Output

Each job listing is a flat JSON object with the following fields:

| Field | Type | Example |
|-------|------|---------|
| `jobId` | string | `1907959` |
| `jobReference` | string | `UG1S16-AE4150DA` |
| `jobTitle` | string | `Accountant` |
| `market` | string | `United Kingdom` |
| `country` | string | `GB` |
| `language` | string | `en` |
| `recruiter` | string | `Robert Walters` |
| `consultant` | string | `Michelle Barclay` |
| `location` | string | `Milton Keynes` |
| `region` | string | `Buckinghamshire` |
| `locationCountry` | string | `GB` |
| `contractType` | string | `Temporary` |
| `employmentType` | string | `TEMPORARY` |
| `workplaceType` | string | `Hybrid` |
| `experienceLevel` | string | `Mid Management` |
| `specialism` | string | `Accountancy & Finance` |
| `subSpecialism` | string | `Accountant` |
| `industry` | string | `Telecommunications` |
| `salaryMin` | number | `350` |
| `salaryMax` | number | `450` |
| `currency` | string | `GBP` |
| `salaryPeriod` | string | `DAY` |
| `salaryRaw` | string | `£350 - £450 per day` |
| `description` | string | Full plain-text job description |
| `descriptionSnippet` | string | First 600 characters of the description |
| `datePosted` | string | `2026-09-08` |
| `validThrough` | string | `2026-11-07` |
| `url` | string | `https://www.robertwalters.co.uk/procurementsupplychain/jobs/supplychain/1910694-supply-planner.html` |
| `scrapedAt` | string | `2026-09-08T20:15:11.968Z` |

#### Example output

```json
{
  "jobId": "1907959",
  "jobReference": "UG1S16-AE4150DA",
  "jobTitle": "Accountant",
  "market": "United Kingdom",
  "country": "GB",
  "language": "en",
  "recruiter": "Robert Walters",
  "consultant": "Michelle Barclay",
  "location": "Milton Keynes",
  "region": "Buckinghamshire",
  "locationCountry": "GB",
  "contractType": "Temporary",
  "employmentType": "TEMPORARY",
  "workplaceType": "Hybrid",
  "experienceLevel": "Mid Management",
  "specialism": "Accountancy & Finance",
  "subSpecialism": "Accountant",
  "industry": "Telecommunications",
  "salaryMin": 350,
  "salaryMax": 450,
  "currency": "GBP",
  "salaryPeriod": "DAY",
  "salaryRaw": "£350 - £450 per day",
  "descriptionSnippet": "Robert Walters are in need of 2 experienced Accountants that are immediately available...",
  "datePosted": "2026-09-08",
  "validThrough": "2026-11-07",
  "url": "https://www.robertwalters.co.uk/procurementsupplychain/jobs/supplychain/1907959-accountant.html",
  "scrapedAt": "2026-09-08T20:15:11.968Z"
}
```

### Cost estimate

This actor is billed on Apify's Pay Per Result model. Each result requires one Bright Data Web Unlocker request to the job detail page (on top of a small number of listing-page requests), so per-result cost is higher than a plain listing scraper -- this is reflected in the actor's pricing tier. A run that returns 50 jobs typically finishes in a couple of minutes. Check the actor's pricing tab for the exact current rate. Your run's usage cost only settles after the run finishes and shows SUCCEEDED -- a run that fails partway is not charged for results it didn't return.

### Limitations and known issues

- **Bright Data required** -- Robert Walters blocks plain HTTP requests and Apify's own proxy pools with a PerimeterX challenge. You must supply a Bright Data Web Unlocker API key for this actor to return any data.
- **Employer names are usually not disclosed** -- Robert Walters keeps the underlying hiring company confidential on most listings. The `consultant` field identifies who to contact instead of a `company` field.
- **Salary as advertised** -- when a role doesn't disclose a figure ("Negotiable" or similar), `salaryMin`/`salaryMax`/`currency` are `null`, but `salaryRaw` preserves the text as shown.
- **Five markets** -- this actor covers UK, France, Belgium, Netherlands and Germany. Robert Walters operates in other markets too; those are not covered by this version.
- **Relevance search, not a strict filter** -- like most recruitment sites, an unmatched keyword can still return other listings from the market rather than zero results.

### More European job scrapers

- [Hays UK Scraper](https://apify.com/studio-amba/hays-scraper) -- Hays.co.uk job listings and salary data
- [Michael Page Multi-Country Scraper](https://apify.com/studio-amba/michael-page-scraper) -- 12 European markets on one actor
- [Adecco Scraper](https://apify.com/studio-amba/adecco-scraper) -- Adecco job listings
- [Randstad Scraper](https://apify.com/studio-amba/randstad-scraper) -- Randstad job listings
- [Manpower Scraper](https://apify.com/studio-amba/manpower-scraper) -- Manpower job listings

Browse the [Studio AMBA profile](https://apify.com/studio-amba) on the Apify Store for more European job and marketplace scrapers.

### FAQ

**Do I need a Robert Walters account?**
No. This actor reads Robert Walters' public job listings. You do need your own Bright Data Web Unlocker API key to bypass the site's PerimeterX bot protection.

**Why don't I see a company/employer name?**
Robert Walters is a recruitment agency. Most listings are posted under its own name with the underlying employer kept confidential -- the actor returns the assigned consultant instead.

**Can I filter by salary, contract type, or region?**
The current version filters by market and keyword. Salary, contract type, workplace type and region are returned on every result so you can filter them yourself after scraping.

**Is scraping Robert Walters legal?**
This actor collects publicly available job listing data. You are responsible for using the data in line with the site's terms and applicable law. Do not use it to send unsolicited communications in breach of regulations.

### Need this data on a schedule, or a custom version?

We run this scraper as a managed service for businesses: scheduled runs,
deduplication, delta detection, and delivery to your inbox, Google Sheets,
or API -- maintenance included. We can also build a custom version with your
exact fields and filters, or combine multiple sources into one feed.

See [studioamba.dev/services](https://studioamba.dev/services/) or email
<hello@studioamba.dev> for a free data sample.
We maintain 300+ European web scrapers and answer within one business day.

# Actor input Schema

## `market` (type: `string`):

Robert Walters country site to search.

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

Keyword to search for, in the local language (e.g. 'accountant' for UK/Belgium/Netherlands, 'comptable' for France, 'buchhalter' for Germany). Leave empty to use a sensible default for the selected market. Note: Robert Walters' search is relevance-based, not a strict filter -- an unmatched keyword can still return other listings rather than zero results.

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

Maximum number of job listings to return. Each result triggers one extra Bright Data request to fetch the full job description, salary and consultant details, so larger values take proportionally longer and cost more.

## `brightDataApiKey` (type: `string`):

Your Bright Data API key for the Web Unlocker zone. Required to bypass Robert Walters' PerimeterX bot wall. Get one at https://brightdata.com. Can also be supplied via the BRIGHT\_DATA\_API\_KEY environment variable.

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

Not used -- this actor routes all traffic through Bright Data Web Unlocker, not Apify proxies.

## Actor input object example

```json
{
  "market": "UK",
  "searchQuery": "accountant",
  "maxResults": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "searchQuery": "accountant",
    "maxResults": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/robertwalters-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": "accountant",
    "maxResults": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/robertwalters-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": "accountant",
  "maxResults": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call studio-amba/robertwalters-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/robertwalters-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/Md9Dr8Vlyf7bOb5LD/builds/DASDoxEmX9ANmuJ7v/openapi.json
