{
  "openapi": "3.0.1",
  "info": {
    "title": "TED, SAM.gov, UK & Brazil Tenders Scraper – Public Procurement",
    "description": "Public procurement tenders from EU TED, US SAM.gov, UK Find a Tender, UK Contracts Finder and Brazil PNCP in one unified format. Filter by keywords, CPV codes, countries, publication dates, notice type (tender, planning, award) and minimum value. Official APIs, pay per notice.",
    "version": "1.1",
    "x-build-id": "tb9LoPnZYomlq0AVo"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/openharvest~public-tenders-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-openharvest-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/openharvest~public-tenders-scraper/runs": {
      "post": {
        "operationId": "runs-sync-openharvest-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/openharvest~public-tenders-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-openharvest-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": "Optional. Return notices that contain ANY of these words or phrases in the title or description (case- and accent-insensitive). A multi-word entry is matched as a phrase, e.g. <code>cloud hosting</code>. TED searches its full notice text in all languages, so also try local-language terms (e.g. <code>Software</code>, <code>logiciel</code>). For Brazil PNCP use Portuguese terms (e.g. <code>software</code>, <code>limpeza</code>, <code>pavimentação</code>).",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "title": "Sources",
            "type": "array",
            "description": "Which procurement portals to search. SAM.gov needs your free API key (see below) - without it SAM.gov is skipped and a free status row explains why. Brazil PNCP (licitações) needs no key.",
            "items": {
              "type": "string",
              "enum": [
                "ted",
                "find-a-tender",
                "contracts-finder",
                "sam-gov",
                "pncp"
              ],
              "enumTitles": [
                "EU TED (Tenders Electronic Daily)",
                "UK Find a Tender",
                "UK Contracts Finder",
                "US SAM.gov (needs API key)",
                "Brazil PNCP (licitações)"
              ]
            },
            "default": [
              "ted",
              "find-a-tender",
              "contracts-finder",
              "sam-gov",
              "pncp"
            ]
          },
          "noticeTypes": {
            "title": "Notice types",
            "type": "array",
            "description": "<b>tender</b> = open calls for tender / solicitations (default), <b>planning</b> = prior information, market engagement, sources sought, <b>award</b> = contract award notices, <b>other</b> = modifications, cancellations, voluntary transparency notices.",
            "items": {
              "type": "string",
              "enum": [
                "tender",
                "planning",
                "award",
                "other"
              ],
              "enumTitles": [
                "Open tenders / solicitations",
                "Planning / prior information",
                "Contract awards",
                "Other (changes, cancellations...)"
              ]
            },
            "default": [
              "tender"
            ]
          },
          "cpvCodes": {
            "title": "CPV codes",
            "type": "array",
            "description": "Optional. Common Procurement Vocabulary codes - a notice matches if any of its codes falls under one of these (hierarchical). Use full codes like <code>72000000</code> (IT services) or prefixes like <code>45</code> (construction). Not available for SAM.gov (US uses NAICS), so SAM.gov is skipped when CPV codes are set. Same for Brazil PNCP (Brazil uses CATMAT/CATSER).",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Buyer countries",
            "type": "array",
            "description": "Optional. 2-letter ISO codes of the buying authority's country, e.g. <code>DE</code>, <code>FR</code>, <code>PL</code>, <code>GB</code>, <code>US</code>, <code>BR</code>. UK sources are only searched when GB is included (or the list is empty), SAM.gov only with US, PNCP only with BR.",
            "items": {
              "type": "string"
            }
          },
          "brazilStates": {
            "title": "Brazil states (PNCP only)",
            "type": "array",
            "description": "Optional. Only Brazilian notices from these states (2-letter UF codes, e.g. <code>SP</code>, <code>RJ</code>, <code>MG</code>, <code>DF</code>). Filtered on the PNCP server for tenders, which also makes keyword searches much faster. Ignored by the other sources.",
            "items": {
              "type": "string"
            }
          },
          "publishedFrom": {
            "title": "Published from",
            "type": "string",
            "description": "Only notices published on or after this date. Absolute (<code>2026-10-01</code>) or relative (<code>7 days</code>, <code>2 weeks</code>, <code>1 month</code>). Default: 7 days ago."
          },
          "publishedTo": {
            "title": "Published to",
            "type": "string",
            "description": "Only notices published on or before this date (inclusive). Default: now."
          },
          "minValue": {
            "title": "Minimum estimated value",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Only notices with an estimated (or awarded) value of at least this amount, in the notice's own currency (EUR, GBP, USD, SEK...). Notices without a published value are excluded when this is set."
          },
          "maxItems": {
            "title": "Max notices",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of notices in total across all sources (sources are interleaved fairly). You pay per notice, so this also caps your cost. 0 = no limit.",
            "default": 100
          },
          "samApiKey": {
            "title": "SAM.gov API key",
            "type": "string",
            "description": "Optional, only for US SAM.gov. Free personal key: sign in at sam.gov -> Account Details -> Public API Key. Stored encrypted. Personal keys allow about 10 requests per day; each request returns up to 1,000 notices."
          },
          "descriptionMaxLength": {
            "title": "Max description length",
            "minimum": 0,
            "type": "integer",
            "description": "Descriptions are trimmed to this many characters (0 = full text).",
            "default": 1000
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}