{
  "openapi": "3.0.1",
  "info": {
    "title": "EU & UK Public Tenders Scraper (TED + Find a Tender)",
    "description": "Search and monitor EU (TED) and UK (Find a Tender, Contracts Finder) public tenders through official open APIs. Filter by keyword, CPV code, country, notice type and value. Monitor mode returns only new or changed tenders. No contact fields; e-mails and phones in texts are masked.",
    "version": "0.2",
    "x-build-id": "GnFQJxExjJdBGxbSb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/atesen-software~eu-uk-public-tenders-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-atesen-software-eu-uk-public-tenders-monitor",
        "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/atesen-software~eu-uk-public-tenders-monitor/runs": {
      "post": {
        "operationId": "runs-sync-atesen-software-eu-uk-public-tenders-monitor",
        "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/atesen-software~eu-uk-public-tenders-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-atesen-software-eu-uk-public-tenders-monitor",
        "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": "Full-text keywords or phrases (any of them must match). TED searches all notice languages server-side; UK sources are matched on title, description, lots, items and buyer name (case- and accent-insensitive, word start; keywords of 3 characters or fewer must match a whole word, and acronyms typed in capitals such as IT or AI are matched case-sensitively). Leave empty to get every notice that matches the other filters. Tip: type acronyms in capitals (IT, not it).",
            "items": {
              "type": "string"
            }
          },
          "cpvCodes": {
            "title": "CPV codes",
            "type": "array",
            "description": "Common Procurement Vocabulary codes. Trailing zeros act as a prefix: 72000000 matches every 72xxxxxx (IT services), 48783000 matches 48783xxx. The check digit (-5) is optional. If none of the given codes is valid, the run stops with an input error instead of running unfiltered.",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Buyer countries",
            "type": "array",
            "description": "ISO country codes of the contracting authority (DE, FR, PL, GB/UK...). Empty = all. A filter without GB skips the UK sources; GB alone skips TED. If none of the given codes is valid, the run stops with an input error instead of returning all countries.",
            "items": {
              "type": "string"
            }
          },
          "noticeTypes": {
            "title": "Notice types",
            "type": "array",
            "description": "competition = calls for tenders (open opportunities); planning = prior information / pipeline; result = contract awards; change = corrigenda and modifications.",
            "items": {
              "type": "string",
              "enum": [
                "competition",
                "planning",
                "result",
                "change"
              ],
              "enumTitles": [
                "Competition (calls for tenders)",
                "Planning (prior information)",
                "Result (awards)",
                "Change (corrigenda, modifications)"
              ]
            },
            "default": [
              "competition"
            ]
          },
          "sources": {
            "title": "Sources",
            "type": "array",
            "description": "ted = TED, EU + EEA (Official Journal S); fts = UK Find a Tender (above-threshold UK notices); cf = UK Contracts Finder (lower-value English notices).",
            "items": {
              "type": "string",
              "enum": [
                "ted",
                "fts",
                "cf"
              ],
              "enumTitles": [
                "TED (EU)",
                "Find a Tender (UK)",
                "Contracts Finder (UK)"
              ]
            },
            "default": [
              "ted",
              "fts"
            ]
          },
          "lookbackDays": {
            "title": "Lookback (days)",
            "minimum": 1,
            "maximum": 366,
            "type": "integer",
            "description": "Notices published (TED) or released/updated (UK) in the last N days, counted from 00:00 UTC. Ignored when 'Published since' is set.",
            "default": 3
          },
          "publishedSince": {
            "title": "Published since",
            "type": "string",
            "description": "Absolute start date (YYYY-MM-DD). Overrides the lookback."
          },
          "minValue": {
            "title": "Minimum estimated value",
            "minimum": 0,
            "type": "integer",
            "description": "Only notices whose estimated / awarded value is at least this amount in the currency below. 0 or empty = no value filter."
          },
          "minValueCurrency": {
            "title": "Value currency",
            "enum": [
              "EUR",
              "GBP",
              "PLN",
              "SEK",
              "DKK",
              "NOK",
              "CZK",
              "HUF",
              "RON",
              "BGN",
              "CHF"
            ],
            "type": "string",
            "description": "ISO 4217 code for the minimum value. No currency conversion is done.",
            "default": "EUR"
          },
          "otherCurrencies": {
            "title": "Notices in other currencies",
            "enum": [
              "include",
              "exclude"
            ],
            "type": "string",
            "description": "When a minimum value is set: keep (include) or drop (exclude) notices whose value is in a different currency.",
            "default": "include"
          },
          "includeWithoutValue": {
            "title": "Keep notices without a value",
            "type": "boolean",
            "description": "When a minimum value is set, also keep notices that publish no value (many do not).",
            "default": false
          },
          "maxResultsPerSource": {
            "title": "Max notices per source",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Upper limit of notices returned per source (newest first). Each returned notice is one billable 'notice' event. In monitor mode only new/changed notices count; unchanged ones are skipped (TED scans at most max(1000, 20x this value) notices; the status row then says scan_limit). If the window holds more new notices than this, later runs return the rest.",
            "default": 100
          },
          "maxRuntimeSeconds": {
            "title": "Max run time (seconds)",
            "minimum": 0,
            "maximum": 86400,
            "type": "integer",
            "description": "Soft time limit for the whole run. When it is reached, or when a source API (Find a Tender in particular) rate-limits and asks to wait past it, the run stops reading, keeps the notices already found and ends with a 'time_limit' status row for that source. 0 = no limit (only the run timeout applies). The console pre-fill uses 180 so a quick try always finishes in a few minutes.",
            "default": 0
          },
          "changesOnly": {
            "title": "Monitor mode (changes only)",
            "type": "boolean",
            "description": "Remember what was returned before (per monitor key) and only output new notices or procedures whose deadline, status or latest notice changed. Unchanged notices are not output and not charged. Schedule the actor daily for alerts.",
            "default": false
          },
          "monitorKey": {
            "title": "Monitor key",
            "type": "string",
            "description": "Name of the saved state (letters, digits, - _ .). Use one key per saved search. Empty = derived from the filters."
          },
          "preferredLanguage": {
            "title": "Preferred language (TED)",
            "enum": [
              "en",
              "de",
              "fr",
              "es",
              "it",
              "pl",
              "nl",
              "pt",
              "sv",
              "da",
              "fi",
              "cs",
              "sk",
              "sl",
              "hu",
              "ro",
              "bg",
              "el",
              "hr",
              "et",
              "lv",
              "lt",
              "mt",
              "ga"
            ],
            "type": "string",
            "description": "Language picked for TED multilingual fields when the notice provides it (falls back to English, then the original language). Most TED titles and descriptions exist only in the buyer's original language and are not translated.",
            "default": "en"
          },
          "descriptionMaxLength": {
            "title": "Description length",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Truncate descriptions to this many characters (0 = no description).",
            "default": 600
          },
          "includeRaw": {
            "title": "Include raw source record",
            "type": "boolean",
            "description": "Add the source record (TED search fields or OCDS release) as 'raw'. Contact points, persons, bids and supplier details are removed and e-mails/phone numbers in texts are masked.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}