{
  "openapi": "3.0.1",
  "info": {
    "title": "EU Tenders & Contract Awards Scraper — TED Procurement",
    "description": "Scrape EU public procurement from TED (Tenders Electronic Daily). Find open tenders by CPV code, country, keyword, value and deadline, or mine awarded contracts for winners and prices. Official EU open-data API, English-normalised flat JSON/CSV, company-level only.",
    "version": "1.0",
    "x-build-id": "kQmOjUaoHW476fedw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/mochiboo~eu-tenders-ted-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-mochiboo-eu-tenders-ted-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/mochiboo~eu-tenders-ted-scraper/runs": {
      "post": {
        "operationId": "runs-sync-mochiboo-eu-tenders-ted-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/mochiboo~eu-tenders-ted-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-mochiboo-eu-tenders-ted-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": {
          "searchMode": {
            "title": "What to scrape",
            "enum": [
              "openTenders",
              "awards",
              "all"
            ],
            "type": "string",
            "description": "'openTenders' = calls for tenders whose submission deadline has not passed (your live bidding pipeline). 'awards' = contract-award notices, with the winning company and the price it was awarded. 'all' = every notice type, including prior-information notices.",
            "default": "openTenders"
          },
          "cpvCodes": {
            "title": "CPV codes",
            "type": "array",
            "description": "Common Procurement Vocabulary codes. A code also matches all of its sub-codes, so 72000000 returns every IT notice. Examples: 72000000 IT services, 45000000 construction, 33000000 medical, 79000000 business services. Leave empty for all sectors.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Buyer countries",
            "type": "array",
            "description": "Restrict to buyers in these countries. Country name, ISO-2 or ISO-3 all work (Germany / DE / DEU). Leave empty for all of the EU plus the EEA and candidate countries that publish on TED.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keyword (full text)",
            "type": "string",
            "description": "Free-text phrase searched across the whole notice, in every published language version. Example: 'cloud migration'. Leave empty to match on the other filters only.",
            "default": ""
          },
          "contractNature": {
            "title": "Contract nature",
            "enum": [
              "any",
              "services",
              "supplies",
              "works"
            ],
            "type": "string",
            "description": "Restrict to service, supply or works contracts.",
            "default": "any"
          },
          "minValue": {
            "title": "Minimum contract value",
            "minimum": 0,
            "type": "integer",
            "description": "Only notices whose total value is at least this amount, in the notice's own currency (mostly EUR). 0 = no minimum. Note that many notices publish no value at all and are dropped by this filter.",
            "default": 0
          },
          "publishedFrom": {
            "title": "Published from (date)",
            "type": "string",
            "description": "Only notices published on/after this date. Format YYYY-MM-DD. Leave blank for no lower bound.",
            "default": ""
          },
          "publishedTo": {
            "title": "Published to (date)",
            "type": "string",
            "description": "Only notices published on/before this date. Format YYYY-MM-DD. Leave blank for no upper bound.",
            "default": ""
          },
          "deadlineFrom": {
            "title": "Deadline from (date)",
            "type": "string",
            "description": "Only notices whose tender-submission deadline is on/after this date. Format YYYY-MM-DD. In 'openTenders' mode this defaults to today, so you can use it to skip tenders closing too soon to bid on.",
            "default": ""
          },
          "deadlineTo": {
            "title": "Deadline to (date)",
            "type": "string",
            "description": "Only notices whose tender-submission deadline is on/before this date. Format YYYY-MM-DD. Use it with 'openTenders' to get everything closing in the next N days.",
            "default": ""
          },
          "sortOrder": {
            "title": "Result order",
            "enum": [
              "newest",
              "oldest"
            ],
            "type": "string",
            "description": "'newest' returns the most recently published notices first — TED's API cannot sort, so the actor slices the publication window by day and walks it backwards. 'oldest' is TED's own order and is faster and cheaper for a full-archive pull.",
            "default": "newest"
          },
          "language": {
            "title": "Output language",
            "type": "string",
            "description": "Preferred language for translated text (TED machine-translates notice titles into all 24 EU languages). Use a 3-letter code: eng, deu, fra, spa, ita, nld, pol, por... Buyer and winner names are only published in their own language and fall back to it.",
            "default": "eng"
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many notices. Keep it low for a fast preview; raise it for a full pull. 0 = no limit.",
            "default": 20
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}