# Randstad Jobs Search Scraper (`alexist/randstad-jobs-search-scraper`) Actor

Scrape Randstad job search results in bulk with structured data extraction. Collect job titles, salaries, locations, company info, and posting dates across multiple search queries — perfect for job market research and talent pipeline analysis.

- **URL**: https://apify.com/alexist/randstad-jobs-search-scraper.md
- **Developed by:** [Alex](https://apify.com/alexist) (community)
- **Categories:** Automation, Developer tools, Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## 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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## Randstad Jobs Search Scraper: Extract Job Listings at Scale
---

### What Is Randstad.com?

Randstad is a global leader in staffing and human resources solutions, operating in over 60 countries. The platform hosts hundreds of thousands of active job listings across industries, locations, and experience levels. Rather than manually clicking through search results page-by-page, the **Randstad Jobs Search Scraper** automates extraction of job listings directly from search result pages, saving hours of repetitive work.

---

### Overview

The **Randstad Jobs Search Scraper** extracts structured job data from Randstad search results, converting job listing pages into clean, analyzable records. It's ideal for:

- **Recruiters & headhunters** benchmarking market rates and competitor hiring
- **Job market researchers** tracking hiring trends by location, industry, or skill
- **HR professionals** building talent pipeline data for strategic planning
- **Career analysts** studying employment demand in specific regions or sectors

Key features include multi-URL batch processing, configurable item limits per page, and resilient error handling that allows runs to continue despite individual page failures.

---

### Input Format

The scraper accepts a JSON configuration object to define what to scrape:

```json
{
  "urls": [
    "https://www.randstad.com/jobs/q-design/page-2/"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
````

#### Parameter Definitions

| Parameter | Type | Description |
|---|---|---|
| `urls` | Array | List of Randstad job search result page URLs. Can include keyword-based searches (e.g., `q-design`), location filters, or specific category pages. Paste one URL per entry or use bulk edit for multiple URLs. |
| `max_items_per_url` | Integer | Maximum number of job listings to extract per URL (default: 20). Set higher for comprehensive collection; lower values speed up processing. |
| `ignore_url_failures` | Boolean | If `true`, the scraper continues running even if some URLs fail to load. Useful for large batch jobs where occasional timeouts are acceptable. |

#### Best Practices

- **Pagination URLs:** Use direct page URLs (e.g., `/page-2/`, `/page-3/`) or search-filtered URLs (e.g., `q-python/location-london`) for targeted collection.
- **Volume control:** Adjust `max_items_per_url` based on your data needs—20 is suitable for moderate research; increase to 50+ for comprehensive market analysis.
- **Failure tolerance:** Enable `ignore_url_failures: true` for production runs to handle temporary blocks gracefully.

***

### Output Format

**Sample output**

```json
{
  "salary": {
    "compensation_type_id": "5",
    "rate": "年収550 ～ 750万円",
    "hide_salary_min_specified": "true",
    "salary_max_specified": "true",
    "benefits": null,
    "salary_min_specified": "true",
    "hide_salary_min": "false",
    "currency_id": "17",
    "salary_min": "5500000",
    "currency_id_specified": "true",
    "compensation_type_specified": "true",
    "hide_salary_max": "false",
    "compensation_type": "per year",
    "benefits_list": null,
    "salary_max": "7500000",
    "hide_salary_max_specified": "true"
  },
  "job_information": {
    "description": "社名社名非公開職種デザイナー（Web・モバイル・ゲーム関連）業務内容Introduction:Join our forward-thinking team, a premier luxury e-commerce mall in Japan, as we seek a talented and analytical UX/UI Designer. In this role, you will use your expertise in user experience design and data analysis to create elegant and intuitive shopping experiences that reflect the sophistication and exclusivity of our brand. Your work will directly contribute to enhancing user satisfaction and driving busine",
    "job_type": "Contract",
    "hours": "",
    "education": "",
    "title": "UI/UX Designer (Professional Haken/Dispatch)",
    "duration": null,
    "job_internal": "false"
  },
  "job_location": {
    "region": "東京都",
    "city": "東京23区",
    "postcode": null
  },
  "job_identity": {
    "company_name": "Randstad"
  },
  "blue_x_sanitized": {
    "job_type": "contract",
    "sub_specialism": null,
    "title": "uiux-designer-professional-hakendispatch",
    "city": "dong-jing-23qu-",
    "compensation_type": "per-year",
    "specialism": "design"
  },
  "blue_x_job_data": {
    "company_name": "Randstad",
    "description": "社名社名非公開職種デザイナー（Web・モバイル・ゲーム関連）業務内容Introduction:Join our forward-thinking team, a premier luxury e-commerce mall in Japan, as we seek a talented and analytical UX/UI Designer. In this role, you will use your expertise in user experience design and data analysis to create elegant and intuitive shopping experiences that reflect the sophistication and exclusivity of our brand. Your work will directly contribute to enhancing user satisfaction and driving busine",
    "job_type": "Contract",
    "sub_specialism": null,
    "reference_number": "VAC-264338",
    "title": "UI/UX Designer (Professional Haken/Dispatch)",
    "region": "東京都",
    "city": "東京23区",
    "compensation_type": "per year",
    "specialism": "Design",
    "job_id": "44202312"
  },
  "client_information": {
    "client_name": "社名非公開",
    "client_id": null,
    "client_logo_url": null
  },
  "job_dates": {
    "date_created": "2024-09-26",
    "date_created_time": "2024-09-26 08:58:18"
  },
  "job_id": "VAC-264338",
  "contact": {
    "office": null,
    "code": null
  },
  "from_url": "https://www.randstad.com/jobs/q-design/"
}
```

Each scraped job listing returns a structured record with 10 key data categories:

#### Job Identity & Core Information

| Field | Meaning | Example |
|---|---|---|
| `Job ID` | Unique identifier for the job posting in Randstad's system | `R12345678` |
| `Job Information` | Core job details including title, description summary, and posting metadata | Title: "Senior Developer" |
| `Job Location` | Geographic location of the role (city, region, country) | "London, UK" or "Remote" |

#### Salary & Compensation

| Field | Meaning | Example |
|---|---|---|
| `Salary` | Compensation information, including range (if displayed) and currency | "€45,000 - €65,000 annually" or "Competitive" |

#### Timeline & Dates

| Field | Meaning | Example |
|---|---|---|
| `Job Dates` | Key dates including posting date, application deadline, and start date | Posted: 2024-01-15; Apply by: 2024-02-15 |

#### Client & Employer Information

| Field | Meaning | Example |
|---|---|---|
| `Client Information` | Hiring company name, industry, company size, and employer profile details | "TechCorp Ltd" · Tech · 500+ employees |

#### Data Quality & Sanitization

| Field | Meaning |
|---|---|
| `Blue X Sanitized` | Cleaned, plaintext version of job description and requirements (HTML removed, formatting standardized) |
| `Blue X Job Data` | Structured extraction of key job attributes parsed from raw page data |

#### Communication & Application

| Field | Meaning | Example |
|---|---|---|
| `Contact` | Recruiter or hiring contact details, email, phone, and application method | Contact: John Smith · john@randstad.com |

***

### How to Use

1. **Identify search queries** — Visit Randstad.com and search for jobs using keywords, locations, or filters. Copy the resulting URL.
   - Example: `https://www.randstad.com/jobs/q-python/location-berlin/`

2. **Build your URL list** — Add one or multiple search result page URLs to the `urls` array. You can chain multiple searches to collect data across different sectors or regions.

3. **Configure limits** — Set `max_items_per_url` based on your needs:
   - 10-20 items: Quick pilot run or focused research
   - 30-50 items: Comprehensive single-page collection
   - 100+ items: Bulk market analysis (may take longer)

4. **Enable error tolerance** — Leave `ignore_url_failures: true` to handle occasional timeouts without halting the entire run.

5. **Execute the scrape** — Start the actor and monitor progress in the run log.

6. **Export & analyze** — Download results as JSON, CSV, or Excel for analysis in spreadsheets or data tools.

#### Common Tips

- **Pagination:** Manually add URLs for each search page you need (page-1, page-2, etc.) or use search result page chains.
- **Filtering:** Combine keywords with location or job type filters for more targeted data (e.g., `q-marketing/location-sydney/`).
- **Rate limits:** Large batch runs may take time; consider spacing requests or adjusting item limits if timeouts occur.

***

### Use Cases & Business Value

- **Market intelligence:** Track salary trends, job growth, and hiring demand by skill or location
- **Competitor analysis:** Monitor how competitors are hiring—job titles, required qualifications, growth signals
- **Talent acquisition:** Build targeted candidate pipelines by identifying high-volume hiring trends
- **Academic research:** Study labor market dynamics, wage trends, and employment patterns across industries
- **Job aggregation platforms:** Feed structured Randstad data into custom job boards or career websites

By automating search result extraction, the Randstad scraper replaces manual data entry and enables data-driven insights impossible to achieve through manual browsing alone.

***

### Conclusion

The **Randstad Jobs Search Scraper** provides a fast, scalable way to extract job market data at scale. With support for bulk URLs, flexible item limits, and robust error handling, it transforms Randstad search results into actionable intelligence. Whether you're tracking market trends, building talent pipelines, or conducting labor research, this scraper delivers clean, structured data ready for immediate analysis.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the Jobs list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://www.randstad.com/jobs/q-design/page-2/"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# 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 = {
    "urls": [
        "https://www.randstad.com/jobs/q-design/page-2/"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("alexist/randstad-jobs-search-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 = {
    "urls": ["https://www.randstad.com/jobs/q-design/page-2/"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("alexist/randstad-jobs-search-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 '{
  "urls": [
    "https://www.randstad.com/jobs/q-design/page-2/"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call alexist/randstad-jobs-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Randstad Jobs Search Scraper",
        "description": "Scrape Randstad job search results in bulk with structured data extraction. Collect job titles, salaries, locations, company info, and posting dates across multiple search queries — perfect for job market research and talent pipeline analysis.",
        "version": "0.0",
        "x-build-id": "C305L384rXKoE7b1a"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/alexist~randstad-jobs-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-alexist-randstad-jobs-search-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/alexist~randstad-jobs-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-alexist-randstad-jobs-search-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/alexist~randstad-jobs-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-alexist-randstad-jobs-search-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": {
                    "urls": {
                        "title": "URLs of the Jobs list urls to scrape",
                        "type": "array",
                        "description": "Add the URLs of the Jobs list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "ignore_url_failures": {
                        "title": "Continue running even if some URLs fail to be scraped",
                        "type": "boolean",
                        "description": "If true, the scraper will continue running even if some URLs fail to be scraped."
                    },
                    "max_items_per_url": {
                        "title": "Max items per URL",
                        "type": "integer",
                        "description": "The maximum number of items to scrape per URL."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
