# World Bank Tenders Scraper — Procurement & Bid Notices (`foxlabs/worldbank-tenders`) Actor

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.

- **URL**: https://apify.com/foxlabs/worldbank-tenders.md
- **Developed by:** [Berkan Kaplan](https://apify.com/foxlabs) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

World Bank Tenders & Procurement Notices Scraper pulls **public procurement notices from the [World Bank](https://www.worldbank.org/)** — open tenders, requests for expressions of interest (REoI), invitations for bids, prequalifications, and contract awards — straight from the official World Bank procurement API. Get clean, structured JSON for **B2G lead generation, tender alerts, and procurement intelligence** across 100+ developing-market countries.

Because it runs on the Apify platform you get scheduling (daily tender alerts), API access, webhooks, and one-click export to JSON, CSV, or Excel — no API key, no login, no proxies needed.

### What does World Bank Tenders Scraper do?

It queries the official World Bank procurement notices dataset (400,000+ notices) and returns each notice as a flat JSON row: notice type, country, project, description, submission deadline, procurement method, and **contact details (organization, email, phone)** for open opportunities. You can filter by country, notice type, keyword, and date — and cap results to control cost.

### Why use World Bank Tenders Scraper?

- **Win development-finance contracts** — World Bank projects fund billions in goods, works, and consulting across emerging markets. Track every open bid in your sector and country.
- **Direct contact data** — open opportunities include the buyer's contact email and phone, so your sales team can act immediately.
- **Market & competitor intelligence** — switch to "Contract awards" mode to see who won which contract.
- **Tender alerts on autopilot** — schedule a daily run filtered to your countries/keywords and pipe results to Slack, email, a CRM, or an LLM via Make / Zapier / n8n.

### How to use World Bank Tenders Scraper

1. Click **Try for free**.
2. Pick **What to fetch** — *Open opportunities* (default), *Contract awards*, or *All*.
3. Optionally add **Countries** (e.g. `India`, `Kenya`, `Viet Nam`), a **Keyword**, and a **Date range**.
4. Set **Max results** to control cost.
5. Click **Start**, then download the dataset or wire it into your pipeline.

### Input

| Field | Description |
|---|---|
| What to fetch | Open opportunities, contract awards, or all notices |
| Countries | World Bank country names; empty = all countries |
| Keyword | Full-text search (e.g. `solar`, `road construction`) |
| Date range | Last 24h / 7d / 30d / 90d / YTD / All time / Custom |
| Max results | Hard cap on rows (0 = unlimited) |
| Include full notice text | Add the long `notice_text` body (off by default) |
| Advanced — notice types | Pick exact notice types, overriding "What to fetch" |

### Output

Each row looks like this (you can download the dataset as JSON, HTML, CSV, or Excel):

```json
{
  "id": "OP00451176",
  "noticeType": "Request for Expression of Interest",
  "noticeDate": "15-Jun-2026",
  "submissionDeadlineDate": "2026-06-30",
  "submissionDeadlineTime": "16:00",
  "country": "Viet Nam",
  "projectId": "P164938",
  "projectName": "Vietnam Scaling Up Energy Efficiency Project",
  "bidReference": "C2.2.14",
  "bidDescription": "Finalize VNEEF model",
  "procurementMethod": "Consultant Qualification Selection",
  "contactOrganization": "General Directorate of Energy (MOIT)",
  "contactEmail": "vsueemoit@gmail.com",
  "contactPhone": "+ 84 4 22202530",
  "detailUrl": "https://search.worldbank.org/api/v2/procnotices?format=json&id=OP00451176",
  "source": "World Bank Procurement Notices (CC-BY 4.0)",
  "scrapedAt": "2026-06-17T09:00:00.000Z"
}
````

### Data table

| Field | Description |
|---|---|
| id | World Bank notice ID |
| noticeType | Notice type (REoI, Invitation for Bids, Contract Award, …) |
| noticeDate | Publication date |
| submissionDeadlineDate / Time | Bid submission deadline (open opportunities) |
| country | Project country |
| projectId / projectName | Associated World Bank project |
| bidReference / bidDescription | Bid reference and short description |
| procurementCategory / procurementMethod | Procurement group and method |
| contactName / contactOrganization / contactEmail / contactPhone / contactAddress | Buyer contact (open opportunities) |
| detailUrl | Link to the full notice JSON |

> **Note:** contact details and submission deadlines are populated for **open opportunities**. Closed *Contract Award* notices have the winner/award info but no contact or deadline — that is how the source data works.

### How much does it cost to scrape World Bank tenders?

The actor calls a free public API, so runs are fast and cheap — a typical filtered run of a few hundred notices costs a small fraction of a compute unit. Use **Max results** and a tight **Date range** to keep costs predictable. The free tier is enough to evaluate the actor and run small daily alerts.

### Tips & advanced options

- **Daily tender alerts:** schedule a run with `Date range = Last 24 hours` and your country/keyword filters.
- **Keep it lean:** leave **Include full notice text** off unless you need the full HTML body — it makes output much larger.
- **Keyword note:** when a keyword is set, results are ranked by relevance rather than date, so the date filter is applied as a post-filter (bounded by Max results).
- **Multiple countries:** each country is queried separately, so adding many countries increases run time.

### FAQ, disclaimers & support

- **Is this legal?** The actor only retrieves publicly available data from the World Bank's official open-data API. World Bank procurement data is published under the **Creative Commons Attribution 4.0 (CC-BY 4.0)** license. You are free to use it, including commercially, as long as you provide attribution to the World Bank and do not imply World Bank endorsement. This actor and its author are **not affiliated with or endorsed by the World Bank**.
- **Personal data:** contact fields are official procurement contact points published by the buyers themselves. Use them in compliance with applicable laws (e.g. GDPR) for legitimate B2G outreach.
- **Limitations:** the source API does not offer a server-side date filter, so date ranges are applied client-side; very broad date ranges with no other filter may require more pages.
- **Support & custom work:** found a bug or need an extra field or source? Open an issue on the Issues tab — feedback and custom-solution requests are welcome.

# Actor input Schema

## `status` (type: `string`):

Open opportunities are still accepting bids (contact email + deadline filled). Awards are closed contracts (who won — market intelligence).

## `countries` (type: `array`):

Filter by project country, using the World Bank country name (e.g. India, Kenya, Viet Nam, Egypt Arab Republic of, Bangladesh). Leave empty for all 100+ countries. Each country is queried separately.

## `searchTerm` (type: `string`):

Optional full-text search across notice title, description and project (e.g. 'solar', 'road construction', 'consulting services'). Leave empty to skip.

## `datePreset` (type: `string`):

Quick filter on the notice publication date. Pick 'Custom' to use the From/To fields below. Choose 'All time' to ignore dates.

## `dateFrom` (type: `string`):

YYYY-MM-DD (e.g. 2026-05-01). Only used when Date range = Custom.

## `dateTo` (type: `string`):

YYYY-MM-DD. Only used when Date range = Custom. Leave empty for 'today'.

## `maxResults` (type: `integer`):

Hard cap on dataset rows. Helps control cost. Set to 0 for unlimited.

## `includeFullText` (type: `boolean`):

Add the full notice\_text (long HTML body) to each row. Off by default to keep output lean and cheap.

## `noticeTypes` (type: `array`):

Override 'What to fetch' with exact notice types. Leave empty to use the Status option above.

## Actor input object example

```json
{
  "status": "open",
  "countries": [],
  "datePreset": "last_30_days",
  "maxResults": 500,
  "includeFullText": false,
  "noticeTypes": []
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "countries": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("foxlabs/worldbank-tenders").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "countries": [] }

# Run the Actor and wait for it to finish
run = client.actor("foxlabs/worldbank-tenders").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "countries": []
}' |
apify call foxlabs/worldbank-tenders --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=foxlabs/worldbank-tenders",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "World Bank Tenders Scraper — Procurement & Bid Notices",
        "description": "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.",
        "version": "0.1",
        "x-build-id": "S6fNVmdxtZNRpX8eU"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/foxlabs~worldbank-tenders/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-foxlabs-worldbank-tenders",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/foxlabs~worldbank-tenders/runs": {
            "post": {
                "operationId": "runs-sync-foxlabs-worldbank-tenders",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/foxlabs~worldbank-tenders/run-sync": {
            "post": {
                "operationId": "run-sync-foxlabs-worldbank-tenders",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "status": {
                        "title": "What to fetch",
                        "enum": [
                            "open",
                            "awarded",
                            "all"
                        ],
                        "type": "string",
                        "description": "Open opportunities are still accepting bids (contact email + deadline filled). Awards are closed contracts (who won — market intelligence).",
                        "default": "open"
                    },
                    "countries": {
                        "title": "Countries",
                        "type": "array",
                        "description": "Filter by project country, using the World Bank country name (e.g. India, Kenya, Viet Nam, Egypt Arab Republic of, Bangladesh). Leave empty for all 100+ countries. Each country is queried separately.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchTerm": {
                        "title": "Keyword (full-text search)",
                        "type": "string",
                        "description": "Optional full-text search across notice title, description and project (e.g. 'solar', 'road construction', 'consulting services'). Leave empty to skip."
                    },
                    "datePreset": {
                        "title": "Date range (by notice date)",
                        "enum": [
                            "last_24_hours",
                            "last_7_days",
                            "last_30_days",
                            "last_90_days",
                            "ytd",
                            "all_time",
                            "custom"
                        ],
                        "type": "string",
                        "description": "Quick filter on the notice publication date. Pick 'Custom' to use the From/To fields below. Choose 'All time' to ignore dates.",
                        "default": "last_30_days"
                    },
                    "dateFrom": {
                        "title": "Custom from date",
                        "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
                        "type": "string",
                        "description": "YYYY-MM-DD (e.g. 2026-05-01). Only used when Date range = Custom."
                    },
                    "dateTo": {
                        "title": "Custom to date",
                        "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
                        "type": "string",
                        "description": "YYYY-MM-DD. Only used when Date range = Custom. Leave empty for 'today'."
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Hard cap on dataset rows. Helps control cost. Set to 0 for unlimited.",
                        "default": 500
                    },
                    "includeFullText": {
                        "title": "Include full notice text",
                        "type": "boolean",
                        "description": "Add the full notice_text (long HTML body) to each row. Off by default to keep output lean and cheap.",
                        "default": false
                    },
                    "noticeTypes": {
                        "title": "Advanced — specific notice types",
                        "type": "array",
                        "description": "Override 'What to fetch' with exact notice types. Leave empty to use the Status option above.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "Request for Expression of Interest",
                                "Invitation for Bids",
                                "General Procurement Notice",
                                "Invitation for Prequalification",
                                "Contract Award",
                                "Goods and Works Award",
                                "Small Contracts Award"
                            ]
                        },
                        "default": []
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
