Qatar Living Jobs Scraper
Pricing
from $5.00 / 1,000 job listings
Qatar Living Jobs Scraper
Export every job on Qatar Living with company, city, salary, required languages and applicant counts. Flags expired listings and re-posted jobs, so you can see which employers keep bumping a vacancy they can't fill.
Pricing
from $5.00 / 1,000 job listings
Rating
0.0
(0)
Developer
Mohammad Salman Farsi Khan
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Export every job on Qatar Living into a clean spreadsheet or JSON feed — with company, city, seniority, contract type, work mode, required languages, how many people already applied, salary ranges, and a flag showing which listings have already expired.
No login. No browser. No manual work. Just fast, structured Qatar job-market data.
Runs behind Apify Proxy automatically, so it keeps working even when the source site tightens its bot protection (see the FAQ below).
Why this one is different
Qatar Living keeps job posts visible on the site long after they close. Listings expire 30 days after posting, and in our measurements, between 4% and 19% of listings on a given day had already expired but were still displayed. Every row here carries ageDays, expiresAtEstimate and isLikelyExpired, and you can filter dead listings out entirely with one checkbox.
It also reports applicantCount — how many candidates have already applied — which no other Qatar jobs dataset exposes.
Who this is for
- Recruitment agencies placing candidates into Qatar from South Asia, the Philippines and Africa
- HR and compensation teams benchmarking salaries in Doha
- Job boards and aggregators adding Qatar coverage
- Labour-market researchers and journalists tracking Gulf hiring
- AI agents needing live Qatar job data through the Apify MCP server
What you get
Every row, always:
| Field | Example | Filled |
|---|---|---|
title | CCTV Technician | 100% |
company | Veritas Technology CFM | 100% |
city / country | Doha / Qatar | 99% |
seniority | Entry Level | 99% |
employmentType | Full-Time, Contract, Freelance | 100% |
workMode | On-Site, Hybrid, Remote | 94% |
applicantCount | 40 | 68% (shown by the site on most, not all, posts) |
languages | ["Arabic", "English", "Hindi"] | 44% (only when the employer specifies) |
postedRelative / postedDateEstimate / ageDays | "11 hours ago" / ISO / 0 | 100% |
isLikelyExpired / expiresAtEstimate | false / ISO | 100% |
sourceUrl, jobId, companyId, scrapedAt | — | 100% |
Fill rates come from a full 160-row export, measured — not estimated.
Turn on Include full description and salary and each row also gets:
| Field | Example |
|---|---|
description | Full description as clean text (descriptionHtml keeps the original) |
salaryText / salaryMin / salaryMax / currency / salaryPeriod | "2000 - 3000 QAR" / 2000 / 3000 / QAR / MONTH — present on about 60% of jobs, since not every employer publishes pay |
datePosted / expiresAt | Exact dates published by the site |
experienceMonths | 24 |
originalPostingExpired | true / false / null — has the JSON-LD validThrough date already passed? null when the site publishes none |
firstPostedDaysAgo | 45 — whole days since the ORIGINAL datePosted, null when the site publishes none |
isRepost | true — firstPostedDaysAgo is at least 14 days greater than the card's ageDays, i.e. the employer re-bumped it |
One row per job. No joining, no post-processing. Export as CSV, Excel, JSON or XML.
Input
{"keyword": "technician","maxItems": 200,"includeDescription": true,"excludeExpired": true,"postedWithinDays": 7}
| Input | What it does |
|---|---|
keyword | Filter on title, company or seniority. Empty returns everything. |
maxItems | Stop after N jobs. The board typically holds 120–160 live listings, depending on the day, so 200 returns the whole board. |
includeDescription | Adds description, salary and exact dates from each job's own page. |
excludeExpired | Skips listings past their 30-day expiry. You are not charged for skipped rows. |
postedWithinDays | Only jobs posted in the last N days. Set to 1 for a daily new-vacancy feed. Without descriptions, age is based on when the post was last surfaced on the board; with includeDescription: true, it filters on the site's original posting date. To get everything, omit the key entirely (don't send 0 or null). |
Filters run before billing — you only pay for rows you actually receive.
Output sample
{"jobId": "1f4a3253-84b8-4be4-91c7-3f93ef5ca0d0","title": "CCTV Technician","company": "Veritas Technology CFM","city": "Doha","country": "Qatar","location": "Doha, Qatar","seniority": "Entry Level","employmentType": "Full-Time","workMode": "Hybrid","languages": ["Arabic", "English", "Hindi"],"applicantCount": 40,"isPromoted": true,"hasQuickApply": true,"postedRelative": "11 hours ago","postedDateEstimate": "2026-09-19T04:12:07.000Z","expiresAtEstimate": "2026-10-19T04:12:07.000Z","isLikelyExpired": false,"ageDays": 0,"salaryText": "2000 - 3000 QAR","salaryMin": 2000,"salaryMax": 3000,"currency": "QAR","salaryPeriod": "MONTH","experienceMonths": 0,"sourceUrl": "https://www.qatarliving.com/en/jobs/jobs/profile/cctv-technician-5","scrapedAt": "2026-09-19T15:20:41.220Z"}
Pricing
| Event | Price |
|---|---|
| Each job returned | $5.00 per 1,000 |
| Each job enriched with description and salary | $10.00 per 1,000 |
What a real run costs: The whole board (typically 120–160 jobs) costs about $0.60–$0.80, or about $1.80–$2.40 with full descriptions and salaries. A daily fresh-jobs feed (postedWithinDays: 1) usually costs a few cents per run.
How to use it
- Click Try for free.
- Leave the inputs empty for the whole board, or set
excludeExpired: truefor live vacancies only. - Download CSV, Excel or JSON — or connect it to Make, Zapier, n8n, or your own code via the Apify API.
- Schedule it daily with
postedWithinDays: 1to receive only new listings.
FAQ
Does this need a login on the source site? No. It reads only public, server-rendered pages that anyone can view in a browser.
Does it use a proxy? Yes — automatically, and you don't configure anything. Qatar Living sits behind Cloudflare, which refuses requests from cloud/datacenter IPs. Each run preflight-checks Apify's Unblocker proxy first, then falls back to residential, then to a direct connection, and uses the first tier that reaches the site. Proxy traffic is part of the run's platform usage and is billed to the account that starts the run, on top of the per-job price.
Does it respect robots.txt?
Yes. It never touches the disallowed /api/ paths, keeps a 2-second delay between requests, and runs at most 2 requests in parallel.
Why do some jobs have no salary? Employers choose whether to publish pay. Roughly 60% of listings include a salary range; the rest show none, and expired listings are the most likely to be missing it. Every enriched row always includes the full description and exact posting dates.
What happens if I set a maximum cost per run?
The Actor stops cleanly as soon as your budget can't cover another job.
If your budget covers a job but not its description, that last job is
delivered without the description and you are not charged for it. The
row is marked enrichmentSkippedReason: "spending-limit". You never pay
for data you don't receive.
Does it collect personal data about job seekers? No. Employer job postings only. No candidate names, CVs or contact details.
How do you know a job is expired?
Job detail pages publish validThrough (always 30 days after datePosted), which only fills expiresAt and originalPostingExpired — isLikelyExpired always stays as the card computed it, and isRepost is true when the original posting is at least 14 days older than the card's ageDays, i.e. the employer re-bumped a listing whose original validThrough may already be in the past.
Why do a few jobs appear twice?
Employers repost roles. The duplicates have different job IDs and different posting dates — turn on excludeExpired and the old copy disappears.
What about the Domestic (household) jobs tab? That section renders client-side through endpoints robots.txt disallows, so it isn't included. This Actor covers the corporate section in full.
Can my AI agent call this? Yes. It runs through the Apify MCP server and charges per event, so agents can call it directly.
Support
Need an extra field, or something broke? Open an issue on the Issues tab. I reply within 24 hours and fix breakages fast.
Legal
This Actor collects publicly available job postings for market research, recruitment and aggregation. You are responsible for how you use the data, including compliance with the source site's terms and applicable law in your jurisdiction.