Boss.az Azerbaijan Jobs Scraper
Pricing
from $1.70 / 1,000 job founds
Boss.az Azerbaijan Jobs Scraper
Walk boss.az's own job sitemap and pull public job listings from Azerbaijan: title, employer, location, salary (AZN), education/experience requirements, and contact details — straight from each job's own public page.
Pricing
from $1.70 / 1,000 job founds
Rating
0.0
(0)
Developer
Tim Zinin
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Boss.az is one of Azerbaijan's leading job boards. This Actor walks its own public job sitemap and visits each job's own page to return one row per posting — title, employer, location, salary (AZN, when published), education/experience requirements, category, and contact email/phone. No login, no browser, no search query.
What you get
- Live jobs straight from boss.az's own sitemap, not a stale export.
- Full job detail, including data the page's own SEO markup leaves empty. boss.az's schema.org listing always ships an empty description — this Actor reads the same embedded data the page itself uses to render, which also carries the real description, requirements, responsibilities, and contact email/phone.
- Salary in AZN when the employer published one — read as real numbers, never estimated when it's missing (roughly a third of postings don't disclose one).
- Optional keyword filter. Keep only jobs whose title contains your term — applied after fetching, since there is no server-side search available here.
- Honest closed/removed handling. A posting that's expired or no longer exists still answers HTTP 200 on this board (its own SPA quirk) — this Actor checks the page's own status field instead of trusting the HTTP code, and skips those for free.
- Runs on Apify: schedule it, monitor it, call it from the API or the MCP server, export to JSON, CSV or Excel, or push results straight into your own pipeline.
How to run it
- Click Try for free — no card needed on the free plan.
- Set Max jobs to return (or leave the default).
- Optionally add a Keyword filter to only keep matching titles.
- Press Start. Results appear in the dataset — read them in the UI, pull them from the API, or have a webhook push them onward.
Pricing
Pay-per-event: $0.005 per run start + $0.002 per job found. No monthly seat, no minimum. 100 jobs cost about $0.21; 1,000 jobs about $2.01.
A closed/removed posting, a keyword that matched nothing, or a sitemap that failed to load is still logged with found: false and the reason where one exists — and it is not charged for. You pay for jobs actually delivered, not for attempts. Note: boss.az's whole current market is roughly 600 open postings at any given time — this is a national, not global, board.
Input
| Field | Required | What it does |
|---|---|---|
max_items | no | Target number of job rows to deliver (default 20, max 200). This is a target, not a guarantee — some listed jobs turn out already closed. |
freshness_days | no | Skip sitemap entries not updated in this many days (default 30). boss.az's "last modified" date also moves when an employer pays to renew ("bump") an old posting, so this is a recency signal, not an exact posting age. |
keyword_filter | no | Case-insensitive substring match against each job's title, applied on this Actor's side. Leave empty to keep every job found. |
fetch_full_description | no | Include the full description, requirements, and responsibilities text in the output row (default true). The job's own page is fetched either way — this only controls whether the text is kept. |
sitemap_override_url | no | Advanced/diagnostic: override the sitemap URL this Actor walks. Leave empty for normal use. |
{"max_items": 3}
Output
One dataset row per job found. This is a real row from a real run:
{"found": true,"url": "https://boss.az/vacancies/269855","job_id": "269855","title": "Satış təmsilçisi OTC (aptek qrupu)","company": "GRAND MEDİCİNE MMC","company_url": "https://boss.az/companies/63576","location": "Bakı","country": "AZ","employment_type": null,"posted_date": "2026-06-29T08:07:21.000Z","salary_raw": "AZN 700","description": "Grand Medicine MMC vitamin, dəstək məhsulları və OTC məhsullarının satışı sahəsində fəaliyyət göstərən inkişaf etməkdə olan şirkətdir...","description_is_teaser": false,"source_board": "boss-az","scraped_at": "2026-07-30T07:55:54.680Z","category": "Satış məsləhətçisi","education": "Ali","experience": "1 ildən 3 ilə qədər","email": "info@grandmedicine.az","phones": ["(051) 230-90-09"],"requirements": "* Satış sahəsində təcrübə üstünlükdür * OTC, vitamin və ya aptek sektorunda təcrübə arzuolunandır...","responsibilities": "* Təyin olunmuş bölgədə apteklərin ziyarət edilməsi * Məhsulların apteklərə təqdimatı və satışı..."}
| Field | What it means |
|---|---|
found | Whether this row is a real job (true) or a notice/error row (false) |
url | Direct link to the job posting — the unique key for this row |
job_id | boss.az's own numeric vacancy id |
title | Job title |
company | Hiring company name |
company_url | Link to the company's boss.az profile page, when known — null otherwise |
location | City as boss.az shows it |
country | Always "AZ" — this board covers Azerbaijan only |
employment_type | Always null — boss.az does not publish a discrete employment-type field on this board |
category | boss.az's own job category label (not translated) |
posted_date | ISO 8601 timestamp |
salary_raw | Salary in AZN as published (e.g. "AZN 750–800"), or null — roughly a third of postings don't disclose one; this Actor never estimates or invents a figure |
education / experience | Free-text requirements, exactly as the employer wrote them |
email / phones | Contact details the employer published for applicants — phones is a list, may be empty |
description | Full job description (HTML stripped, entities decoded), up to 600 characters, or null when fetch_full_description is off |
requirements / responsibilities | Separate text blocks the employer wrote, same truncation as description |
description_is_teaser | Always false when description is present — every row comes from the job's own full page, never a search-result snippet |
source_board | Always "boss-az" |
scraped_at | When this Actor fetched the row |
A run whose keyword filter matched nothing (or whose entire candidate batch turned out closed/filtered) pushes:
{ "found": false, "error": "", "source_board": "boss-az", "scraped_at": "..." }
A run whose sitemap failed to load pushes an error row with a non-empty error (e.g. "http 404") — never the same shape as "no matches".
Other tools we built
Related tools
Related tools for adjacent workflows in jobs and hiring.
| Actor | What it does |
|---|---|
| XING Jobs (DACH) Scraper | Pair it in the jobs and hiring workflow: Walk xing.com's own job sitemap and pull public job listings from Germany/Austria/Switzerland: title,... |
| Jobs.ge Georgia Jobs Scraper | Pair it in the jobs and hiring workflow: Search Jobs.ge (Georgia, the country's oldest job board) and get public job listings: title, employer,... |
| Computrabajo LatAm Jobs Scraper | Pair it in the jobs and hiring workflow: Search Computrabajo (Mexico, Colombia, Chile, Argentina, Peru) by keyword and get public job listings:... |
| jobs.ch Swiss Jobs Scraper | Pair it in the jobs and hiring workflow: Search jobs.ch (Switzerland) by keyword and get public job listings: title, company, location, employment... |
| Job Postings Aggregator | Pair it in the jobs and hiring workflow: Pull every open role from a company's public applicant-tracking system (Greenhouse, Lever, Ashby) and... |
FAQ
Does it need an API key / login? No — it reads boss.az's public sitemap and public job pages, no session required.
Why do I sometimes get fewer jobs than max_items? Some listed jobs turn out already closed by the time this Actor visits them — boss.az's own site quirk is that a closed or missing posting's page still answers HTTP 200, so this Actor checks the page's own status data instead and skips those for free, trying extra candidates to compensate.
How stable is the source? Boss.az does not expose the full detail fields in standard JobPosting markup; the Actor reads the structured hydration data used by the site's own frontend. A major frontend redesign can require a parser update, and the Actor reports that as an error rather than returning guessed fields.
Why is salary_raw sometimes null? Because that employer didn't publish one on boss.az. This Actor never estimates or guesses a number.
Can I filter by keyword? Yes, via keyword_filter — a case-insensitive match against the job title, applied after this Actor fetches each candidate page (boss.az's own job search needs a browser session and is not used here).
How big is this market? boss.az's own sitemap lists roughly 600 vacancy pages at any given time — a national Azerbaijan job board, not a global one.
Can I call it from an AI agent? Yes — standard Apify Actor, callable from the Apify API, the SDK, or the Apify MCP server.
What this is NOT. It does not apply to jobs on your behalf, does not cover job boards outside boss.az, and does not invent a salary figure when the source has none.
Found a wrong result, or need a check we don't run? Open an issue on this Actor's page.