Wuzzuf Jobs Scraper avatar

Wuzzuf Jobs Scraper

Pricing

Pay per event

Go to Apify Store
Wuzzuf Jobs Scraper

Wuzzuf Jobs Scraper

Search Wuzzuf and extract structured Egypt and MENA vacancies with employer, location, salary, work mode, skills, requirements, dates, and URLs.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

2 days ago

Last modified

Categories

Share

Extract structured Wuzzuf jobs from Egypt and the wider MENA market. Search by occupation or skill, start from a Wuzzuf search URL, apply practical location and work-mode filters, and save clean vacancy records to an Apify dataset.

The Actor returns job ID, title, employer, location, salary, employment type, workplace mode, skills, requirements, posting date, description, and canonical URL. Use it for one-time market analysis or schedule it for recurring vacancy monitoring.

What does Wuzzuf Jobs Scraper do?

Wuzzuf Jobs Scraper opens public Wuzzuf search pages and extracts the structured vacancy data supplied by those pages.

It can:

  • run one or many keyword searches;
  • process real wuzzuf.net/search/jobs URLs;
  • scan multiple result pages;
  • deduplicate vacancies by stable Wuzzuf job ID;
  • filter by area, city, or country text;
  • filter by on-site, remote, or hybrid work;
  • filter by employment type;
  • keep vacancies posted within a recent time window;
  • stop at an exact maximum number of accepted jobs;
  • return full descriptions and requirements as plain text.

Who is this Wuzzuf jobs extractor for?

Recruiters and staffing teams

Build a current list of vacancies by role, employer, location, seniority, or workplace arrangement.

Job-market analysts

Compare requested skills, salary disclosure, workplace modes, and hiring demand across Cairo, Alexandria, Egypt, and other MENA locations represented on Wuzzuf.

Sales and workforce intelligence teams

Identify companies hiring for relevant functions and route public vacancy data to a CRM, spreadsheet, warehouse, or lead-scoring pipeline.

Job seekers and career researchers

Collect a focused dataset instead of opening many result and detail pages manually.

Automation teams

Schedule the Actor and compare run datasets by stable jobId to find newly seen, changed, or expired vacancies in your own workflow.

Why use this Actor?

  • Full job records: descriptions and requirements are included, not only search-card snippets.
  • Stable identifiers: each result includes its Wuzzuf job ID and canonical URL.
  • Useful filters: location, workplace, job type, and posting recency ensure only accepted records are charged and saved.
  • MENA-aware output: location is split into area, city, and country fields.
  • Monitoring-ready: ISO timestamps and stable IDs work well in scheduled dataset comparisons.
  • Bounded execution: maxItems and maxPagesPerSearch prevent accidental open-ended runs.

What Wuzzuf job data can I extract?

FieldMeaning
jobIdStable Wuzzuf vacancy identifier
titleJob title
companyEmployer name, Confidential, or null
locationCombined area, city, and country
country, city, areaSeparate location components
salaryRange, currency, period, paid flag, and extra details
jobTypesFull Time, Internship, Part Time, or another published type
workplaceOn-site, Remote, Hybrid, or null
careerLevelPublished seniority level
experienceYearsMinimum and maximum experience
skillsWuzzuf skills and keywords
workRolesWuzzuf role categories
descriptionPlain-text job description
requirementsPlain-text candidate requirements
postedAt, expiresAtISO 8601 source timestamps
vacanciesPublished number of openings
urlCanonical vacancy URL
searchUrlSearch that produced the result
scrapedAtExtraction timestamp

How to scrape Wuzzuf jobs

  1. Open the Actor in Apify Console.
  2. Enter one or more search queries such as data analyst.
  3. Optionally add Wuzzuf search URLs.
  4. Add a location, workplace, job-type, or recency filter if needed.
  5. Set maxItems to the maximum jobs you want saved.
  6. Click Start.
  7. Open the Dataset tab to inspect, download, or integrate the results.

A minimal input is:

{
"searchQueries": ["data analyst"],
"maxItems": 25
}

Input parameters

ParameterTypeDefaultDescription
searchQueriesstring arraynoneTitles, skills, or keywords searched on Wuzzuf
startUrlsrequest listnoneHTTPS Wuzzuf search result URLs
locationstringnoneCase-insensitive area, city, or country substring
workplaceenumnoneOn-site, Remote, or Hybrid
jobTypeenumnoneFull Time, Part Time, Internship, Freelance / Project, or Shift Based
postedWithinDaysintegernoneKeep jobs from the last 1–365 days
maxItemsinteger100Maximum accepted jobs across all searches
maxPagesPerSearchinteger20Maximum pages scanned per query or URL

At least one searchQueries entry or startUrls entry is required.

Search Wuzzuf Alexandria jobs

Use a location filter to collect Wuzzuf Alexandria jobs from a wider search:

{
"startUrls": [
{ "url": "https://wuzzuf.net/search/jobs/?q=software%20engineer" }
],
"location": "Alexandria",
"maxItems": 20,
"maxPagesPerSearch": 10
}

The location filter checks the combined area, city, and country published by Wuzzuf. It does not infer missing geography.

Monitor remote Wuzzuf jobs

Create a scheduled Apify Task with input such as:

{
"searchQueries": ["software engineer", "data analyst"],
"workplace": "Remote",
"postedWithinDays": 30,
"maxItems": 100,
"maxPagesPerSearch": 20
}

Schedule it daily or weekly. Use jobId as the key when comparing datasets. The Actor supplies snapshots; change detection, alerts, and historical retention are configured in your downstream automation.

Output example

A current run returns records shaped like this:

{
"jobId": "03aeedc2-994f-4e9c-a749-b782650b673a",
"title": "Software Quality Control Engineer.",
"company": "Softxpert Incorporation",
"location": "Alexandria, Egypt",
"country": "Egypt",
"city": "Alexandria",
"area": null,
"salary": {
"min": null,
"max": null,
"currency": null,
"period": null,
"additionalDetails": null,
"isPaid": true
},
"jobTypes": ["Full Time"],
"workplace": "Hybrid",
"careerLevel": "Experienced",
"experienceYears": { "min": 1, "max": 3 },
"skills": ["Computer Science", "QC", "QA"],
"workRoles": ["IT/Software Development", "Quality"],
"description": "Create and execute software test scenarios...",
"requirements": "Bachelor's degree in Computer Science...",
"postedAt": "2026-07-29T11:42:50.000Z",
"expiresAt": "2026-09-27T11:42:50.000Z",
"vacancies": 1,
"url": "https://wuzzuf.net/jobs/p/c0tpyxxdivc6-software-quality-control-engineer-softxpert-incorporation-alexandria-egypt",
"searchUrl": "https://wuzzuf.net/search/jobs/?q=software%20engineer",
"scrapedAt": "2026-08-01T07:44:24.000Z"
}

Source fields can be null when a company hides them or does not publish them.

How much does it cost to extract Wuzzuf jobs?

The Actor uses pay-per-event pricing:

  • a $0.005 start event once per run;
  • an item event only for each accepted job saved to the dataset.

The current item tiers decrease with account tier:

TierPrice per saved job
FREE$0.000920
BRONZE$0.000800
SILVER$0.000624
GOLD$0.000480
PLATINUM$0.000320
DIAMOND$0.000224

At the FREE item rate, 100 saved jobs cost about $0.10 including the start event, and 1,000 saved jobs cost about $0.93. Filtered-out, duplicate, and failed records are not item events. Your exact total follows your active Apify pricing tier and accepted result count.

Tips for reliable and efficient runs

  • Start with maxItems between 20 and 100 while refining filters.
  • Increase maxPagesPerSearch when a narrow client-side filter needs to scan deeper result pages.
  • Prefer a specific query instead of scanning a broad query with many filters.
  • Use stable query sets in scheduled Tasks so datasets remain comparable.
  • Keep jobId, postedAt, and expiresAt in downstream tables.
  • Treat missing salary as undisclosed, not as zero.
  • Avoid launching many overlapping runs against the same searches.

Pagination, deduplication, and limits

Wuzzuf currently returns about 15 jobs per search page. The Actor advances the source start parameter and reuses one healthy browser session.

Jobs are deduplicated across all supplied queries and URLs by jobId. A duplicate is neither saved nor charged again.

maxItems is global for the run. maxPagesPerSearch applies independently to each query or start URL.

Failure behavior and limitations

  • Wuzzuf protects pages with a browser challenge, so the Actor uses an Apify datacenter proxy session and a browser.
  • If the challenge cannot be completed after bounded session rotation, the run fails instead of returning a misleading empty success.
  • Only public Wuzzuf search pages are supported; profile, login, application, and private employer pages are not.
  • The Actor does not apply to jobs or contact employers.
  • Source data can change or disappear between runs.
  • Filters operate on values Wuzzuf publishes in each record.
  • postedWithinDays uses the source posting timestamp.
  • The Actor provides snapshots. It does not itself send alerts or calculate a historical diff.

Export Wuzzuf jobs to Excel, CSV, or JSON

Open the run dataset and select a download format in Apify Console. Available formats include JSON, CSV, Excel, XML, and RSS.

For recurring pipelines, use the dataset API rather than downloading manually. Stable IDs make database upserts straightforward.

Integrate with Google Sheets, Make, Zapier, or webhooks

Common workflows include:

  1. schedule the Actor daily;
  2. wait for the run-success webhook;
  3. fetch the default dataset;
  4. upsert rows into a spreadsheet, CRM, or warehouse by jobId;
  5. notify a channel only for IDs not seen in the previous dataset.

Apify integrations can connect runs with Make, Zapier, Slack, Google Sheets, webhooks, and custom services.

Run through the Apify API with cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~wuzzuf-jobs-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"searchQueries": ["data analyst"],
"location": "Cairo",
"maxItems": 50
}'

The response contains the run ID and links to its storage.

Run with JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/wuzzuf-jobs-scraper').call({
searchQueries: ['data analyst'],
location: 'Cairo',
maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Run with Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("automation-lab/wuzzuf-jobs-scraper").call(run_input={
"searchQueries": ["data analyst"],
"location": "Cairo",
"maxItems": 50,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

Use Wuzzuf Jobs Scraper with MCP

Add the Apify MCP server to Claude Code:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/wuzzuf-jobs-scraper"

Claude Desktop

Add this remote MCP server to your Claude Desktop configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/wuzzuf-jobs-scraper"
}
}
}

Cursor

Open Cursor Settings → MCP, add a remote server named apify, and use:

https://mcp.apify.com?tools=automation-lab/wuzzuf-jobs-scraper

VS Code

Add an HTTP MCP server to your VS Code MCP configuration with the same URL:

{
"servers": {
"apify": {
"type": "http",
"url": "https://mcp.apify.com?tools=automation-lab/wuzzuf-jobs-scraper"
}
}
}

Example prompts:

  • “Run Wuzzuf Jobs Scraper for data analyst roles in Cairo and return 25 jobs.”
  • “Collect remote software engineer jobs posted in the last 30 days.”
  • “Extract Wuzzuf software jobs in Alexandria and summarize common skills.”

Responsible use and legality

This Actor extracts public vacancy information. You are responsible for your use of the data and for complying with Wuzzuf's terms, applicable laws, copyright, database rights, privacy obligations, and employment regulations.

Do not use the Actor to collect private account data, overwhelm the source, republish protected content without permission, discriminate against candidates, or send unsolicited messages. Store only the fields your workflow needs and delete data when it is no longer required.

Troubleshooting

Why did a run fail on a Wuzzuf challenge?

The Actor rotates a bounded datacenter proxy/browser session automatically. Retry only after checking the run log for a temporary upstream challenge. If failures persist, reduce overlapping runs and report the run ID.

Why did a filtered run return fewer jobs than maxItems?

maxItems is a maximum, not a guaranteed count. The source may have fewer matching records, or maxPagesPerSearch may stop scanning prior to enough jobs pass a narrow filter. Increase the page limit carefully or make the query more specific.

Why is salary null?

Many employers do not disclose salary. The Actor preserves that absence rather than inventing a value.

Can I scrape a single job URL?

Not as an input mode. Use a Wuzzuf search URL or query, then identify the job by its canonical url or stable jobId in the output.

Frequently asked questions

Does it cover Wuzzuf Egypt and MENA vacancies?

It returns locations represented in Wuzzuf search results, including Egypt and other MENA markets. Coverage follows the live public source and the searches you provide.

Can I monitor new Wuzzuf jobs?

Yes. Save the input as an Apify Task, schedule it, and compare dataset rows by jobId. The Actor creates the snapshots; your integration controls retention, diffs, and alerts.

Are filtered-out jobs charged?

No. The item event is emitted only for accepted, unique records pushed to the default dataset.

Does it require my Wuzzuf account?

No. The supported workflow uses public search pages and does not accept Wuzzuf credentials.

What happens when two queries return the same job?

The Actor saves and charges that job once per run.

Explore other public-data automation from automation-lab on Apify. Combine compatible Actors through datasets, schedules, webhooks, and your own data pipeline.