# Naukrigulf Jobs Scraper & API: Gulf Salaries, Emails (`s_actors/naukrigulf-scraper`) Actor

Scrape Naukrigulf jobs in Dubai, UAE, Saudi Arabia, Qatar, Kuwait, Oman: monthly salary as numbers, nationality and gender wanted (jobs open to Indians, Filipinos...), recruiter email and contact, industry, company or consultancy, fake-job red flags, job alerts.

- **URL**: https://apify.com/s_actors/naukrigulf-scraper.md
- **Developed by:** [Superior Actors](https://apify.com/s_actors) (community)
- **Categories:** Jobs, Lead generation, AI
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.79 / 1,000 jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Jobs Scraper & API: Gulf Salaries, Nationality, Emails

Scrape **Naukrigulf** (naukrigulf.com) jobs in **Dubai, Abu Dhabi, the UAE, Saudi Arabia, Qatar, Kuwait, Oman, Bahrain** and the rest of the Middle East to Excel, CSV or JSON **without login**. Every job comes with its full job card, not only the search snippet:

- **Monthly salary as numbers**: currency, low and high as posted ("AED 3,500 - 4,000 a month"), the same per year, and Naukrigulf's USD band. Filter by a **minimum monthly salary in AED**.
- **Who can apply**: the **nationality** the employer asks for ("Indian", "Any Arab National", "Any Nationality") and **gender**. Filter **jobs open to your nationality**: Indian, Pakistani, Filipino, Egyptian, Nepali, British...
- **Recruiter contact**: contact name and role, **email**, address, company website, company or recruitment consultancy.
- **Red flags of fake Gulf jobs**: visa or processing fee asked, WhatsApp-only contact, personal Gmail address, earning promises.
- **Job alerts**: schedule it and get only the jobs you have not seen yet.

```json
{ "keywords": ["driver"], "locations": ["UAE"], "openToNationality": "Indian", "minMonthlySalaryAed": 2500 }
```

No Naukrigulf account, no cookies, no browser. Use it as a **Naukrigulf jobs API**: one call returns clean JSON with the fields above.

#### What you get

**One row per job.** Real examples, October 2026 (UAE, newest first):

| job | company | location | salary | nationality | experience |
|---|---|---|---|---|---|
| Key Account Manager (B2B Sales) | eMinds | Abu Dhabi | AED 6,000 - 6,500 a month | Any Nationality | 2-6 years |
| Social Media Marketing Manager | DM Healthcare LLC | Dubai | AED 6,000 - 10,000 a month | Indian, Jordanian, Lebanese, Filipino | 5-10 years |
| Electrical Technician | Indman DMCC | Abu Dhabi | AED 3,500 - 4,000 a month | Indian | 3-8 years |
| Quantity Surveyor Manager | Fatherson International FZE | Dubai | AED 15,000 - 20,000 a month | Any Nationality | 8-14 years |
| Heavy Trailer Driver | Zararah General Transporting company | Abu Dhabi | AED 3,200 - 4,000 a month | Indian | 2-5 years |

In our test of 100 newest UAE jobs (October 2026): all 100 had the full description, nationality, industry and experience; 63 a recruiter contact name, 25 a monthly salary, 21 a recruiter email and 20 a company website. For drivers in the UAE, 20 of 20 jobs open to Indians with at least AED 2,500 had a salary.

| Field | Description |
|---|---|
| `jobId`, `jobUrl`, `title`, `summary` | The job, its Naukrigulf page and a one-line summary |
| `companyName`, `companyId`, `companyUrl`, `companyType`, `postedByType`, `companyAbout`, `companyLogo` | The employer; `postedByType` = `company` or `consultancy` (recruitment agency) |
| `location`, `country`, `workplaceType` | Where; `on-site`, `remote` or `hybrid` |
| `salaryText`, `salaryMonthlyMin`, `salaryMonthlyMax`, `salaryCurrency`, `salaryPeriod` | Monthly salary as posted (AED, SAR, QAR, KWD, OMR, BHD, USD...) |
| `salaryYearlyMin`, `salaryYearlyMax`, `salaryUsdBandMin`, `salaryUsdBandMax`, `salaryHidden`, `otherBenefits` | The same per year, Naukrigulf's USD band, hidden by the employer, benefits (air ticket, visa, housing, medical) |
| `nationality`, `gender`, `education`, `desiredCandidate` | Who the employer wants |
| `experienceMinYears`, `experienceMaxYears`, `experienceLevel` | Years of experience asked |
| `industries`, `functionalArea`, `employmentType`, `vacancies` | Industry, function, full-time / part-time / contract, number of openings |
| `contactName`, `contactDesignation`, `contactEmail`, `contactEmailShownOnSite`, `contactPhone`, `contactAddress`, `companyWebsite` | The recruiter's contact block; `contactEmailShownOnSite` = whether Naukrigulf shows the email on the job page |
| `referenceNumber` | The employer's reference |
| `redFlags`, `redFlagCount` | Warning signs of a fake job |
| `easyApply`, `isTopEmployer`, `isFeaturedEmployer`, `isSponsored`, `isConfidentialCompany`, `isClosed` | Naukrigulf's flags |
| `postedDate`, `postedAt`, `daysSincePosted` | When the job was posted |
| `description`, `descriptionHtml` | The full job description, plain text and / or HTML |
| `searchKeyword`, `searchLocation`, `searchUrl`, `isNew`, `scrapedAt` | Which search found the job; job alerts: new since the last run |

Four table views: **Jobs**, **Salaries**, **Recruiter contacts** and **Who can apply**.

#### How it works

| Step | What happens |
|---|---|
| 1. Search | Each keyword in each location (or your pasted Naukrigulf search links) with Naukrigulf's own filters: posted within, years of experience, country, salary band, company or consultancy, newest first |
| 2. Jobs | 50 jobs a request, up to 45 000 per search (the whole board is about 41 000 jobs) |
| 3. Job card | Each job's card: salary, nationality, gender, education, industry, contact |
| 4. Filters | Open to your nationality, minimum monthly salary, gender, Easy Apply, with email, red flags, title words, companies. Jobs removed here are not charged |
| 5. Job alerts | With **Only new jobs** on, jobs from earlier runs are skipped and not charged |

A location Naukrigulf does not know (a typo like "Dubaii") is reported in the log instead of silently returning jobs from everywhere.

#### Why this Actor

| | This Actor | Typical Naukrigulf scraper |
|---|---|---|
| Monthly salary as numbers + currency | ✅ Low, high, per year, USD band | ⚠️ Text, or "no salary field" |
| Nationality and gender wanted | ✅ Columns + "open to my nationality" filter | ❌ |
| Recruiter email and contact block | ✅ Included in the job price | ⚠️ Paid extra, or only emails found in the text (Naukrigulf removes them from job texts) |
| Fake-job red flags | ✅ Visa fee, WhatsApp, Gmail, earning promises | ❌ |
| Typo in the location | ✅ Warned, not charged | ❌ Whole board returned |
| Job alerts (only new jobs) | ✅ Built in, seen jobs not charged | ⚠️ Some |
| Filtered-out jobs | ✅ Free | ❌ Charged, or not filtered |
| Price per 1 000 jobs with job cards | ✅ $0.99 | $1.00-3.20 |

#### Pricing

Pay per event, no subscription needed. Apify Scale and Business plans pay less:

| Event | Free and Starter plans | Scale plan | Business plan |
|---|---|---|---|
| Run start | $0.001 | $0.001 | $0.001 |
| Job (with salary, nationality, contact and description) | $0.00099 | $0.00089 | $0.00079 |

**1 000 jobs = $0.99.** Free: jobs removed by your filters, reposts, closed jobs, jobs already seen by a job alert. Platform usage is included. Set a maximum cost per run in the run options: the Actor stops there.

#### Job alerts

1. Set your search and filters, turn on **Only new jobs**, give the alert a **Monitor name**.
2. Save it as a task and add a **schedule** (every morning, with "Posted within: Past 24 hours").
3. Send the results by email, Slack, WhatsApp, Google Sheets, Make, Zapier or **n8n** with Apify integrations.

The first run returns the current jobs; next runs return only jobs not seen before, and those are not charged.

#### Other job tools

| Actor | What it does |
|---|---|
| [Foundit Jobs Scraper](https://apify.com/s_actors/foundit-jobs-scraper) | Foundit (Monster) jobs in India, the Gulf and South-East Asia: posted or reposted from LinkedIn, HR phones, salary |
| [LinkedIn Jobs Scraper](https://apify.com/s_actors/linkedin-jobs-scraper) | LinkedIn jobs without login: a remote filter that works, salaries from descriptions, job alerts |
| [Glassdoor Jobs Scraper](https://apify.com/s_actors/glassdoor-jobs-scraper) | Glassdoor jobs with salary ranges and all 9 company ratings, filters by work-life balance and pay ratings |
| [Hiring Cafe Jobs Scraper](https://apify.com/s_actors/hiring-cafe-scraper) | HiringCafe jobs from company career sites: salary per year, applicants and views per job, job alerts |
| [Shine Jobs Scraper](https://apify.com/s_actors/shine-jobs-scraper) | Shine.com jobs in India with applicants, salary as numbers and a fake-job verdict |
| [Google Jobs Scraper](https://apify.com/s_actors/google-jobs-scraper) | Google Jobs results with descriptions, highlights and every apply link |
| [ATS Jobs Scraper](https://apify.com/s_actors/ats-jobs-scraper) | Jobs straight from company career sites on Workday, Greenhouse, Lever and Ashby: pay ranges, new-job alerts |

#### FAQ

**Can I use it as a Naukrigulf API?** Yes. This Actor reads the same data the website shows to any visitor and returns it as JSON through the Apify API.

**How does "Open to my nationality" work?** A job is kept when it asks for your nationality, for "Any Nationality", for no nationality, or for a group that includes you ("Any Arab National" for an Egyptian, "Any GCC National" for a Saudi, "Any Anglophone National" for a British candidate). The `nationality` column shows exactly what the employer wrote.

**Which locations work?** Cities and countries as on Naukrigulf: Dubai, Abu Dhabi, Sharjah, Ajman, Ras Al Khaimah, Riyadh, Jeddah, Dammam, Al Khobar, Doha, Kuwait, Muscat, Manama, Cairo, Amman, Beirut, or UAE, Saudi Arabia, Qatar, Oman, Bahrain, Egypt. Several at once: one per line.

**Is the salary monthly?** Yes, Gulf salaries are posted per month. `salaryYearlyMin` / `salaryYearlyMax` are the same × 12. About half of Naukrigulf jobs show a salary; the rest are hidden by the employer (`salaryHidden`).

**Can I paste my Naukrigulf search?** Yes: copy the address of your search (e.g. `naukrigulf.com/accountant-jobs-in-dubai?freshness=7&industryType=7`) into **Naukrigulf search links**. Its filters are kept.

**Do I need a Naukrigulf account?** No. Only job pages any visitor can open are read.

#### Use with the API and AI agents

Run it from the Apify API, the JavaScript or Python client, **n8n**, Make or Zapier, or from AI agents through the [Apify MCP server](https://mcp.apify.com) (Claude, ChatGPT, Cursor). One call: `POST https://api.apify.com/v2/acts/s_actors~naukrigulf-scraper/run-sync-get-dataset-items` with the input above returns the jobs as JSON. Set **Job description** to "None" for smaller answers.

#### Is it legal?

The Actor reads public Naukrigulf job listings that anyone can open without an account, as a visitor does. It does not log in. Recruiter contact details are business contacts published with job ads; use them according to the laws that apply to you (GDPR, UAE PDPL, Saudi PDPL and similar) and Naukrigulf's terms.

# Actor input Schema

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

One per line, as in the Naukrigulf search box: "accountant", "driver", "nurse", "civil engineer". Each keyword is searched in each location. Leave empty to get all jobs of the locations.

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

City or country as on Naukrigulf: "Dubai", "Abu Dhabi", "Sharjah", "Riyadh", "Jeddah", "Dammam", "Doha", "Kuwait", "Muscat", "Manama", "UAE", "Saudi Arabia", "Qatar". Empty = all Gulf and Middle East countries.

## `maxJobsPerSearch` (type: `integer`):

Per keyword and location (and per search link). Naukrigulf gives 50 jobs a request and up to 45 000 a search.

## `postedWithin` (type: `string`):

Naukrigulf's freshness filter.

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

Naukrigulf's order of results. Newest first can mix in jobs that match the keyword loosely: turn on "Keyword must be in the title" to keep only exact matches.

## `openToNationality` (type: `string`):

Only jobs a candidate of this nationality can apply to: the job asks for it, for "Any Nationality", for none, or for a group that includes it ("Any Arab National", "Any GCC National"). E.g. "Indian", "Pakistani", "Filipino", "Egyptian", "Nepali", "British".

## `minMonthlySalaryAed` (type: `integer`):

Only jobs whose posted monthly salary reaches this amount in AED (other currencies converted roughly: SAR, QAR, KWD, OMR, BHD, USD...). Implies "Only jobs with salary".

## `onlyWithSalary` (type: `boolean`):

Only jobs whose employer shows the monthly salary (about half of Naukrigulf jobs).

## `gender` (type: `string`):

Some Gulf jobs are for one gender only.

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

Only jobs whose experience range includes this number (Naukrigulf's own filter); 0 = freshers.

## `countries` (type: `array`):

Only jobs in these countries (Naukrigulf's country filter). Empty = all.

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

Employers hiring directly, or recruitment agencies hiring for a client.

## `onlyEasyApply` (type: `boolean`):

Only jobs you can apply to on Naukrigulf in one click.

## `onlyWithEmail` (type: `boolean`):

Only jobs with the recruiter's email or an email in the job text.

## `skipJobsWithRedFlags` (type: `boolean`):

Skip jobs showing warning signs of fake Gulf jobs: visa or processing fee asked, WhatsApp-only contact, personal email, earning promises, a very wide salary range, a hidden company.

## `titleMustMatchKeyword` (type: `boolean`):

Keep only jobs whose title contains every word of the keyword.

## `titleInclude` (type: `array`):

Keep only jobs whose title contains one of these words (case-insensitive), e.g. "senior", "lead".

## `titleExclude` (type: `array`):

Skip jobs whose title contains one of these words, e.g. "intern", "sales".

## `companyExclude` (type: `array`):

Skip jobs of companies whose name contains one of these words.

## `skipDuplicates` (type: `boolean`):

A job with the same title, company and location as one already in the results is skipped and not charged.

## `onlyNewJobs` (type: `boolean`):

Return only jobs not returned by earlier runs with the same monitor name. Jobs seen before are free.

## `monitorName` (type: `string`):

Separate job alert lists: runs with the same name share the jobs already seen.

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

Search pages copied from your browser, e.g. naukrigulf.com/accountant-jobs-in-dubai?freshness=7 or naukrigulf.com/jobs-in-uae: the filters of the link (industry, function, salary, nationality...) are kept.

## `jobUrls` (type: `array`):

Full details of specific jobs: naukrigulf.com/...-jid-271026500550 links or their IDs.

## `descriptionFormat` (type: `string`):

Format of the full job description.

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

How many Naukrigulf requests run at once.

## `debugLog` (type: `boolean`):

Log every failed attempt.

## Actor input object example

```json
{
  "keywords": [
    "accountant"
  ],
  "locations": [
    "Dubai"
  ],
  "maxJobsPerSearch": 30,
  "postedWithin": "anyTime",
  "sortBy": "newest",
  "onlyWithSalary": false,
  "gender": "any",
  "postedBy": "any",
  "onlyEasyApply": false,
  "onlyWithEmail": false,
  "skipJobsWithRedFlags": false,
  "titleMustMatchKeyword": false,
  "skipDuplicates": true,
  "onlyNewJobs": false,
  "monitorName": "default",
  "descriptionFormat": "text",
  "maxConcurrency": 10,
  "debugLog": false
}
```

# Actor output Schema

## `overview` (type: `string`):

The main job fields.

## `salaries` (type: `string`):

Posted monthly salary, its currency and USD band, per year.

## `contacts` (type: `string`):

Who posted the job and how to reach them.

## `candidates` (type: `string`):

Nationality, gender, experience and education each job asks for.

## `all` (type: `string`):

Every field of every job.

# 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 = {
    "keywords": [
        "accountant"
    ],
    "locations": [
        "Dubai"
    ],
    "maxJobsPerSearch": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("s_actors/naukrigulf-scraper").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 = {
    "keywords": ["accountant"],
    "locations": ["Dubai"],
    "maxJobsPerSearch": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("s_actors/naukrigulf-scraper").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 '{
  "keywords": [
    "accountant"
  ],
  "locations": [
    "Dubai"
  ],
  "maxJobsPerSearch": 30
}' |
apify call s_actors/naukrigulf-scraper --silent --output-dataset

```

## MCP server setup

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

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/xxBY2Kd4fPkFrYjoT/builds/2EsPhtDOroPxDaDGb/openapi.json
