GulfTalent Scraper & New-Job Monitor - Gulf Jobs & Salaries avatar

GulfTalent Scraper & New-Job Monitor - Gulf Jobs & Salaries

Pricing

from $0.73 / 1,000 job returneds

Go to Apify Store
GulfTalent Scraper & New-Job Monitor - Gulf Jobs & Salaries

GulfTalent Scraper & New-Job Monitor - Gulf Jobs & Salaries

For Gulf recruitment, salary benchmarking and job boards: GulfTalent listings across 16 country sites - UAE, Saudi Arabia, Qatar, Oman, Bahrain, Kuwait and more - with the salary as two numbers, currency and period. On 2026-09-03 software-developer in the UAE hit 115 jobs, GulfTalent's own count.

Pricing

from $0.73 / 1,000 job returneds

Rating

0.0

(0)

Developer

NeverEmpty

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

Share

GulfTalent Scraper - Gulf Jobs, Salaries, Employer & Expiry

For Gulf recruitment, salary benchmarking and employer research: jobs from GulfTalent across 16 country sites — UAE, Saudi Arabia, Qatar, Oman, Bahrain, Kuwait, Egypt, Jordan, Lebanon, Iraq, Libya, India, Africa, Far East, Europe and Other — as flat rows, with the salary as two numbers plus its currency and period whenever the employer published one.

Measured on the live site on 2026-09-03. In the UAE, software-developer returns 115 jobs, accountant 138, civil-engineer 102; Dubai as a whole held 7,924 jobs on 2026-09-11. On 25 live UAE listings, title, company, city, region, country, industry, employmentType, datePosted and validThrough (the expiry date) were present on 100%; a salary on 11 of 25 (44%).

GulfTalent's pagination is a trap that hands you the same 25 jobs forever. It pages on the path (.../software-developer/2), and every query-string form — ?page=, ?p=, ?offset=, ?start=, ?pg=, ?page_no= — returns HTTP 200 and the same first 25 jobs. This Actor uses the form that works, drops repeats and stops when a page brings nothing new: software-developer in the UAE walks 5 pages to 115 unique jobs, which is exactly the "115 Jobs" GulfTalent itself reports.

A country it does not recognise also answers HTTP 200 and returns a mixed list from other countries — /zzzznot/jobs/title/accountant came back with 25 jobs. That is reported as a bad search, not sold to you as data. Each job is read from the JSON-LD JobPosting block GulfTalent publishes for search engines (present on 25 of 25 pages measured), which is maintained for Google and so survives redesigns that break HTML scrapers — and the raw HTML entities it leaves behind (&, present in 15 of 25 listings, some double-encoded) are decoded here.

Each run returns only the listings it has not returned before when monitoring is on. No API key. Reads the same public pages a visitor sees. Export as JSON, CSV or Excel.

Unofficial. This Actor is not affiliated with, endorsed by, or sponsored by GulfTalent. All product names are trademarks of their respective owners.


Run it tomorrow and you only get what is new

Schedule this Actor with monitoringMode: true and each run returns only the jobs it has not returned before. Not "here is everything again, please de-duplicate it yourself" — the Actor remembers what it already gave you, so a daily feed costs you the handful of new roles, not the whole board every morning. You are never charged for the same job twice.

Jobs your filters removed are remembered too, so widening a filter later does not resurrect them as false "new" jobs. Jobs that did not fit under your limit are not remembered, so they are still waiting on the next run instead of being silently lost.


Why this one is different

It refuses to hand you the wrong country

This is the trap in GulfTalent, measured on 2026-09-03: a country it does not recognise answers HTTP 200, not an error - and returns a mixed list of jobs from other countries. Asking for /zzzznot/jobs/title/accountant came back with 25 jobs: 22 from the UAE, 2 from Saudi Arabia, 1 from Qatar, under a heading that said "25 Jobs".

A scraper that trusts the status code would charge you for 25 jobs from the wrong countries and never mention it.

Two things stop that here. The country input only accepts the 16 sites that exist, so a typo is refused before a single request is made. And on top of that, the Actor checks the country of every job it actually found against the country you asked for - so if GulfTalent ever starts answering a valid country with somebody else's jobs, you get one unpaid row saying so instead of a bill.

The salary is honest about how often it exists

Measured on 25 live UAE listings: 11 of 25 (44%) publish a salary.

A job with no published salary comes back with salaryMin: null - not 0. A zero quietly becomes "AED 0 per month" in a spreadsheet, which is worse than an empty cell. Currency (AED, …) and period (month, year, hour, …) are taken from what GulfTalent actually states; when it states nothing, salaryPeriod is null rather than a guess.

Every job, read from the structured data

Each job is taken from the JSON-LD JobPosting block GulfTalent publishes for search engines - present on 25 of 25 pages measured. That block is maintained for Google, so it survives visual redesigns that break HTML scrapers.

fieldhow often it is filled (25 listings measured)
title, company, city, region, country100%
industry, employmentType100%
datePosted, validThrough (expiry)100%
directApply75%
salaryMin / salaryMax / salaryCurrency / salaryPeriod44%

validThrough is the part most job feeds drop: you can tell a live vacancy from one that is about to close without opening it.

Text arrives readable

GulfTalent leaves HTML entities raw in its structured data - IT, Hardware & Networking appeared in 15 of 25 listings. Some rows are double-encoded: one UAE listing carries Dubai Healthcare City - أم … for its Arabic address, which a single decoding pass leaves as أ. Every text field here is decoded until it stops changing and stripped of HTML tags, so industry reads IT, Hardware & Networking and the address reads as Arabic.

Empty strings are turned into null. GulfTalent sends postalCode: "" on UAE listings; an empty string that looks like a value is worse than an honest blank.

Paging that actually pages

GulfTalent pages on the path (.../software-developer/2), not on ?page=. Every query-string form - ?page=, ?p=, ?offset=, ?start=, ?pg=, ?page_no= - returns HTTP 200 and the same first 25 jobs. Asking for a page past the last one silently serves the last page again.

This Actor uses the form that works, drops repeats, and stops when a page brings nothing new. Measured: software-developer in the UAE walks 5 pages to 115 unique jobs, which is exactly the "115 Jobs" GulfTalent reports.


Input

FieldTypeDefaultDescription
countrystringuaeOne of the 16 country sites
keywordstring—Hyphenated job title. Spaces are converted for you. Leave empty to search every job in city (/uae/jobs/city/dubai, 7,924 jobs on 2026-09-11) or the whole country. Only when keyword, city, keywords and companyNames are all empty is the example software-developer used, and every row says so in note. Every row carries searchUrl
citystring—dubai, abu-dhabi, sharjah…
maxJobsinteger251-1000. One job = one row = one charged event
includeDescriptionbooleantrueFull advert text, HTML stripped
useProxybooleantrueRoute through an Apify proxy. GulfTalent answers HTTP 403 to a plain datacenter connection and HTTP 200 to an ordinary home connection, measured on 2026-09-03 - so this is on by default
maxPagesinteger0Safety cap; 0 = decide from maxJobs (25 per page)
keywordsarray—Keep only jobs containing one of these words
keywordMatchstringanyany or all
excludeKeywordsarray—Drop jobs containing one of these
companyNamesarray—Keep only these employers (partial match)
minSalaryinteger0A job with no published salary is kept
requireSalarybooleanfalseDrop the ~56% that hide the salary
postedWithinDaysinteger00 = no limit. An unreadable date is kept
monitoringModebooleanfalseReturn only jobs not returned on a previous run
resetMonitoringStatebooleanfalseOne-shot: forget what was already returned

Filters are applied before you are charged

The filters narrow the jobs already read - nothing extra is fetched from GulfTalent - and a job that does not match is never delivered and never charged. If a search returns jobs but none match your filters you get one unpaid row saying exactly that (no-filter-match), so you can tell "the filter was too tight" apart from "GulfTalent has nothing".

Two of them refuse to guess: a job with no published salary is kept by minSalary (an unknown salary is not a low one), and a job with an unreadable posted date is kept by postedWithinDays. Turn on requireSalary to drop the unknowns.

Monitoring mode turns this into a daily feed

Schedule it with monitoringMode: true and each run returns only the jobs it has not returned before. Already-seen jobs are skipped before their pages are opened, so a repeat run is fast as well as free. The first run returns everything and remembers it.

{
"country": "uae",
"keyword": "software-developer",
"city": "dubai",
"maxJobs": 50
}

Measured on 2026-09-03 in the UAE: software-developer 115 jobs, accountant 138, civil-engineer 102. A job title GulfTalent does not have answers HTTP 404, and you get one unpaid row saying so.


Output

One row per job:

{
"source": "gulftalent",
"jobId": "616636",
"url": "https://www.gulftalent.com/uae/jobs/microsoft-copilot-agent-developer-616636",
"countrySlug": "uae",
"title": "Microsoft Copilot Agent Developer",
"company": "Connect Resources",
"companyLogo": "https://www.gulftalent.com/images1/logos/listing/...png",
"city": "Abu Dhabi",
"region": "Abu Dhabi",
"country": "UAE",
"postalCode": null,
"salaryMin": 10000,
"salaryMax": 12000,
"salaryPeriod": "month",
"salaryCurrency": "AED",
"employmentType": ["FULL_TIME"],
"industry": "IT, Hardware & Networking",
"datePosted": "2026-07-31T00:00:00+00:00",
"validThrough": "2026-10-29T00:00:00+00:00",
"directApply": true,
"description": "We are seeking a Microsoft Copilot Agent Developer to …",
"status": "ok",
"scrapedAt": "2026-09-03T12:00:00.000Z"
}

Rows that are never charged

statuswhen
no-resultsGulfTalent has no jobs for this search. That is its answer, not a failure
country-not-recognisedGulfTalent answered 200 with other countries' jobs instead of an error
unreadableThe page could not be read; the HTTP status is in the note

Each carries a note explaining what happened and the searchUrl it came from. A job is charged only when its JobPosting was actually read - no row is ever built by guessing.


Pricing

Pay per job returned. Rows that report an empty search, an unrecognised country, or a page that could not be read are not charged. A job that appears twice is dropped before it is delivered, so it is never charged twice.


Notes

  • hiringOrganization.sameAs on GulfTalent repeats the company name rather than carrying a URL, so it is not exposed as a link. companyLogo is a real image URL.
  • robots.txt was fetched on 2026-09-03: the User-agent: * section carries no Disallow.
  • Only public pages are read. No login, no API key, no personal data beyond what the employer published in the advert.