# GCC Jobs API — Bayt, Naukrigulf and GulfTalent in One Search (`blackfalcondata/gcc-jobs-api`) Actor

Get current job listings in the UAE, Saudi Arabia, Qatar, Kuwait, Bahrain and Oman from Bayt, Naukrigulf and GulfTalent with one HTTP call or MCP tool. Filter by city, salary and posting date, flag likely cross-board duplicates and follow new and expired jobs.

- **URL**: https://apify.com/blackfalcondata/gcc-jobs-api.md
- **Developed by:** [Black Falcon Data](https://apify.com/blackfalcondata) (community)
- **Categories:** Jobs, Lead generation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.10 / 1,000 job records

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

### What does GCC Jobs API do?

GCC Jobs API searches current jobs from Bayt, Naukrigulf and GulfTalent in six Gulf countries. One HTTP call or one MCP tool covers the UAE, Saudi Arabia, Qatar, Kuwait, Bahrain and Oman. Filter by country, city, monthly salary in US dollars and posting date. Get any job back with its full description. Flag openings that look posted on more than one board. Follow new and expired jobs through a change list. There is no run to start: the jobs are already indexed.

### How to use this actor

- 👉 **Register for a free Apify account** — no credit card required.
- 🎉 Just click **[Sign up free on Apify →](https://console.apify.com/sign-up?fpr=1h3gvi)** and complete a quick signup.
- 💰 A free Apify account includes $5 in monthly credits — enough to test this actor.
- ⏳ Scrape during the free trial, with no commitment or upfront payment required.

### Key features

- **⚡ One HTTP call, no run to start:** search, a single job and the change list are plain GET endpoints on an always-on server, all answering JSON. There is no run to start, nothing to poll and no dataset to read afterwards, and every parameter is a query string, so a spreadsheet, a notebook, an n8n flow or a bot can call it directly.
- **🧭 Bayt, Naukrigulf and GulfTalent in one search:** one keyword searches the current listings of all three boards at once, newest first, across the UAE, Saudi Arabia, Qatar, Kuwait, Bahrain and Oman. Every job keeps its board, its own id and a link to the original posting, and the fields are the same whichever board it came from: title, company, location, city, category, industry, posting date, salary and a short summary.
- **🤖 MCP tools for AI agents:** Point Claude, Cursor or any MCP client at `/mcp` and the agent gets three tools: `search_jobs`, `get_job` and `list_changes`. Search answers with compact rows sized for a context window; `get_job` returns one listing as Markdown with its complete description, so the agent reads the full text only for the jobs it picked.
- **🎯 Filter by country, city, salary and date:** narrow any search with `country` (AE, SA, QA, KW, BH, OM), `city`, `postedWithinDays` (1 to 60) and `salaryMin`, a monthly amount in US dollars that compares salaries posted in AED, SAR, QAR and the other Gulf currencies on one scale. A job that posts no salary is left out when `salaryMin` is set.
- **🔗 Likely cross-board duplicates flagged:** when the same opening appears to be posted on another board too, the job carries `possibleDuplicates` with that board, its id and its link. It is a hint and nothing is merged or dropped, so you decide whether two postings are one job.
- **🔄 Follow new, updated and expired jobs:** `/changes` lists every job that was added, changed or taken down since your last cursor, oldest first, so a local copy or an alert flow stays in sync without re-reading the whole index. A job is marked expired when its board closes it, or when a complete pass over its board and country no longer finds it.
- **📤 Export anywhere:** every answer is JSON with a stable key set, and paging is a cursor you pass back as it came. Call it from a spreadsheet, a notebook, an n8n or Make flow, or straight from an AI agent, and pipe the response wherever you need it.

### What data can you get for each search?

Each result includes Core job fields (`id`, `board`, `country`, `title`, `location`, `category`, `industry`, and `postedAt`, and more) and company metadata (`company`). All fields are always present — unavailable data points are returned as `null`, never omitted.

### Input

Configure the actor through the input schema in Apify Console.

### Output

Every request answers with structured job records as JSON in the response body. There is no run to start and no dataset to poll.

### Example job record

```json
{
  "id": "naukrigulf-271026000350",
  "board": "naukrigulf",
  "country": "AE",
  "title": "environmental engineer / environmental consultant",
  "company": "Confidential Company",
  "location": "Dubai - United Arab Emirates (UAE)",
  "category": "Engineering",
  "industry": "Water Treatment / De-Salination / Waste Management",
  "postedAt": "2026-10-27T17:17:49.000Z",
  "url": "https://www.naukrigulf.com/environmental-engineer-environmental-consultant-jobs-in-dubai-uae-in-confidential-2-to-8-years-n-jid-271026000350",
  "city": "Dubai",
  "su": 0,
  "summary": "A. Hazardous Waste Management & Treatment - Evaluate, characterize and classify hazardous and non-hazardous industrial waste streams. - Recommend appropriate physical, chemical, biological and other…"
}
```

### How to answer searches

1. Go to [GCC Jobs API](https://apify.com/blackfalcondata/gcc-jobs-api?fpr=1h3gvi) in Apify Console.
2. Configure the input.
3. Click **Start** and wait for the run to finish.
4. Export the dataset as JSON, CSV, or Excel.

### Use cases

- Extract job data from bayt.com for market research and competitive analysis.
- Track salary trends across regions and categories over time.
- Research company hiring patterns, employer profiles, and industry distribution.
- Export clean, structured data to dashboards, spreadsheets, or data warehouses.

### How much does it cost to answer searches?

GCC Jobs API uses [pay-per-event](https://docs.apify.com/platform/actors/paid-actors/pay-per-event) pricing. Starting a run is free — you pay only for each result that is actually produced.

- **Per result:** $0.0011 per job record

Example costs:

- 10 results: **$0.011**
- 25 results: **$0.028**
- 100 results: **$0.11**
- 200 results: **$0.22**
- 500 results: **$0.55**

### FAQ

#### How many searches can I check per run?

Every search in your input list is checked — there is no fixed cap, so the number of searches per run is limited only by your list size and the run's time budget.

#### Can I integrate GCC Jobs API with other apps?

Yes. GCC Jobs API works with Apify's [integrations](https://apify.com/integrations?fpr=1h3gvi) to connect with tools like Zapier, Make, Google Sheets, Slack, and more. You can also use webhooks to trigger actions when a run completes.

#### Can I use GCC Jobs API with the Apify API?

Yes. You can start runs, manage inputs, and retrieve results programmatically through the [Apify API](https://docs.apify.com/api/v2). Client libraries are available for JavaScript, Python, and other languages.

#### Can I use GCC Jobs API through an MCP Server?

Yes. Apify provides an [MCP Server](https://apify.com/apify/actors-mcp-server?fpr=1h3gvi) that lets AI assistants and agents call this actor directly. Use narrow filters and the actor's result limit to keep payloads manageable for LLM context windows.

#### Is it legal to answer searches?

This actor queries publicly available data for the searches you provide. You remain responsible for ensuring your use complies with applicable laws, source terms, and downstream obligations.

#### Your feedback

If you have questions, need a feature, or found a bug, please [open an issue](https://apify.com/blackfalcondata/gcc-jobs-api/issues?fpr=1h3gvi) on the actor's page in Apify Console. Your feedback helps us improve.

### You might also like

- [Bayt Job Scraper — MENA Jobs with Salary & Skills](https://apify.com/blackfalcondata/bayt-scraper?fpr=1h3gvi) — Scrape bayt.com — the leading Middle East job board across UAE · Saudi Arabia · Qatar · Egypt & 9.
- [GCC Job Scraper — Bayt, Naukrigulf and GulfTalent](https://apify.com/blackfalcondata/gcc-job-scraper?fpr=1h3gvi) — Get current job listings from Bayt, Naukrigulf and GulfTalent across the six Gulf states in one.
- [GulfTalent Job Scraper — Salaries, Emails & 40+ Fields](https://apify.com/blackfalcondata/gulftalent-scraper?fpr=1h3gvi) — 💰 $0.7/1K — scrape gulftalent.com, the largest Gulf and Middle East job board, across all six.
- [Naukrigulf Job Scraper — Gulf Job Board](https://apify.com/blackfalcondata/naukrigulf-scraper?fpr=1h3gvi) — Scrape naukrigulf.com — 13 markets across the Gulf and wider MENA, from UAE and Saudi Arabia to.
- [Wuzzuf Job Scraper \[Just 💰$1\] — Egypt & MENA Jobs](https://apify.com/blackfalcondata/wuzzuf-scraper?fpr=1h3gvi) — 💰 $1 per 1,000 jobs. Scrape wuzzuf.net across Egypt & the wider MENA region — structured salary ·.
- [Actiris Job Scraper \[Just 💰$1.5\] — Brussels Public Jobs](https://apify.com/blackfalcondata/actiris-scraper?fpr=1h3gvi) — 💰 $1.5 per 1,000 jobs. Scrape actiris.brussels — the official Brussels public employment service.
- [AllJobs Israel Job Scraper - Hebrew & English](https://apify.com/blackfalcondata/alljobs-co-il-scraper?fpr=1h3gvi) — Scrape alljobs.co.il — records. Every record carries extracted emails, salary and location the.
- [AMS Austria Job Scraper — Public Employment Service Jobs](https://apify.com/blackfalcondata/ams-austria-job-scraper?fpr=1h3gvi) — Scrape jobs.ams.at, Austria's official AMS public employment portal (alle jobs). Get live.

### Getting started with Apify

New to Apify? [Create a free account with $5 credit](https://console.apify.com/sign-up?fpr=1h3gvi) — no credit card required.

1. Sign up — $5 platform credit included
2. Open this actor and configure your input
3. Click **Start** — export results as JSON, CSV, or Excel

Need more later? [See Apify pricing](https://apify.com/pricing?fpr=1h3gvi).

### Endpoints

Every endpoint is a GET, every parameter is a query string, and every answer is JSON. Send `Authorization: Bearer <APIFY_TOKEN>` (or append `?token=<APIFY_TOKEN>`) to authenticate. The base address is `https://blackfalcondata--gcc-jobs-api.apify.actor`. The full parameter list is on the Endpoints tab.

| Endpoint | What it returns | Billed |
|---|---|---|
| `/health` | Version, and that the server is up | Free |
| `/stats` | How many jobs the index holds, per board and per country, and when it was built | Free |
| `/search` | Jobs matching every word of `q` in the title, company or category, newest first. Filters: `country`, `city`, `postedWithinDays` (1-60), `salaryMin` (monthly USD), `limit` (1-100, default 20), `cursor` | Per job returned |
| `/job/{id}` | One job with its complete description | One job |
| `/changes` | Jobs added, updated or expired since `cursor`, oldest first. `limit` 1-100, default 100 | Per change returned |
| `/mcp` | The MCP endpoint: tools `search_jobs`, `get_job` and `list_changes` | Per job returned |

```bash
BASE=https://blackfalcondata--gcc-jobs-api.apify.actor
TOKEN=<APIFY_TOKEN>

  # Accountant jobs in the UAE posted in the last 7 days
curl "$BASE/search?q=accountant&country=AE&postedWithinDays=7&token=$TOKEN"

  # Engineering jobs in Riyadh paying at least $3,000 a month
curl "$BASE/search?q=engineer&country=SA&city=Riyadh&salaryMin=3000&limit=50&token=$TOKEN"

  # The next page: pass back the nextCursor of the previous answer with the same query
curl "$BASE/search?q=engineer&country=SA&city=Riyadh&salaryMin=3000&limit=50&cursor=<nextCursor>&token=$TOKEN"

  # One job with its full description
curl "$BASE/job/<id>?token=$TOKEN"

  # Everything that changed since your last read
curl "$BASE/changes?cursor=<nextCursor>&token=$TOKEN"
```

### Use it from an AI agent (MCP)

Add the server to any MCP client (Claude Desktop, Claude Code, Cursor, an agent framework) as a streamable HTTP server at `https://blackfalcondata--gcc-jobs-api.apify.actor/mcp`, with the header `Authorization: Bearer <APIFY_TOKEN>`.

- `search_jobs`: keyword, country, city, posting window and minimum monthly salary in, compact rows out (id, title, company, city, country, posting date, salary, summary, board, link). Ten rows by default, so an answer fits a context window.
- `get_job`: one id in, the listing as Markdown with its complete description out.
- `list_changes`: a cursor in, the jobs added, updated or expired since then out.

A tool call that finds nothing, or that fails, is not billed.

### Reading the answer

A search answers `{ "ok": true, "total": 412, "offset": 0, "count": 20, "records": [ ... ], "nextCursor": "..." }`. Each record carries `id`, `board`, `country`, `title`, `company`, `location`, `city`, `category`, `industry`, `postedAt`, `url`, `salary` as posted, `su` (the salary as monthly US dollars, 0 when none is posted), a short `summary` and, when the same opening seems to be posted on another board too, `possibleDuplicates` with that board, its id and its link. `nextCursor` is null on the last page.

`/changes` answers `{ "ok": true, "count": 3, "events": [ { "eventId": "...", "type": "new", "id": "...", "job": { ... } } ], "nextCursor": "...", "hasMore": false }`. Store `nextCursor` and send it on your next call; `hasMore` tells you to call again right away.

A failure is `{ "ok": false, "error": "bad_request", "message": "..." }`. The `error` code is stable and safe to branch on: `bad_request` and `bad_cursor` mean the request itself is wrong, `not_found` means the job is no longer current, `resync` (HTTP 410) means a cursor is too old and the query should start again without one, and `not_ready` or `billing_unavailable` (HTTP 503) are worth a retry.

### How billing works

You pay per job returned: a search page of 20 jobs is 20 results, one job with its description is one result, and each entry in the change list is one result. `/health` and `/stats` are always free, and an answer with no jobs, a request that fails validation, or one that could not be billed is never charged. A request is charged before its jobs are sent, so nothing is delivered past a spending limit you set on your Apify account.

### Disclaimer

This actor serves job listings that Bayt, Naukrigulf and GulfTalent publish openly on their websites. It is not affiliated with, endorsed by or operated by Bayt.com, Info Edge (Naukrigulf) or GulfTalent. Listings are reproduced as the boards served them when the index was last refreshed; a job can be filled or withdrawn before the next refresh, and salary, location and company details are only as complete as the employer made them. `possibleDuplicates` is an unverified hint. You are responsible for using the data in line with the boards' terms and the data-protection rules that apply to you.

### Search keywords

bayt scraper, bayt api, apify bayt, bayt data extraction, bayt.com scraper, bayt.com data, bayt.com api, naukrigulf.com scraper, gulftalent.com scraper, job listings scraper, recruitment data, hiring data, job board scraper, middle east jobs mcp, job search mcp server.

# Changelog

This Actor's version history is a separate document: https://apify.com/blackfalcondata/gcc-jobs-api/changelog.md

# Actor input Schema

## Actor input object example

```json
{}
```

# Actor output Schema

## `results` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("blackfalcondata/gcc-jobs-api").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("blackfalcondata/gcc-jobs-api").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 '{}' |
apify call blackfalcondata/gcc-jobs-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,blackfalcondata/gcc-jobs-api"
        }
    }
}
```

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/W5rXeKKt3b0YwwRKa/builds/hBrSbXL0PfPbL0bSY/openapi.json
