emploi.ma APIemploi.ma ↗
Access Moroccan job listings, company profiles, and job categories from Emploi.ma. Search jobs by keyword, category, or company with 6 endpoints.
curl -X GET 'https://api.parse.bot/scraper/879833ad-4dce-4db8-9d64-d07b11b916ec/search_jobs?metier_id=29' \ -H 'X-API-Key: $PARSE_API_KEY'
Search for job listings on Emploi.ma with optional filters. Returns paginated results with up to 25 jobs per page. Results include title, company, location, experience level, employment type, and a description snippet.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (0-based) for pagination. |
| query | string | Search keyword to filter job listings (e.g. 'dev', 'comptable'). Omitting returns all jobs. |
| metier_id | string | Job category (métier) ID filter. Valid IDs can be obtained from list_job_categories endpoint (e.g. '29' for 'Commercial, vente', '30' for 'Gestion, comptabilité, finance'). |
| company_nid | string | Company NID filter. Valid NIDs can be obtained from list_companies endpoint. |
{
"type": "object",
"fields": {
"jobs": "array of job listing objects with title, url, company_name, company_url, description_snippet, location, experience_level, education_level, employment_type, and posted_date",
"count": "integer total number of jobs returned on this page"
},
"sample": {
"data": {
"jobs": [
{
"url": "https://www.emploi.ma/offre-emploi-maroc/ingenieur-process-hf-casablanca-9272501",
"title": "Ingénieur Process (H/F) - Casablanca",
"location": "Casablanca-Mohammedia",
"company_url": "https://www.emploi.ma/recruteur/8914043",
"company_name": "EXPERT EYE ENGINEERING",
"employment_type": "CDI",
"experience_level": "Expérience entre 5 ans et 10 ans",
"description_snippet": "Nous sommes à la recherche d'un Ingénieur Process (H/F)..."
}
],
"count": 25
},
"status": "success"
}
}About the emploi.ma API
The Emploi.ma API provides access to Morocco's job board through 6 endpoints covering job search, full job details, company profiles, and category listings. The search_jobs endpoint accepts keyword, category, and company filters and returns up to 25 paginated results per page, each with title, location, experience level, and employment type. get_job_detail delivers the complete posting including salary range, required qualifications, and posting date.
Job Search and Listings
The search_jobs endpoint accepts four optional parameters: query for keyword filtering (e.g. dev, comptable), metier_id for category filtering, company_nid for narrowing to a specific employer, and page for 0-based pagination. Each result in the jobs array includes title, company_name, company_url, location, experience_level, description_snippet, and a url you can pass directly to get_job_detail. The count field tells you how many results were returned on that page.
Full Job Details and Company Profiles
get_job_detail takes a full Emploi.ma posting URL and returns a structured object with salary (min, max, currency — or null when not disclosed), location (region, city, remote flag), languages, posted_date, job_category, requirements as an array of strings, and the full description text. For company research, get_company_profile accepts an NID and returns name, description, and a criteria object covering fields such as Ville, Pays, Secteur d'activité, and Site Internet.
Discovery Endpoints
Three supporting endpoints help you build filters and stay current. list_job_categories returns every available métier with its id, name, and live count of open positions — feed those IDs into search_jobs as metier_id. list_companies returns a directory of featured employers with name, nid, and url, providing the company_nid values for search filtering. get_featured_jobs pulls the current homepage snapshot of promoted listings with title, url, company_name, posted_date, and location — useful for surfacing high-visibility postings without a search query.
- Build a Morocco-focused job aggregator filtered by city or region using the
locationfields fromsearch_jobs. - Track salary ranges for specific roles in Morocco by collecting
salary.minandsalary.maxfromget_job_detailover time. - Monitor a target company's open positions by passing its
company_nidtosearch_jobson a schedule. - Classify job postings by sector using
list_job_categoriescounts to identify which métiers have the most active hiring. - Enrich a recruiter CRM with company sector, city, and website data from
get_company_profile. - Surface promoted listings for a job alert newsletter using
get_featured_jobsas a daily snapshot. - Analyze required qualifications across a job category by batching
get_job_detailcalls for all jobs matching ametier_id.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 250 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Emploi.ma have an official developer API?+
What does `get_job_detail` return that `search_jobs` does not?+
search_jobs returns a summary per listing: title, company, location, experience level, and a description snippet. get_job_detail adds the full description text, the requirements array, a structured salary object (min, max, currency), the remote flag inside location, required languages, posted_date, and job_category. If salary is not disclosed on the posting, the salary field is null.How does pagination work in `search_jobs`?+
page parameter is 0-based: passing page=0 (or omitting it) returns the first page, page=1 the second, and so on. Each page returns up to 25 results. The count field in the response reflects how many jobs are on the current page, not the total across all pages. There is no total-count field, so you must paginate until a page returns fewer than 25 results or an empty jobs array.Does the API return job application links or allow submitting applications?+
url on Emploi.ma and full job details, but does not expose application form data or support submitting applications. You can fork this API on Parse and revise it to add an endpoint that retrieves application-specific fields from individual posting pages.Does `list_companies` return all companies on Emploi.ma?+
list_companies returns a featured/directory page of companies — it is not a full index of every employer that has posted on the site. Some companies that appear in job listings may not be present in this list. You can fork this API on Parse and revise it to add paginated company listing endpoints to increase coverage.