{
  "openapi": "3.0.1",
  "info": {
    "title": "EU Public Tenders Scraper: TED, BOAMP, Procurement & Awards",
    "description": "Scrape public tenders and contract awards from all of Europe (TED), plus French national tenders (BOAMP) and awarded contracts (DECP). Deadlines, values in €, buyer contacts, winners per lot with bids received, official company data and daily alerts.",
    "version": "0.1",
    "x-build-id": "daxsCXoP6RGcfLiFd"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/euroscrape~eu-public-tenders/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-euroscrape-eu-public-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/euroscrape~eu-public-tenders/runs": {
      "post": {
        "operationId": "runs-sync-euroscrape-eu-public-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/euroscrape~eu-public-tenders/run-sync": {
      "post": {
        "operationId": "run-sync-euroscrape-eu-public-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": {
          "mode": {
            "title": "What to search",
            "enum": [
              "tenders",
              "awards"
            ],
            "type": "string",
            "description": "<b>Open tenders</b>: calls for tender you can still bid on (deadline, estimated value, buyer contact, documents link). <b>Contract awards</b>: who won which contract, for how much and against how many bids (winners with company details).",
            "default": "tenders"
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Words or phrases searched in the title, description, lots and official category of each notice. English keywords also find notices in other languages through their official category (e.g. \"software\" finds German, Polish or Spanish software tenders). For French national notices (BOAMP, DECP), add French keywords too (e.g. \"logiciel\"). Leave empty to get everything matching the other filters.",
            "items": {
              "type": "string"
            }
          },
          "cpvCodes": {
            "title": "CPV codes (categories)",
            "type": "array",
            "description": "Official EU procurement categories, as codes or prefixes: \"72\" = IT services, \"48\" = software packages, \"45\" = construction work, \"79\" = business services, \"90\" = cleaning & environment, \"33\" = medical equipment, \"71\" = architecture & engineering. The most reliable filter across languages.",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Countries of the buyer (2-letter codes). Leave empty for all of Europe (EU, EEA, Switzerland and candidate countries).",
            "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",
                "NO",
                "IS",
                "LI",
                "CH",
                "GB",
                "MK",
                "RS",
                "ME",
                "AL",
                "BA",
                "MD",
                "UA",
                "GE",
                "TR"
              ],
              "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",
                "North Macedonia",
                "Serbia",
                "Montenegro",
                "Albania",
                "Bosnia and Herzegovina",
                "Moldova",
                "Ukraine",
                "Georgia",
                "Türkiye"
              ]
            }
          },
          "frenchDepartments": {
            "title": "French departments",
            "type": "array",
            "description": "France only: department numbers, e.g. \"69\", \"75\", \"2A\", \"974\". Selecting departments limits the search to France.",
            "items": {
              "type": "string"
            }
          },
          "publishedWithinDays": {
            "title": "Published in the last (days)",
            "minimum": 1,
            "maximum": 730,
            "type": "integer",
            "description": "Notices published in the last N days. For daily monitoring, 2 or 3 days is enough.",
            "default": 7
          },
          "publishedFrom": {
            "title": "Published from (date)",
            "type": "string",
            "description": "Optional: exact start date (YYYY-MM-DD). Overrides \"Published in the last (days)\"."
          },
          "publishedTo": {
            "title": "Published until (date)",
            "type": "string",
            "description": "Optional: end date (YYYY-MM-DD)."
          },
          "contractTypes": {
            "title": "Contract types",
            "type": "array",
            "description": "Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "works",
                "supplies",
                "services"
              ],
              "enumTitles": [
                "Works",
                "Supplies",
                "Services"
              ]
            }
          },
          "minValueEur": {
            "title": "Minimum value (€)",
            "minimum": 0,
            "type": "integer",
            "description": "Estimated value (tenders) or awarded value (awards), converted to euros."
          },
          "maxValueEur": {
            "title": "Maximum value (€)",
            "minimum": 0,
            "type": "integer",
            "description": "Estimated value (tenders) or awarded value (awards), converted to euros."
          },
          "includeWithoutValue": {
            "title": "Keep notices without a published value",
            "type": "boolean",
            "description": "Many buyers do not publish the estimated value. Uncheck to keep only notices with a value in your range.",
            "default": true
          },
          "onlyOpen": {
            "title": "Only tenders still open",
            "type": "boolean",
            "description": "Open tenders mode: skip calls whose deadline has passed.",
            "default": true
          },
          "minDaysToDeadline": {
            "title": "Minimum days before deadline",
            "minimum": 0,
            "type": "integer",
            "description": "Open tenders mode: skip calls closing sooner than this (time to prepare a bid).",
            "default": 0
          },
          "buyerKeywords": {
            "title": "Buyer name contains",
            "type": "array",
            "description": "Keep only notices whose buyer name contains one of these words (e.g. \"hospital\", \"university\", \"Stadt\").",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "title": "Sources",
            "type": "array",
            "description": "TED = all EU-level tenders and awards (all countries). BOAMP = French national tenders below EU thresholds. DECP = all French contracts awarded from 40,000 €.",
            "items": {
              "type": "string",
              "enum": [
                "ted",
                "boamp",
                "decp"
              ],
              "enumTitles": [
                "TED (EU, all countries)",
                "BOAMP (France, national tenders)",
                "DECP (France, awarded contracts)"
              ]
            },
            "default": [
              "ted",
              "boamp",
              "decp"
            ]
          },
          "onlyWithWinners": {
            "title": "Only awards with a named winner",
            "type": "boolean",
            "description": "Contract awards mode: skip notices where no contract was awarded (procedure closed, lots not awarded).",
            "default": true
          },
          "enrichWinners": {
            "title": "Add official company data for French winners",
            "type": "boolean",
            "description": "From the French business register (free): legal name, activity (NAF), headcount, creation date, SIRET.",
            "default": true
          },
          "language": {
            "title": "Language of categories and links",
            "enum": [
              "en",
              "fr",
              "de",
              "es",
              "it",
              "nl",
              "pl",
              "pt"
            ],
            "type": "string",
            "description": "Language of the CPV category labels and of the TED links. Titles and descriptions stay in their original language.",
            "default": "en"
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "newest",
              "deadline",
              "value"
            ],
            "type": "string",
            "description": "Order of the notices in the dataset.",
            "default": "newest"
          },
          "maxItems": {
            "title": "Maximum notices",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum number of notices in the dataset (you pay per notice).",
            "default": 200
          },
          "includeSummary": {
            "title": "Add a free summary",
            "type": "boolean",
            "description": "One extra free item: notices and value per country and category, top buyers and, for awards, top winners, average bids per lot and share of single-bid lots.",
            "default": true
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Set a name and schedule the Actor (e.g. daily): each run then returns only notices not seen before and can alert you. The first run saves the current notices as a baseline."
          },
          "telegramBotToken": {
            "title": "Telegram bot token",
            "type": "string",
            "description": "Alerts on Telegram: create a bot with @BotFather and paste its token."
          },
          "telegramChatId": {
            "title": "Telegram chat ID",
            "type": "string",
            "description": "Your chat ID (send a message to your bot, then open api.telegram.org/bot<token>/getUpdates)."
          },
          "discordWebhookUrl": {
            "title": "Discord webhook URL",
            "type": "string",
            "description": "Alerts in a Discord channel: Channel settings → Integrations → Webhooks."
          },
          "slackWebhookUrl": {
            "title": "Slack webhook URL",
            "type": "string",
            "description": "Alerts in Slack: create an Incoming Webhook for your channel."
          },
          "webhookUrl": {
            "title": "Webhook URL (JSON)",
            "type": "string",
            "description": "Receives one POST per run with all new notices (Make, Zapier, n8n, your CRM…)."
          },
          "maxNotifications": {
            "title": "Maximum alerts per run",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Maximum number of alert messages per run (the webhook always receives all new notices in one POST).",
            "default": 30
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}