{
  "openapi": "3.0.1",
  "info": {
    "title": "Public Tenders Scraper — TED EU, UK FTS & US SAM.gov RFP",
    "description": "Aggregate live government tenders & RFPs from EU TED (27 states), UK Find-a-Tender, US SAM.gov in one normalized feed. Filter by keyword, country, CPV/NAICS, contract nature, value, deadline. Official open APIs — no proxy. For bid teams, RFP agencies, gov-contracting and procurement intel.",
    "version": "1.0",
    "x-build-id": "eGTxYlidcItC41HND"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/logiover~global-public-tenders-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-logiover-global-public-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/logiover~global-public-tenders-scraper/runs": {
      "post": {
        "operationId": "runs-sync-logiover-global-public-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/logiover~global-public-tenders-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-logiover-global-public-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": {
          "sources": {
            "title": "Sources to Query",
            "type": "array",
            "description": "Which procurement portals to query. 'ted_eu' covers all 27 EU member states + Norway + Switzerland (~3M notices/yr). 'uk_fts' is the UK Find-a-Tender service (post-Brexit, >£139k public contracts). 'sam_gov' is the US federal opportunities portal (requires a free API key from sam.gov).",
            "default": [
              "ted_eu",
              "uk_fts"
            ],
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Free-text terms matched against tender title and description. Each portal is queried separately for every keyword. Examples: ['cybersecurity', 'cloud migration'], ['software development'], ['road construction']. Leave empty to return all notices in the date range.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "publishedFrom": {
            "title": "Published From (ISO date)",
            "type": "string",
            "description": "Earliest publication date in 'YYYY-MM-DD' format. Defaults to the last 7 days. Each source supports date filtering natively.",
            "default": ""
          },
          "publishedTo": {
            "title": "Published To (ISO date)",
            "type": "string",
            "description": "Latest publication date in 'YYYY-MM-DD' format. Defaults to today.",
            "default": ""
          },
          "tedCountries": {
            "title": "TED — Country Filter (ISO alpha-3)",
            "type": "array",
            "description": "Restrict TED EU results to specific buyer-country codes (ISO alpha-3 uppercase, as used by TED). Examples: DEU (Germany), FRA (France), ITA (Italy), ESP (Spain), NLD (Netherlands), POL (Poland), BEL (Belgium), AUT (Austria), SWE (Sweden), DNK (Denmark), FIN (Finland), IRL (Ireland), PRT (Portugal), GRC (Greece), CZE (Czech Republic), ROU (Romania), HUN (Hungary), NOR (Norway), CHE (Switzerland). Leave empty for all EU + EEA countries.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "tedCpvCodes": {
            "title": "TED — CPV Codes",
            "type": "array",
            "description": "Common Procurement Vocabulary codes to filter TED notices. Examples: '72000000' (IT services), '45000000' (construction), '50000000' (repair/maintenance), '79000000' (business services). Prefix-match is supported by TED — passing '72' returns all IT-related codes.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "tedContractNature": {
            "title": "TED — Contract Nature",
            "type": "array",
            "description": "Filter TED notices by contract nature: 'works' (construction), 'supplies' (goods), 'services'. Leave empty for all three.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "tedNoticeTypes": {
            "title": "TED — Notice Type",
            "type": "array",
            "description": "Filter TED by notice-type code (use the API's enum). Common: 'cn-standard' (open call), 'can-standard' (award notice), 'pin-only' (prior information), 'cn-social' (social/light regime), 'can-modif' (award modification). Leave empty for all types.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "samGovApiKey": {
            "title": "SAM.gov API Key (free)",
            "type": "string",
            "description": "Personal SAM.gov API key — required if 'sam_gov' is selected. Free, request at https://sam.gov/profile/details (Account Details → API Keys). Public tier ≈ 10 req/day; registered tier ≈ 1,000 req/day. Stored as Apify secret."
          },
          "samGovNaicsCodes": {
            "title": "SAM.gov — NAICS Codes",
            "type": "array",
            "description": "Filter SAM.gov by NAICS industry codes (US standard). Examples: '541511' (custom software), '541512' (IT consulting), '541330' (engineering services). Leave empty for all.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "samGovNoticeTypes": {
            "title": "SAM.gov — Notice Types",
            "type": "array",
            "description": "SAM.gov notice types. Common: 'p' (Presolicitation), 'o' (Solicitation), 'k' (Combined Synopsis/Solicitation), 'r' (Sources Sought), 'a' (Award Notice), 's' (Special Notice). Leave empty for all.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "ukKeywords": {
            "title": "UK FTS — Keyword override",
            "type": "string",
            "description": "If set, overrides 'keywords' when querying UK Find-a-Tender (UK API supports a single keyword string).",
            "default": ""
          },
          "maxResultsPerSource": {
            "title": "Max Results Per Source",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on tenders saved per source per run. Combined with the date range to keep run cost predictable. Set 0 for unlimited (auto-paginates until the source is exhausted).",
            "default": 1000
          },
          "language": {
            "title": "Preferred Language (TED multilingual)",
            "enum": [
              "eng",
              "fra",
              "deu",
              "spa",
              "ita",
              "nld",
              "pol",
              "swe",
              "ces",
              "por",
              "ron",
              "ell",
              "fin",
              "dan",
              "hun",
              "bul",
              "tur"
            ],
            "type": "string",
            "description": "TED returns titles, descriptions and buyer names in many EU languages. Pick the preferred language code to populate the normalized 'title' and 'description' fields. Falls back to any available language if the preferred one is missing.",
            "default": "eng"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}