UN (UNGM) & World Bank Procurement Monitor - Tender Alerts
Pricing
from $15.00 / 1,000 procurement notice detecteds
UN (UNGM) & World Bank Procurement Monitor - Tender Alerts
Monitor UN Global Marketplace (UNGM) and World Bank procurement notices in one feed. Keyword, country, sector and notice-type filters over both portals' public endpoints. Emits only NEW notices on each run, with World Bank contract-award values parsed out - schedule it and feed your bid pipeline.
Pricing
from $15.00 / 1,000 procurement notice detecteds
Rating
0.0
(0)
Developer
Daniel Matthee
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
UN (UNGM) & World Bank Procurement Monitor — Tender Alerts
The new-notice feed for anyone who bids on UN and development-bank work. Every scheduled run searches the UN Global Marketplace (UNGM) — the shared tender board for ~90 UN agencies and funds — and World Bank project procurement, keeps only the notices matching your keywords, and emits just the ones it has never seen before.
Other actors dump a portal's catalogue and leave you to work out what changed. This one remembers. Run it on a schedule and each run's dataset is your circulation list: the tenders and awards published since you last looked, with agency, country, deadline and — for World Bank awards — the published contract value.
Both sources are the portals' own public endpoints. No API key, no login, no UNGM Pro subscription required.
What you get
| UNGM (UN Global Marketplace) | World Bank | |
|---|---|---|
| Coverage | Live tender notices from ~90 UN agencies: UNDP, UNICEF, WHO, WFP, FAO, IOM, UNOPS, UNHCR, UNIDO, ILO, IAEA, UNRWA and the rest | Procurement notices on Bank-financed projects: expressions of interest, invitations for bids, prequalifications, general procurement notices and contract awards |
| Stable id | UNGM notice id (312822) | World Bank operation id (OP00465428) |
| Notice types | Invitation to bid, request for quotation, request for proposal, call for individual consultants, request for EOI, request for information | Request for Expression of Interest, Invitation for Bids, Invitation for Prequalification, General Procurement Notice, Contract Award |
| Country | Beneficiary country or territory | Project country, including regional groupings ("Western Africa") |
| Sector | Not published in the listing — always null | Goods / Consulting services / Civil works / Non-consulting services |
| Contract value | Not published — always null | Parsed out of the award notice: every one of 1,411 awards in a live 14-day window carried a published amount |
| Typical volume | ~75 new notices per day | ~135 new notices per day |
Example output record
A UNGM tender:
{"source": "ungm","noticeId": "312839","title": "RFQ/EM/JOR/08/04 Rehabilitation Works at Al-Yarmouk Hospital in Irbid, Jordan (Kitchenware)","agency": "WHO","noticeType": "tender","noticeCategory": "Request for quotation","country": "Jordan","sector": null,"reference": "EM/ACO/JOR/P/0009505","projectId": null,"projectName": null,"description": null,"publishedDate": "2026-08-31","deadlineDate": "2026-09-09T09:00:00Z","valueUSD": null,"valueAmount": null,"valueCurrency": null,"url": "https://www.ungm.org/Public/Notice/312839","detectedAt": "2026-08-31T10:56:36Z"}
A World Bank contract award, same shape:
{"source": "world-bank","noticeId": "OP00465460","title": "Accounting software 1C: Accounting (version 8.2)","agency": "World Bank","noticeType": "award","noticeCategory": "Contract Award","country": "Kyrgyz Republic","sector": "Goods","reference": "AQIP-RFQ-4.1","projectId": "P177467","projectName": "Kyrgyz Republic Air Quality Improvement Project","description": "Contract Award Project: P177467-Kyrgyz Republic Air Quality Improvement Project…","publishedDate": "2026-08-28","deadlineDate": null,"valueUSD": null,"valueAmount": 2728000.0,"valueCurrency": "KGS","url": "https://projects.worldbank.org/en/projects-operations/procurement-detail/OP00465460","detectedAt": "2026-08-31T10:56:36Z"}
noticeId is each portal's own public reference, so it pastes straight into
your bid pipeline or the portal's search box. Every field is null rather than
invented when a portal does not publish it — an award has no deadline, and a
UNGM listing carries no sector.
About contract values
World Bank awards publish the contract price in the local currency of the
contract. valueAmount + valueCurrency give you exactly what the notice
says; valueUSD is filled in only when the notice itself is denominated in
USD (225 of 1,411 awards in a live 14-day window). No exchange rate is applied
— an invented USD figure on a contract-value field is worse than a null.
Input options
| Input | Default | What it does |
|---|---|---|
sources | both | ungm, world-bank, or both. |
keywords | (empty) | Case-insensitive substring match; a notice is emitted if any keyword matches. Empty = every new notice. See below. |
countries | (empty) | ISO-2 codes (KE, NG, UA) or country names as the portals print them. Matched as a substring, so Congo also catches "Congo, Democratic Republic of". |
sectors | (empty) | Goods / Consulting services / Civil works / Non-consulting services. World Bank only — UNGM publishes no sector in its listing, so UNGM notices are never dropped by it. |
noticeTypes | tender + award | tender = live opportunities; award = published contract awards, for competitor and pricing intelligence. Awards come from the World Bank only. |
sinceDays | 14 | How far back to look. Your backfill on run one. |
maxItems | 500 | Cap on notices emitted (and billed) per run, split evenly between the portals so neither starves. |
stateStoreName | ungm-worldbank-procurement-state | Change it to run two independent watchlists from one actor. |
Keyword matching, precisely
- World Bank notices are matched against the title, the bid reference and the full notice text.
- UNGM notices are matched against the title and the bid reference. UNGM does not publish a description in its search listing, and fetching ~1,300 detail pages per run would cost you more than it is worth. This is also how UNGM's own search behaves by default.
- Give exactly one keyword and it is additionally pushed to UNGM's own
server-side title search — the run gets dramatically cheaper and returns the
portal's own result set (verified: UNGM reported 26 hits for
vehicleover 14 days; this actor fetched and emitted all 26). - Matching is a plain substring, not the portals' stemmed, multilingual
relevance ranking. Over the same 14-day window,
vehiclematched 20 World Bank notices here versus 27 from the Bank's own search box: the Bank's extra hits are Spanish-language "VEHICULOS" rows, while 10 of ours are genuine English "vehicle" hits deep in a notice body that its search box missed. Predictable beats clever — if you want the wide net, give several narrow keywords rather than one broad one.
The first run backfills, then it goes quiet
Run one emits everything in your sinceDays window that matches — a real
backfill you can circulate immediately. From run two on, an empty dataset means
nothing new was published, which is the answer you wanted. (Verified live: a
1-day window emitted 129 notices, and the immediate re-run emitted 0.)
Both portals are busy — around 210 notices a day between them — so a 14-day
no-keyword backfill is thousands of records. maxItems is your meter: anything
over the cap is not marked as seen and is emitted on the following run
rather than lost, and the cap is split evenly between the portals so you always
get both.
Recommended schedule: daily. UNGM publishes continuously; the World Bank posts on business days.
Use cases
- "Tell me every new UN and World Bank tender in our sectors." Set
keywordsto your practice areas —— schedule it daily, and pipe the dataset into Slack or a shared inbox. That is the Monday-morning portal scan, done.["water supply", "borehole", "monitoring and evaluation"] - "We only work in East Africa." Set withcountries: ["KE", "TZ", "UG", "RW", "ET"]
noticeTypes: ["tender"], and the feed is the pipeline your country leads actually cover — no more filtering 200 notices a day by hand. - "Who is winning the civil-works contracts, and at what price?" Set
sources: ["world-bank"],noticeTypes: ["award"]andsectors: ["Civil works"]. Every award arrives with the project, the country and the published contract price — competitor and pricing intelligence you currently pay an aggregator for.
Pricing (pay per event)
| Event | Price | Charged |
|---|---|---|
| Actor start | $0.005 | Once per run, flat |
| Procurement notice detected | $0.015 | Per new notice pushed to the dataset |
You pay for new notices, not for pages. A quiet run costs half a cent.
Maintenance promise
Both endpoints are checked against a live acceptance run and a fixture-based test suite (52 tests) on each release; parsing degrades to a logged warning naming the missing field rather than a failed run when a portal changes its markup. If one portal is down for a run, the other still reports and the run succeeds with a warning — only a total outage fails the run, deliberately, so a dead run never looks like a quiet day.
Notes on coverage, stated plainly:
- UNGM publishes contract awards on a separate board that this actor does
not cover, so
noticeTypes: ["award"]returns World Bank rows only. - UNGM re-serves a small number of rows across pages while you page a busy window (about 8% of a 14-day fetch); those are deduplicated per run, and you are never billed twice for the same notice.
- Contact names, emails and phone numbers appear in the World Bank's raw feed and are deliberately not collected — only the implementing organisation.
Changelog
- 0.1 — First release. UNGM public notice search + World Bank
procnoticesAPI, seen-id delta monitoring per portal, keyword / country / sector / notice-type filters, World Bank award-value extraction, fairmaxItemssplit across portals.- Internal, pre-release: the fair
maxItemssplit now comes from the shared monitor library (v0.2.0) instead of a local copy. Fixes an edge case atmaxItems=1, where one portal's zero share was treated as "no cap" and could emit — and bill — more notices than the cap allowed. Output, filters, state and pricing are unchanged; anything over the cap still carries over.
- Internal, pre-release: the fair