{
  "openapi": "3.0.1",
  "info": {
    "title": "EU TED Tenders Scraper - Public Procurement Contracts API",
    "description": "Scrape EU public procurement notices from TED (Tenders Electronic Daily) with no API key. Filter tenders by country, CPV code, notice type, procedure, value and deadline. Get buyer and winner contacts, contract values, CPV and NUTS codes, award data and document links. Export JSON, CSV, Excel.",
    "version": "0.2",
    "x-build-id": "eJQGgPgjh34vIZ9IZ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapers_lat~eu-ted-tenders-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapers_lat-eu-ted-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/scrapers_lat~eu-ted-tenders-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapers_lat-eu-ted-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/scrapers_lat~eu-ted-tenders-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapers_lat-eu-ted-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": {
          "maxTenders": {
            "title": "Max Tenders",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Maximum number of procurement notices (tenders) to collect across all matching filters. Also accepts the aliases maxItems, maxResults, limit, max, or maxPages (1 page = 100). Optional; free Apify plans are capped at 10 per run."
          },
          "publicationDateFrom": {
            "title": "Published From (YYYY-MM-DD)",
            "type": "string",
            "description": "Only include notices published on or after this date, format YYYY-MM-DD, for example '2026-06-01'. If left empty, the scraper defaults to the last 7 days."
          },
          "publicationDateTo": {
            "title": "Published To (YYYY-MM-DD)",
            "type": "string",
            "description": "Only include notices published on or before this date, format YYYY-MM-DD, for example '2026-06-27'. If left empty, the scraper uses today."
          },
          "buyerCountry": {
            "title": "Buyer Country",
            "type": "array",
            "description": "Filter by the country of the contracting authority (buyer). Select one or more EU, EEA or partner countries. Leave empty for all countries.",
            "items": {
              "type": "string",
              "enum": [
                "AUT",
                "BEL",
                "BGR",
                "HRV",
                "CYP",
                "CZE",
                "DNK",
                "EST",
                "FIN",
                "FRA",
                "DEU",
                "GRC",
                "HUN",
                "IRL",
                "ITA",
                "LVA",
                "LTU",
                "LUX",
                "MLT",
                "NLD",
                "POL",
                "PRT",
                "ROU",
                "SVK",
                "SVN",
                "ESP",
                "SWE",
                "NOR",
                "ISL",
                "LIE",
                "CHE",
                "GBR"
              ],
              "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",
                "Norway",
                "Iceland",
                "Liechtenstein",
                "Switzerland",
                "United Kingdom"
              ]
            }
          },
          "cpvCodes": {
            "title": "CPV Codes",
            "type": "string",
            "description": "Filter by Common Procurement Vocabulary (CPV) codes, comma-separated, for example '45000000, 72000000'. 45000000 is construction work, 72000000 is IT services, 33000000 is medical equipment, 79000000 is business services."
          },
          "noticeType": {
            "title": "Notice Type",
            "type": "array",
            "description": "Filter by the type of notice. Leave empty for all types.",
            "items": {
              "type": "string",
              "enum": [
                "cn-standard",
                "cn-social",
                "cn-desg",
                "can-standard",
                "can-modif",
                "pin-only",
                "pin-buyer",
                "pin-cfc-standard",
                "veat",
                "qu-sy"
              ],
              "enumTitles": [
                "Contract notice",
                "Contract notice (social/special)",
                "Design contest notice",
                "Contract award notice",
                "Award modification notice",
                "Prior information notice",
                "Buyer profile notice",
                "Call for competition (PIN)",
                "Voluntary ex-ante transparency notice",
                "Qualification system notice"
              ]
            }
          },
          "procedureType": {
            "title": "Procedure Type",
            "type": "array",
            "description": "Filter by the procurement procedure type. Leave empty for all procedures.",
            "items": {
              "type": "string",
              "enum": [
                "open",
                "restricted",
                "comp-dial",
                "comp-tend",
                "innovation",
                "neg-w-call",
                "neg-wo-call",
                "oth-single",
                "oth-mult"
              ],
              "enumTitles": [
                "Open procedure",
                "Restricted procedure",
                "Competitive dialogue",
                "Competitive tendering",
                "Innovation partnership",
                "Negotiated with prior call",
                "Negotiated without prior call",
                "Other (single stage)",
                "Other (multiple stage)"
              ]
            }
          },
          "contractNature": {
            "title": "Contract Nature",
            "type": "array",
            "description": "Filter by what the contract is for: works (construction), supplies (goods) or services. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "works",
                "supplies",
                "services"
              ],
              "enumTitles": [
                "Works (construction)",
                "Supplies (goods)",
                "Services"
              ]
            }
          },
          "nutsCodes": {
            "title": "NUTS Region Codes",
            "type": "string",
            "description": "Filter by place-of-performance NUTS region code, comma-separated, for example 'DE21, FR101, PL911'. NUTS codes target a specific region rather than a whole country. Optional."
          },
          "minValue": {
            "title": "Minimum Value",
            "minimum": 0,
            "type": "integer",
            "description": "Only include notices whose estimated or awarded contract value is at least this amount (in the notice currency). Optional."
          },
          "maxValue": {
            "title": "Maximum Value",
            "minimum": 0,
            "type": "integer",
            "description": "Only include notices whose estimated or awarded contract value is at most this amount (in the notice currency). Optional."
          },
          "onlyOpenDeadlines": {
            "title": "Only Open (Still Biddable) Tenders",
            "type": "boolean",
            "description": "When on, only return notices whose tender submission deadline is today or in the future, so you see contracts you can still bid on.",
            "default": false
          },
          "buyerNameSearch": {
            "title": "Buyer Name Contains",
            "type": "string",
            "description": "Only include notices whose contracting authority (buyer) name contains this text, for example 'University' or 'Ministry of Health'. Optional."
          },
          "freeText": {
            "title": "Free-text Search",
            "type": "string",
            "description": "Full-text keyword search across the notice content (title, description, buyer, supplier), for example 'solar panels' or 'hospital catering'. Optional."
          },
          "expertQuery": {
            "title": "Raw TED Expert Query",
            "type": "string",
            "description": "Advanced: provide a full TED expert search query and it overrides all the filters above, for example 'buyer-country IN (DEU) AND classification-cpv IN (45000000) AND publication-date>=20260101'. Leave empty to use the filters above."
          },
          "withDetails": {
            "title": "Full notice details (paid add-on)",
            "type": "boolean",
            "description": "When ON, each notice is enriched with the full per-lot breakdown (lot titles, CPV, durations, submission deadlines and places), GPA and DPS coverage, framework and recurrence flags, award-criteria types, submission languages, the appeals/review body contact, and extra winner detail (identifier, website, postcode). Billed as the 'details' event instead of 'result', only when extra data is present. Requires a paid Apify plan.",
            "default": false
          },
          "withAiSummary": {
            "title": "AI summary (paid add-on)",
            "type": "boolean",
            "description": "When ON, each notice gets a plain-English AI summary. Paid add-on, charged only when a summary is produced. Requires a paid Apify plan.",
            "default": false
          },
          "withAiExtract": {
            "title": "AI structured extract (paid add-on)",
            "type": "boolean",
            "description": "When ON, each notice gets AI-extracted structured fields: buyer, value, deadline, CPV, eligibility. Paid add-on, charged only on success. Requires a paid Apify plan.",
            "default": false
          },
          "withAiTranslate": {
            "title": "AI translate to English (paid add-on)",
            "type": "boolean",
            "description": "When ON, non-English notice title/description are translated to English by AI. Paid add-on, charged only when a translation is produced. Requires a paid Apify plan.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}