{
  "openapi": "3.0.1",
  "info": {
    "title": "simap.ch Scraper — Swiss Public Procurement Tenders",
    "description": "Search and extract Swiss public procurement tenders from simap.ch, Switzerland's national tender platform. Filter by canton, CPV code, publication type or date range. Returns buyer, deadline, CPV codes, lots and (for awards) the winning vendor and price. No cookies, no login required.",
    "version": "0.0",
    "x-build-id": "hYnQw6X9eJYchHU4K"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/studio-amba~simap-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-studio-amba-simap-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/studio-amba~simap-scraper/runs": {
      "post": {
        "operationId": "runs-sync-studio-amba-simap-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/studio-amba~simap-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-studio-amba-simap-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": {
          "searchQuery": {
            "title": "Keywords",
            "type": "string",
            "description": "Search tenders by keyword (matched against title, description and buyer name by the simap.ch API). Use German, French or Italian for best results. Leave empty to browse by canton, publication type or date range instead. Examples: 'construction', 'informatique', 'nettoyage', 'Bau'."
          },
          "pubType": {
            "title": "Publication Type",
            "enum": [
              "tender",
              "award",
              "abandonment",
              "direct_award",
              "competition",
              "all"
            ],
            "type": "string",
            "description": "Filter by the type of the latest publication on each project. 'Contract awards' is filtered client-side (the simap.ch API does not accept 'award' as a server-side filter value), so it scans more pages internally — narrow with a canton, CPV code or date range for a fast scrape.",
            "default": "tender"
          },
          "canton": {
            "title": "Canton",
            "enum": [
              "",
              "AG",
              "AI",
              "AR",
              "BE",
              "BL",
              "BS",
              "FR",
              "GE",
              "GL",
              "GR",
              "JU",
              "LU",
              "NE",
              "NW",
              "OW",
              "SG",
              "SH",
              "SO",
              "SZ",
              "TG",
              "TI",
              "UR",
              "VD",
              "VS",
              "ZG",
              "ZH"
            ],
            "type": "string",
            "description": "Only return tenders where the place of performance (order address) is in this Swiss canton.",
            "default": ""
          },
          "cpvCode": {
            "title": "CPV Code",
            "type": "string",
            "description": "Filter by a CPV (Common Procurement Vocabulary) classification code, e.g. '45000000' for construction work or '72000000' for IT services. Leave empty for all categories."
          },
          "publishedAfter": {
            "title": "Published After",
            "type": "string",
            "description": "Only tenders with a publication on or after this date. Format: YYYY-MM-DD."
          },
          "publishedBefore": {
            "title": "Published Before",
            "type": "string",
            "description": "Only tenders with a publication on or before this date. Format: YYYY-MM-DD."
          },
          "language": {
            "title": "Language",
            "enum": [
              "de",
              "fr",
              "it",
              "en"
            ],
            "type": "string",
            "description": "Language used for the simap.ch search and preferred for the returned title/CPV label. simap.ch publications are often only available in the buyer's own language (de/fr/it) regardless of this setting.",
            "default": "en"
          },
          "fetchDetails": {
            "title": "Fetch full details (CPV codes, deadline, lots)",
            "type": "boolean",
            "description": "When enabled, each tender gets one extra API call to fetch its deadline, CPV codes, lots and (for awards) the winning vendor. Disable for a faster list-only scrape.",
            "default": true
          },
          "maxResults": {
            "title": "Max Results",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum number of tenders to return.",
            "default": 100
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Apify proxy configuration. simap.ch's publication API is a clean public JSON endpoint with no anti-bot protection, so the default (automatic) proxy is enough."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}