
Global Sources Supplier Scraper
scrape.ly/store/cornerledger/globalsources-scraperLead generationE-commerce
2 monthly users

Scrape wuzzuf.net job listings in Egypt, Saudi Arabia, the UAE and the Gulf: title, company, salary, career level, job type, workplace, experience, full description, skills, Arabic text and company profile. Search by keyword, country, city and filters, or paste Wuzzuf URLs.
Turn wuzzuf.net job ads from Egypt and the Gulf into clean, structured job data: title, company, salary, career level, job type, workplace, required experience, skills, the full description in English and Arabic, and the employer's profile. Search by keyword, country, city and filters, or paste Wuzzuf links. No login, no browser, results in seconds.
accountant, software engineer or محاسب), or paste Wuzzuf URLs (search pages, browse pages or job pages).| Field | What it does |
|---|---|
searchQueries | Keywords, one search each. Leave empty to list the newest jobs. |
country | EG, SA, AE, KW, QA, BH, OM, JO, LB or ALL. Default EG. |
cities | Optional cities, e.g. Cairo, Giza, Alexandria, Riyadh. |
startUrls | Wuzzuf search, browse (/a/...-Jobs-in-...) or job (/jobs/p/...) URLs. |
maxResults | Total jobs to save (0 = no limit). |
maxResultsPerSearch | Optional cap per keyword or URL search. |
postedWithin | any, 24h, week or month. |
careerLevels, jobTypes, workplaceTypes, jobRoles | Wuzzuf's own filters. |
minYearsExperience, maxYearsExperience | Required experience range. |
onlyWithSalary, minMonthlySalary | Keep jobs with a published (and high enough) salary. |
easyApplyOnly | Only jobs you apply to on Wuzzuf. |
includeCompanyDetails, includeArabic | Extra company and Arabic fields (both on by default). |
{
"searchQueries": ["accountant", "data analyst"],
"country": "EG",
"cities": ["Cairo", "Giza"],
"postedWithin": "week",
"careerLevels": ["entry_level", "experienced"],
"workplaceTypes": ["hybrid", "remote"],
"maxResults": 100
}
One row per job. The main fields:
| Field | Example |
|---|---|
title, company, location | Senior Accountant · KnowledgeCity · Riyadh, Saudi Arabia |
salaryMin, salaryMax, salaryCurrency, salaryPeriod, salaryText | 15000 · 25000 · EGP · MONTH · "15,000 - 25,000 EGP per month" |
employmentType, workplaceArrangement, careerLevel | Full Time · Hybrid · Experienced |
yearsExperienceMin, yearsExperienceMax, educationLevel, vacancies | 2 · 4 · Bachelor's Degree · 3 |
workRoles, keywords | job categories and skills |
description, requirements, descriptionHtml, descriptionMarkdown | full text in three formats |
titleArabic, descriptionArabic, requirementsArabic | Arabic version |
postedAt, validThrough | ISO 8601 times in UTC |
url, applyUrl, viewsCount, applicationType | job page, where to apply, views |
companyWebsite, companyIndustry, companyEstablishedYear, companyIsVerified, companyLinkedin, companyLogo, companyUrl | employer profile |
Example (trimmed):
[
{
"id": "dc092324-859b-4ab1-97c5-d552c75aea2b",
"jobKey": "ohmr4fk8ltbv",
"title": "Business Development Agent",
"company": "Scope PM",
"companyId": "92024",
"location": "Nasr City, Cairo, Egypt",
"locationCountry": "Egypt",
"locationCountryCode": "EG",
"locationCity": "Cairo",
"locationArea": "Nasr City",
"latitude": 30.05578,
"longitude": 31.346164,
"salaryText": "15,000 - 25,000 EGP per month",
"salaryMin": 15000,
"salaryMax": 25000,
"salaryCurrency": "EGP",
"salaryPeriod": "MONTH",
"salaryHidden": false,
"salaryAdditionalDetails": "commission based",
"salaryIsPaid": true,
"employmentType": "Full Time",
"employmentTypes": [
"Full Time"
],
"workplaceArrangement": "Hybrid",
"careerLevel": "Experienced",
"careerLevelHint": "Non-Manager",
"educationLevel": "Bachelor's Degree",
"yearsExperienceMin": 2,
"yearsExperienceMax": 4,
"vacancies": 3,
"workRoles": [
"Business Development",
"Marketing/PR/Advertising",
"Sales/Retail"
],
"keywords": [
"Business Development",
"Business Administration",
"Customer Service",
"Customer Support",
"Customer Care",
"Sales"
],
"description": "Business Developer Agent – US Market (3 Positions)\nCairo, Egypt – On-site\nWe’re hiring three Business Developer Agents to generate leads and close deals with cl...",
"requirements": "• Excellent spoken and written English (C1 level or above), with a clear, confident phone voice\n• 2–4 years in outbound sales, business development, or call cen...",
"descriptionHtml": "<p><strong>Business Developer Agent – US Market (3 Positions)</strong><br> Cairo, Egypt – On-site</p><p>We’re hiring <strong>three Business Developer Agents</st...",
"descriptionMarkdown": "**Business Developer Agent – US Market (3 Positions)**\nCairo, Egypt – On-site\n\nWe’re hiring **three Business Developer Agents** to generate leads and close deal...",
"descriptionLength": 848,
"postedAt": "2026-10-16T12:13:27Z",
"validThrough": "2026-12-15T13:13:27Z",
"status": "active",
"applicationType": "internal",
"url": "https://wuzzuf.net/jobs/p/ohmr4fk8ltbv-business-development-agent-scope-pm-cairo-egypt",
"applyUrl": "https://wuzzuf.net/jobs/p/ohmr4fk8ltbv-business-development-agent-scope-pm-cairo-egypt",
"viewsCount": 163,
"screeningQuestions": 3,
"isFeatured": false,
"isHighlighted": false,
"requiresBachelorDegree": false,
"tempRemoteAllowed": false,
"source": "search",
"scrapedAt": "2026-10-21T11:32:29Z",
"titleArabic": "وكيل تطوير الأعمال",
"descriptionArabic": "وكيل تطوير أعمال - السوق الأمريكي (3 وظائف) القاهرة، مصر - العمل في الموقع. نوظف ثلاثة وكلاء تطوير أعمال لتوليد عملاء محتملين وإبرام صفقات مع عملاء في الولايات...",
"requirementsArabic": "إجادة اللغة الإنجليزية تحدثاً وكتابةً (مستوى C1 أو أعلى)، مع صوت واضح وواثق عبر الهاتف. خبرة من سنتين إلى أربع سنوات في المبيعات الخارجية، أو تطوير الأعمال، أو...",
"companyLogo": "https://images.wuzzuf-data.net/files/company_logo/30903409764c4083c7ecdb.jpeg",
"companyUrl": "https://wuzzuf.net/jobs/careers/Scope%20PM-Switzerland-92024",
"companyWebsite": "www.scope-pm.com",
"companyDescription": "Scope Project Management are a group of professional, enthusiastic construction managers who decided to merge their experience and knowledge to open a construct...",
"companyIndustry": "Construction - Industrial Facilities and Infrastructure, Construction - Residential & Commercial/Office, Consulting Services",
"companyIndustries": [
"Construction - Industrial Facilities and Infrastructure",
"Construction - Residential & Commercial/Office",
"Consulting Services"
],
"companySpecialties": [
"Construction - Industrial Facilities and Infrastructure",
"Management Consulting",
"Consulting Services"
],
"companyEstablishedYear": 2022,
"companyIsVerified": true,
"companyIsPersonal": false,
"companyHiringFor": "Business Developer",
"companySizeId": "2",
"companyLinkedin": "https://www.linkedin.com/company/scope-project-management/",
"companyFacebook": null,
"companyTwitter": null,
"companyInstagram": null,
"companyYoutube": null,
"companyCreatedAt": "2023-07-28T18:06:10Z",
"searchQuery": "developer",
"searchUrl": "https://wuzzuf.net/search/jobs/?q=developer&filters%5Bcountry%5D%5B0%5D=Egypt"
}
]
You pay $0.80 per 1,000 jobs saved ($0.0008 per job), plus the small platform usage of the run (compute and proxy traffic). In our test runs the usage came to about $0.007 per 1,000 jobs on the default settings.
Is it legal to scrape Wuzzuf? The actor only reads public job ads that anyone can see without an account. You are responsible for how you use the data, especially any personal data, under the laws that apply to you (for example Egypt's data protection law or the GDPR).
Do I need a Wuzzuf account or a proxy? No account and no login. The run uses residential proxies in the searched country by default, because Wuzzuf's protection refuses most datacenter addresses. Wuzzuf jobs are small, so proxy traffic stays at a few megabytes per 1,000 jobs.
How many jobs can I get?
As many as Wuzzuf lists for your search. In October 2026 Wuzzuf listed about 5,100 open jobs in Egypt and far fewer in the Gulf and Levant markets (from a handful to a few dozen per country). Set maxResults to 0 to take everything a search returns; the run ends with a message saying how many jobs Wuzzuf listed.
Why is the salary empty for many jobs?
Most employers on Wuzzuf hide the salary. salaryHidden tells you when that is the case. Use onlyWithSalary to keep only jobs with a published salary.
Why are the times different from what the site shows?
Wuzzuf shows Cairo time. The actor converts postedAt and validThrough to UTC so they sort and compare correctly anywhere.
Can I schedule it or use the API?
Yes. Save your input as a task, schedule it (for example every morning with postedWithin: "24h"), and read the results through the API or an integration.
/jobs/careers/...) are not accepted as start URLs yet; use a keyword search for the company name instead.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
searchQueriesarrayOptionalSearch keywords
Job titles or skills to search for, one per line, for example accountant, software engineer or محاسب. Each keyword is a separate Wuzzuf search. Leave empty (and add no URLs) to list the newest jobs in the chosen country.
countryenumOptionaldefault "EG"Country
Country to search in. Most Wuzzuf jobs are in Egypt; the Gulf and Levant markets are smaller. Applies to keyword searches.
citiesarrayOptionalCities
Optional cities inside the chosen country, as Wuzzuf spells them, for example Cairo, Giza, Alexandria or Riyadh. Jobs in any of these cities are returned.
startUrlsarrayOptionalWuzzuf URLs
Wuzzuf search pages (wuzzuf.net/search/jobs/?q=...&filters...), browse pages (wuzzuf.net/a/Accounting-Jobs-in-Egypt) or single job pages (wuzzuf.net/jobs/p/...). Filters set on the site are kept. The filters below apply to keyword searches; the salary, experience and Easy Apply filters apply to everything.
maxResultsintegerOptionaldefault 20Max results
Maximum number of jobs to save in total, across all keywords and URLs. Use 0 for no limit.
maxResultsPerSearchintegerOptionaldefault 0Max results per search
Cap the jobs saved per keyword or search URL, so one broad search does not use up the whole limit. 0 means no cap.
Wuzzuf's own search filters (applied by the site), plus salary, experience and Easy Apply filters applied to each job.
postedWithinenumOptionaldefault "any"Date posted
Only jobs posted in this period.
careerLevelsarrayOptionalCareer level
Keep jobs for any of these career levels. Leave empty for all.
jobTypesarrayOptionalJob type
Keep jobs of any of these types. Leave empty for all.
workplaceTypesarrayOptionalWorkplace
Keep on-site, hybrid or remote jobs. Leave empty for all.
jobRolesarrayOptionalJob categories
Wuzzuf job categories, exactly as the site names them, for example IT/Software Development, Accounting/Finance, Sales/Retail or Customer Service/Support. Leave empty for all.
minYearsExperienceintegerOptionalMin years of experience required
Keep only jobs that ask for at least this many years of experience.
maxYearsExperienceintegerOptionalMax years of experience required
Keep only jobs that ask for at most this many years (good for junior roles). Jobs without a stated minimum are kept.
onlyWithSalarybooleanOptionaldefault falseOnly jobs with a salary
Keep only jobs that publish a salary. Most Wuzzuf jobs hide the salary, so this drops many jobs.
minMonthlySalaryintegerOptionalMin monthly salary (local currency)
Keep only jobs whose published salary reaches this amount per month, in the job's own currency (EGP in Egypt, SAR in Saudi Arabia, AED in the UAE). Yearly, weekly, daily and hourly salaries are converted to a monthly figure.
easyApplyOnlybooleanOptionaldefault falseEasy Apply jobs only
Keep only jobs you apply to directly on Wuzzuf (no external application site).
includeCompanyDetailsbooleanOptionaldefault trueInclude company profile
Add the employer's website, description, industries, founding year, verification and social links to every job. The company name, logo and page are always included.
includeArabicbooleanOptionaldefault trueInclude Arabic text
Add Wuzzuf's Arabic version of the title, description and requirements.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["RESIDENTIA…Proxy configuration
Residential proxies in the searched country are the default, because Wuzzuf's protection refuses most datacenter addresses. If you pick datacenter, the run switches to residential on its own when it is refused.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| id | string | null | Wuzzuf job id |
| jobKey | string | null | Short job key from the job URL |
| title | string | null | Job title |
| company | string | null | Hiring company ('Confidential' when the employer is hidden) |
| companyId | string | null | Wuzzuf company id |
| location | string | null | Area, city and country |
| locationCountry | string | null | Country |
| locationCountryCode | string | null | ISO country code |
| locationCity | string | null | City |
| locationArea | string | null | Area or district |
| latitude | number | null | Latitude of the area or city |
| longitude | number | null | Longitude of the area or city |
| salaryText | string | null | Salary as text, when published |
| salaryMin | number | null | Lowest salary |
| salaryMax | number | null | Highest salary |
| salaryCurrency | string | null | Salary currency (EGP, SAR, AED, USD, ...) |
| salaryPeriod | string | null | MONTH, YEAR, WEEK, DAY or HOUR |
| salaryHidden | boolean | null | The employer hides the salary |
| salaryAdditionalDetails | string | null | Extra salary notes (commission, bonuses) |
| salaryIsPaid | boolean | null | Paid position |
| employmentType | string | null | Job type(s), comma separated |
| employmentTypes | array | null | Job types |
| workplaceArrangement | string | null | On-site, Hybrid or Remote |
| careerLevel | string | null | Career level |
| careerLevelHint | string | null | Career level hint (Manager / Non-Manager) |
| educationLevel | string | null | Required education |
| yearsExperienceMin | number | null | Minimum years of experience |
| yearsExperienceMax | number | null | Maximum years of experience |
| vacancies | number | null | Open positions |
| workRoles | array | null | Job categories |
| keywords | array | null | Skills and tools |
| description | string | null | Full description and requirements as plain text |
| requirements | string | null | Requirements as plain text |
| descriptionHtml | string | null | Description and requirements as HTML |
| descriptionMarkdown | string | null | Description and requirements as Markdown |
| descriptionLength | number | null | Length of the plain-text description |
| titleArabic | string | null | Arabic title |
| descriptionArabic | string | null | Arabic description |
| requirementsArabic | string | null | Arabic requirements |
| postedAt | string | null | Posting time (UTC) |
| validThrough | string | null | Expiry time (UTC) |
| status | string | null | Job status |
| applicationType | string | null | internal (apply on Wuzzuf) or external |
| url | string | null | Job page |
| applyUrl | string | null | Where to apply |
| viewsCount | number | null | Views of the job |
| screeningQuestions | number | null | Number of screening questions |
| isFeatured | boolean | null | Featured job |
| isHighlighted | boolean | null | Highlighted job |
| requiresBachelorDegree | boolean | null | Requires a bachelor's degree |
| tempRemoteAllowed | boolean | null | Temporary work from home allowed |
| companyLogo | string | null | Company logo |
| companyUrl | string | null | Company page on Wuzzuf |
| companyWebsite | string | null | Company website |
| companyDescription | string | null | Company description |
| companyIndustry | string | null | Company industries, comma separated |
| companyIndustries | array | null | Company industries |
| companySpecialties | array | null | Company specialties |
| companyEstablishedYear | number | null | Founding year |
| companyIsVerified | boolean | null | Verified employer |
| companyIsPersonal | boolean | null | Personal (individual) account |
| companyHiringFor | string | null | Roles the company is hiring for |
| companySizeId | string | null | Wuzzuf company size id |
| companyLinkedin | string | null | LinkedIn page |
| companyFacebook | string | null | Facebook page |
| companyTwitter | string | null | X / Twitter account |
| companyInstagram | string | null | |
| companyYoutube | string | null | YouTube |
| companyCreatedAt | string | null | When the company joined Wuzzuf (UTC) |
| searchQuery | string | null | Keyword that found the job |
| searchUrl | string | null | Wuzzuf search page for this search |
| source | string | null | search or url |
| scrapedAt | string | null | Scrape time (UTC) |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Job | One saved Wuzzuf job listing. | $0.0008 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('openrole/wuzzuf-scraper').call({
"searchQueries": [
"developer"
],
"maxResults": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"RESIDENTIAL"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run openrole/wuzzuf-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=openrole/wuzzuf-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Wuzzuf's own filters: city, date posted, career level, job type and workplace.
Only jobs that show a salary, at least 2 years of experience.
Filters set on wuzzuf.net are kept; 5 jobs per link.
Job category and workplace filters without company profile or Arabic text.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.