{
  "openapi": "3.0.1",
  "info": {
    "title": "World Bank Procurement Notices & Awards Scraper",
    "description": "World Bank-financed tenders, EOIs and signed contract awards from the official projects.worldbank.org APIs: buyer contacts, deadlines, suppliers, US$ values.",
    "version": "0.1",
    "x-build-id": "Qd0kv8xSN3XHBVnYy"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/knotty_mistveil~world-bank-procurement-notices/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-knotty_mistveil-world-bank-procurement-notices",
        "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/knotty_mistveil~world-bank-procurement-notices/runs": {
      "post": {
        "operationId": "runs-sync-knotty_mistveil-world-bank-procurement-notices",
        "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/knotty_mistveil~world-bank-procurement-notices/run-sync": {
      "post": {
        "operationId": "run-sync-knotty_mistveil-world-bank-procurement-notices",
        "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": {
          "feed": {
            "title": "Feed",
            "enum": [
              "notices",
              "awards"
            ],
            "type": "string",
            "description": "Which World Bank dataset to read. Procurement notices are the live opportunities and award notices published on projects.worldbank.org; contract awards are the signed major contracts, with the winning supplier and the US dollar value. The two feeds have different fields, so pick one per run.",
            "default": "notices"
          },
          "daysBack": {
            "title": "Days back",
            "minimum": 1,
            "maximum": 3660,
            "type": "integer",
            "description": "Look-back window in days, ending now. Applied to the notice date on the notices feed and to the contract signing date on the awards feed. Ignored when Date from / Date to are set. Awards are loaded weeks after signature, so use 60-120 days for a useful awards run.",
            "default": 14
          },
          "dateFrom": {
            "title": "Date from",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Start of the window, YYYY-MM-DD (inclusive). Overrides Days back."
          },
          "dateTo": {
            "title": "Date to",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "End of the window, YYYY-MM-DD (inclusive). Defaults to today."
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Borrower countries. Accepts ISO alpha-2 (\"KE\"), ISO alpha-3 (\"KEN\") or a name fragment (\"Kenya\", \"congo\"). A name fragment is matched case-insensitively against the country name the World Bank publishes. Regional programmes are filed under their own codes (3E Eastern and Southern Africa, 3W Western and Central Africa, 8S South Asia), so a country filter does not return the multi-country programmes that also cover it. Empty = every country.",
            "items": {
              "type": "string"
            }
          },
          "noticeTypes": {
            "title": "Notice types",
            "type": "array",
            "description": "Notices feed only. Keep only these notice types. Empty = all types.",
            "items": {
              "type": "string",
              "enum": [
                "Invitation for Bids",
                "Request for Expression of Interest",
                "General Procurement Notice",
                "Invitation for Prequalification",
                "Contract Award"
              ],
              "enumTitles": [
                "Invitation for Bids (open tender)",
                "Request for Expression of Interest (consultants)",
                "General Procurement Notice (pipeline)",
                "Invitation for Prequalification",
                "Contract Award notice"
              ]
            }
          },
          "procurementGroups": {
            "title": "Procurement categories",
            "type": "array",
            "description": "Keep only these categories. Works with both feeds.",
            "items": {
              "type": "string",
              "enum": [
                "goods",
                "works",
                "consultants",
                "non-consulting"
              ],
              "enumTitles": [
                "Goods",
                "Works (civil works)",
                "Consultant services",
                "Non-consulting services"
              ]
            }
          },
          "procurementMethods": {
            "title": "Procurement methods",
            "type": "array",
            "description": "Case-insensitive substrings matched against the method name and code: \"RFB\" or \"Request for Bids\", \"RFQ\", \"QCBS\", \"Direct Selection\", \"Individual Consultant\". A record is kept when any term matches. Empty = all methods.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Free-text terms, ORed. They are sent to the World Bank search index, which matches them anywhere in the record - including the full advertisement body and the postal addresses inside it. By default the results are then narrowed to records whose title, project name or reference actually contains a term; see Keyword scope. Empty = no keyword filter.",
            "items": {
              "type": "string"
            }
          },
          "keywordScope": {
            "title": "Keyword scope",
            "enum": [
              "fields",
              "fulltext"
            ],
            "type": "string",
            "description": "Where a keyword has to appear. \"fields\" (default) keeps a record only when a term is in the title, project name or reference number (notices) or the contract description, project name or reference (awards) - this is the setting you want for a bid pipeline, because the index alone also matches street addresses in the advertisement body, so a search for \"road\" would return kitchen tools sold at \"100 Feet Road\" and you would be charged for them. \"fulltext\" keeps everything the index matched, advertisement body included. Ignored when Keywords is empty.",
            "default": "fields"
          },
          "deadlineAfter": {
            "title": "Deadline on or after",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Notices feed only. Keep only notices whose submission deadline falls on or after this date, YYYY-MM-DD - use today's date to drop opportunities that have already closed. Notices with no published deadline (award and general procurement notices) are dropped when this is set."
          },
          "includeNoticeText": {
            "title": "Include full notice text",
            "type": "boolean",
            "description": "Notices feed only. Add the complete advertisement as plain text (field noticeText, truncated at 20,000 characters). Averages about 5 KB per notice; turn it off for a lean lead list.",
            "default": true
          },
          "maxItems": {
            "title": "Max results",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop after this many records. You are charged per record delivered, so this is also the cost cap. Records come newest-first, so a value below the window's volume drops the OLDEST records in that window. Measured 8 September 2026: about 125-195 notices per weekday and 25-55 per weekend day, so an unfiltered 14-day notices run needs roughly 1,800.",
            "default": 500
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}