{
  "openapi": "3.0.1",
  "info": {
    "title": "Public Tenders Scraper - EU TED & UK Find a Tender Notices",
    "description": "Search government tenders and contract awards on EU TED (all member states), UK Find a Tender and UK Contracts Finder in one normalised schema: buyer, CPV, value, deadline, winners. Keyword, CPV, country and date filters, daily 'only new' alerts.",
    "version": "0.1",
    "x-build-id": "qfo5KfmyhndFQPlH5"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rjmacarthy~public-tenders-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rjmacarthy-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/rjmacarthy~public-tenders-scraper/runs": {
      "post": {
        "operationId": "runs-sync-rjmacarthy-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/rjmacarthy~public-tenders-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-rjmacarthy-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": {
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Words or phrases to look for in the notice title and description, e.g. \"software\", \"cleaning services\", \"road maintenance\". Each keyword is a separate search (phrase match). Leave empty for every notice in the date window.",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "title": "Sources",
            "type": "array",
            "description": "Which procurement portals to search. EU TED = all EU/EEA member states (above-threshold). UK Find a Tender = UK above-threshold. UK Contracts Finder = UK below-threshold (England). SAM.gov (beta) = US federal opportunities via the official api.sam.gov API; needs your free API key below and is not yet verified against live responses.",
            "items": {
              "type": "string",
              "enum": [
                "ted",
                "uk-fts",
                "uk-contracts-finder",
                "sam-gov"
              ],
              "enumTitles": [
                "EU TED (all EU member states)",
                "UK Find a Tender",
                "UK Contracts Finder",
                "SAM.gov (beta, US federal, needs your API key)"
              ]
            },
            "default": [
              "ted",
              "uk-fts",
              "uk-contracts-finder"
            ]
          },
          "noticeTypes": {
            "title": "Notice types",
            "type": "array",
            "description": "Only these notice types. Tender = open calls for competition (with a deadline). Award = contract award results (with winners and values). Planning = prior information / pipeline / sources sought. Leave empty for all, including corrigenda and modifications.",
            "items": {
              "type": "string",
              "enum": [
                "tender",
                "award",
                "planning"
              ],
              "enumTitles": [
                "Tender (call for competition)",
                "Award (contract award / result)",
                "Planning (prior information, pipeline)"
              ]
            }
          },
          "countries": {
            "title": "Buyer countries (EU TED only)",
            "type": "array",
            "description": "ISO country codes of the buyer, 2 or 3 letters, e.g. \"DE\", \"FR\", \"IE\" or \"DEU\". Applies to EU TED only (the UK sources are UK-only, SAM.gov is US-only). Leave empty for all countries.",
            "items": {
              "type": "string"
            }
          },
          "cpvCodes": {
            "title": "CPV codes (EU and UK)",
            "type": "array",
            "description": "Common Procurement Vocabulary code prefixes, e.g. \"72\" (IT services), \"48\" (software packages), \"90910000\" (cleaning services), \"45\" (construction work). A notice matches if any of its CPV codes starts with a prefix. Ignored for SAM.gov (which uses NAICS).",
            "items": {
              "type": "string"
            }
          },
          "publishedWithinDays": {
            "title": "Published within (days)",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Only notices published in the last N days. 0 = no date limit. Ignored when \"Published from\" is set.",
            "default": 30
          },
          "publishedFrom": {
            "title": "Published from (date)",
            "type": "string",
            "description": "Only notices published on or after this date (YYYY-MM-DD). Overrides \"Published within (days)\"."
          },
          "minValue": {
            "title": "Minimum value",
            "minimum": 0,
            "type": "integer",
            "description": "Drop notices whose estimated value (or award value) is below this amount, in the notice's own currency (EUR, GBP, USD...). Notices that publish no value at all are kept."
          },
          "maxItems": {
            "title": "Max notices",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of notices in total. Split evenly across the selected sources, so every source gets a fair share. 0 = no limit.",
            "default": 100
          },
          "onlyNew": {
            "title": "Only new notices (for daily alerts)",
            "type": "boolean",
            "description": "Remember which notices were already output (per monitor name, kept 90 days) and output only new ones on later runs. Ideal for a scheduled daily tender alert.",
            "default": false
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Name of the \"only new\" memory. Use a different name for each saved search/schedule so they don't share memory.",
            "default": "default"
          },
          "ftsMaxPages": {
            "title": "UK Find a Tender: max pages to scan",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Find a Tender's API has no keyword search, so the Actor reads its notice feed (100 notices per page, newest first) and filters locally. Each page covers roughly 4-6 hours of notices on a weekday. Raise this to look further back.",
            "default": 20
          },
          "samGovApiKey": {
            "title": "SAM.gov API key (beta source)",
            "type": "string",
            "description": "Optional. Your free personal api.sam.gov public API key (sam.gov > sign in > Account Details > Public API Key). Only needed for the beta SAM.gov source, which uses the official Get Opportunities API (SAM.gov's terms forbid scraping its website) and is not yet verified against live responses. Personal keys have a small daily quota, so the Actor makes one request per keyword."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Not needed: all sources are official public APIs. Datacenter Apify Proxy is supported; residential proxies are not (they fall back to datacenter proxy automatically).",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}