# Rekrute Jobs Scraper (`scraper_guru/rekrute-jobs-scraper`) Actor

Scrape job listings from Rekrute.com (Morocco). Perfect for HR platforms, job market analysis, and AI training data.

- **URL**: https://apify.com/scraper\_guru/rekrute-jobs-scraper.md
- **Developed by:** [LIAICHI MUSTAPHA](https://apify.com/scraper_guru) (community)
- **Categories:** AI, MCP servers
- **Stats:** 0 total users, 0 monthly users, 0.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

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

## 🚀 Rekrute Jobs Scraper | The Ultimate MENA Job Market Extractor

Welcome to the **Rekrute Jobs Scraper**, the most advanced, reliable, and comprehensive data extraction tool for [Rekrute.com](https://www.rekrute.com/) — Morocco’s premier professional job board. 

If you are looking to truly dominate the digital landscape of the MENA (Middle East and North Africa) region, actionable and structured data is the undisputed king. This Actor isn't just a scraper; it's a **business intelligence pipeline** specifically designed to unlock the Moroccan job market at scale.

---

### 🌍 The "Moroccan Data Dominance" Suite

This Actor is a proud part of our extensive **Moroccan Data Dominance Suite** on Apify. 
Domination means having a 360-degree view of an economy. To complement your insights into the Moroccan talent pool and corporate hiring budgets, you need to understand the physical and real estate footprint of the country. 

> 💎 **Pro Tip:** Pair this Rekrute Jobs Scraper with our **[Mubawab Housing Scraper](https://apify.com/)**. By tracking both *who is hiring* and *where real estate is booming*, you can build a complete predictive model of Moroccan economic hotspots. It’s the ultimate data-driven advantage.

---

### 🔥 Why Extract Data from Rekrute? (The Use Cases)

Rekrute is the absolute gold standard for corporate hiring in Morocco and Francophone Africa. By scraping Rekrute, you gain direct access to the neural network of the region's economy.

#### 1. 💼 B2B Lead Generation & Sales Signaling
*Stop cold-calling blindly.* A company posting 15 open positions for Software Engineers and Sales Executives is a company with a high budget, currently in an expansion phase. 
* **Action:** Hook this scraper up to your CRM. Whenever a company in your target industry posts a new job, trigger an automated outreach campaign offering your enterprise SaaS, IT services, or consulting.

#### 2. 🤖 AI Market Research & LLM Training
Creating hyper-localized AI requires hyper-localized data. 
* **Action:** Train your Machine Learning models or fine-tune LLMs on tens of thousands of authentic, professional Moroccan job descriptions (written in French, Arabic, and English). Perfect for building localized HR bots, CV-matching algorithms, or labor market trend predictors.

#### 3. 📈 HR Tech & Competitive Salary Analysis
Building a recruitment platform, a salary benchmarking tool, or an aggregator?
* **Action:** Programmatically monitor your competitors. See exactly what contract types (CDI, CDD, Freelance) are trending, what the average required experience level is per sector, and map out the entire talent demand across cities like Casablanca, Rabat, and Tanger.

---

### ⚡ What Makes This Scraper the Best?

We didn't just build a scraper; we engineered an enterprise-grade extraction engine.

* **🛡️ Bulletproof Anti-Blocking Architecture:** Built on highly mature `Crawlee` and `Playwright` foundations. We utilize dynamic browser fingerprinting, human-like navigation delays, and seamless integration with Apify Residential Proxies to ensure you *never* get blocked.
* **🧠 Pagination Intelligence:** Native, automatic pagination handling. It recursively tracks down the "next page" buttons, even when the DOM dynamically shifts, ensuring you never miss a hidden listing.
* **🧹 Incredible Data Cleanliness:** Raw HTML is messy. Our parser meticulously strips out tracking noise, normalizes messy text formatting, handles missing fields gracefully, and standardizes dates and locations so the data is ready for your database on minute one.
* **⏱️ Unmatched Speed & Memory Efficiency:** Optimized instance sizing prevents memory leaks, keeping your Apify compute costs lower than the competition while delivering higher bandwidth scraping.

---

### 🛠️ Input Configuration

Our Actor is highly customizable via a beautiful Apify UI, or programmatically via API JSON.

| Field | Type | Description | Default |
| :--- | :--- | :--- | :--- |
| `startUrls` | Array | (Optional) Input specific Rekrute category links (e.g., just "IT Jobs" or "Casablanca Jobs") to narrow your scrape. If left blank, it defaults to the global all-jobs feed. | `[]` (Global Feed) |
| `maxListings` | Integer | The limit of job details to scrape per run. Ideal for testing. **Set to `0` to scrape every single job available.** | `100` |
| `proxyConfiguration` | Object | Proxy routing. **We highly recommend using Apify Residential Proxies** to prevent Rekrute from serving captchas. | `Apify Proxy (Residential)` |

---

### 📊 Comprehensive Data Output

The output is perfectly formatted JSON, easily exportable to CSV, Excel, XML, or direct database ingestion. Every single job listing yields a rich tapestry of metadata:

```json
{
  "job_title": "Ingénieur en Informatique et Réseaux Senior H/F",
  "company_name": "Tech Corp Maroc S.A.",
  "location": "Casablanca",
  "date_posted": "22/05/2026",
  "contract_type": "CDI",
  "experience_level": "De 5 à 10 ans",
  "education_level": "Bac +5 et plus",
  "sector_industry": "Informatique / Electronique / Télécoms",
  "description": "Nous recherchons un ingénieur talentueux au sein de notre équipe basée à Sidi Maârouf. Vous serez en charge du déploiement de l'architecture cloud...\n\nCompétences exigées:\n- AWS, Azure\n- Docker, Kubernetes\n- Français courant.",
  "job_url": "https://www.rekrute.com/offre-emploi-ingenieur-informatique-casablanca-123456.html",
  "scraped_at": "2026-05-22T10:30:00.123Z"
}
````

***

### ♾️ Automation Blueprints (Make.com, n8n, Zapier)

You don't need to be a developer to extract massive value from this Actor.

#### **The "Automated Sales Signal" Blueprint:**

1. **Trigger:** Schedule this Apify Actor to run every Monday Morning.
2. **Action 1 (Make.com / n8n):** Fetch the dataset via the Apify API node module.
3. **Action 2 (Filter):** Filter the JSON where `sector_industry` equals `Informatique`.
4. **Action 3 (OpenAI):** Pass the `company_name` and `job_title` to ChatGPT to draft a highly personalized cold-call script or email.
5. **Action 4 (HubSpot / Salesforce):** Create a new Lead/Task for your underlying sales team to attack.

***

### 🤝 Support & Feature Requests

We actively maintain this scraper to ensure it adapts to any UI/UX changes deployed by Rekrute.com.

If you encounter an issue, need a highly customized crawling requirement, or want to explore enterprise datasets for the wider MENA region, please open an issue in the Apify Actor Issues tab. We typically respond and patch within 24 hours.

***

### ⚖️ Legal & Ethical Usage Declaration

*This scraper is engineered for ethical, public-data extraction, competitive intelligence, and aggregate market analysis. By utilizing this Actor, you agree to respect local data protection regulations (such as the Moroccan CNDP and international GDPR frameworks) and recognize that you are solely responsible for how you utilize and store the extracted data in accordance with the target website's Terms of Service.*

# Actor input Schema

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

List of Rekrute URLs to start from. Defaults to the main job feed if empty.

## `maxListings` (type: `integer`):

Maximum number of jobs to extract. Set to 0 to scrape all available.

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

Select proxies to be used by the scraper.

## Actor input object example

```json
{
  "maxListings": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `jobs` (type: `string`):

The main dataset containing all scraped job listings and data points.

## `runStats` (type: `string`):

JSON record with scraping metrics regarding the run.

## `debugSnapshots` (type: `string`):

HTML snapshots saved when a detail page could not be parsed.

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

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

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

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Rekrute Jobs Scraper",
        "description": "Scrape job listings from Rekrute.com (Morocco). Perfect for HR platforms, job market analysis, and AI training data.",
        "version": "1.0",
        "x-build-id": "UZ3JlomtaY3gqOdjD"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scraper_guru~rekrute-jobs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scraper_guru-rekrute-jobs-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/scraper_guru~rekrute-jobs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scraper_guru-rekrute-jobs-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/scraper_guru~rekrute-jobs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scraper_guru-rekrute-jobs-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",
                "required": [
                    "proxyConfiguration"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "List of Rekrute URLs to start from. Defaults to the main job feed if empty.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxListings": {
                        "title": "Max Jobs to Scrape",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of jobs to extract. Set to 0 to scrape all available.",
                        "default": 100
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Select proxies to be used by the scraper.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
