Skip to main content
Thirdwatchthirdwatch
Companies & leads

How to Scrape World Bank Procurement Notices

Export official World Bank tenders, expressions of interest, and awards into analysis-ready datasets.

Editorial illustration for companies & leads
Jul 21, 2026 · 3 min read · 716 words
View the Apify scraper →

Export official World Bank tenders, expressions of interest, and awards into analysis-ready datasets. The World Bank Procurement Scraper turns each public procurement notice into a bounded Apify dataset row and preserves a direct source URL for verification.

Start with a reviewable sample

{"noticeTypes":["Invitation for Bids","Request for Expression of Interest"],"currentOnly":true,"maxResults":100}

Begin with ten to one hundred records, not a full archive. Inspect identifier stability, date formats, nulls, arrays, free-text fields, and source links. Filter current opportunities by notice type first, then add country or keyword constraints only when they improve recall. Once the sample matches the intended workflow, raise the result limit deliberately and save the input as a named Apify Task.

Design the dataset around source truth

Keep notice ID, type, status, project, country, deadline, procurement method, bid reference, description, and official source URL together in the raw landing table. Do not replace missing values with zero, invent status labels, or silently collapse aliases. Use the publisher's stable identifier as the upsert key where one exists; otherwise combine the canonical source URL and observed identifier. Add a downstream collection timestamp so analysts can distinguish a revised record from a newly published record.

A useful pipeline has three layers. The raw layer stores the Actor output without lossy transformations. The review layer adds normalized dates, currencies, or matching candidates while preserving original fields. The application layer contains only decisions that have passed the organization's validation rules. This separation makes source changes auditable and prevents a convenient spreadsheet formula from becoming an undocumented business rule.

Schedule changes without creating alert noise

Run the Task on a cadence appropriate to how often World Bank changes. Compare stable keys and material fields rather than array order or page position. Send alerts only for additions, removals, deadline changes, status changes, or other changes relevant to the workflow. Store the previous snapshot in a table or object store and make the diff reproducible.

For operational use, log the Actor run ID, dataset ID, input, source URL, and collection time. Use retries for transient network failures, but fail visibly when the publisher returns no records for a query that normally has coverage. Silent empty datasets are more dangerous than explicit failures because they can look like a legitimate all-clear.

Validate before acting

A search result is not the governing solicitation. Confirm dates, eligibility, amendments, submission instructions, and contact details on the official World Bank notice before committing bid resources. The Actor is a collection tool, not a substitute for due diligence, legal interpretation, financial analysis, or publisher methodology. Reviewers should open the source URL, confirm that the record is current, and document the evidence used for any material conclusion.

This workflow is designed for business-development teams, contractors, consultants, and procurement analysts. It is an independent integration and is not affiliated with or endorsed by World Bank.

Understand the notice model

The procurement service mixes invitations for bids, expressions of interest, contract awards, general notices, and historical records. Keep notice_type and notice_status in every row; do not infer the stage from keywords in the description. Project ID connects notices belonging to the same financed project, while notice ID is the safer key for ingestion.

The API exposes both structured fields and HTML notice text. The Actor strips markup but preserves the text because eligibility, lots, bid security, contact instructions, and amendments may exist only there. Store the unabridged cleaned text outside the CRM summary. Search filters can help discovery, but a keyword miss does not prove that no relevant opportunity exists.

Cloud QA surfaced an important source inconsistency: a structured future deadline can coexist with an older deadline inside notice text. Therefore currentOnly means “the API deadline field has not passed,” not “the procurement is definitely open.” Before assigning bid resources, open source_url, read the notice, and confirm any amendment on the governing page.

Why use an Apify Task

A Task makes the exact input repeatable across schedules, webhooks, the API, Make, Zapier, n8n, and MCP clients. Keep one Task per business question instead of one enormous catch-all export. Small Tasks are easier to test, cheaper to rerun, and clearer when a source field or filter changes. The Thirdwatch Actor on Apify provides JSON, CSV, Excel, RSS, and API access to the resulting dataset.

Frequently asked questions

Does this workflow require a private source API key?

No. It uses data the source publisher makes publicly available.

Can I schedule the export?

Yes. Save the validated input as an Apify Task and attach a schedule or webhook.

Related