{
  "openapi": "3.0.1",
  "info": {
    "title": "UK Tenders Scraper: Find a Tender + Contracts Finder API",
    "description": "UK public procurement notices from Find a Tender and Contracts Finder, the official UK government portals, through their open OCDS APIs: title, buyer, region, CPV codes, values, deadlines, notice type and links. Filter by text, CPV, region, stage and value. No personal data.",
    "version": "1.0",
    "x-build-id": "phywXM1W3SIBcETqS"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rowcraft~uk-tenders-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rowcraft-uk-tenders-scraper",
        "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/rowcraft~uk-tenders-scraper/runs": {
      "post": {
        "operationId": "runs-sync-rowcraft-uk-tenders-scraper",
        "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/rowcraft~uk-tenders-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-rowcraft-uk-tenders-scraper",
        "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": {
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Words or phrases searched in the title, the description, the lot titles and the CPV label, one per line. A notice matches when it contains any of them (not case-sensitive): software, cleaning, social care.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Leave out notices that contain any of these words or phrases (same fields as Keywords), one per line: window, grounds maintenance.",
            "items": {
              "type": "string"
            }
          },
          "cpv": {
            "title": "CPV codes",
            "type": "array",
            "description": "Common Procurement Vocabulary codes, one per line, as a code or a prefix: 72 (all IT services), 45 (construction work), 85 (health and social work), 72220000 (systems and technical consultancy). A code matches itself and everything below it.",
            "items": {
              "type": "string"
            }
          },
          "regions": {
            "title": "Regions",
            "type": "array",
            "description": "Where the contract is delivered, one per line: a nation (England, Scotland, Wales, Northern Ireland), an English region (London, South East, North West, East of England...) or an ITL code (UKI, UKH14). When a notice names no delivery place, the buyer's region is used. Empty = the whole UK.",
            "items": {
              "type": "string"
            }
          },
          "stages": {
            "title": "Stage",
            "type": "array",
            "description": "Which stage of the procurement: planning (pipeline, market engagement, planned procurement), tender (open calls for tenders), award (award decisions) or contract (contracts signed, changed or ended). Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "planning",
                "tender",
                "award",
                "contract"
              ],
              "enumTitles": [
                "Planning",
                "Tender (open opportunities)",
                "Award",
                "Contract"
              ]
            }
          },
          "publishedAfter": {
            "title": "Published after",
            "type": "string",
            "description": "Only notices published or updated on or after this day (UK time). A date (2026-10-01), today, yesterday, or a relative value such as 7 days, 2 weeks, 3 months. Default 7 days."
          },
          "publishedBefore": {
            "title": "Published before",
            "type": "string",
            "description": "Only notices published or updated on or before this day (2026-10-07). Empty = up to now."
          },
          "openOnly": {
            "title": "Only notices still open for tenders",
            "type": "boolean",
            "description": "Keep only notices with a tender deadline from now on. Useful with the Tender stage to list what can still be bid on.",
            "default": false
          },
          "buyerNames": {
            "title": "Buyer name contains",
            "type": "array",
            "description": "Words from the name of the contracting authority, one per line: NHS, Council, Ministry of Defence. A notice matches when its buyer contains any of them.",
            "items": {
              "type": "string"
            }
          },
          "minValue": {
            "title": "Minimum value (GBP)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep notices whose estimated value (or, for awards and contracts, the awarded value) is at least this amount. Notices without a value are left out when this is set."
          },
          "maxValue": {
            "title": "Maximum value (GBP)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep notices whose value is at most this amount. Notices without a value are left out when this is set."
          },
          "smeSuitableOnly": {
            "title": "Only notices marked suitable for small businesses (SMEs)",
            "type": "boolean",
            "description": "Keep notices where the buyer marked the contract, or one of its lots, as suitable for SMEs.",
            "default": false
          },
          "noticeTypes": {
            "title": "Notice types (Find a Tender only)",
            "type": "array",
            "description": "Procurement Act 2023 notice types, one per line: UK4 (tender notice), UK6 (contract award), UK7 (contract details), UK1 (pipeline), UK2 (market engagement), UK3 (planned procurement), UK5 (transparency), UK10 (contract change), UK11 (contract termination), UK12 (procurement termination). Contracts Finder notices have no type, so none of them pass this filter.",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "title": "Portals",
            "type": "array",
            "description": "Find a Tender carries every above-threshold notice and, for procurements started from 24 February 2025, the below-threshold ones too (except in Scotland); Contracts Finder carries the below-threshold contracts in England of procurements started before that date. Empty = both.",
            "items": {
              "type": "string",
              "enum": [
                "findATender",
                "contractsFinder"
              ],
              "enumTitles": [
                "Find a Tender",
                "Contracts Finder"
              ]
            }
          },
          "maxItems": {
            "title": "Maximum notices",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many notices. 0 = all matching notices in the date window.",
            "default": 500
          },
          "includeDescription": {
            "title": "Include descriptions",
            "type": "boolean",
            "description": "The notice description, with e-mail addresses and phone numbers removed. Switch off for smaller rows.",
            "default": true
          },
          "includeLots": {
            "title": "Include lot titles",
            "type": "boolean",
            "description": "Adds lotTitles (one entry per lot). The number of lots is always included.",
            "default": true
          },
          "noticeIds": {
            "title": "Fetch specific Find a Tender notices by ID",
            "type": "array",
            "description": "Find a Tender notice IDs (095883-2026) or notice links, one per line. When set, every filter above is ignored.",
            "items": {
              "type": "string"
            }
          },
          "countOnly": {
            "title": "Count only (free check)",
            "type": "boolean",
            "description": "Only count how many rows match your filters and estimate the cost at your price tier. Nothing is delivered and nothing is charged apart from the start event. Turn it off to get the data.",
            "default": false
          },
          "onlyNew": {
            "title": "Only new rows since the last run",
            "type": "boolean",
            "description": "Remember the rows already delivered to you (in a key-value store in your Apify account) and deliver only rows that appeared since the last run with the same state key. The first run delivers everything that matches; later runs cost only the new rows. Ideal for schedules.",
            "default": false
          },
          "stateName": {
            "title": "State name",
            "type": "string",
            "description": "Name of the memory used by \"Only new rows\". Use a different name for each schedule or search (for example `stockholm-python`) so they do not share one memory.",
            "default": "default"
          },
          "notifyUrl": {
            "title": "Notify this URL when the run ends",
            "type": "string",
            "description": "A webhook address that receives one JSON POST with the number of new rows and links to the dataset: a Slack or Discord incoming webhook, a Make, n8n or Zapier catch hook, or your own endpoint. The message is also in the `text` (Slack) and `content` (Discord) fields."
          },
          "notifyWhenEmpty": {
            "title": "Notify also when there are no new rows",
            "type": "boolean",
            "description": "By default the notification is sent only when at least one row was delivered.",
            "default": false
          },
          "requestIntervalMs": {
            "title": "Delay between API requests (ms)",
            "minimum": 500,
            "maximum": 10000,
            "type": "integer",
            "description": "Default 1000 ms (one request per second). Each request returns up to 100 notices. Minimum 500. Find a Tender requests are always at least 3 seconds apart. When a portal asks for a pause (two minutes after about 20 requests), the actor waits and continues.",
            "default": 1000
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}