{
  "openapi": "3.0.1",
  "info": {
    "title": "UK EU Tender Notices Scraper",
    "description": "Search Contracts Finder and TED for public tender notices and get titles, buyers, countries, status, publication and deadline dates, values and CPV codes. The Actor combines results from both official APIs in a shared record format, with no API key required.",
    "version": "0.1",
    "x-build-id": "Bhb0x9480K9qffbbD"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/axiomworks~uk-eu-public-tenders-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-axiomworks-uk-eu-public-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/axiomworks~uk-eu-public-tenders-scraper/runs": {
      "post": {
        "operationId": "runs-sync-axiomworks-uk-eu-public-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/axiomworks~uk-eu-public-tenders-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-axiomworks-uk-eu-public-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": {
          "searchTerms": {
            "title": "Tender keywords (e.g. construction)",
            "type": "array",
            "description": "Tender keywords, e.g. [\"construction\", \"cleaning\"]; a single string also works through the API. Each term searches every selected source. Omit for CPV-only or direct-notice lookups; with no keywords, CPV codes or direct targets, each source is searched without keywords. No matches return 0 records; broaden filters or use status \"any\".",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "title": "Search portals (contractsFinder, ted)",
            "type": "array",
            "description": "Portals to search: \"contractsFinder\" (UK Contracts Finder) and/or \"ted\" (EU Tenders Electronic Daily), e.g. [\"ted\"]. Default is both. maxItems is shared across both. Applies to searches; direct noticeUrls and noticeIds determine their own portal.",
            "items": {
              "type": "string",
              "enum": [
                "contractsFinder",
                "ted"
              ],
              "enumTitles": [
                "UK Contracts Finder",
                "EU TED"
              ]
            },
            "default": [
              "contractsFinder",
              "ted"
            ]
          },
          "status": {
            "title": "Search status (e.g. open)",
            "enum": [
              "open",
              "awarded",
              "closed",
              "any"
            ],
            "type": "string",
            "description": "One of \"open\" (accepting bids now), \"awarded\" (contract awarded), \"closed\" (deadline passed) or \"any\" (no filter). Default \"open\". If a search returns 0 items, try \"any\". Direct notice lookups ignore this search filter.",
            "default": "open"
          },
          "maxItems": {
            "title": "Total result limit (e.g. 20)",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Total number of tender records to return across all sources and search terms combined, 1-10000, default 50. Use a small value (e.g. 5) for a quick test.",
            "default": 50
          },
          "publishedFrom": {
            "title": "Earliest publication date (YYYY-MM-DD)",
            "type": "string",
            "description": "Only notices published on or after this date, format YYYY-MM-DD, e.g. '2026-09-01'. Leave empty for no lower bound."
          },
          "publishedTo": {
            "title": "Latest publication date (YYYY-MM-DD)",
            "type": "string",
            "description": "Only notices published on or before this date, format YYYY-MM-DD, e.g. '2026-10-02'. Leave empty for no upper bound."
          },
          "cpvCodes": {
            "title": "CPV classification codes (8 digits)",
            "type": "array",
            "description": "8-digit Common Procurement Vocabulary codes, e.g. [\"72000000\"] for IT services. Contracts Finder also matches child codes. A \"-check digit\" suffix such as \"-8\" is ignored.",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "TED buyer countries (3-letter codes)",
            "type": "array",
            "description": "ISO 3166-1 alpha-3 country codes (three letters, not two) of the buying authority, e.g. [\"DEU\", \"FRA\", \"IRL\"]. Applies to TED only; empty = all countries.",
            "items": {
              "type": "string"
            }
          },
          "ukRegions": {
            "title": "Contracts Finder regions (e.g. Wales)",
            "type": "array",
            "description": "Contracts Finder regions, e.g. [\"Wales\", \"London\"], chosen from the listed region names. Notices marked \"Any region\" are also kept. Empty means all regions. Has no effect on TED or direct notice lookups.",
            "items": {
              "type": "string",
              "enum": [
                "North East",
                "North West",
                "Yorkshire and The Humber",
                "East Midlands",
                "West Midlands",
                "East of England",
                "London",
                "South East",
                "South West",
                "Scotland",
                "Wales",
                "Northern Ireland"
              ]
            }
          },
          "minValue": {
            "title": "Minimum contract value (e.g. 10000)",
            "type": "integer",
            "description": "Only notices with a contract value of at least this number, in the notice currency (GBP for UK, usually EUR for TED), e.g. 10000."
          },
          "maxValue": {
            "title": "Maximum contract value (e.g. 5000000)",
            "type": "integer",
            "description": "Only notices with a contract value of at most this number, in the notice currency, e.g. 5000000."
          },
          "noticeUrls": {
            "title": "Direct notice links (URL objects)",
            "type": "array",
            "description": "Direct notices as URL objects, e.g. [{\"url\":\"https://ted.europa.eu/en/notice/-/detail/681373-2026\"}], or Contracts Finder /Notice/<GUID> links. API calls also accept URL strings or bare TED publication numbers. Search filters do not apply. Unknown/missing notices are skipped; with no keywords or CPV codes, only direct targets are fetched.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "includeDescription": {
            "title": "Return full descriptions (true/false)",
            "type": "boolean",
            "description": "Whether to return full description text, e.g. true (default). Set false to return description: null and reduce output size; other fields are unchanged.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "Request proxy settings (object)",
            "type": "object",
            "description": "Proxy configuration object, e.g. {\"useApifyProxy\":false} (default: direct requests). Both official APIs support anonymous access. Set {\"useApifyProxy\":true} to retry through Apify Proxy if requests are blocked; exhausted failures skip the target and other targets continue.",
            "default": {
              "useApifyProxy": false
            }
          },
          "datePreset": {
            "title": "Relative publication window (e.g. last_7_days)",
            "enum": [
              "none",
              "last_7_days",
              "last_30_days",
              "last_90_days",
              "year_to_date"
            ],
            "type": "string",
            "description": "Publication window enum: none (default), last_7_days, last_30_days, last_90_days or year_to_date, e.g. \"last_7_days\" for recurring searches. Uses UTC calendar days including today. Explicit publishedFrom overrides it; publishedTo still applies. Direct lookups ignore date filters.",
            "default": "none"
          },
          "noticeIds": {
            "title": "Direct notice identifiers (GUID or number)",
            "type": "array",
            "description": "Fetch known notices by Contracts Finder GUID or TED publication number, e.g. [\"681373-2026\"]. IDs and noticeUrls share maxItems with searches. With no searchTerms or cpvCodes, only direct notices are fetched. Unknown IDs are skipped without failing the run.",
            "default": [],
            "items": {
              "type": "string"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}