{
  "openapi": "3.0.1",
  "info": {
    "title": "EU & UK Tenders Scraper & Monitor (TED, Find a Tender)",
    "description": "Search and monitor EU and UK public tenders from TED, Find a Tender and Contracts Finder by keyword, CPV code, country and notice type. Daily bid alerts with only new notices, buyer, values, deadlines and award winners in one clean schema. Official APIs.",
    "version": "0.2",
    "x-build-id": "Ifsa8S2HuirLWgehw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/folt~eu-tenders-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-folt-eu-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/folt~eu-tenders-monitor/runs": {
      "post": {
        "operationId": "runs-sync-folt-eu-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/folt~eu-tenders-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-folt-eu-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": {
          "sources": {
            "title": "Sources",
            "type": "array",
            "description": "Where to search. TED = EU/EEA tenders (default). Find a Tender = UK notices under the Procurement Act 2023 (above and below threshold) and above-threshold notices under the old rules. Contracts Finder = UK below-threshold notices and procurements still under the old rules. UK sources are filtered by the Actor itself: keywords match whole words (no stemming), and a run reads about one working day of UK notices plus 8 pages per notice found, so very narrow searches over long windows may stop early (shown in SUMMARY) — see the README.",
            "items": {
              "type": "string",
              "enum": [
                "ted",
                "uk-find-a-tender",
                "uk-contracts-finder"
              ],
              "enumTitles": [
                "TED — EU & EEA (Tenders Electronic Daily)",
                "UK — Find a Tender",
                "UK — Contracts Finder"
              ]
            },
            "default": [
              "ted"
            ]
          },
          "keywords": {
            "title": "Keywords (any)",
            "type": "array",
            "description": "A notice matches if it contains any of these words or phrases. TED: full-text search across the whole notice in its original language, so add translations (e.g. software, logiciel, Software, oprogramowanie). UK sources: case-insensitive whole word or phrase in the title, description, lots and buyer name (no stemming: add plural forms).",
            "items": {
              "type": "string"
            }
          },
          "cpvCodes": {
            "title": "CPV codes",
            "type": "array",
            "description": "Common Procurement Vocabulary codes. Sub-categories are included automatically (72000000 = all IT services). Accepts 72000000, 72000000-5 or a prefix like 722. Works the same for TED and UK sources.",
            "items": {
              "type": "string"
            }
          },
          "buyerCountries": {
            "title": "Buyer countries",
            "type": "array",
            "description": "ISO country codes of the contracting authority, e.g. DE, FR, BG (2- or 3-letter). If you select UK sources, include GB (UK also works then) or leave this empty — otherwise the UK sources are skipped.",
            "items": {
              "type": "string"
            }
          },
          "noticeTypes": {
            "title": "Notice types",
            "type": "array",
            "description": "Competition = open calls for tenders (default). Planning = prior information / pipeline and market-engagement notices. Result = contract awards with winners and values. UK notices are mapped from their notice type (UK1–3, UK4, UK5–7) or stage; other UK notice types (e.g. contract changes) are returned only when all three types are selected.",
            "items": {
              "type": "string",
              "enum": [
                "competition",
                "planning",
                "result"
              ],
              "enumTitles": [
                "Competition (calls for tenders)",
                "Planning (prior information)",
                "Result (contract awards)"
              ]
            },
            "default": [
              "competition"
            ]
          },
          "publishedWithinDays": {
            "title": "Published within (days)",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "Only notices published in the last N days (1–365).",
            "default": 7
          },
          "onlyOpenForBids": {
            "title": "Only tenders still open for bids",
            "type": "boolean",
            "description": "Keep only notices whose tender submission deadline, or deadline to request to participate (TED restricted and negotiated procedures), is today or later. UK sources use the tender deadline only.",
            "default": false
          },
          "changeDetection": {
            "title": "Change detection",
            "enum": [
              "off",
              "new"
            ],
            "type": "string",
            "description": "'Only new' returns notices you haven't received in previous runs with the same search and sources. Schedule the Actor daily and pay only for new tenders.",
            "default": "off"
          },
          "stateKey": {
            "title": "Watchlist name",
            "pattern": "^[a-zA-Z0-9-]{0,60}$",
            "type": "string",
            "description": "Optional name for the change-detection memory. Leave empty to derive it from the search."
          },
          "maxItems": {
            "title": "Max notices",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Stop after this many notices are returned (1–10,000). Shared by all selected sources: notices are taken newest first across sources, alternating between sources on the same day.",
            "default": 100
          },
          "titleLanguage": {
            "title": "Title language",
            "enum": [
              "en",
              "bg",
              "cs",
              "da",
              "de",
              "el",
              "es",
              "et",
              "fi",
              "fr",
              "ga",
              "hr",
              "hu",
              "it",
              "lt",
              "lv",
              "mt",
              "nl",
              "pl",
              "pt",
              "ro",
              "sk",
              "sl",
              "sv"
            ],
            "type": "string",
            "description": "TED only: TED publishes notice titles in all EU languages. Other fields stay in the original language. UK notices are in English.",
            "default": "en"
          },
          "includeDescription": {
            "title": "Include description",
            "type": "boolean",
            "description": "Adds the notice's description (original language; contact emails and phone numbers are redacted).",
            "default": false
          },
          "advancedQuery": {
            "title": "Advanced TED query",
            "type": "string",
            "description": "TED only. Optional extra condition in TED expert-search syntax, combined with the filters above using AND. Example: procedure-type=open"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}