Boss.az Azerbaijan Jobs Scraper avatar

Boss.az Azerbaijan Jobs Scraper

Pricing

from $1.70 / 1,000 job founds

Go to Apify Store
Boss.az Azerbaijan Jobs Scraper

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

Tim Zinin

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

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

  1. Click Try for free — no card needed on the free plan.
  2. Set Max jobs to return (or leave the default).
  3. Optionally add a Keyword filter to only keep matching titles.
  4. 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

FieldRequiredWhat it does
max_itemsnoTarget 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_daysnoSkip 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_filternoCase-insensitive substring match against each job's title, applied on this Actor's side. Leave empty to keep every job found.
fetch_full_descriptionnoInclude 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_urlnoAdvanced/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ışı..."
}
FieldWhat it means
foundWhether this row is a real job (true) or a notice/error row (false)
urlDirect link to the job posting — the unique key for this row
job_idboss.az's own numeric vacancy id
titleJob title
companyHiring company name
company_urlLink to the company's boss.az profile page, when known — null otherwise
locationCity as boss.az shows it
countryAlways "AZ" — this board covers Azerbaijan only
employment_typeAlways null — boss.az does not publish a discrete employment-type field on this board
categoryboss.az's own job category label (not translated)
posted_dateISO 8601 timestamp
salary_rawSalary 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 / experienceFree-text requirements, exactly as the employer wrote them
email / phonesContact details the employer published for applicants — phones is a list, may be empty
descriptionFull job description (HTML stripped, entities decoded), up to 600 characters, or null when fetch_full_description is off
requirements / responsibilitiesSeparate text blocks the employer wrote, same truncation as description
description_is_teaserAlways false when description is present — every row comes from the job's own full page, never a search-result snippet
source_boardAlways "boss-az"
scraped_atWhen 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 for adjacent workflows in jobs and hiring.

ActorWhat it does
XING Jobs (DACH) ScraperPair 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 ScraperPair 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 ScraperPair 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 ScraperPair it in the jobs and hiring workflow: Search jobs.ch (Switzerland) by keyword and get public job listings: title, company, location, employment...
Job Postings AggregatorPair 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.


Built by zinin. Questions? Telegram @timzinin.