UN Jobs Scraper — unjobs.org UN & NGO Vacancies
Pricing
from $3.50 / 1,000 job results
UN Jobs Scraper — unjobs.org UN & NGO Vacancies
Scrape UN and NGO vacancies from unjobs.org — 143 agencies (UNICEF, WFP, UNDP, UNHCR…) in one run. Get title, organisation, duty station, closing date, full description and apply URL. Delta mode returns only new postings, ideal for job-alert bots. $5/1,000 results, no API key needed.
Claude / Codex skill to describe and setup this actor: SKILL.md
Fetch current vacancies from unjobs.org — the classic UN jobs aggregator covering UN agencies, funds and programmes plus adjacent international organisations, updated continuously throughout the day.
No API key, no login. A proxy is required — unjobs.org blocks Apify's own IPs, so the Actor routes every request through the proxy you select (see Proxy). $5 per 1,000 results (plus a $0.005 start fee), with volume discounts down to $3.50/1,000.
What unjobs.org data does this scraper extract?
Each result is one flat JSON record per vacancy:
| Field | Meaning |
|---|---|
id | Stable source-side identifier (unjobs.org posting id) |
title | Job title as listed (unjobs.org appends the duty station: "Role, City, Country") |
company | Hiring organisation line (e.g. "UNICEF - United Nations Children's Fund") |
location | Duty station, when the title carries a real one (see below) |
url | Direct link to the vacancy on unjobs.org |
updatedAt | ISO timestamp of when unjobs.org last updated the posting |
snippet | Organisation — location, joined as a short summary line |
source | Always "unjobs" |
With Include full details (includeDetails) on, each record also carries the fields the listing page simply does not have:
| Field | Meaning |
|---|---|
closingDate | Application deadline (ISO 8601) |
description | Full job description text, up to 5,000 characters |
country / city | Structured location as the organisation itself published it |
office | Hiring office, e.g. "UNICEF in Amman" |
This costs one extra event per vacancy enriched, and it also corrects location: unjobs.org publishes no location field on the listing, so it can only be read off the end of the job title — and a title like "Chair, Department of Biological and Biomedical Sciences" has a comma but no location. Listing-only records leave location empty rather than fill it with a fragment of the title; detail mode replaces the guess with the real country and city.
Choosing a feed
Organisation and Duty station override Feed when set.
| Feed | What you get | Use it for |
|---|---|---|
latest (default) | The 25 newest postings site-wide | Job alerts, monitoring — a new vacancy lands here first |
closing | ~300 vacancies whose deadline is near | Deadline-driven search |
allOrganizations | Every one of the ~143 organisation feeds, deduped | A full snapshot of what unjobs.org currently lists |
organization | One organisation, e.g. unicef, wfp, undp (browse) | Tracking one agency |
dutyStation | One duty station, e.g. gva for Geneva (browse) | Tracking one location |
Note that latest and closing are disjoint — a posting published today with a deadline two months out is not in the closing-soon feed. If you are watching for new vacancies, use latest (the default) rather than closing.
Add a Keyword filter (keywordFilter) on top of any feed to keep only postings whose title or organisation matches; filtered-out postings are never billed.
Built for job-alert bots: delta mode
Turn on Only new since last run (onlyNewSinceLastRun) and every scheduled run returns only postings it has never delivered before — already-seen jobs are dropped before they're pushed or billed, so a monitoring schedule pays only for genuinely new openings. Seen ids persist in the Actor's key-value store across runs; Reset delta state (resetSeenJobs) starts over. No other UN/NGO-sector scraper on Apify offers an incremental mode.
Pair it with the latest feed and a schedule (hourly keeps up comfortably: unjobs.org posts roughly 10 vacancies an hour) and you have a complete new-vacancy stream that bills you only for jobs you have never seen.
How to scrape unjobs.org with this Actor
- Click Try for free / Run — no login to the target site, no cookies. The Proxy configuration input defaults to Apify Proxy in automatic (datacenter) mode; see Proxy before your first run.
- Adjust the input (organisation, duty station, keyword,
maxItems) or keep the defaults. - Run it and export the dataset as JSON, CSV or Excel, or read it over the API.
Run it from your own code:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("nomad-agent/unjobs-scraper").call(run_input={"organization": "unicef"})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item["url"])
Proxy
unjobs.org sits behind Cloudflare and answers Apify's un-proxied platform IPs with HTTP 403 on every listing page, so this Actor needs a proxy for every request — it is not an optimisation you can switch off. Proxy configuration in the input controls it:
- Apify Proxy, automatic mode (the default) — datacenter exits, available on every Apify plan, no residential bandwidth to pay for. It worked when last measured (2026-08-01: 35/35 HTTP 200 across the latest, closing-soon, organisation and duty-station feeds). Cloudflare rules change, so if you start seeing 403s, switch to one of the two below.
- Apify Residential — the fallback when datacenter exits get refused. Needs a paid Apify plan, and its bandwidth is billed on top of this Actor's own price (see Pricing).
- Your own proxy URLs — supported through the same field; the Actor uses exactly what you set, with no automatic fallback.
If every request is blocked, the run reports SUCCEEDED with one uncharged diagnostic row explaining why, rather than failing.
Pricing
Pay per event — you are billed for results, not for runtime:
| Event | Price |
|---|---|
| Run start | $0.005 |
| Each vacancy returned | $0.005 ($5 / 1,000; volume tiers down to $3.50 / 1,000) |
| Each vacancy enriched with full details | extra, and only when includeDetails is on |
The default proxy (Apify Proxy, automatic/datacenter mode) adds no bandwidth charge. If you switch to the Residential group, Apify bills residential proxy bandwidth (GB) separately per your plan's proxy rates.
Delta mode and the keyword filter both reduce what you pay — postings dropped by either are never pushed and never billed, and a vacancy page that fails to load is never charged the detail event.
A full allOrganizations snapshot is around 900 vacancies, so it bills roughly $4.50. Every run also carries a maximum total charge (Apify sets a default one from your plan). If a snapshot would exceed it, the Actor delivers everything that fits inside your budget and stops cleanly — it never overruns the cap. Raise the run's max total charge to take the rest.
Related actors — the full UN / NGO jobs stack
unjobs.org is one lens on the impact-sector job market. These siblings cover the rest, all with the same flat record shape and delta mode:
- Impactpool Jobs Scraper — Impactpool.org: UN agencies, development banks, INGOs, EU institutions.
- UN Careers Scraper — careers.un.org: the UN Secretariat's own vacancy board.
- ReliefWeb Jobs Scraper — reliefweb.int: humanitarian and emergency-response roles.
- Devex Jobs Scraper — devex.com: international-development jobs and consultancies.
- Researcher Jobs Bundle — one run across all of the above plus academic sources.
Is it legal to scrape unjobs.org?
This Actor reads only publicly listed vacancy summaries (title, organisation, location, link) — no personal data, no login-protected content. Review the target site's terms and your local regulations before large-scale use.
From the maker of Oink — an open-source, AI-powered job-search bot for Telegram that runs on these Actors. Try the free bot, get a managed instance at oinkjobsearch.com, or browse the full catalog of 50+ Actors.