# Naukrigulf Jobs Scraper - Gulf Salaries, Emails & Filters (`parseforge/naukrigulf-scraper`) Actor

Scrape Naukrigulf jobs in the Gulf with salary, recruiter email and full descriptions. Filter by place, industry, salary. Export CSV, Excel, JSON, XML.

- **URL**: https://apify.com/parseforge/naukrigulf-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 job listings

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

![ParseForge Banner](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v4.webp)

## 🕌 Naukrigulf Jobs Scraper

> 🚀 **Export Naukrigulf job listings from the Gulf and the wider Middle East in seconds.** 45 fields per job, monthly salary parsed into numbers, the recruiter's name and email when they publish one, and the full description as text and HTML.

This Actor collects job listings from naukrigulf.com, the Gulf's largest India-facing job board. It reads the same JSON endpoints the Naukrigulf website itself calls, so every field on a job page is in your dataset, plus the ones the page hides: the exact posting timestamp, the education and nationality the employer asks for, the industry and functional area, and the contact block the recruiter filled in.

Coverage at the time of writing: 40,760 live jobs across 74 countries, including 11,773 engineer jobs in the UAE alone (6,776 of them in Dubai) and 5,268 in Saudi Arabia. Search by keyword and place, narrow with 10 filters (country, city, industry, functional area, experience, salary band, nationality, gender, freshness, Easy Apply), or paste Naukrigulf search and job URLs directly.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Recruiters and staffing agencies in the Gulf | Build a daily feed of new openings per role, city or industry |
| Compensation and HR analysts | Benchmark monthly AED salary bands from numeric min and max |
| Job boards and aggregators | Syndicate listings with descriptions, logos and expiry flags |
| Sales and lead generation teams | Find companies that are hiring, with a named contact and email |
| Researchers and journalists | Track hiring demand across the GCC and MENA over time |

### 📋 What the Naukrigulf Jobs Scraper does

- Searches Naukrigulf by keyword and location, with several keywords and several places per run.
- Pages through the result set at 49 jobs per call, deduplicated by job ID across all searches.
- Optionally opens every job to add the description (text and HTML), salary, education, nationality, gender, employment type, work mode and the recruiter contact block.
- Parses the published salary into `salaryMin`, `salaryMax`, `salaryCurrency` and a monthly period.
- Accepts Naukrigulf search URLs (`jobs-search?Keywords=...&Location=...`) and single job URLs as input.

> 💡 **Why it matters:** Naukrigulf shows "AED 8,000 - 12,000" as text and "2 days ago" as a label. This Actor returns the salary as numbers and the posting time as an exact ISO timestamp, so you can sort, filter and chart hiring data instead of cleaning it by hand.

### 🎬 Full Demo (🚧 Coming soon)

### 📊 Output

| Field | Description |
|---|---|
| 🖼 `imageUrl` | Employer logo when the company uploaded one |
| 📌 `title` | Job title |
| 🆔 `jobId` | Naukrigulf job ID |
| 🔗 `url` | Canonical job URL |
| 🏢 `company` / 🏷 `companyId` | Employer name and ID (confidential employers keep their placeholder name) |
| 📍 `location` / 🌍 `country` | Location label and country |
| ⏱ `employmentType` / 🏠 `locationType` | Full-time, Part-time, Contract and On-site, Remote |
| 📅 `postedAt` | Exact ISO posting timestamp |
| 👥 `vacancies` | Number of open positions |
| 📉 `experienceMin` / 📈 `experienceMax` | Accepted experience range in years |
| 💰 `salaryMin` / `salaryMax` / 💱 `salaryCurrency` / 🗓 `salaryPeriod` / 💵 `salaryText` | Published monthly salary as numbers and as the original text |
| 🏭 `industry` / 🧩 `functionalArea` | Employer industry and role family |
| 🎓 `education` / 🛂 `nationality` / ⚧ `gender` | Candidate requirements set by the employer |
| 📝 `summary` / ✨ `highlights` | Short summary and the employer's key bullets |
| 📄 `description` / 🧾 `descriptionHtml` / 👤 `candidateProfile` | Full description as text and HTML, and the desired candidate profile |
| 🏷 `keywords` | Skill and role keywords attached to the job |
| ℹ️ `companyDescription` | About text from the company profile |
| 🙋 `contactName` / 💼 `contactDesignation` / ✉️ `contactEmail` | Recruiter name, role and email when published |
| 🌐 `contactWebsite` / 🏙 `contactCity` / 🗺 `contactCountry` / 📮 `contactAddress` | Recruiter website and address |
| ⚡ `isEasyApply` / ⌛ `isExpired` | Apply flow and expiry flags |
| ⭐ `isTopEmployer` / 🎯 `isFeaturedEmployer` / 🟢 `isRecruiterActive` | Employer badges |
| 🕒 `scrapedAt` | When the row was collected |
| ❌ `error` | Always `null` on data rows; error rows carry only this field and are never charged |

Values the employer withholds are returned as `Not Disclosed`; structurally inapplicable values are `N/A`. No field is ever `null` except `error`. With "Include full details" turned off, the detail-only fields are left out of the row.

#### Sample records

```json
{
  "imageUrl": "N/A",
  "title": "Accountant - Client Accounting & Advisory",
  "jobId": "260926000101",
  "url": "https://www.naukrigulf.com/accountant-client-accounting-advisory-jobs-in-dubai-uae-in-next-financial-services-fze-1-to-3-years-n-cd-373673-jid-260926000101",
  "company": "Next Financial Services FZE",
  "companyId": "373673",
  "location": "Dubai - United Arab Emirates (UAE)",
  "country": "United Arab Emirates (UAE)",
  "employmentType": "Full-time",
  "locationType": "On-site",
  "postedAt": "2026-09-26T04:00:00.000Z",
  "vacancies": 1,
  "experienceMin": 1,
  "experienceMax": 3,
  "salaryMin": 3000,
  "salaryMax": 4000,
  "salaryCurrency": "AED",
  "salaryPeriod": "Monthly",
  "salaryText": "AED 3,000 - 4,000",
  "industry": "Accounting & Auditing",
  "functionalArea": "Accounts / Taxation / Audit / Company Secretary",
  "nationality": "Indian",
  "gender": "Any",
  "description": "• Independently manage day-to-day accounting and bookkeeping for multiple UAE clients.\n\n• Maintain complete and accurate accounting records...",
  "keywords": ["Accounting", "Bookkeeping", "Zoho", "Quickbooks", "IFRS", "Bank Reconciliation"],
  "contactName": "Pankaj Pareek",
  "contactDesignation": "Director",
  "contactEmail": "pankaj@nextassurance.ae",
  "contactWebsite": "nextfin.ae",
  "contactCity": "Dubai",
  "isEasyApply": "No",
  "isExpired": "No",
  "isRecruiterActive": "Yes",
  "scrapedAt": "2026-09-28T20:52:35.762Z",
  "error": null
}
```

```json
{
  "title": "Assistant Accountant",
  "jobId": "280926000252",
  "company": "ViewMedia",
  "location": "Dubai - United Arab Emirates (UAE)",
  "employmentType": "Full-time",
  "postedAt": "2026-09-28T11:11:48.000Z",
  "experienceMin": 3,
  "experienceMax": 8,
  "salaryMin": 5000,
  "salaryMax": 9000,
  "salaryCurrency": "AED",
  "salaryText": "AED 5,000 - 9,000",
  "industry": "Accounting & Auditing",
  "education": "Finance(Accounting)",
  "highlights": [
    "Process supplier invoices and employee expense claims",
    "Prepare payment schedules and supplier payments",
    "Reconcile ledgers, intercompany balances, and credit cards",
    "Assist with VAT returns and audit reviews"
  ],
  "contactName": "Awaes Jaswal",
  "contactDesignation": "CEO",
  "contactEmail": "awaes.jaswal@viewmedia.tv",
  "isRecruiterActive": "Yes"
}
```

```json
{
  "title": "CARGO ACCOUNTING",
  "jobId": "260926000035",
  "company": "Pearl Axis Cargo Solutions LLC",
  "location": "Dubai , Sharjah - United Arab Emirates (UAE)",
  "postedAt": "2026-09-26T04:00:00.000Z",
  "experienceMin": 1,
  "experienceMax": 3,
  "salaryMin": "Not Disclosed",
  "salaryText": "Not Disclosed",
  "industry": "Shipping / Freight",
  "companyDescription": "air freight and logistics, shipping ,cargo charter",
  "contactName": "Arun",
  "contactDesignation": "Cargo Manager",
  "contactEmail": "hr.pearlaxiscargo@gmail.com",
  "contactWebsite": "http://pearlaxiscargo.com",
  "contactAddress": "Al Qusis"
}
```

The second and third samples are trimmed for readability; real rows carry all 45 fields.

### ✨ Why choose this Actor

- **Salary as numbers.** Min, max, currency and period on every job that publishes a salary, instead of a text label.
- **Recruiter contact on the row.** Name, role, email, website and address come from the job's own contact block, with no second Actor to run.
- **Ten filters, all verified.** Country (74), city (134), industry (65) and functional area (59) dropdowns were enumerated against the live board, so every option returns results.
- **Exact dates.** `postedAt` is an ISO timestamp, and the freshness filter uses the board's own 1, 3, 7, 15, 30 and 60 day windows.
- **Cheap to run.** The board answers plain HTTP, so no browser is needed and runs stay fast. The Actor moves to proxies by itself only if the board starts refusing.
- **Honest sentinels.** `Not Disclosed` means the employer withheld it; `N/A` means it does not apply. You never get a silent `null`.

### 📈 How it compares to alternatives

| | This Actor | Typical Naukrigulf scrapers |
|---|---|---|
| Fields per job | 45 | 20 to 35 |
| Salary | Label plus min, max, currency, period | Label or raw bucket only |
| Recruiter contact | Name, role, email, website, address | Email only, or none |
| Dates | Exact ISO posting timestamp | Epoch numbers or relative text |
| Filters | 10, with verified dropdowns for country, city, industry, functional area, experience, salary, nationality | Keyword and location |
| Input | Keywords, places, or Naukrigulf search and job URLs | Keywords only |
| Depth per query | First 45,000 results the board exposes | Often a few hundred |

Ceiling of the public surface: Naukrigulf only pages the first 45,000 results of any single query, and returns at most 49 jobs per call. A query that matches more than that (for example every job on the board) is capped, so combine a country, city or industry filter to reach the rest. Salary and contact email appear only when the employer published them, and the Actor reports `Not Disclosed` otherwise. The board's salary filter also lets some jobs with a hidden salary through, since it applies its own matching.

### 🚀 How to use

1. [Create a free Apify account](https://console.apify.com/sign-up?fpr=vmoqkp) and get $5 of free monthly usage credit.
2. Open the Naukrigulf Jobs Scraper page and click **Try for free**.
3. Type one or more keywords (for example `accountant`) and a location such as `Dubai`, then pick any filters.
4. Set **Max Items** and click **Start**.
5. Download the dataset as CSV, Excel, JSON or XML, or pull it through the API.

Example: the newest accounting jobs posted this week in Riyadh.

```json
{
  "searchTerms": ["accountant"],
  "location": "Riyadh",
  "postedWithin": "7",
  "sortBy": "date",
  "maxItems": 200
}
```

### 💼 Business use cases

#### Recruitment and staffing

Run the Actor every morning with `postedWithin: "1"` and `sortBy: "date"` to get every job posted in the last day for the roles you place, each with the hiring manager's contact.

#### Compensation benchmarking

Filter by functional area and city, then group `salaryMin` and `salaryMax` by `industry` to build monthly AED pay bands. Only jobs that publish a salary contribute, so count rows before you trust an average.

#### Lead generation

Employers posting many jobs are growing. Count rows per `companyId`, join `industry`, `contactEmail` and `contactWebsite`, and hand the list to sales.

#### Job aggregation

Syndicate listings with `descriptionHtml`, `imageUrl` and `isExpired`, and drop rows automatically once a job flips to expired on a re-run.

### 🔌 Automating Naukrigulf Jobs Scraper

- **Make / Zapier:** trigger the Actor on a schedule and push new rows into Google Sheets, HubSpot or Airtable.
- **Slack:** post a daily digest of new jobs matching your filters.
- **Airbyte:** load the dataset into your warehouse for trend analysis.
- **GitHub Actions:** call the Apify API from a workflow to refresh a public jobs page.
- **Google Drive:** export the dataset as Excel after every run.

### 🌟 Beyond business use cases

- **Research:** measure hiring demand by industry and city across the GCC over time.
- **Personal:** watch a handful of employers and get notified when they post a role that matches you.
- **Non-profit:** track healthcare and education openings for community job boards.
- **Experimentation:** feed `description` into an LLM to extract skills, seniority and visa requirements.

### 🤖 Ask an AI assistant about this scraper

> I want to collect job postings from Naukrigulf. Look at the Naukrigulf Jobs Scraper on the ParseForge Apify page and tell me how to configure a run that pulls every Engineering job posted in the last 7 days in Abu Dhabi, and how to turn salaryMin and salaryMax into a pay-band report.

### ❓ Frequently Asked Questions

#### 🌍 Which countries are covered?

Every market the board lists: the UAE, Saudi Arabia, Egypt, Lebanon, Qatar, Algeria, Oman, Morocco, Kuwait, Jordan, Bahrain and more, 74 countries in total. Use the **Country** or **City** dropdown, or type a place in **Location**.

#### 🔑 Do I need a Naukrigulf account or cookies?

No. Everything comes from the public endpoints the website itself uses.

#### 💰 Why is the salary "Not Disclosed" on many rows?

Because the employer did not publish one. Naukrigulf lets employers hide the salary, and the Actor never invents a number. When a salary is published it is returned as the original text and as parsed numbers.

#### ✉️ Will every row have a recruiter email?

No. The email is returned when the recruiter filled it in on the job. When they did not, the field says `Not Disclosed`.

#### 📅 How do I get only new jobs?

Set **Posted within** to 1 day and **Sort by** to newest first, and schedule the run daily.

#### 🔗 Can I paste a Naukrigulf URL?

Yes. Search URLs such as `https://www.naukrigulf.com/jobs-search?Keywords=nurse&Location=riyadh` run as searches, and job URLs ending in `-jid-...` return that single job. Slug-style category pages such as `/accountant-jobs-in-uae` are not parsed; use the keyword and location fields instead.

#### ⚡ How fast is it?

Listing-only runs fetch 49 jobs per request. With "Include full details" on, each job costs one extra request; a 1,000-job run typically finishes in a few minutes.

#### 🛡 Do I need a proxy?

Not usually. The proxy option is off by default because the board answers plain requests. If it starts refusing, the Actor climbs to datacenter and then residential IPs on its own.

#### 📉 Is there a ceiling on results?

Yes. The board exposes the first 45,000 results of any one query. Split very broad searches with a country, city, industry or functional area filter.

#### 🧾 What happens on an error?

Errors are written as rows containing only the `error` field so you can see what failed. Error rows are never charged.

#### 🔁 Can I re-run to detect expired jobs?

Yes. Paste the job URLs and check `isExpired` on each row.

#### 💳 How am I charged?

Per result row delivered. Error rows are free.

### 🔌 Integrate with any app

The dataset is available through the Apify API and every Apify integration: Google Sheets, Make, Zapier, Airbyte, Slack, webhooks, and the Apify SDKs for JavaScript and Python.

### 🔗 Recommended Actors

- [Bayt Scraper](https://apify.com/parseforge/bayt-scraper) for the other big Gulf job board.
- [Naukri.com Scraper](https://apify.com/parseforge/naukri-com-scraper) for the same company's India board.
- [LinkedIn Jobs Scraper](https://apify.com/parseforge/linkedin-jobs-scraper) for global listings.
- [Glassdoor Jobs Scraper](https://apify.com/parseforge/glassdoor-jobs-scraper) for salary and review data.
- [Google Jobs Scraper](https://apify.com/parseforge/google-jobs-scraper) for aggregated listings.

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge).

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** this is an independent tool and is not affiliated with, endorsed by, or connected to Naukrigulf, Naukri.com, Info Edge or any employer whose listings you scrape. It collects only publicly available data.

# Actor input Schema

## `searchTerms` (type: `array`):

One search per keyword, for example "accountant" or "site engineer". Leave empty to browse everything the board lists for your location and filters.

## `location` (type: `string`):

City or country exactly as Naukrigulf writes it, for example "Dubai", "Riyadh" or "Saudi Arabia". Several places can be separated by commas. A place the board does not list returns no jobs.

## `startUrls` (type: `array`):

Optional. Job pages (…-jid-280926000054) are fetched directly. Search pages (https://www.naukrigulf.com/jobs-search?Keywords=…\&Location=…) run as searches.

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `country` (type: `string`):

Only jobs based in this country.

## `city` (type: `string`):

Only jobs based in this city.

## `industry` (type: `string`):

Only employers from this industry.

## `functionalArea` (type: `string`):

Only jobs in this functional area.

## `experience` (type: `string`):

A job matches when its accepted range overlaps the band.

## `salary` (type: `string`):

Monthly salary band in AED. Only jobs that publish a salary can match a band.

## `nationality` (type: `string`):

Jobs that welcome candidates from this group.

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

Jobs that state this gender preference.

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

Only jobs posted in this window. Naukrigulf offers exactly these windows.

## `easyApply` (type: `boolean`):

Only jobs that can be applied to directly on Naukrigulf.

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

Relevance keeps the board ranking. Date returns the newest jobs first.

## `includeDetails` (type: `boolean`):

Fetch each job page for the full description, salary, education, nationality, employment type and recruiter contact. Turn off for a faster, lighter listing.

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

Apify Proxy settings. Off by default because the board answers plain requests. If it starts refusing, the Actor climbs to datacenter and then residential IPs by itself.

## Actor input object example

```json
{
  "searchTerms": [
    "software engineer"
  ],
  "location": "Dubai",
  "maxItems": 10,
  "easyApply": false,
  "sortBy": "relevance",
  "includeDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Every scraped listing in a formatted table

## `fullData` (type: `string`):

Complete dataset with all 45 fields

# 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 = {
    "searchTerms": [
        "software engineer"
    ],
    "location": "Dubai",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/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 = {
    "searchTerms": ["software engineer"],
    "location": "Dubai",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/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 '{
  "searchTerms": [
    "software engineer"
  ],
  "location": "Dubai",
  "maxItems": 10
}' |
apify call parseforge/naukrigulf-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/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/YfSypXALpAJiYIlMW/builds/FZ35YqzLRmQnCb69F/openapi.json
