{
  "openapi": "3.0.1",
  "info": {
    "title": "EU TED Tenders Scraper & Alerts: Public Procurement",
    "description": "Search and monitor EU public tenders from TED by keyword, CPV code, country, deadline and value. Only-new mode for daily tender alerts. Official TED API, $1 per 1,000 notices.",
    "version": "0.2",
    "x-build-id": "QGDKy8AGOeV5dhpkX"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rod_analytics~ted-tenders/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rod_analytics-ted-tenders",
        "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/rod_analytics~ted-tenders/runs": {
      "post": {
        "operationId": "runs-sync-rod_analytics-ted-tenders",
        "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/rod_analytics~ted-tenders/run-sync": {
      "post": {
        "operationId": "run-sync-rod_analytics-ted-tenders",
        "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 search in notices. Any keyword may match (OR). Phrases are matched exactly, e.g. \"cloud services\". Notices are indexed in their original language, so add local-language terms for better recall. Avoid short acronyms such as SOC: they also match codes inside notices and return unrelated tenders.",
            "items": {
              "type": "string"
            }
          },
          "cpvCodes": {
            "title": "CPV codes",
            "type": "array",
            "description": "Common Procurement Vocabulary codes (8 digits). Parent codes include all child codes, e.g. 72000000 covers all IT services. The check digit (72000000-5) is optional.",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Buyer countries",
            "type": "array",
            "description": "Country of the contracting authority. ISO 3166 alpha-2 codes. Alpha-3 codes (LTU) also work via API. Joint procurements match when any buyer is in these countries, so the first buyer (buyerCountry) can be elsewhere; see buyerCountries.",
            "items": {
              "type": "string",
              "enum": [
                "AT",
                "BE",
                "BG",
                "HR",
                "CY",
                "CZ",
                "DK",
                "EE",
                "FI",
                "FR",
                "DE",
                "GR",
                "HU",
                "IE",
                "IT",
                "LV",
                "LT",
                "LU",
                "MT",
                "NL",
                "PL",
                "PT",
                "RO",
                "SK",
                "SI",
                "ES",
                "SE",
                "IS",
                "LI",
                "NO",
                "CH",
                "GB",
                "AL",
                "BA",
                "ME",
                "MK",
                "RS",
                "XK",
                "TR",
                "UA",
                "MD",
                "GE"
              ],
              "enumTitles": [
                "Austria",
                "Belgium",
                "Bulgaria",
                "Croatia",
                "Cyprus",
                "Czechia",
                "Denmark",
                "Estonia",
                "Finland",
                "France",
                "Germany",
                "Greece",
                "Hungary",
                "Ireland",
                "Italy",
                "Latvia",
                "Lithuania",
                "Luxembourg",
                "Malta",
                "Netherlands",
                "Poland",
                "Portugal",
                "Romania",
                "Slovakia",
                "Slovenia",
                "Spain",
                "Sweden",
                "Iceland",
                "Liechtenstein",
                "Norway",
                "Switzerland",
                "United Kingdom",
                "Albania",
                "Bosnia and Herzegovina",
                "Montenegro",
                "North Macedonia",
                "Serbia",
                "Kosovo",
                "Türkiye",
                "Ukraine",
                "Moldova",
                "Georgia"
              ]
            }
          },
          "noticeTypes": {
            "title": "Notice types",
            "type": "array",
            "description": "Leave empty for all notice types.",
            "items": {
              "type": "string",
              "enum": [
                "contract-notice",
                "contract-award",
                "prior-information",
                "direct-award",
                "contract-modification",
                "corrigendum"
              ],
              "enumTitles": [
                "Contract notice (open tender)",
                "Contract award notice",
                "Prior information notice",
                "Direct award / VEAT notice",
                "Contract modification",
                "Corrigendum"
              ]
            }
          },
          "publishedWithinDays": {
            "title": "Published in the last N days",
            "minimum": 0,
            "type": "integer",
            "description": "Relative date filter. Also applied to the expert query. Ignored when 'Published from' is set. Use 0 to search all dates.",
            "default": 30
          },
          "publicationDateFrom": {
            "title": "Published from",
            "type": "string",
            "description": "Publication date from (YYYY-MM-DD). Overrides 'last N days'."
          },
          "publicationDateTo": {
            "title": "Published to",
            "type": "string",
            "description": "Publication date to (YYYY-MM-DD), inclusive."
          },
          "minValue": {
            "title": "Minimum value",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum total value (estimated or awarded) in the notice currency. Values are not converted between currencies."
          },
          "maxValue": {
            "title": "Maximum value",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum total value in the notice currency."
          },
          "buyerName": {
            "title": "Buyer name contains",
            "type": "string",
            "description": "Contracting authority name, matched as a phrase. Buyer names are usually in the local language, e.g. \"Vilniaus\"."
          },
          "languages": {
            "title": "Notice languages",
            "type": "array",
            "description": "Only notices whose original (official) language is one of these.",
            "items": {
              "type": "string",
              "enum": [
                "bg",
                "cs",
                "da",
                "de",
                "el",
                "en",
                "es",
                "et",
                "fi",
                "fr",
                "ga",
                "hr",
                "hu",
                "it",
                "lt",
                "lv",
                "mt",
                "nl",
                "pl",
                "pt",
                "ro",
                "sk",
                "sl",
                "sv"
              ],
              "enumTitles": [
                "Bulgarian",
                "Czech",
                "Danish",
                "German",
                "Greek",
                "English",
                "Spanish",
                "Estonian",
                "Finnish",
                "French",
                "Irish",
                "Croatian",
                "Hungarian",
                "Italian",
                "Lithuanian",
                "Latvian",
                "Maltese",
                "Dutch",
                "Polish",
                "Portuguese",
                "Romanian",
                "Slovak",
                "Slovenian",
                "Swedish"
              ]
            }
          },
          "minDaysToDeadline": {
            "title": "Tender deadline at least N days away",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Only notices whose tender submission deadline is at least this many days after the run date. 0 = deadline today or later, i.e. still open. Notices without a tender deadline (most award notices) are left out. Leave empty to skip."
          },
          "maxItems": {
            "title": "Max notices",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Maximum number of notices to save. You are charged per saved notice.",
            "default": 100
          },
          "onlyNew": {
            "title": "Only new notices since the last run (alerts)",
            "type": "boolean",
            "description": "For daily alerts. Remembers which notices earlier runs with the same filters already saved, and saves only notices not seen before. The first run saves the current matches and remembers them. When nothing is new, the run ends with an empty dataset, so a Slack or email integration stays quiet. State lives in the named key-value store \"ted-tenders-only-new\" of your account.",
            "default": false
          },
          "stateKey": {
            "title": "Alert state name (optional)",
            "type": "string",
            "description": "Optional name for the remembered state, e.g. \"it-tenders-de\". Leave empty to derive it from the search filters, so changing a filter starts a fresh alert. Use a name to keep the state when you tweak filters, or to run two separate alerts with the same filters."
          },
          "scope": {
            "title": "Search scope",
            "enum": [
              "ALL",
              "ACTIVE",
              "LATEST"
            ],
            "type": "string",
            "description": "ALL = every notice since 1993. ACTIVE = only active notices (open procedures). LATEST = only the latest daily OJ S edition.",
            "default": "ALL"
          },
          "onlyLatestVersions": {
            "title": "Only latest notice versions",
            "type": "boolean",
            "description": "Skip older versions of notices that were changed later.",
            "default": false
          },
          "expertQuery": {
            "title": "Expert query (advanced)",
            "type": "string",
            "description": "Raw TED expert search query, e.g. place-of-performance IN (LTU) AND FT ~ \"cyber\". It is combined with the filters above using AND. You may end it with SORT BY <field> ASC|DESC. Build and test queries at https://ted.europa.eu/en/search/expert-search"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}