
ReKrute Job Scraper
scrape.ly/store/openrole/rekrute-scraperJobsLead generation
2 monthly users

Scrape NaukriGulf.com jobs in the UAE, Saudi Arabia, Qatar, Kuwait, Oman and Bahrain. Search by keyword and location or paste URLs. Get title, company, salary, experience, full description, contact and posted date.
Scrape job listings from NaukriGulf.com, the large Gulf job board for the UAE, Saudi Arabia, Qatar, Kuwait, Oman and Bahrain. Search by keyword and location, or paste NaukriGulf URLs. Each row has the job title, company, location, salary, experience range, the full description, the desired candidate profile, recruiter contact details and the posting date. No login, no cookies, and it costs $0.70 per 1,000 jobs.
software engineer) and an optional location (dubai, riyadh, uae, saudi arabia).| Field | Type | Description |
|---|---|---|
query | string | Job keywords, e.g. accountant. Empty lists every job. |
location | string | City or country, e.g. dubai, qatar. Empty covers all markets. |
startUrls | array | NaukriGulf search URLs (/jobs-search?Keywords=…&Location=…, /accountant-jobs-in-dubai, /jobs-in-qatar). |
jobUrls | array | Job URLs (…-jid-071026000143) or 12-digit job IDs. |
maxResults | integer | Maximum jobs in total (default 20, 0 = all). |
datePosted | integer | Only jobs posted within this many days. |
experienceYears | integer | Only jobs that accept this many years of experience. |
sortBy | string | relevance (default) or date (newest first). |
includeDetails | boolean | Fetch each job's full details (default on). |
descriptionFormat | string | all, text, html or markdown. |
descriptionMaxLength | integer | Cut descriptions to N characters (0 = full). |
compact | boolean | Only core fields. |
excludeEmptyFields | boolean | Drop empty fields from each row. |
{
"query": "software engineer",
"location": "dubai",
"maxResults": 20,
"datePosted": 7,
"sortBy": "date"
}
| Field | Description |
|---|---|
jobKey | NaukriGulf's 12-digit job ID (jobId is a stable hash of it) |
title, summary, jobHighlights | Job title, one-line summary and highlight bullets |
company, companyId, companyLogo, companyProfile, companyWebsite | Employer details |
location, jobCountry, localities, locationType | Where the job is and whether it is on-site, hybrid or remote |
experienceMin, experienceMax | Required years of experience |
salaryMin, salaryMax, salaryCurrency, salaryMinUsd, salaryMaxUsd, salaryMinText, salaryMaxText, salaryHidden | Salary range in local currency and USD |
description, descriptionHtml, descriptionMarkdown | Full job description |
desiredCandidate, education, nationality, gender | Candidate requirements |
employmentType, industry, functionalArea, vacancies, keywords | Job classification |
contactName, contactDesignation, contactCity, contactCountry, contactAddress, contactEmail | Recruiter contact (email only when the employer shows it) |
isConsultantJob, isTopEmployer, isPremium, isWebJob, isEasyApply … | Listing flags |
extractedEmails, extractedPhones, extractedUrls, socialProfiles | Contacts and links found in the description text |
postedAt, url, scrapedAt | Posting date (ISO 8601), job page and scrape time |
Example row (shortened, sample data):
{
"jobId": "3deb75fd217746a51cb528ab867cdd9d088d7bd79819b77160e844af978ec791",
"jobKey": "071026000143",
"title": "Senior Full Stack Software Engineer",
"summary": "Design and develop scalable full-stack enterprise applications using Java, Spring Boot, and Microservices.",
"company": "Example Tech LLC",
"companyId": "41691",
"location": "Dubai - United Arab Emirates (UAE)",
"locationType": "On-site",
"jobCountry": "United Arab Emirates (UAE)",
"localities": ["Dubai"],
"experienceMin": 8,
"experienceMax": 12,
"salaryMin": 4000,
"salaryMax": 6000,
"salaryCurrency": "AED",
"salaryMinUsd": 1081,
"salaryMaxUsd": 1621,
"salaryHidden": false,
"employmentType": "Full-time",
"industry": "IT - Software Services",
"functionalArea": "Software Development / Application Development (IT Software)",
"vacancies": 1,
"keywords": ["Java", "Spring Boot", "Microservices", "Docker", "Kubernetes"],
"descriptionMarkdown": "**Job Summary:**\n\nWe are looking for a Senior Full Stack Software Engineer…",
"education": "Bachelor of Technology/Engineering (Computers)",
"nationality": "Any Nationality",
"contactName": "Jane Doe",
"contactDesignation": "Talent Acquisition Manager",
"contactCity": "Dubai",
"isConsultantJob": true,
"postedAt": "2026-10-07T04:00:00.000Z",
"url": "https://www.naukrigulf.com/senior-full-stack-software-engineer-jobs-in-dubai-uae-in-example-tech-llc-8-to-12-years-m-cd-41691-jid-071026000143",
"detailFetched": true,
"source": "naukrigulf.com"
}
You pay $0.70 per 1,000 jobs ($0.0007 per saved job), with or without full details. Platform usage (compute and a small amount of residential proxy traffic, about 12 MB per 1,000 jobs with details) is billed on top and is small: a 100-job run uses well under one cent of it.
Example: 1,000 jobs with full details ≈ $0.70 for results plus about two to three cents of platform usage.
Is it legal to scrape NaukriGulf? The actor only reads public job listings that anyone can see without logging in. You are responsible for how you use the data, in particular any personal data such as recruiter names, under the laws that apply to you (for example GDPR or the UAE PDPL).
Do I need a NaukriGulf account or a proxy? No account. Residential proxies are included by default because they are the fastest for NaukriGulf; datacenter proxies work too.
How many jobs can I get? There is no fixed limit per run. A search returns at most as many jobs as NaukriGulf lists for it; the status message tells you how many exist.
Why is a field empty?
Employers do not fill every field. Salaries are often hidden (salaryHidden: true), and recruiter emails are only included when the employer chose to show them. With full details off, only the search-card fields are filled.
Can I schedule it or use the API?
Yes. Schedule runs in the console (for example daily with sortBy: date and datePosted: 1) and read the dataset through the API or integrations.
What does "Posted within" do with values like 5? NaukriGulf filters by 1, 3, 7, 15, 30 or 60 days. The actor asks the site for the next bucket and then drops jobs older than your exact number of days.
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.
querystringOptionalSearch term
Job keywords, e.g. software engineer, accountant, nurse. Leave empty to list every job (optionally in one location).
locationstringOptionalLocation
City or country, e.g. dubai, riyadh, doha, uae, saudi arabia. Leave empty for all Gulf markets.
startUrlsarrayOptionalSearch URLs
NaukriGulf search pages copied from your browser, e.g. https://www.naukrigulf.com/jobs-search?Keywords=python&Location=uae or https://www.naukrigulf.com/accountant-jobs-in-dubai. Each URL is its own search; job URLs pasted here are fetched directly.
jobUrlsarrayOptionalJob URLs
Single NaukriGulf job pages (…-jid-071026000143) or 12-digit job IDs. Fetched directly, no search needed.
maxResultsintegerOptionaldefault 20Max results
Maximum number of jobs to save across all searches. 0 means all.
datePostedintegerOptionalPosted within (days)
Only jobs posted in the last N days, e.g. 1, 3, 7 or 15. Leave empty for any age.
experienceYearsintegerOptionalExperience (years)
Only jobs open to a candidate with this many years of experience (5 matches 3–8 or 5–10 years).
sortByenumOptionaldefault "relevance"Sort by
Relevance keeps NaukriGulf's own ranking. Date returns the newest jobs first.
includeDetailsbooleanOptionaldefault trueInclude full job details
Open each job for the full description, desired candidate, salary, contact, industry and company profile. Turn off for faster, search-card-only rows.
descriptionFormatenumOptionaldefault "all"Description format
Keep every description variant, or only plain text, HTML or Markdown.
descriptionMaxLengthintegerOptionaldefault 0Description max length
Cut descriptions to this many characters. 0 keeps the full text.
compactbooleanOptionaldefault falseCompact output
Save only core fields (job id, title, company, location, salary, experience, URL, posted date). Handy for AI agents.
excludeEmptyFieldsbooleanOptionaldefault falseExclude empty fields
Drop null, empty text and empty list fields from each row.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["RESIDENTIA…Proxy configuration
Residential proxies are used by default: they answer NaukriGulf about twice as fast as datacenter proxies and cost about 2.5 cents per 1,000 jobs. Datacenter proxies also work if you prefer them.
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 |
|---|---|---|
| title | any | Title |
| company | any | Company |
| location | any | Location |
| experienceMin | any | Exp min |
| experienceMax | any | Exp max |
| salaryMin | any | Salary min |
| salaryMax | any | Salary max |
| salaryCurrency | any | Currency |
| salaryMinUsd | any | Min (USD) |
| salaryMaxUsd | any | Max (USD) |
| employmentType | any | Type |
| industry | any | Industry |
| postedAt | any | Posted |
| url | any | URL |
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 job listing. | $0.0007 |
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/naukrigulf-scraper').call({
"query": "software engineer",
"location": "dubai",
"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/naukrigulf-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/naukrigulf-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.
Job search with full job details.
Newest jobs first with Markdown descriptions.
Quick job list without detail pages.
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.