World Bank Tenders Scraper — Procurement & Bid Notices
Pricing
from $2.50 / 1,000 results
World Bank Tenders Scraper — Procurement & Bid Notices
World Bank procurement notices from the official API: open tenders, RFPs, expressions of interest, prequalifications and contract awards across 100+ countries. Filter by country, notice type, keyword, date. Contact emails included. B2G leads, tender alerts, procurement intel.
Pricing
from $2.50 / 1,000 results
Rating
0.0
(0)
Developer
Berkan Kaplan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
World Bank Tenders, Bids & Contract Awards (Procurement Notices)
Need a live feed of World Bank-funded tenders and contract awards — with the buyer's contact email, not just a PDF link? This Actor turns the official World Bank procurement notices API into ready-to-use records: 400,000+ notices across 100+ countries — open tenders, expressions of interest, prequalifications, invitations for bids and contract awards — as one clean, flat dataset.
Built on the World Bank's official open data, licensed CC BY 4.0 — free to reuse and resell, with attribution. No API key, no login, no fragile HTML scraping — it reads the same structured API the World Bank publishes, so it doesn't break when a web page changes.
- 🌍 100+ countries — every active World Bank procurement market, not a sample
- 📧 Buyer contact email + deadline on open opportunities — act on a bid the day it's posted
- 🏆 Contract-award intelligence — 300,000+ closed awards (winning firm & price inside the full notice text)
- ⚡ One run → one clean, flat dataset (JSON / CSV / Excel / API)
Quick start (API)
Get open tenders in Kenya mentioning "water" from the last 90 days, in one call:
curl -X POST "https://api.apify.com/v2/acts/foxlabs~worldbank-tenders/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{ "status": "open", "countries": ["Kenya"], "searchTerm": "water", "datePreset": "last_90_days", "maxResults": 100 }'
Prefer no code? Open the Input tab, set your filters, and click Start — then download the results.
What you get
One flat record per procurement notice:
| Field | Type | Description |
|---|---|---|
id | string | World Bank notice ID (e.g. OP00454722) |
noticeType | string | One of: Request for Expression of Interest, Invitation for Bids, General Procurement Notice, Invitation for Prequalification, Contract Award, Goods and Works Award, Small Contracts Award |
noticeDate | string | Publication date, DD-Mon-YYYY (e.g. 30-Jun-2026) |
submissionDeadlineDate | string | Bid submission deadline, YYYY-MM-DD — open opportunities only (null on awards) |
submissionDeadlineTime | string | Deadline time of day, HH:MM — open opportunities only |
country | string | Project country, World Bank spelling (e.g. Viet Nam) |
projectId | string | World Bank project ID (e.g. P178530) |
projectName | string | World Bank project name |
bidReference | string | Bid / contract reference number |
bidDescription | string | Short description / scope of the notice |
procurementCategory | string | Procurement group code: CS consulting, GO goods, CW civil works, NC non-consulting |
procurementMethod | string | Procurement method (e.g. Request for Bids, Individual Consultant Selection) |
contactName | string | Buyer contact person — open opportunities only |
contactOrganization | string | Buyer / implementing agency — open opportunities only |
contactEmail | string | Buyer contact email — open opportunities only |
contactPhone | string | Buyer contact phone — open opportunities only |
contactAddress | string | Buyer postal address — open opportunities only |
contactCountry | string | Buyer country |
detailUrl | string | Link to the full notice JSON on the World Bank API |
source | string | Provenance / license string |
scrapedAt | string | ISO-8601 timestamp of when the row was fetched |
noticeText | string | Full notice body as HTML — only when Include full notice text is on; for awards it holds the Awarded Firm(s) and Signed Contract Price |
Sample output
A real open-opportunity record returned by the Actor (scrapedAt timestamp illustrative):
{"id": "OP00454722","noticeType": "Request for Expression of Interest","noticeDate": "30-Jun-2026","submissionDeadlineDate": "2026-07-07","submissionDeadlineTime": "16:00","country": "Pakistan","projectId": "P178530","projectName": "Sindh Integrated Health and Population Project","bidReference": "PK-SIHPP-559521-CS-INDV","bidDescription": "Hiring of Networking Officer","procurementCategory": "CS","procurementMethod": "Individual Consultant Selection","contactName": "Shafqat Ali Soomro","contactOrganization": "Sindh Integrated Health and Population Project","contactEmail": "pd@sihpp.gos.pk","contactPhone": "923332883400","contactAddress": "Karachi, Sindh","contactCountry": "Pakistan","detailUrl": "https://search.worldbank.org/api/v2/procnotices?format=json&id=OP00454722","source": "World Bank Procurement Notices (CC-BY 4.0)","scrapedAt": "2026-07-05T09:00:00.000Z"}
Input & filters
- What to fetch — Open opportunities (still accepting bids; contact + deadline filled), Contract awards (closed), or All notices.
- Countries — one or more World Bank country names, matched exactly (e.g.
Kenya,Viet Nam,Egypt Arab Republic of). Empty = all countries; each country is queried separately. - Keyword — full-text search across notice title, description and project (e.g.
solar,road construction,consulting services). - Date range — Last 24h / 7d / 30d / 90d / Year-to-date / All time / Custom (From & To).
- Max results — hard cap on rows to control cost (
0= unlimited). - Include full notice text — attach the long HTML body; for awards this is where the winning firm and contract price live.
- Advanced — notice types — override What to fetch with exact notice types.
Example inputs (copy & paste)
// 1) Lead list: open tenders across East Africa mentioning "solar", with buyer contacts{ "status": "open", "countries": ["Kenya", "Nigeria", "Uganda"], "searchTerm": "solar", "datePreset": "last_90_days", "maxResults": 500 }// 2) Daily tender alert: every open opportunity worldwide from the last 24 hours{ "status": "open", "datePreset": "last_24_hours", "maxResults": 1000 }// 3) Award intelligence: this year's contract awards in Viet Nam, winner & price in the notice text{ "status": "awarded", "countries": ["Viet Nam"], "datePreset": "ytd", "includeFullText": true, "maxResults": 500 }// 4) Consulting pipeline: expressions of interest in South Asia, last 90 days{ "noticeTypes": ["Request for Expression of Interest"], "countries": ["India", "Bangladesh"], "datePreset": "last_90_days", "maxResults": 500 }// 5) Goods & works bids: open Invitation for Bids in Egypt, last 30 days{ "noticeTypes": ["Invitation for Bids"], "countries": ["Egypt Arab Republic of"], "datePreset": "last_30_days", "maxResults": 500 }// 6) Custom window: every notice in Kenya for Q1 2026{ "status": "all", "countries": ["Kenya"], "datePreset": "custom", "dateFrom": "2026-01-01", "dateTo": "2026-03-31", "maxResults": 1000 }// 7) Competitor tracking: goods & works awards worldwide, winner & price via full text{ "noticeTypes": ["Contract Award", "Goods and Works Award"], "datePreset": "last_30_days", "includeFullText": true, "maxResults": 500 }// 8) Market sizing: every road-construction notice, all time, no cap{ "status": "all", "searchTerm": "road construction", "datePreset": "all_time", "maxResults": 0 }
Use cases
- Win development-finance contracts. World Bank projects fund billions in goods, works and consulting across emerging markets. Filter
status: "open"by your country and sector keyword to track every live bid you can compete for — with the deadline and buyer email already attached. - Outbound sales & lead lists. Open opportunities carry the buyer's
contactOrganization,contactEmailandcontactPhone. Filter by country + keyword and you get a CRM-ready list of live-budget buyers to reach the day a notice is posted — no manual list-building. - Daily tender alerts on autopilot. Schedule a run with
datePreset: "last_24_hours"and your country/keyword filters, then pipe results to Slack, email, a CRM or an LLM via Make / n8n / Zapier. - Award & competitor intelligence. Switch to
status: "awarded"to track which contracts are closing on which projects — the scope, method, reference and (via full notice text) the winning firm and signed price. See who is winning work in your sector and geography. - Market sizing & research. Pull a country or keyword across a date range to count active projects, procurement methods and category mix (
CS/GO/CW/NC) — size a market and spot the busiest buyers. - CRM enrichment & pipeline building. Feed a country + sector filter into your pipeline to append fresh, dated procurement activity to accounts you already track. Missing fields return
null, never a guess.
Performance & throughput
The Actor streams pages of 1,000 notices straight from the official API, newest-first, and stops as soon as it reaches your Max results or pages past your date cutoff — so a filtered run of a few hundred notices finishes in seconds. Because results are date-sorted, date filtering early-stops efficiently; when a Keyword is set the API switches to relevance ranking, so the date range is instead applied as a post-filter bounded by Max results. Adding many Countries multiplies the number of queries (each is fetched separately). There are no proxies, no external keys and no rate limits beyond your Apify plan. Leaving Include full notice text off keeps payloads small and runs cheap.
Integrations
JavaScript (apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('foxlabs/worldbank-tenders').call({status: 'open', countries: ['Kenya'], searchTerm: 'water',datePreset: 'last_90_days', maxResults: 500,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0]);
Python (apify-client):
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("foxlabs/worldbank-tenders").call(run_input={"status": "open", "countries": ["Kenya"], "searchTerm": "water","datePreset": "last_90_days", "maxResults": 500,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["country"], item.get("contactEmail"))
Also works with Make / n8n / Zapier (Apify app → run this Actor, map the input), scheduled runs, webhooks, and the Apify MCP server for AI agents.
Data quality
- Identity is always there.
id,noticeType,noticeDate,country,projectIdandprojectNamecome straight from the register and are present on essentially every notice. - Contacts follow the notice type. Buyer
contactEmail,contactPhone,contactName,contactOrganizationand the submission deadline are populated on open opportunities, where the buyer publishes them to receive bids. Closed Contract Award notices carry no contact or deadline — the Awarded Firm(s) and Signed Contract Price live inside the full notice text instead. That is how the source data is structured, not a scraping gap. - Verbatim, never fabricated. Every value is taken directly from the World Bank API; missing values are
null, never guessed.
Pricing
Pay per result — you're billed per notice returned. The Actor calls a free public API with no proxies or third-party costs, so runs stay lightweight; use Max results and a tight Date range to keep spend predictable. An Apify free tier lets you evaluate the full feature set and run small daily alerts before you scale.
FAQ
Can I use this data commercially / resell it? Yes — World Bank procurement data is published under CC BY 4.0, which permits commercial reuse and redistribution with attribution, as long as you don't imply World Bank endorsement. Rows carry the attribution string.
Do I need an API key or a World Bank account? No. No key, no login — the Actor reads the public procurement API for you.
How fresh is the data? Each run reads the World Bank's live procurement API, so you get the current notices every time. Schedule the Actor for daily or hourly alerts.
Which notice types count as "open" vs "awarded"? Open: Request for Expression of Interest, Invitation for Bids, General Procurement Notice, Invitation for Prequalification. Awarded: Contract Award, Goods and Works Award, Small Contracts Award.
Why do Contract Awards have no contact email or deadline? Because they're closed — the bid is over. Contact and deadline exist only on open opportunities; the award's winning firm and price are in the full notice text.
How do I get the winning firm and contract price? Turn on Include full notice text. The noticeText HTML then contains the Awarded Firm(s), Signed Contract Price and award dates (unstructured, so you parse them from the body).
How do I filter to my country? Put the exact World Bank country name(s) in Countries — e.g. Viet Nam (not "Vietnam"), Egypt Arab Republic of. Leave empty for all countries.
Can I search by keyword? Yes. Note that a keyword switches the API to relevance ranking, so the date range is applied as a post-filter bounded by Max results.
What export formats are available? JSON, CSV, Excel, or via the Apify API / integrations.
How many notices can I pull in one run? Set Max results (0 = unlimited); the full corpus is 400,000+ notices across all types.
Troubleshooting
- 0 results → your filters are too narrow, or a country name doesn't match. Widen the Date range, clear the Keyword, or check the exact World Bank spelling (e.g.
Viet Nam,Egypt Arab Republic of). - A Contract Award has no email / deadline → by design; awards are closed. Enable Include full notice text to read the winning firm and price from the notice body.
- Keyword run looks out of date order → a keyword makes the API rank by relevance, not date; the date range is then applied as a post-filter bounded by Max results.
- Broad run pages through a lot → All time with no country or keyword walks a very large corpus. Add a Date range, a Country or a Keyword, or lower Max results.
Notes, limits & legal (honest)
- Source & attribution. Data comes from the World Bank's official procurement notices API, licensed CC BY 4.0. Rows carry
World Bank Procurement Notices (CC-BY 4.0). Attribute the World Bank and don't imply endorsement. - Not affiliated. This Actor is not affiliated with or endorsed by the World Bank Group; it redistributes their public open data.
- Personal data. Contact fields are official procurement contact points published by the buyers themselves. Use them for legitimate B2G outreach in compliance with applicable law (e.g. GDPR).
- Client-side date filter. The API has no server-side notice-date filter, so date ranges are applied while paging newest-first; very broad ranges page through more data.
- Award winner & price are unstructured. They appear inside the
noticeTextHTML (via Include full notice text), not as separate parsed fields. - Exact country matching. Countries are matched against World Bank country spellings, so use the register's exact name.
Support
Questions, a field you'd like added, or a custom build? Open the Issues tab on this Actor, or email info@foxlabs.com.tr. We reply fast.
If this Actor saves you time, a ⭐ review really helps.
Changelog
0.2 — 2026-07-05
- Reworked docs: API quick-start, full field table, real sample output, integration snippets (JS/Python/Make/MCP), FAQ & troubleshooting; clarified the open-vs-awarded data shape (contacts/deadline on open; winner & price in the notice text on awards).
0.1
- Initial release. World Bank procurement notices from the official API (CC-BY 4.0): open tenders, expressions of interest, prequalifications, invitations for bids and contract awards across 100+ countries; country / notice-type / keyword / date filters; optional full notice text.
Part of the foXLabs data platform — official public-data company, contact, ownership, procurement, jobs, charity, location & AI-search intelligence scrapers. Browse the full suite at data.foxlabs.com.tr.
