# Foundit & NaukriGulf Jobs Scraper: India, UAE & Gulf Jobs (`precious_bathmat/india-gulf-jobs-scraper`) Actor

Scrape jobs from Foundit (formerly Monster India) and NaukriGulf: India, UAE, Saudi Arabia, Qatar and the Gulf. Title, company, location, experience, skills, salary, posted date and full description, plus a skills and hiring report per search. No login.

- **URL**: https://apify.com/precious_bathmat/india-gulf-jobs-scraper.md
- **Developed by:** [Mariam Ahmed](https://apify.com/precious_bathmat) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 4 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 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.

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

## Foundit & NaukriGulf Jobs Scraper: India, UAE & Gulf Jobs

Scrape **jobs from Foundit** (formerly Monster India) and **NaukriGulf**, the job sites for **India, the UAE, Saudi Arabia, Qatar and the rest of the Gulf**, with no login, and get a **skills and hiring report for every search**:

- **Two sites in one run**: Foundit (India, the Gulf, Singapore, the Philippines and more) and NaukriGulf (UAE, Saudi Arabia, Qatar, Oman, Kuwait, Bahrain)
- **Every job**: title, company, location, country, experience range, skills, posted date and link
- **Foundit extras**: the **full job description**, salary where shown, employment type, industry, function, number of applicants and the apply link
- **NaukriGulf extras**: job summary, vacancies, top-employer flag
- **Filters**: location, minimum and maximum experience, posted within (24 hours to 30 days)
- **Report per search**: top hiring companies, **most-asked skills**, experience levels, locations and countries, salary where shown, how fresh the jobs are, agency share

### What does this jobs scraper do?

```
NaukriGulf · "civil engineer" in Saudi Arabia · 985 jobs
 Read 970 in 17 seconds · median experience asked: 8 years
 Top employers: Parsons Corporation, Atkins Realis Group · skills: risk assessment, budget management

Foundit · "software engineer" in Bengaluru · 16,789 jobs
 Read 3,000 in 92 seconds · median experience asked: 5 years
 Top employers: Accenture, JP Morgan Chase · skills: Go, microservices, GitHub Actions
```

1. Enter **keywords** and pick the **sites**.
2. Optionally set a **location** ("Dubai", "Riyadh", "Bengaluru", "India"), an **experience range** and **posted within**.
3. You get **one row per job** and **one report per keyword and site**.

```mermaid
flowchart LR
    A[Keywords,<br/>location, experience] --> B[Foundit<br/>India · Gulf · SE Asia]
    A --> C[NaukriGulf<br/>UAE · KSA · Qatar · Oman<br/>Kuwait · Bahrain]
    B --> D[Jobs<br/>skills, experience,<br/>description, salary]
    C --> D
    D --> E[Report<br/>top companies, skills,<br/>experience, locations]
```

### Who is it for?

- **Recruiters and staffing agencies** in India and the Gulf: who is hiring, for which skills, at what experience level, every day
- **Job seekers and career coaches**: the skills employers ask for most, and where the jobs are
- **Overseas placement agencies**: Gulf demand by role and country, for candidates from India, Pakistan, the Philippines and beyond
- **HR and workforce analysts**: hiring trends across India and the GCC in one format
- **Sales teams selling to employers**: companies with open roles, agencies flagged

### What data do you get?

**Jobs** (dataset, one row per job)

| Field | What it tells you |
|---|---|
| `source`, `id`, `title`, `url`, `applyUrl` | The job, the site and where to apply |
| `company`, `isAgency`, `logoUrl` | Who is hiring, and whether it is a recruitment agency |
| `location`, `locations`, `country` | Where |
| `experienceMin`, `experienceMax` | Years of experience asked |
| `skills` | Skills listed on the job |
| `salaryMin`, `salaryMax`, `salaryPeriod`, `currency` | Pay, when the employer shows it (Foundit) |
| `employmentType`, `jobType`, `industries`, `functions` | Full time, permanent or contract, sector and function (Foundit) |
| `postedAt`, `applicants`, `urgentlyHiring`, `vacancies`, `topEmployer` | Freshness and competition |
| `description` / `summary` | Full description (Foundit) or summary (NaukriGulf) |

**Report** (`REPORTS`, one per keyword and site)

| Field | What it tells you |
|---|---|
| `totalOnSite`, `jobsRead` | How many jobs the site has, and how many were read |
| `topCompanies`, `agencySharePercent`, `confidentialEmployerPercent` | Who hires most (agencies and hidden employers left out), and how many ads come from them |
| `topSkills` | The 25 most-asked skills, with their share of jobs |
| `experience`, `medianExperienceYears` | 0-2, 3-5, 6-10 and 10+ years |
| `topLocations`, `topCountries` | Where the jobs are |
| `salary` | Share showing pay, median and range in the most common currency |
| `employmentTypes`, `medianApplicants`, `freshness`, `urgentPercent` | Contract mix, competition, how new the jobs are |

### Example: 3 October 2026

Five roles on both sites, 200 jobs each where available: **1,872 jobs and 10 reports in 41 seconds**.

| Search | Jobs on site | Top skills | Median experience |
|---|---|---|---|
| NaukriGulf: accountant | 6,427 | financial reporting, accounts receivable, accounts payable | 2 years |
| NaukriGulf: nurse | 1,941 | emergency response, medication administration, infection control | 2 years |
| NaukriGulf: sales executive | 1,132 | sales representation, sales strategy, client relationships | 2 years |
| NaukriGulf: java developer | 84 | Java, microservices, SQL, Spring Boot | 5 years |
| Foundit: java developer | 7,279 | microservices, cloud platforms, NoSQL, CI/CD | 5 years |
| Foundit: data analyst | 33,055 | R, data analysis, Snowflake, Looker | 2 years |

- On NaukriGulf, **the UAE dominates**: 156 of 200 accountant jobs and 167 of 200 sales-executive jobs, then Saudi Arabia.
- **Foundit shows pay more often** than most boards: half of its nursing jobs (52.5%) and 31% of sales-executive jobs carried a salary.
- Two larger runs read **3,000 software-engineer jobs in Bengaluru in 92 seconds** and **970 civil-engineer jobs in Saudi Arabia in 17 seconds**.

### Pricing

**$0.001 per job** and **$0.02 per search report**.

- 200 jobs with a report: **$0.22**
- The run above (1,872 jobs, 10 reports): **$2.07**

Turn off reports to pay for jobs only.

### Good to know

- **Foundit is international**: without a location, many results come from Singapore and the Philippines. Set **location "India"** (or a city) for India only; a test run returned 99 of 100 jobs in India.
- **NaukriGulf search results carry a summary, not the full description**, and no salary; the full ad opens from `url`.
- **Salaries** (Foundit) are yearly figures as the site stores them; Foundit often stores pay in Indian rupees even for jobs abroad. The report uses the most common currency among the ads that show pay.
- **Newest first** sorts the most relevant jobs by date. Both sites lose keyword relevance when asked to sort by date themselves, so the Actor does it.
- **Experience filters** pass jobs whose range overlaps yours.
- **No contact details**: recruiter names and email fields are dropped, and emails and phone numbers inside ad text are hidden.
- Data comes from the **public job search** of Foundit and NaukriGulf, the same data their websites load. **Not affiliated with either site.**

### Input

| Field | Meaning |
|---|---|
| **Keywords** | One search each |
| **Job sites** | Foundit, NaukriGulf (both by default) |
| **Location** | City or country |
| **Minimum / maximum experience** | Years |
| **Posted within** | 24 hours, 3, 7, 15 or 30 days |
| **Sort** | Newest first or most relevant |
| **Jobs per search** | 1 to 10,000 (default 200) |
| **Reports** | On by default |

### Integrations

Export to JSON, CSV, Excel or Google Sheets, or connect through the Apify API, webhooks, Make, Zapier and n8n. **Schedule it daily** with "Last 24 hours" for a feed of new Gulf or India jobs.

# Actor input Schema

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

Job titles or skills, one search each, e.g. "data analyst", "accountant", "java developer".

## `sites` (type: `array`):

Each keyword is searched on each site.

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

Optional city or country, e.g. "Dubai", "Riyadh", "Bengaluru", "Mumbai", "UAE".

## `minExperience` (type: `integer`):

Only jobs open to people with at least this experience.

## `maxExperience` (type: `integer`):

Only jobs asking for at most this experience, e.g. 2 for freshers and juniors.

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

Only jobs posted in this period.

## `sort` (type: `string`):

Order of the saved jobs. The most relevant jobs are read either way.

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

Most jobs to read per keyword and site (1 to 10,000).

## `includeReports` (type: `boolean`):

One report per keyword and site: top companies, most-asked skills, experience levels, locations, salary where shown, freshness.

## Actor input object example

```json
{
  "keywords": [
    "accountant"
  ],
  "sites": [
    "foundit",
    "naukrigulf"
  ],
  "postedWithinDays": "any",
  "sort": "date",
  "maxJobsPerSearch": 200,
  "includeReports": true
}
```

# Actor output Schema

## `jobs` (type: `string`):

One row per job: site, title, company, location, experience, skills, salary where shown, posted date, applicants, link; Foundit jobs also carry the full description.

## `reports` (type: `string`):

Per keyword and site: top companies, most-asked skills, experience levels, locations, countries, salary where shown, freshness.

## `reportsCsv` (type: `string`):

One flat row per search.

## `summary` (type: `string`):

Requests, problems and the limits of the data.

# 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"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("precious_bathmat/india-gulf-jobs-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"] }

# Run the Actor and wait for it to finish
run = client.actor("precious_bathmat/india-gulf-jobs-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"
  ]
}' |
apify call precious_bathmat/india-gulf-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,precious_bathmat/india-gulf-jobs-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/0p13BCYlJMjjDJE4f/builds/yWiFz2BBgs8wqZsH8/openapi.json
