{
  "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": "tDSbLZg7VGjtUcCsT"
  },
  "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 = invitations for bids, calls for expressions of interest, prequalifications and general procurement notices (early announcements), each with the buyer's contact e-mail. A notice whose deadline day is over is left out unless \"Include notices past their deadline\" is on. Awards = contract-award notices: project, scope and method; the winning firm and the price are inside the full notice text.",
            "default": "open"
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Project countries by the World Bank's own name, for example India, Kenya, Viet Nam, Turkiye, \"Egypt, Arab Republic of\". Leave empty for all countries. Case, spacing and accents do not matter, \"Egypt\" is read as \"Egypt, Arab Republic of\", and a country the World Bank files under more than one name is read under all of them, whichever you type (Turkey / Turkiye / Türkiye, Vietnam / Viet Nam). A name the World Bank does not use is reported in the run's status message and matches nothing. If the World Bank's list itself cannot be read, the names are used as typed and the status message says so.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "searchTerm": {
            "title": "Keyword (full-text search)",
            "type": "string",
            "description": "Optional. Passed to the World Bank's own search, which is not a literal match and also finds notices written in other languages: in a measured search for two words, 492 of 755 rows held both words and 31 held neither. Quotation marks around several words narrow the result (755 to 128 in that search); they do not make every row a phrase match. Leave empty to skip."
          },
          "includeExpired": {
            "title": "Include notices past their deadline",
            "type": "boolean",
            "description": "Off (default): a notice whose submission deadline day is over is left out. A deadline that falls today stays, whatever the hour, and notices with no deadline (general procurement notices, awards) always stay. On: every notice of the chosen types, whether or not its deadline has passed.",
            "default": false
          },
          "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": "Window on the notice date. Pick Custom to use the From / To fields below — with any other choice those two fields are not used, and the run's status message says so. All time ignores dates and is the only choice that also returns the notices carrying no date at all (305 drafts among the open types on 2026-10-08).",
            "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 (for example 2026-05-01). Used only when Date range = Custom; empty = no start. A date that does not exist stops the run, and so does Custom with neither date."
          },
          "dateTo": {
            "title": "Custom to date",
            "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$",
            "type": "string",
            "description": "YYYY-MM-DD. Used only when Date range = Custom; empty = up to the newest notice. A date that does not exist, or one before the From date, stops the run."
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 0,
            "type": "integer",
            "description": "Most rows in one run; 0 = no cap. Notices of every chosen type and country come as one list, newest first, so a capped run holds the newest ones.",
            "default": 500
          },
          "includeFullText": {
            "title": "Include full notice text",
            "type": "boolean",
            "description": "Add the full notice body (long HTML) to each row as noticeText — on award notices this is where the winning firm and the contract price are. Off by default to keep rows small; the price per row is the same either way.",
            "default": false
          },
          "noticeTypes": {
            "title": "Advanced — specific notice types",
            "type": "array",
            "description": "Override 'What to fetch' with exact notice types. Leave empty to use \"What to fetch\" 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"
              ],
              "enumTitles": [
                "Expression of interest — invites firms to be shortlisted (open)",
                "Invitation for bids — formal competitive tender (open)",
                "General procurement notice — early heads-up before specific bids (open)",
                "Invitation for prequalification — vets bidders before the bid stage (open)",
                "Contract award — winner announced (awarded)",
                "Goods & works award — winner announced (awarded)",
                "Small contracts award — low-value, winner announced (awarded)"
              ]
            },
            "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}