World Bank APIprojects.worldbank.org ↗
Search World Bank projects and procurement notices. Access funding amounts, sector data, country info, and tender deadlines via 3 structured endpoints.
What is the World Bank API?
This API provides structured access to the World Bank projects database through 3 endpoints, covering project search, procurement notice lookup, and detailed project retrieval. The search_projects endpoint returns paginated results with fields like total_amount_usd, sector, country, status, and abstract. The search_procurement endpoint surfaces active and historical tender notices including bid descriptions, deadlines, and contact emails.
curl -X GET 'https://api.parse.bot/scraper/7af0fc2e-0427-4b22-9b30-7e6d5b353eee/search_projects?limit=5&query=infrastructure&offset=0&status=Active' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace projects-worldbank-org-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: World Bank Projects & Procurement API — bounded, re-runnable."""
from parse_apis.world_bank_projects___procurement_api import (
WorldBank, ProjectStatus, ProjectNotFound
)
client = WorldBank()
# Search active projects by keyword, capped at 3 results.
for project in client.projects.search(query="renewable energy", status=ProjectStatus.ACTIVE, limit=3):
print(project.project_name, project.status, project.total_amount_usd)
# Drill into one project by fetching full details.
first = client.projects.search(query="infrastructure", limit=1).first()
if first:
detail = client.projects.get(project_id=first.id)
print(detail.project_name, detail.region, detail.borrower, detail.abstract[:120])
# Search procurement notices related to energy.
for notice in client.procurementnotices.search(query="energy", limit=3):
print(notice.bid_description, notice.notice_type, notice.country)
# Typed error handling: catch ProjectNotFound on an invalid ID.
try:
client.projects.get(project_id="P000000")
except ProjectNotFound as exc:
print(f"Project not found: {exc.project_id}")
print("exercised: projects.search / projects.get / procurementnotices.search / ProjectNotFound")
Full-text search over World Bank projects. Matches query against project names, abstracts, and metadata. Optionally filter by project status. Paginates via offset; each result carries sector, funding, country, and abstract fields. Returns up to 100 results per call.
| Param | Type | Description |
|---|---|---|
| limit | integer | Maximum number of results (max 100). |
| query | string | Search keyword(s) matched against project names, abstracts, and metadata. |
| offset | integer | Pagination offset (0-based item count). |
| status | string | Filter by project status. |
{
"type": "object",
"fields": {
"count": "integer number of projects in this response",
"total": "integer total matching projects",
"offset": "integer pagination offset used",
"projects": "array of Project objects"
},
"sample": {
"data": {
"count": 2,
"total": 8895,
"offset": 0,
"projects": [
{
"id": "P154732",
"url": "https://projects.worldbank.org/en/projects-operations/project-detail/P154732",
"region": "Other",
"sector": [
{
"Name": "Other Public Administration"
}
],
"status": "Closed",
"themes": "",
"country": [
"World"
],
"abstract": "",
"borrower": "Sustainable Infrastructure Foundation",
"team_leader": "NIL",
"closing_date": "9/1/2017 12:00:00 AM",
"country_code": "World",
"grant_amount": "250,000",
"last_updated": "2020-11-30 00:00:00.0",
"lending_cost": "250,000",
"project_name": "Enhancing the International Infrastructure Support System",
"financial_type": [
"Grants"
],
"ida_commitment": "0",
"ibrd_commitment": "0",
"total_amount_usd": "0",
"lending_instrument": "Investment Project Financing",
"board_approval_date": "",
"implementing_agency": "Sustainable Infrastructure Foundation",
"total_commitment_usd": "250,000"
},
{
"id": "P077179",
"url": "https://projects.worldbank.org/en/projects-operations/project-detail/P077179",
"region": "Eastern and Southern Africa",
"sector": [
{
"Name": "ICT Infrastructure"
},
{
"Name": "Power"
}
],
"status": "Dropped",
"themes": [
{
"code": "78",
"name": "Rural services and infrastructure"
}
],
"country": [
"Kingdom of Eswatini"
],
"abstract": "",
"borrower": "",
"team_leader": "NIL",
"closing_date": "",
"country_code": "Eswatini",
"grant_amount": "",
"last_updated": "",
"lending_cost": "114,900,000",
"project_name": "Energizing Rural Transformation",
"financial_type": "",
"ida_commitment": "0",
"ibrd_commitment": "20,000,000",
"total_amount_usd": "20,000,000",
"lending_instrument": "Specific Investment Loan",
"board_approval_date": "",
"implementing_agency": "",
"total_commitment_usd": "20,000,000"
}
]
},
"status": "success"
}
}About the World Bank API
Endpoints and Data Coverage
The API exposes three endpoints. search_projects accepts a query string and an optional status filter (Active, Closed, Pipeline, or Dropped) to search the World Bank's full project catalog. Each result includes id, project_name, country, sector, total_amount_usd, abstract, and a url pointing to the project page. Pagination is controlled via limit (up to 100) and offset parameters, with total in the response indicating how many matching records exist.
Procurement Notices
search_procurement searches tender and bid notices associated with World Bank-financed operations. Results include notice_type, notice_status, project_id, bid_description, and contact_email. This is useful for tracking active procurement opportunities tied to specific projects or sectors. Like search_projects, it supports limit, offset, and keyword query inputs.
Project Details
get_project_details takes a single required project_id (e.g. P179950) and returns the full record for that project: region, sector (array or string), country (array or string), abstract, total_amount_usd, status, country_code, and the canonical url. This endpoint is suited for building detailed project profiles or enriching records returned by the search endpoints.
The World Bank API is a managed, monitored endpoint for projects.worldbank.org — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when projects.worldbank.org changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official projects.worldbank.org API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Monitor active World Bank procurement tenders in a specific sector using
search_procurementwith keyword filters - Build a project funding tracker by querying
search_projectsfiltered toActivestatus and extractingtotal_amount_usdby country - Enrich a development finance database with project abstracts, sector tags, and region data via
get_project_details - Alert contractors to new bid opportunities by polling
search_procurementfor notices matching their domain keywords - Map World Bank investment flows by aggregating
countryandtotal_amount_usdfields across paginatedsearch_projectsresults - Filter pipeline projects by sector to identify upcoming funding in specific regions before formal approval
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does the World Bank have an official developer API for project data?+
What does the `status` filter in `search_projects` accept?+
status parameter accepts four values: Active, Closed, Pipeline, and Dropped. Omitting the parameter returns projects across all statuses. The total field in the response reflects the count of all matching records regardless of page size.Does `search_procurement` include procurement documents or attachments?+
search_procurement endpoint returns notice metadata — bid_description, notice_type, notice_status, project_id, and contact_email — but not linked documents or file attachments. You can fork this API on Parse and revise it to add an endpoint that retrieves attached documents for a given notice.Can I retrieve a list of all projects for a specific country directly?+
query and status. You can query by country name as a keyword in search_projects, but results depend on keyword matching against project text fields. You can fork this API on Parse and revise it to add a country-code filter endpoint.How reliable is the `total_amount_usd` field across projects?+
$50,000,000) and reflects the total commitment amount as recorded in the World Bank's project database. Some pipeline or dropped projects may have a null or zero value if financing was not finalized.