# GulfTalent Jobs Scraper — Gulf Jobs, Salaries & Leads (`haketa/gulftalent-jobs-scraper`) Actor

Scrape GulfTalent jobs across UAE, Saudi Arabia, Qatar, Kuwait, Oman, Bahrain and the Middle East. Export title, company, location, salary, requirements, job function, industry, full description and apply URL — fast and without login.

- **URL**: https://apify.com/haketa/gulftalent-jobs-scraper.md
- **Developed by:** [Haketa](https://apify.com/haketa) (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 $1.50 / 1,000 results

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 🌍 GulfTalent Jobs Scraper — Gulf Jobs, Salaries & Leads

> Turn GulfTalent job searches into clean, structured recruitment data from the UAE, Saudi Arabia, Qatar, Kuwait, Oman, Bahrain, Egypt, Jordan, and across the Middle East.

🧭 **Search by role and market** · 💼 **Full job descriptions** · 💰 **Salary fields** · 🏢 **Employer intelligence** · ⚡ **Fast bulk export**

### What you get

Each result is one job vacancy with the fields teams actually use:

- Job title, company, city, country, and posting date
- Full description and candidate requirements
- Salary text, minimum, maximum, and currency when published
- Employment type, nationality, gender, and Arabic fluency requirements
- Job function and company industry
- GulfTalent job ID, canonical URL, and application link
- Company profile and Easy Apply indicator when available

Export the dataset as **JSON, CSV, Excel, XML, or RSS**, or send it directly to Google Sheets, Make, Zapier, n8n, webhooks, and your own API.

### 🚀 Start in three steps

1. Enter one or more job titles such as `software engineer`, `accountant`, or `project manager`.
2. Select the Gulf countries you want and choose how many jobs to collect.
3. Click **Start** and download the structured dataset.

The prefilled input collects **up to 200 detailed jobs** from the UAE and Saudi Arabia, so first-time users immediately receive useful data.

### Popular use cases

| Who | What they can do |
|---|---|
| Recruiters | Build fresh Gulf vacancy and employer pipelines |
| Job boards | Monitor and aggregate newly published Middle East roles |
| HR analysts | Compare hiring demand by country, role, industry, and company |
| Salary researchers | Collect published compensation ranges for benchmarking |
| Sales teams | Find companies actively hiring and prioritize outreach |
| Data teams | Feed dashboards, alerts, warehouses, and scheduled workflows |

### Input options

| Input | Purpose |
|---|---|
| `searchKeywords` | Job titles, skills, or search phrases; multiple entries supported |
| `countries` | UAE, Saudi Arabia, Qatar, Kuwait, Oman, Bahrain, Egypt, or Jordan |
| `customLocations` | Optional cities such as Dubai, Abu Dhabi, Riyadh, Jeddah, or Doha |
| `maxItemsPerSearch` | Result limit for each keyword/country combination |
| `maxTotalItems` | Overall result limit for the run |
| `includeJobDetails` | Adds descriptions, requirements, salary, job type, industry, and application data |
| `startUrls` | Direct GulfTalent search, category, company, or job URLs |

#### Example input

```json
{
  "searchKeywords": ["data analyst", "business analyst"],
  "countries": ["uae", "saudi-arabia", "qatar"],
  "maxItemsPerSearch": 100,
  "maxTotalItems": 300,
  "includeJobDetails": true
}
```

### Example result

```json
{
  "jobId": "587598",
  "title": "Mobile Developer Specialist",
  "company": "Adree",
  "location": "Riyadh, Saudi Arabia",
  "city": "Riyadh",
  "country": "Saudi Arabia",
  "salary": "Not Specified",
  "jobType": "Full Time",
  "nationality": "Any Nationality",
  "jobFunction": "IT - Software & Web Development",
  "industry": "Software & Internet Services",
  "description": "We are looking for a mobile developer...",
  "url": "https://www.gulftalent.com/saudi-arabia/jobs/mobile-developer-specialist-587598",
  "applyUrl": "https://www.gulftalent.com/saudi-arabia/jobs/mobile-developer-specialist-587598"
}
```

### List mode or full-detail mode?

- Keep **Include full job details** enabled for recruitment, salary, lead generation, or market analysis.
- Disable it for a lighter vacancy monitor when title, company, location, date, and URL are enough.

The Actor uses direct HTTP requests instead of a full browser, keeping runs fast and memory usage low. Duplicate vacancies found through multiple searches are automatically merged by GulfTalent job ID.

### Scheduling and integrations

Run the Actor hourly, daily, or weekly from **Schedules**. Use webhooks to notify your workflow when the dataset is ready, or call it through the Apify API:

```bash
curl -X POST "https://api.apify.com/v2/acts/YOUR_USERNAME~gulftalent-jobs-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchKeywords":["accountant"],"countries":["uae"],"maxTotalItems":100}'
```

### Notes

- Data availability depends on what each employer publishes on GulfTalent.
- A missing salary means the vacancy did not publicly specify one.
- Use the data responsibly and comply with applicable laws and GulfTalent's terms.
- This Actor is independent and is not affiliated with or endorsed by GulfTalent.

### Support

If a field or search stops working, open an issue from the Actor page and include the run ID and input. That is enough to reproduce and resolve most problems quickly.

# Actor input Schema

## `searchKeywords` (type: `array`):

Add one or more roles, skills, or job titles. Each entry runs a separate search and can return hundreds of jobs.

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

Select one or more target markets. Leave empty to search all GulfTalent locations.

## `customLocations` (type: `array`):

Optional. Add cities such as Dubai, Abu Dhabi, Riyadh, Jeddah, Doha, Muscat, or any other location. Leave blank for country-wide results.

## `maxItemsPerSearch` (type: `integer`):

Maximum jobs collected for each keyword and country combination. Set 0 for unlimited.

## `maxTotalItems` (type: `integer`):

Overall safety cap across all searches. Set 0 for unlimited.

## `includeJobDetails` (type: `boolean`):

Recommended. Opens each job to add the full description, requirements, salary, employment type, nationality, job function, industry and application URL.

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

Optional. Paste GulfTalent search, title/category, company career, or individual job URLs. These run alongside your keyword searches.

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

Controls speed. The recommended value balances fast runs with stable GulfTalent access.

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

The scraper works without a proxy for the lowest cost. Enable an Apify proxy only if your run encounters regional access restrictions.

## Actor input object example

```json
{
  "searchKeywords": [
    "accountant",
    "project manager",
    "data analyst"
  ],
  "countries": [
    "uae",
    "saudi-arabia"
  ],
  "customLocations": [
    "Dubai",
    "Riyadh"
  ],
  "maxItemsPerSearch": 200,
  "maxTotalItems": 100,
  "includeJobDetails": true,
  "startUrls": [],
  "maxConcurrency": 8,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# 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 = {
    "searchKeywords": [
        "software engineer"
    ],
    "countries": [
        "uae",
        "saudi-arabia"
    ],
    "customLocations": [],
    "maxItemsPerSearch": 200,
    "maxTotalItems": 100,
    "startUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/gulftalent-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 = {
    "searchKeywords": ["software engineer"],
    "countries": [
        "uae",
        "saudi-arabia",
    ],
    "customLocations": [],
    "maxItemsPerSearch": 200,
    "maxTotalItems": 100,
    "startUrls": [],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/gulftalent-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 '{
  "searchKeywords": [
    "software engineer"
  ],
  "countries": [
    "uae",
    "saudi-arabia"
  ],
  "customLocations": [],
  "maxItemsPerSearch": 200,
  "maxTotalItems": 100,
  "startUrls": [],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call haketa/gulftalent-jobs-scraper --silent --output-dataset

```

## MCP server setup

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