# GulfTalent Jobs Scraper - Gulf Jobs, Salaries & Details (`dami_studio/gulftalent-jobs-scraper`) Actor

Search GulfTalent by job title, country, city, seniority, job type and posting date. Each job comes with company, place, role, industry and date, plus the full description, salary when shown and closing date. A job only comes back if your words are in its title, role, industry, company or place.

- **URL**: https://apify.com/dami\_studio/gulftalent-jobs-scraper.md
- **Developed by:** [Dami's Studio](https://apify.com/dami_studio) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.65 / 1,000 job returneds

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?

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

Search GulfTalent by job title and get the jobs back as rows: title, company, city and country, job role, industry, seniority, job type and posting date. With details on, each row also carries the full description, the salary when the employer shows it, the closing date, and what the employer asks for in nationality, gender and Arabic.

The filters on GulfTalent's search page are all here: country, city, job role, industry, seniority, job type and Easy Apply, plus its remote and exclusive jobs. Three more are checked on each job, because GulfTalent's search can't do them: posting date, company and a minimum monthly salary.

GulfTalent covers the UAE, Saudi Arabia, Qatar, Kuwait, Bahrain and Oman, and lists jobs in Egypt, Jordan, Lebanon and Iraq as well.

### Read this first

GulfTalent's own search also looks inside job descriptions. A search for a skill brings back every job that mentions it anywhere, and even a made-up search returns hundreds of jobs. This actor keeps a job only when every word you searched for is in its title, its job role, its industry, the company name or the place. The rest are left out, and you don't pay for them.

For job titles that works well: accountant brings back accountants, and jobs GulfTalent files under Accounting & Audit. For skills it is narrow. A search for python developer returns jobs with python in the title, not every developer job whose description happens to mention Python. If skills buried in descriptions are what you're after, this isn't the right tool for that part.

Word forms count as the same word, so accountant finds Accounting and engineer finds Engineering. Short words such as HR and IT, and words with symbols such as C++, have to match as written.

### Posted within, and how far a search reads

GulfTalent's search has no date filter, and its list isn't in one date order either. Asked for the newest jobs first, it gives them in three groups, one after another, each newest first: its own postings, jobs it collects from other sites, and jobs from other job boards. So the actor reads the newest part of each group and stops each one at the first job older than you asked for, instead of reading the whole list.

On 13 September 2026, a search over every UAE job needed 3 pages of 200 jobs for the last day, 5 for the last three days, 9 for a week, 16 for 15 days and 27 for 30 days. Reading the whole list takes 79.

**Most pages per search** (`maxPagesPerSearch`, 10 unless you change it) is where a search stops. If it has more recent jobs than that many pages hold, it stops there, the status message says so, and what's missing is the older end of your window in each of the three groups. Ten pages covered a week of the whole UAE; for a month of it, set 30. A narrower search, with a job title, a city or a role, needs far fewer.

The same limit applies when you set Companies or a Minimum monthly salary without a date. Those searches are read in GulfTalent's own order, so with the default one search looks at its first 2,000 jobs. The UAE alone had 15,664. To find one company across a whole country, raise the limit or add a search word.

### What it doesn't do

- **It judges titles, not descriptions.** See above.
- **Companies are matched by name.** A job comes back when every word you wrote is in its company name. GulfTalent can't filter by company, so there is no company list to pick from.
- **Salaries aren't converted.** Minimum monthly salary compares in the currency you pick. A job showing its salary in another currency, or not saying the salary is monthly, is left out.
- **English searches only.** GulfTalent's job titles are in English, so a search written in Arabic is turned away with a note rather than quietly returning nothing.
- **Salary only when the employer gives one.** Many don't, and those rows come back with the salary fields empty. A few pages say Not Specified on the salary line yet still carry a figure in the page's structured data. The row keeps that figure in `salaryMin` or `salaryMax` with `salaryText` empty, and Minimum monthly salary counts it: 2 of 22 jobs checked against their pages on 13 September 2026 were like that.
- **No contact fields.** It doesn't pull out recruiter names, phone numbers or email addresses. If an employer wrote them into the description, they stay part of the description text.
- It doesn't apply to jobs, sign in, or see anything that needs a GulfTalent account.

### Input

```json
{
  "keywords": ["accountant", "civil engineer"],
  "country": "AE",
  "city": "Dubai",
  "jobRoles": ["1", "29"],
  "seniority": "4",
  "employmentType": "1",
  "postedWithinDays": 7,
  "minMonthlySalary": 12000,
  "maxResults": 200,
  "includeDetails": true
}
```

In the JSON, job roles and industries take GulfTalent's own ids. The Input tab shows their names.

- **Search words** (`keywords`). One job title per line, up to 20. Leave it empty and use the filters to get every job that fits them.
- **Country** (`country`). AE, SA, QA, KW, BH, OM, EG, JO, LB or IQ, or REMOTE. GulfTalent keeps remote jobs under an entry of their own, so a remote job doesn't come back in a country search even when it names a city there. Pick Remote jobs to get them.
- **City** (`city`). The way GulfTalent names it: Dubai, Abu Dhabi, Sharjah, Riyadh, Jeddah, Doha, Kuwait City, Manama, Muscat, Cairo, Amman. If GulfTalent has no job for your search in that city, the run says so and charges nothing.
- **Job role** (`jobRoles`) and **Industry** (`industries`). GulfTalent's own lists. Pick one or more and a job in any of them comes back.
- **Seniority** (`seniority`). 1 student or fresh graduate, 2 junior professional, 4 experienced professional, 5 supervisor or manager, 6 top management or director.
- **Job type** (`employmentType`). 1 full-time, 2 part-time, 3 internship, 5 contract, 6 temporary.
- **Posted within** (`postedWithinDays`). A number of days. See the section above for how it is read.
- **Companies** (`companies`). One company per line, up to 20. Every word of a line has to be in the company name, so Emirates finds Emirates NBD and Emirates Airline alike.
- **Minimum monthly salary** (`minMonthlySalary`) and **Salary currency** (`salaryCurrency`). The top of a range counts: 6,500-10,000 AED passes 8,000. The currency is the chosen country's unless you pick one; with no single country chosen you have to pick it. Salaries are only on the job pages, so this opens every page and switches details on. Most GulfTalent jobs show no salary at all.
- **Easy Apply only** (`easyApplyOnly`). Jobs you apply for on GulfTalent itself, rather than on the employer's own site.
- **Exclusive jobs only** (`exclusiveOnly`). Jobs GulfTalent marks as exclusive to it. There were 5 on the whole site when this was built.
- **Most pages per search** (`maxPagesPerSearch`). 10 unless you change it, up to 100. See the section above.
- **Maximum jobs** (`maxResults`). 100 unless you change it, up to 20,000 in a run, counted across all your searches.
- **Full job details** (`includeDetails`). On by default. Off gives you the search-result fields only, which is several times faster.

An empty run, with nothing to search and no filter, returns one sample job from GulfTalent, marked `"_sample": true`. It isn't charged.

### Output

One row per job. A job that comes up more than once, in two of your searches or twice in one search's results, comes back once, under the search that found it first.

From the search:

| Field | Example | Notes |
|---|---|---|
| `title` | Accountant | |
| `company` | International Vision Investments - IVI | |
| `location` | Abu Dhabi, UAE | as GulfTalent writes it |
| `city`, `country` | Abu Dhabi, UAE | a job listed for a whole country has no city |
| `category` | Accounting & Audit | GulfTalent's job role |
| `industry` | Audit & Accountancy | |
| `seniority` | Student/ Fresh graduate | GulfTalent's own label |
| `employmentType` | Full-time | |
| `remote` | false | |
| `easyApply` | true | you apply on GulfTalent rather than on the employer's site |
| `postedAt` | 2026-08-05T05:00:00.000Z | |
| `url` | https://www.gulftalent.com/uae/jobs/accountant-618180 | the job on GulfTalent |
| `jobId` | 618180 | |
| `companyUrl`, `companyLogoUrl` | https://www.gulftalent.com/companies/international-vision-investments-ivi-careers | |
| `detailsIncluded` | true | false when details were switched off |
| `searchKeyword`, `searchCountry`, `searchCity` | accountant | which of your searches found the job |

With details on (these examples come from a different job, a personal assistant post in Dubai):

| Field | Example | Notes |
|---|---|---|
| `description` | We are seeking a highly organized and proactive Personal Assistant to support senior executives... | |
| `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod` | 15000, 20000, AED, month | when the employer shows it |
| `salaryText` | 15000 - 20000 AED | as the page shows it |
| `validThrough` | 2026-12-11T23:00:00+00:00 | the closing date |
| `nationality`, `gender`, `arabicFluency` | Any Nationality, Not Specified | what the employer asks for |

The run also writes `RUN_REPORT` to the key-value store. For each search it lists how many jobs GulfTalent claimed, how many pages were read, how many came back, how many looser matches and jobs outside your filters were left out, and why the search stopped.

### What you pay

You pay for each job row you get. You don't pay for the looser matches described above, for jobs outside the filters you picked, for jobs older than you asked for, from other companies or without the salary you asked for, for a job a second search found again, or for a job whose page didn't load when you asked for details (it's left out and the status message says how many). If you set a maximum charge for the run, it stops when that is reached, and every row you get has been paid for. The price is on the Pricing tab.

### Limits

- 20 searches and 20,000 jobs in one run.
- Without Posted within, Companies or a Minimum monthly salary, a search reads at most 100 pages of 200 jobs, more than GulfTalent had on the whole site when this was built. With any of them, it reads Most pages per search.
- A search stops reading after five pages in a row, 1,000 jobs, with nothing that has your words in it. GulfTalent mixes its looser matches in with the close ones, so it doesn't stop sooner.
- If a page of results still doesn't load after a few tries, that search stops there and the status message says so.

### Questions

**Why did I get fewer jobs than the site says?** The site's count includes every job that mentions your words anywhere. `RUN_REPORT` shows, for each search, the site's count next to what came back and what was left out.

**Why do some jobs have no city?** GulfTalent lists some jobs for a whole country, such as just UAE. Those rows have the country and no city.

**Why is a remote job in Dubai missing from my UAE search?** GulfTalent files remote jobs under Remote jobs, not under a country. Run a second search with Country set to Remote jobs.

**Can I search by skill?** Only if the skill is in the job title. See the first section.

# Actor input Schema

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

Job titles, one per line, up to 20. Each line is its own search, and a job only comes back when every word of the line is in its title, job role, industry, company or place. Skills that only appear in a job's description are not seen. Leave this empty and use the filters below to get every job that fits them.

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

Only jobs in this country. GulfTalent keeps remote jobs under an entry of their own, so a remote job doesn't come back with a country, even when it names one.

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

Only jobs in this city, the way GulfTalent names it: Dubai, Abu Dhabi, Sharjah, Riyadh, Jeddah, Doha, Kuwait City, Manama, Muscat, Cairo, Amman. Leave it empty for the whole country.

## `jobRoles` (type: `array`):

Only jobs GulfTalent files under these roles. A job in any of the roles you pick comes back.

## `industries` (type: `array`):

Only jobs from employers in these industries, as GulfTalent files them. A job in any of the industries you pick comes back.

## `seniority` (type: `string`):

Only jobs at this level, as GulfTalent files them.

## `employmentType` (type: `string`):

Only jobs of this type.

## `postedWithinDays` (type: `integer`):

Only jobs posted in the last this many days. GulfTalent's search has no date filter, so the actor reads its list newest first and stops at the first older job. How far it reads is set by Most pages per search. Leave it empty for any date.

## `companies` (type: `array`):

Only jobs from these companies, one per line, up to 20. A job comes back when every word of a line is in its company name, so Emirates finds Emirates NBD and Emirates Airline alike. GulfTalent's search can't filter by company, so this is checked on each job, within Most pages per search.

## `minMonthlySalary` (type: `integer`):

Only jobs whose page gives a monthly salary reaching this figure, in the currency below. The top of a range counts: 6,500-10,000 AED passes 8,000. Most GulfTalent jobs give no salary at all, and those are left out. The salary is only on each job's page, so setting this opens every page and switches details on.

## `salaryCurrency` (type: `string`):

The currency of the minimum salary. A job showing its salary in another currency is left out, not converted.

## `easyApplyOnly` (type: `boolean`):

Only jobs you apply for on GulfTalent itself, rather than on the employer's own site.

## `exclusiveOnly` (type: `boolean`):

Only jobs GulfTalent marks as exclusive to it. It marks very few.

## `maxPagesPerSearch` (type: `integer`):

Posted within, Companies and Minimum monthly salary are checked on each job here, because GulfTalent's search can't do them. With any of them set, one search reads at most this many pages of 200 jobs from GulfTalent's list, and the status message says when a search stopped there. Raise it for a long look back over a whole country.

## `maxResults` (type: `integer`):

The most jobs returned in one run, across all your searches. Each job returned is charged.

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

Opens each job's page for the full description, the salary when the employer shows it, the closing date, and the nationality, gender and Arabic the employer asks for. Switch it off for the search-result fields only, which is several times faster.

## Actor input object example

```json
{
  "keywords": [
    "accountant"
  ],
  "country": "ANY",
  "seniority": "ANY",
  "employmentType": "ANY",
  "salaryCurrency": "COUNTRY",
  "easyApplyOnly": false,
  "exclusiveOnly": false,
  "maxPagesPerSearch": 10,
  "maxResults": 100,
  "includeDetails": true
}
```

# Actor output Schema

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

One row per job: title, company, city and country, job role, industry, seniority, job type, posting date and link, and with details on the full description, salary when shown, closing date and the employer's nationality, gender and Arabic requirements. A run with no search returns one sample job, marked \_sample, not charged.

## `report` (type: `string`):

For each search: how many jobs the site claimed, how many came back, how many looser matches were left out and why the search stopped.

# 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("dami_studio/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 = { "keywords": ["accountant"] }

# Run the Actor and wait for it to finish
run = client.actor("dami_studio/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 '{
  "keywords": [
    "accountant"
  ]
}' |
apify call dami_studio/gulftalent-jobs-scraper --silent --output-dataset

```

## MCP server setup

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