{
  "openapi": "3.0.1",
  "info": {
    "title": "Public Tenders Scraper - Government Procurement Data",
    "description": "Export government tenders to CSV/JSON. A TED EU API alternative scraping SAM.gov, UK Find-a-Tender RFP data into one procurement dataset.",
    "version": "1.0",
    "x-build-id": "bUHa8RiVeCBbi2Yxz"
  },
  "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",
            "uniqueItems": true,
            "type": "array",
            "description": "Which procurement portals to query. 'EU TED' covers all 27 EU member states + Norway + Switzerland (~3M notices/yr). 'UK Find-a-Tender' is the post-Brexit UK service (>£139k public contracts). 'US SAM.gov' is the US federal opportunities portal (requires a free API key entered below). Leave as-is for a broad EU + UK feed.",
            "items": {
              "type": "string",
              "enum": [
                "ted_eu",
                "uk_fts",
                "sam_gov"
              ],
              "enumTitles": [
                "EU TED (27 states + EEA)",
                "UK Find-a-Tender",
                "US SAM.gov (needs free API key)"
              ]
            },
            "default": [
              "ted_eu",
              "uk_fts"
            ]
          },
          "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",
            "uniqueItems": true,
            "type": "array",
            "description": "Restrict TED EU results to specific buyer countries. Leave empty for all EU + EEA countries.",
            "items": {
              "type": "string",
              "enum": [
                "DEU",
                "FRA",
                "ITA",
                "ESP",
                "NLD",
                "POL",
                "BEL",
                "AUT",
                "SWE",
                "DNK",
                "FIN",
                "IRL",
                "PRT",
                "GRC",
                "CZE",
                "ROU",
                "HUN",
                "BGR",
                "HRV",
                "SVK",
                "SVN",
                "LTU",
                "LVA",
                "EST",
                "LUX",
                "CYP",
                "MLT",
                "NOR",
                "CHE"
              ],
              "enumTitles": [
                "Germany",
                "France",
                "Italy",
                "Spain",
                "Netherlands",
                "Poland",
                "Belgium",
                "Austria",
                "Sweden",
                "Denmark",
                "Finland",
                "Ireland",
                "Portugal",
                "Greece",
                "Czech Republic",
                "Romania",
                "Hungary",
                "Bulgaria",
                "Croatia",
                "Slovakia",
                "Slovenia",
                "Lithuania",
                "Latvia",
                "Estonia",
                "Luxembourg",
                "Cyprus",
                "Malta",
                "Norway",
                "Switzerland"
              ]
            },
            "default": []
          },
          "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",
            "uniqueItems": true,
            "type": "array",
            "description": "Filter TED notices by contract nature. Leave empty for all three.",
            "items": {
              "type": "string",
              "enum": [
                "works",
                "supplies",
                "services"
              ],
              "enumTitles": [
                "Works (construction)",
                "Supplies (goods)",
                "Services"
              ]
            },
            "default": []
          },
          "tedNoticeTypes": {
            "title": "TED — Notice Type",
            "uniqueItems": true,
            "type": "array",
            "description": "Filter TED by notice type. Leave empty for all types.",
            "items": {
              "type": "string",
              "enum": [
                "cn-standard",
                "can-standard",
                "pin-only",
                "cn-social",
                "can-social",
                "can-modif",
                "pin-buyer",
                "cn-desg"
              ],
              "enumTitles": [
                "Contract notice (open call)",
                "Contract award notice",
                "Prior information notice",
                "Contract notice — social/light regime",
                "Award notice — social/light regime",
                "Contract award modification",
                "Prior information — buyer profile",
                "Design contest notice"
              ]
            },
            "default": []
          },
          "samGovApiKey": {
            "title": "SAM.gov API Key (free)",
            "type": "string",
            "description": "Personal SAM.gov API key — required if 'US 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",
            "uniqueItems": true,
            "type": "array",
            "description": "SAM.gov notice types to include. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "p",
                "o",
                "k",
                "r",
                "a",
                "s",
                "i",
                "g"
              ],
              "enumTitles": [
                "Presolicitation (p)",
                "Solicitation (o)",
                "Combined Synopsis/Solicitation (k)",
                "Sources Sought (r)",
                "Award Notice (a)",
                "Special Notice (s)",
                "Intent to Bundle (i)",
                "Sale of Surplus (g)"
              ]
            },
            "default": []
          },
          "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}