{
  "openapi": "3.0.1",
  "info": {
    "title": "TED Tenders Scraper: EU Public Procurement Notices API",
    "description": "EU public procurement notices from TED (Tenders Electronic Daily), the official EU tenders portal, through its public Search API: title, buyer, country, CPV codes, values, deadlines, lots and document links. Filter by country, CPV, stage, text and date. Pay per notice, no personal data.",
    "version": "1.0",
    "x-build-id": "SQZeGbLFrJk8YV9C9"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rowcraft~ted-tenders-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rowcraft-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/rowcraft~ted-tenders-scraper/runs": {
      "post": {
        "operationId": "runs-sync-rowcraft-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/rowcraft~ted-tenders-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-rowcraft-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": {
          "countries": {
            "title": "Buyer countries",
            "type": "array",
            "description": "Countries of the contracting authority, one per line: English name or ISO code (Germany, DE or DEU). Empty = every country on TED (EU, EEA and others).",
            "items": {
              "type": "string"
            }
          },
          "text": {
            "title": "Search text",
            "type": "string",
            "description": "Full-text search in the whole notice (title, descriptions, buyer). A phrase is matched as written; you can also use OR, AND, NOT and parentheses: software OR hardware."
          },
          "cpv": {
            "title": "CPV codes",
            "type": "array",
            "description": "Common Procurement Vocabulary codes, one per line, as a code or a prefix: 72 (all IT services), 45 (construction work), 72220000 (systems and technical consultancy). A code matches itself and everything below it.",
            "items": {
              "type": "string"
            }
          },
          "formTypes": {
            "title": "Notice stage",
            "type": "array",
            "description": "Which stage of the procedure: open calls for tenders (competition), results and awards (result), planning notices, modifications. Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "competition",
                "result",
                "planning",
                "cont-modif",
                "dir-awa-pre",
                "consultation",
                "change"
              ],
              "enumTitles": [
                "Competition: contract notices, calls for tenders",
                "Result: contract award notices",
                "Planning: prior information notices",
                "Contract modification notices",
                "Direct award pre-announcements (voluntary ex-ante transparency)",
                "Preliminary market consultations",
                "Changes and corrigenda (older notices)"
              ]
            }
          },
          "contractNatures": {
            "title": "Contract nature",
            "type": "array",
            "description": "Works, supplies or services. Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "works",
                "supplies",
                "services"
              ],
              "enumTitles": [
                "Works",
                "Supplies",
                "Services"
              ]
            }
          },
          "publishedAfter": {
            "title": "Published after",
            "type": "string",
            "description": "Only notices published on or after this day. A date (2026-10-01), today, yesterday, or a relative value such as 7 days, 2 weeks, 3 months."
          },
          "publishedBefore": {
            "title": "Published before",
            "type": "string",
            "description": "Only notices published on or before this day (2026-10-07). For notices older than about a year set the scope below to All."
          },
          "openOnly": {
            "title": "Only notices still open for tenders",
            "type": "boolean",
            "description": "Keep only notices with a tender deadline today or later. Useful with the Competition stage to list what can still be bid on.",
            "default": false
          },
          "scope": {
            "title": "Scope",
            "enum": [
              "ACTIVE",
              "ALL",
              "LATEST"
            ],
            "type": "string",
            "description": "Active = notices currently in force (default). All = the whole TED archive, including expired and old notices. Latest = only the current issue of the Official Journal supplement.",
            "default": "ACTIVE"
          },
          "buyerName": {
            "title": "Buyer name contains",
            "type": "string",
            "description": "Word or phrase from the name of the contracting authority, for example Universit or Stadt Wien."
          },
          "placeOfPerformance": {
            "title": "Place of performance",
            "type": "array",
            "description": "Where the contract is performed: a country (France, FR) or a NUTS region code (DE1, FR10, ITC4), one per line. A country or a short code covers every region below it.",
            "items": {
              "type": "string"
            }
          },
          "procedureTypes": {
            "title": "Procedure types",
            "type": "array",
            "description": "Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "open",
                "restricted",
                "neg-w-call",
                "neg-wo-call",
                "comp-dial",
                "innovation",
                "oth-single",
                "oth-mult"
              ],
              "enumTitles": [
                "Open procedure",
                "Restricted procedure",
                "Negotiated with prior call for competition",
                "Negotiated without prior call for competition",
                "Competitive dialogue",
                "Innovation partnership",
                "Other single-stage procedure",
                "Other multiple-stage procedure"
              ]
            }
          },
          "minValue": {
            "title": "Minimum value",
            "minimum": 0,
            "type": "integer",
            "description": "Keep notices whose estimated value (procedure or any lot) or awarded value is at least this amount, in the currency of the notice (most are EUR, some are national currencies)."
          },
          "euFundedOnly": {
            "title": "Only EU-funded procurements",
            "type": "boolean",
            "description": "Keep notices where at least one lot is financed by EU funds.",
            "default": false
          },
          "sort": {
            "title": "Sort order",
            "enum": [
              "newest",
              "oldest",
              "value",
              "relevance"
            ],
            "type": "string",
            "description": "Order of the results when you take fewer than all matching notices.",
            "default": "newest"
          },
          "language": {
            "title": "Preferred language of titles and descriptions",
            "enum": [
              "eng",
              "deu",
              "fra",
              "spa",
              "ita",
              "pol",
              "nld",
              "ron",
              "por",
              "swe",
              "ces",
              "dan",
              "fin",
              "ell",
              "hun",
              "bul",
              "hrv",
              "slk",
              "slv",
              "lit",
              "lav",
              "est",
              "mlt",
              "gle"
            ],
            "type": "string",
            "description": "Titles exist in all 24 official EU languages; descriptions mostly in the language of the notice. The chosen language is used when available, then the original language.",
            "default": "eng"
          },
          "maxItems": {
            "title": "Maximum notices",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many notices. 0 = all matching notices (no cap: the actor uses the API's iteration mode).",
            "default": 500
          },
          "includeDescription": {
            "title": "Include descriptions",
            "type": "boolean",
            "description": "Procedure and lot descriptions and the text of changes, in the preferred language when available. Switch off for smaller rows and faster runs.",
            "default": true
          },
          "includeLots": {
            "title": "Include lot titles and IDs",
            "type": "boolean",
            "description": "Adds lotIds and lotTitles (one entry per lot). Lot values, deadlines and dates are always included.",
            "default": true
          },
          "query": {
            "title": "Expert query (replaces the filters above)",
            "type": "string",
            "description": "A TED expert-search query, as on the TED website: buyer-country=FRA AND classification-cpv=72* AND publication-date>=today(-30). When set, the filters above are ignored; the sort order and scope still apply."
          },
          "publicationNumbers": {
            "title": "Fetch specific notices by publication number",
            "type": "array",
            "description": "TED publication numbers (696546-2026) or notice links, one per line. When set, every filter above is ignored and the whole archive is searched.",
            "items": {
              "type": "string"
            }
          },
          "countOnly": {
            "title": "Count only (free check)",
            "type": "boolean",
            "description": "Only count how many rows match your filters and estimate the cost at your price tier. Nothing is delivered and nothing is charged apart from the start event. Turn it off to get the data.",
            "default": false
          },
          "onlyNew": {
            "title": "Only new rows since the last run",
            "type": "boolean",
            "description": "Remember the rows already delivered to you (in a key-value store in your Apify account) and deliver only rows that appeared since the last run with the same state key. The first run delivers everything that matches; later runs cost only the new rows. Ideal for schedules.",
            "default": false
          },
          "stateName": {
            "title": "State name",
            "type": "string",
            "description": "Name of the memory used by \"Only new rows\". Use a different name for each schedule or search (for example `stockholm-python`) so they do not share one memory.",
            "default": "default"
          },
          "notifyUrl": {
            "title": "Notify this URL when the run ends",
            "type": "string",
            "description": "A webhook address that receives one JSON POST with the number of new rows and links to the dataset: a Slack or Discord incoming webhook, a Make, n8n or Zapier catch hook, or your own endpoint. The message is also in the `text` (Slack) and `content` (Discord) fields."
          },
          "notifyWhenEmpty": {
            "title": "Notify also when there are no new rows",
            "type": "boolean",
            "description": "By default the notification is sent only when at least one row was delivered.",
            "default": false
          },
          "requestIntervalMs": {
            "title": "Delay between API requests (ms)",
            "minimum": 500,
            "maximum": 10000,
            "type": "integer",
            "description": "Default 1000 ms (one request per second). Each request returns up to about 160 notices. Minimum 500, in line with the TED fair-use policy.",
            "default": 1000
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}