# Naukrigulf Scraper — Gulf Jobs & Salaries, No Phones (`highbrow_fame/naukrigulf-jobs`) Actor

Gulf job ads from naukrigulf.com (UAE, Saudi Arabia, Qatar, Kuwait, Oman, Bahrain): title, company or consultant, experience, salary in local currency and US$, skills, posted date. No phones.

- **URL**: https://apify.com/highbrow\_fame/naukrigulf-jobs.md
- **Developed by:** [yestrue](https://apify.com/highbrow_fame) (community)
- **Categories:** Jobs
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.90 / 1,000 job delivereds

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Naukrigulf Scraper — Gulf Jobs & Salaries, No Phones

Get job ads from naukrigulf.com, the Gulf's big job board (UAE, Saudi Arabia, Qatar, Kuwait, Oman, Bahrain and more): title, company, whether a company or a recruitment consultant posted it, the experience range, the salary as the employer wrote it plus its minimum and maximum in local currency and in US dollars, city and country, skills, a one-line summary and highlights, when it was posted, industry, department, education, nationality and employment type — and, if you want, the full ad, the candidate profile and the company's profile. Paste your naukrigulf search links — or just type a job title and a city.

**Why this one**

- 🔗 **Your search, as you set it up.** Set every filter you like on naukrigulf.com — freshness, experience, salary, company or consultant, country, city, industry — and paste the link. Or type keywords and places here ("accountant" in "Dubai", "civil engineer" in "Qatar") and choose experience, freshness, salary bands, "posted by" and the sort order below.
- 💰 **Salaries you can compare.** Next to the pay as the employer wrote it ("AED 5,300 - 8,900 a month") every job has `salaryMin` / `salaryMax` in that currency and `salaryUsdMin` / `salaryUsdMax` converted to US dollars by naukrigulf, so AED, SAR, QAR and KWD jobs sort on one scale. When the employer hides the pay they stay empty — most Gulf employers do (3,317 of 3,773 jobs in the live run below).
- ⚡ **Fast, and to the end of a search.** A live test run read four searches — every job in Saudi Arabia from the last 15 days, engineer jobs in the UAE paying $2,001-4,000 a month for 5 years' experience, accountant jobs in the UAE from consultants (newest first), nurse jobs in Kuwait — 3,773 jobs, each with its full ad, in 8.6 minutes: every job naukrigulf counted for each search (1,951 of 1,951, 1,392 of 1,392, 384 of 384, 46 of 46).
- 🏢 **Company or consultant.** Every job says `postedBy`: `company` or `consultant` (a recruitment agency posting for a client — the company is then the client, or "Client of …").
- 🔒 **No phone numbers, no recruiter names.** The contact person, phone, e-mail and address naukrigulf keeps with every job are never read. Phone numbers (UAE and Saudi mobiles, the 8-digit numbers of Qatar, Kuwait, Bahrain and Oman, Egyptian and Indian mobiles) and e-mail addresses in the ads become `[phone removed]` / `[e-mail removed]`, and the lines that name a recruiter ("please call Ahmed …", "Contact Person: …", "Regards, / <name>") are taken out.
- 💸 **You pay only for jobs delivered.** A link that is not a naukrigulf search, or a place naukrigulf does not know, comes back as a free record with the reason.

### What you get

For every job:

| Field | What it is |
|---|---|
| `title`, `jobId`, `url` | the job ad |
| `company`, `companyId`, `logo`, `companyWebsite` | who posted it, as naukrigulf shows it, and their website |
| `postedBy`, `isConfidentialCompany` | `company` or `consultant`; employers that hide their name ("Confidential Company") |
| `experience`, `experienceMin`, `experienceMax` | the experience range ("5-10 years") and its years |
| `salary`, `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod` | the pay as written ("AED 5,300 - 8,900 a month"), its numbers, currency (AED, SAR, QAR, KWD, USD …) and period |
| `salaryUsdMin`, `salaryUsdMax` | the same pay in US dollars, as naukrigulf converts it |
| `locationText`, `locations`, `country`, `localities` | where, as naukrigulf shows it, as a list of cities, the country, and areas such as "Business Bay" |
| `workplace`, `employmentType` | `office` / `remote` / `hybrid`; full-time, part-time … |
| `skills`, `summary`, `highlights` | the skills on the job, naukrigulf's one-line summary and its highlights |
| `industry`, `department`, `education`, `nationality`, `gender` | the employer's industry and the job's function, and what the employer asks for |
| `postedAt`, `vacancies`, `expiringSoon`, `isExpired` | when it was posted, openings, and naukrigulf's "expiring soon" |
| `isWebJob`, `appliesOnCompanySite`, `isTopEmployer`, `isFeaturedEmployer` | a "web job" naukrigulf lists from elsewhere, jobs applied for on the employer's own site, naukrigulf's employer badges |
| `input`, `position`, `scrapedAt`, `status`, `error` | which search it came from, and why a search gave nothing |

With **Add the full job ad** also: `description`, `candidateProfile` (what the employer asks of a candidate) and `companyProfile` (the company's own description). If a job goes offline between the search and its page, it comes with `detailsError` instead of the job-page fields.

#### Example

A real record from a live run with the full ad — engineer jobs in the UAE paying $2,001-4,000 a month for 5 years' experience, 26 September 2026:

```json
{
  "input": "https://www.naukrigulf.com/engineer-jobs-in-uae?ctc=4,5&exp=5",
  "position": 28,
  "jobId": "250926000187",
  "url": "https://www.naukrigulf.com/bim-modeler-mep-jobs-in-dubai-uae-in-falcon-survey-engineering-consultants-5-to-10-years-n-cd-214021-jid-250926000187",
  "title": "BIM Modeler MEP",
  "company": "FALCON SURVEY ENGINEERING CONSULTANTS",
  "companyId": "214021",
  "experience": "5-10 years",
  "experienceMin": 5,
  "experienceMax": 10,
  "locationText": "Dubai - United Arab Emirates (UAE)",
  "locations": ["Dubai"],
  "country": "United Arab Emirates (UAE)",
  "skills": ["MEP BIM Specialist", "BIM Technician MEP", "BIM Drafter MEP", "Revit MEP", "MEP Modeling", "Quantity Take-off", "BIM Engineer MEP", "Navisworks", "BIM Coordination"],
  "summary": "Develop and maintain 3D MEP models, coordinate systems, generate 2D drawings, and validate designs using BIM software with a relevant engineering degree.",
  "highlights": ["Develop and maintain accurate 3D MEP models using BIM software", "Coordinate MEP systems with architectural and structural models", "Generate 2D drawings, sections, and schedules from the 3D model", "Perform spatial analysis and design validation for constructability"],
  "postedAt": "2026-09-25T13:40:00.000Z",
  "vacancies": 1,
  "isWebJob": false,
  "isTopEmployer": false,
  "isFeaturedEmployer": false,
  "expiringSoon": false,
  "logo": "https://static.naukimg.com/ni/nipjp/214021/214021_srp.gif",
  "postedBy": "company",
  "isConfidentialCompany": false,
  "salary": "AED 5,300 - 8,900 a month",
  "salaryMin": 5300,
  "salaryMax": 8900,
  "salaryCurrency": "AED",
  "salaryPeriod": "month",
  "salaryUsdMin": 1432,
  "salaryUsdMax": 2404,
  "industry": "Construction / Civil Engineering",
  "department": "Architecture / Interior Design",
  "employmentType": "Full-time",
  "workplace": "office",
  "localities": [],
  "education": "Bachelor of Technology/Engineering(Civil)",
  "nationality": "Any Nationality",
  "gender": "Any",
  "appliesOnCompanySite": false,
  "companyWebsite": "https://www.falconsurveyme.com/",
  "isExpired": false,
  "description": "• Develop and maintain accurate 3D MEP models using BIM software, ensuring adherence to project specifications and design intent.\n• Coordinate MEP systems with architectural and structural models to identify and resolve clashes early in the design process.\n• Generate detailed 2D drawings, sections, …",
  "candidateProfile": "• Bachelor's degree in Mechanical Engineering, Electrical Engineering, or a related technical field, or equivalent practical experience.\n• Possession of relevant BIM certifications (e.g., Autodesk Certified Professional) is highly advantageous.\n• …",
  "companyProfile": "Falcon group consist of Wide range of Engineering Service industries such as Engineering Surveys, 3D and 2D Mappings, Construction Monitoring, NDT and Inspections Geotechnical, Geophysical, Construction Material Testing, Engineering and Scientific Equipment Trading.",
  "status": "OK",
  "scrapedAt": "2026-09-25T23:11:48.225Z"
}
```

### How to use it

1. Paste **Search links** from naukrigulf.com, one per line — or type **Keywords** and **Places** (every keyword is searched in every place) and choose the filters.
2. Set **Max jobs per search**, and tick **Add the full job ad** if you need the description, the candidate profile and the company profile.
3. Press **Start**, and download the results from the **Output** tab as JSON, CSV or Excel.

To follow new jobs, save your input as a task with **Freshness** set to "Last 1 day" and schedule it daily.

You can also call it from the Apify API, from Make, Zapier or n8n, or from an AI agent through the Apify MCP server.

### Pricing

You are charged **per job delivered** — see the price on this page. Every job is opened on naukrigulf for its salary and details, and the full ad costs nothing extra. Links that are not naukrigulf searches and places naukrigulf does not know are free.

### FAQ

**How many jobs per search?** As many as the search has: naukrigulf lets a search be read to its last page, 50 jobs a page, up to its own limit of 45,000 — more than all of naukrigulf holds today (41,208 jobs). In the live run above every search came back complete. A search is about 7 jobs a second with every job opened: 3,773 jobs in 517 seconds.

**Are the filters obeyed?** Yes, naukrigulf applies them, and the run checks the salary bands itself. In the live run: 1,392 of 1,392 jobs from an "experience 5 years" link had 5 years in their range, and all 340 of them that show their pay were in the chosen $2,001-4,000 bands; 1,951 of 1,951 jobs from a Saudi Arabia link were in Saudi Arabia; a date-sorted search was newest day first in 383 of 383 steps. naukrigulf counts freshness by calendar day: in its "last 15 days" 1,939 of 1,951 jobs were at most 15 days old and the oldest 15.8 days. In a "consultant jobs" link 347 of 384 jobs carry naukrigulf's consultant flag; most of the other 37 were posted by recruitment agencies under their own name (15 as "Confidential Company"). A "Kuwait" search held 2 jobs in 46 whose places did not name Kuwait.

**What if naukrigulf does not know my place?** Beside a keyword, naukrigulf quietly drops a place it does not know and shows jobs from everywhere, and it reads some places oddly ("Kuwait City" as the keyword "City" in Kuwait). The run checks every place first: one naukrigulf does not read as a place comes back as a free `NOT_FOUND` record with how naukrigulf read it, instead of thousands of wrong jobs. "KSA", which naukrigulf takes for Kuwait, is searched as Saudi Arabia, and "Kuwait City" as Kuwait's capital.

**Why is the salary empty for most jobs?** The employer hid it. naukrigulf shows pay only when the employer chooses to; in the live run 456 of 3,773 jobs showed it (384 in AED, 54 in SAR) — none of the 1,943 web jobs and 456 of the 1,830 others.

**What is a web job?** A job naukrigulf lists from elsewhere on the web rather than one an employer posted on naukrigulf itself (`isWebJob`). They come with the same search fields, industry and ad, but in the live run none of the 1,943 had a salary, an on-site / remote label or an employment type. In the live run 1,701 of the 1,951 Saudi jobs were web jobs.

**Why no phone numbers or recruiter names?** They are personal data. Every job has its `url`; applicants apply on naukrigulf. The contact block naukrigulf keeps with each job — the recruiter's name, title, address, phone and e-mail — is never read. In the ads, phone numbers and e-mail addresses are removed, and so are the lines that name a contact person, by rules that know how Gulf job ads write them. naukrigulf's ads are clean: the 3,773 full ads of the live run held no phone number or e-mail address at all, and one named a contact person under a "Contact Person Name, Address & Nos.:" heading — that block is taken out now. Rules can miss an unusual wording, which is why the full ad is off by default. A company's own profile can name its founder or chairman; that is left as the company wrote it.

**Why is the company "Client of …" or "Confidential Company"?** That is how naukrigulf shows a job a consultant posts for a client, and an employer that hides its name. The run gives the company name exactly as naukrigulf publishes it.

**Is this affiliated with naukrigulf.com or Info Edge?** No. This is an independent tool that reads public job ads on naukrigulf.com.

**Like it?** A short review on the Store page helps other people find this Actor. Something missing or broken? Tell us on the Issues tab — we read every one.

# Actor input Schema

## `searchUrls` (type: `array`):

Search on naukrigulf.com, set the filters you want (freshness, experience, salary, company or consultant, country, city, industry …) and paste the address of the results page. One per line. Links like naukrigulf.com/accountant-jobs-in-dubai, naukrigulf.com/sales-jobs or naukrigulf.com/jobs-in-qatar.

## `keywords` (type: `array`):

Or search here without a link: job titles, skills or companies (accountant, civil engineer, nurse, Emirates). Each keyword is searched in each place below, or in all of naukrigulf when there is no place. The filters below apply.

## `locations` (type: `array`):

Countries or cities as naukrigulf.com knows them (UAE, Dubai, Abu Dhabi, Sharjah, Saudi Arabia, Riyadh, Jeddah, Qatar, Doha, Kuwait, Oman, Muscat, Bahrain, Egypt), or Gulf for all Gulf countries. A place without keywords gives all its jobs.

## `experienceYears` (type: `integer`):

Optional: only jobs whose experience range includes this many years, as naukrigulf's own Experience box (0 = freshers).

## `postedWithinDays` (type: `string`):

Optional: only jobs posted within this many days, as naukrigulf counts them.

## `postedBy` (type: `string`):

Optional: jobs posted by the employer itself, or by recruitment consultants.

## `salaryBands` (type: `array`):

Optional: naukrigulf's salary filter, monthly pay converted to US dollars. A job counts when its pay range overlaps a chosen band. Jobs that hide their salary are placed by naukrigulf.

## `sortBy` (type: `string`):

Relevance (naukrigulf's default) or newest first.

## `maxListingsPerSearch` (type: `integer`):

Stops each search after this many jobs. naukrigulf.com lets a search be read to its end.

## `includeDescription` (type: `boolean`):

Off by default. Adds the full job description, the candidate profile the employer asks for and the company's own profile. Phones and e-mails are removed, and sentences that name a recruiter are taken out by rules, which can miss an unusual wording — see the README.

## `maxConcurrency` (type: `integer`):

How many searches to work on at the same time.

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

Used only when naukrigulf.com turns a request down: the first try goes out directly.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.naukrigulf.com/accountant-jobs-in-dubai"
  ],
  "postedWithinDays": "any",
  "postedBy": "any",
  "sortBy": "relevance",
  "maxListingsPerSearch": 30,
  "includeDescription": false,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Every result as a JSON record, with a status for each input.

## `resultsCsv` (type: `string`):

The same records as CSV, for a spreadsheet.

# 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 = {
    "searchUrls": [
        "https://www.naukrigulf.com/accountant-jobs-in-dubai"
    ],
    "maxListingsPerSearch": 30,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("highbrow_fame/naukrigulf-jobs").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 = {
    "searchUrls": ["https://www.naukrigulf.com/accountant-jobs-in-dubai"],
    "maxListingsPerSearch": 30,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("highbrow_fame/naukrigulf-jobs").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchUrls": [
    "https://www.naukrigulf.com/accountant-jobs-in-dubai"
  ],
  "maxListingsPerSearch": 30,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call highbrow_fame/naukrigulf-jobs --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,highbrow_fame/naukrigulf-jobs"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/xxTw59SXkDYRX727R/builds/0LDJFZAWKNOZisMI2/openapi.json
