# Rekrute Job Scraper (`shahidirfan/rekrute-job-scraper`) Actor

Meet the Rekrute Job Scraper, your lightweight tool for scraping Morocco's leading job board. Efficiently extract listings from Rekrute. To ensure stable and reliable scraping, using residential proxies is highly recommended for best results.

- **URL**: https://apify.com/shahidirfan/rekrute-job-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Categories:** Jobs, Developer tools, Automation
- **Stats:** 31 total users, 7 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.90 / 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 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

## Rekrute Jobs Scraper

Extract comprehensive job listings from Rekrute.com, the leading employment portal in Morocco. Automatically collect job titles, company details, locations, full descriptions, and more.

### Features

- **Deep Data Extraction** — Extract job titles, hiring organizations, locations, and publication dates.
- **Full Job Descriptions** — Collects complete job requirements and mission details automatically.
- **Flexible Search** — Filter results by keyword, location, industry category, and publication date.
- **Automatic Result Cleanup** — Duplicate jobs are skipped and null or empty fields are removed before saving.
- **Advanced Sanitization** — Descriptions are cleaned into readable HTML and plain text, removing noise and ads.

### Use Cases

#### Market Analysis

Track hiring trends across different industries and regions in Morocco to build labor market intelligence.

#### Recruitment & Lead Gen

Build candidate pipelines or identify companies actively hiring for specific skill sets.

#### Competitive Intelligence

Monitor competitor expansion and hiring strategies by tracking their recent job postings.

***

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `keyword` | String | No | `"software engineer"` | Search keyword (e.g., "Developer", "Accountant") |
| `location` | String | No | `"Casablanca"` | City or region filter |
| `results_wanted` | Integer | No | `20` | Maximum number of jobs to collect |
| `max_pages` | Integer | No | `5` | Maximum search result pages to process |
| `proxyConfiguration` | Object | No | `{"useApifyProxy":true}` | Proxy settings for reliable scraping |

***

### Output Data

Each scraped item contains:

| Field | Type | Description |
|-------|------|-------------|
| `jobId` | String | Unique identifier from the source |
| `title` | String | Job position title |
| `company` | String | Name of the hiring organization |
| `location` | String | Job location |
| `datePosted` | String | When the job was published |
| `descriptionText` | String | Plain text job description |
| `employmentType` | String | Contract type (CDI, CDD, etc.) |
| `url` | String | Direct link to the listing |

***

### Usage Examples

#### Search by Keyword and Location

```json
{
    "keyword": "Data Analyst",
    "location": "Rabat",
    "results_wanted": 50
}
```

#### Quick Scan for Recent Jobs

```json
{
    "keyword": "Marketing",
    "max_pages": 2,
    "results_wanted": 20
}
```

***

### Sample Output

```json
{
  "url": "https://www.rekrute.com/en/offre-emploi-ingenieur-devops-senior-fh-recrutement-sofrecom-maroc-rabat-182541.html",
  "jobId": "182541",
  "title": "Senior DevOps Engineer (M/F) - Rabat",
  "company": "Sofrecom Maroc",
  "datePosted": "today",
  "descriptionText": "Joining Sofrecom means participating in exciting projects...",
  "employmentType": "Permanent contract",
  "location": "Rabat",
  "scrapedAt": "2026-05-08T05:41:45.521Z"
}
```

***

### Tips for Best Results

#### Optimize Your Search

- Use specific keywords for higher relevance.
- Leave location empty to scan all regions in Morocco.
- Start with a low `results_wanted` (e.g., 20) to verify your settings.

#### Avoid Blocking

- Use Apify Proxy (Residential recommended) for large-scale scrapes.
- Rotate keywords to distribute the crawl load.

***

### Integrations

Connect your data with:

- **Google Sheets** — Direct export for analysis
- **Airtable** — Build your own recruitment CRM
- **Zapier** — Automate hiring notifications
- **Webhooks** — Send data to your custom backend

***

### Frequently Asked Questions

#### Does it handle pagination?

Yes, the scraper automatically navigates through multiple search result pages until your requested item count is reached.

#### Can I extract the full description?

Yes. Full descriptions are collected automatically so the dataset contains the full text instead of only list-page snippets.

#### Is it legal?

This tool is for legitimate data collection purposes. Please respect the website's terms of service and use the data responsibly.

***

### Support

For issues or feature requests, contact support through the Apify Console.

***

### Legal Notice

This actor is designed for legitimate data collection purposes. Users are responsible for ensuring compliance with website terms of service and applicable laws.

# Actor input Schema

## `startUrl` (type: `string`):

Start scraping from a specific Rekrute.com search URL. If provided, this will be used instead of Keyword/Location.

## `keyword` (type: `string`):

Job search keyword(s), e.g., 'Software Developer', 'Marketing Manager', 'Data Analyst'.

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

Location filter, e.g., Casablanca, Rabat, Marrakech. Leave empty for all locations.

## `dateFilter` (type: `string`):

Filter jobs by publication date to scrape only recent jobs.

## `results_wanted` (type: `integer`):

The maximum number of jobs to collect. Leave empty to collect all available jobs.

## `max_pages` (type: `integer`):

A safety cap on the number of search result pages to visit.

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

Use Apify Proxy (datacenter recommended for Rekrute.com).

## Actor input object example

```json
{
  "keyword": "software engineer",
  "location": "Casablanca",
  "dateFilter": "any date",
  "results_wanted": 20,
  "max_pages": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "keyword": "software engineer",
    "location": "Casablanca",
    "results_wanted": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/rekrute-job-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 = {
    "keyword": "software engineer",
    "location": "Casablanca",
    "results_wanted": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/rekrute-job-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 '{
  "keyword": "software engineer",
  "location": "Casablanca",
  "results_wanted": 20
}' |
apify call shahidirfan/rekrute-job-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/cvmELGd6JILENKfqe/builds/WM1xseaVCljrpu2EZ/openapi.json
