{
  "openapi": "3.0.1",
  "info": {
    "title": "EU Tenders Finder & Bid Matcher: TED Fit Score & Past Winners",
    "description": "Finds open EU public tenders on TED that fit your CPV codes and keywords, scores fit 0 to 100, flags close deadlines, and adds past winners, median award value and typical bid count for similar contracts. Monitor mode returns only new tenders. $0.01 per matched tender. Agent-ready: x402, MCP.",
    "version": "0.1",
    "x-build-id": "a5B7nr5lDUR5OmdMx"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nerolabs~eu-tender-bid-matcher/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nerolabs-eu-tender-bid-matcher",
        "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/nerolabs~eu-tender-bid-matcher/runs": {
      "post": {
        "operationId": "runs-sync-nerolabs-eu-tender-bid-matcher",
        "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/nerolabs~eu-tender-bid-matcher/run-sync": {
      "post": {
        "operationId": "run-sync-nerolabs-eu-tender-bid-matcher",
        "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": {
          "cpvCodes": {
            "title": "CPV codes you bid on",
            "type": "array",
            "description": "CPV codes (Common Procurement Vocabulary, the EU's category codes) for what you sell, e.g. 72000000 (all IT services), 72200000 (software programming and consultancy), 45000000 (construction work), 79400000 (business consulting). Trailing zeros mean the whole branch. Searched on TED's side, so they are the fastest, most exact filter.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords for your capabilities",
            "type": "array",
            "description": "Words or phrases describing what you do. Each one found in a tender's title or description adds to its fit score (whole words, case and accent blind, every language TED holds). Notices are often in the buyer's own language, so add local words too (e.g. 'logiciel', 'Software', 'oprogramowanie'). With no CPV codes, keywords run a TED full-text search instead.",
            "items": {
              "type": "string"
            }
          },
          "capabilityListUrl": {
            "title": "Capability list (CSV or Google Sheet link, optional)",
            "type": "string",
            "description": "Link to a CSV or a Google Sheet shared as 'Anyone with the link can view'. Cells holding 8 digit CPV codes are added as CPV codes; cells in a column named keyword, capability, service, product or skill (or the first column if there is no header) are added as keywords. Handy for keeping one bid profile per client."
          },
          "excludeKeywords": {
            "title": "Exclude words",
            "type": "array",
            "description": "Any tender containing one of these words is dropped and not charged, e.g. 'hardware', 'cleaning', 'catering'.",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Buyer countries (optional)",
            "type": "array",
            "description": "Only tenders from buyers in these countries. 2 or 3 letter codes: DE, FR, PL, IE, NL, ES or DEU, FRA. Empty means every country that publishes on TED (EU, EEA and others).",
            "items": {
              "type": "string"
            }
          },
          "minValueEur": {
            "title": "Minimum estimated value (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "Drop tenders whose estimated value is below this, converted to euro at the ECB rate. Tenders with no published value are kept."
          },
          "maxValueEur": {
            "title": "Maximum estimated value (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "Drop tenders whose estimated value is above this. Tenders with no published value are kept."
          },
          "publishedWithinDays": {
            "title": "Published in the last N days",
            "minimum": 1,
            "maximum": 90,
            "type": "integer",
            "description": "How far back to look for newly published tenders. Use 1 or 2 for a daily scheduled monitor.",
            "default": 14
          },
          "minDaysToDeadline": {
            "title": "At least N days left to bid",
            "minimum": 0,
            "maximum": 180,
            "type": "integer",
            "description": "Only tenders whose submission deadline is at least this many days away, so you have time to prepare.",
            "default": 3
          },
          "minFitScore": {
            "title": "Minimum fit score (0 to 100)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Only tenders scoring this or more are returned and charged. CPV match is worth up to 50, keywords up to 40, value inside your range 10.",
            "default": 50
          },
          "includeBenchmark": {
            "title": "Add past winners and award prices",
            "type": "boolean",
            "description": "For each tender, look up up to 250 recent contract award notices in the same CPV class and buyer country (all countries if fewer than 5): top past winners, median award value in euro, the tender's estimate against that median, median bids per tender and the share won by SMEs. Included in the price.",
            "default": true
          },
          "benchmarkMonths": {
            "title": "Benchmark window (months)",
            "minimum": 3,
            "maximum": 60,
            "type": "integer",
            "description": "How far back the past award benchmark looks.",
            "default": 24
          },
          "maxTenders": {
            "title": "Maximum tenders returned",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "The best fitting tenders up to this number are returned (and charged), highest score first.",
            "default": 100
          },
          "maxNoticesScanned": {
            "title": "Maximum notices scanned",
            "minimum": 50,
            "maximum": 10000,
            "type": "integer",
            "description": "How many open notices to read from TED before scoring (newest first). Scanning is free; only returned tenders are charged.",
            "default": 1500
          },
          "monitorMode": {
            "title": "Monitor mode: only tenders not returned before",
            "type": "boolean",
            "description": "Remembers every tender already returned under this watch name and returns only new ones, so a daily schedule sends just fresh matches. Already-seen tenders are never charged again.",
            "default": false
          },
          "watchName": {
            "title": "Watch name (monitor mode)",
            "type": "string",
            "description": "Keep one watch per bid profile or client, e.g. 'acme-it' and 'acme-construction'.",
            "default": "default"
          },
          "webhookUrl": {
            "title": "Webhook URL (optional)",
            "type": "string",
            "description": "POST a JSON summary with the top tenders here when the run ends (in monitor mode only when there are new matches). Works with Slack workflows, Zapier, Make and n8n. Free."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}