{
  "openapi": "3.0.1",
  "info": {
    "title": "WKO Firmen A-Z Scraper - Austrian Company Leads",
    "description": "From $2.50 per 1,000 companies, no start fee. Austria's WKO chamber directory firmen.wko.at: name, address, email, phone, mobile, website, plus GISA trade licences and Firmenbuch numbers per company. Measured fill: email on 32.4% of rows, address on 100%. Paste any trade x region list URL.",
    "version": "0.1",
    "x-build-id": "POmJTZ6rYCR69zdMF"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~wko-firmen-at-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-wko-firmen-at-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/scrapersdelight~wko-firmen-at-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-wko-firmen-at-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/scrapersdelight~wko-firmen-at-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-wko-firmen-at-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": {
          "searchUrls": {
            "title": "Search result URLs",
            "type": "array",
            "description": "One or more firmen.wko.at result-list URLs, e.g. https://firmen.wko.at/tischler/wien/?firmenname= — trade and region come straight out of the URL. Lists are walked one at a time each, several lists in parallel. A company that appears in two of your lists is delivered and charged once.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "branche": {
            "title": "Trade (optional, instead of a URL)",
            "type": "string",
            "description": "The trade slug as it appears in a firmen.wko.at URL, e.g. \"tischler\", \"elektrotechnik\", \"werbeagentur\". Combined with every entry in \"Regions\" below. Umlauts may be typed plainly (\"gerüstverleiher\") — they are percent-encoded for you. If the combination does not exist WKO answers 404 and the run says so instead of reporting an empty trade."
          },
          "regions": {
            "title": "Regions (used with the trade above)",
            "type": "array",
            "description": "Region slugs as they appear in a firmen.wko.at URL: a Bundesland (\"wien\", \"steiermark\", \"burgenland\"), a district (\"linz-stadt_bezirk\") or a city district (\"wien-23-bezirk-liesing\"). Smaller regions are dramatically cheaper per company — see \"How much\" below.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "contactFilter": {
            "title": "Only companies with…",
            "enum": [
              "all",
              "contactable",
              "email"
            ],
            "type": "string",
            "description": "Rows that fail this filter are never delivered and never charged. They are still counted in RUN_SUMMARY so you can see how much of the list they were.",
            "default": "all"
          },
          "excludeDormant": {
            "title": "Skip companies flagged \"aktuell ruhend gemeldet\"",
            "type": "boolean",
            "description": "WKO prints the badge \"aktuell ruhend gemeldet\" (trade licence currently dormant) on some rows. Counted: 3 of 185 rows (1.6%). Rare, but a dormant firm is the one company in a lead list nobody should be pitching.",
            "default": false
          },
          "enrichFromDetailPage": {
            "title": "Also open each company page",
            "type": "boolean",
            "description": "Fetches /firma/?firmaid=… for every company you are going to be charged for (never for one the caps drop). Counted on 80 company pages on 2026-09-16: GISA trade-licence number, Berufszweig and GLN on 100%, Firmenbuch number and court 51.2%, founding year 28.7%, VAT (UID) number 21.3%, Rechtsform 12.5%. 1.36 licences per company on average, up to 7. Costs about 42 KB and one extra request per company. The price per company does not change.",
            "default": false
          },
          "maxCompanies": {
            "title": "Max companies (whole run)",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on rows delivered, and therefore on rows charged. 0 means no cap. Rows come back in WKO's own list order, so a capped run returns the beginning of each list rather than a sample of it.",
            "default": 500
          },
          "maxCompaniesPerLane": {
            "title": "Max companies per list",
            "minimum": 1,
            "type": "integer",
            "description": "Stops each individual list at this depth, so one enormous trade cannot eat the whole run. Lists come in 10s, so this is rounded up to the next 10 in practice.",
            "default": 200
          },
          "laneConcurrency": {
            "title": "Lists in parallel",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many result lists to walk at the same time. Each gets its own proxy session and its own cookies. Paging inside a list is always sequential: WKO's paging state lives in the ASP.NET ViewState and cannot be jumped.",
            "default": 2
          },
          "requestDelayMs": {
            "title": "Delay between requests in one list",
            "minimum": 250,
            "maximum": 60000,
            "type": "integer",
            "description": "Pause between \"Mehr laden\" clicks on the same list. 1500 ms is the measured safe rate. Lower it and the WAF starts refusing; the Actor then backs off 4 s, 12 s and 40 s on the same session, which is slower than just being polite.",
            "default": 1500
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify RESIDENTIAL pinned to Austria. Measured on 2026-09-16 from Apify's own egress: RESIDENTIAL+AT, plain RESIDENTIAL and datacenter (auto) each returned HTTP 200 with a complete result panel, and a full paging walk plus the company-page challenge both completed over RESIDENTIAL+AT — WKO does not pre-block Apify IPs. Datacenter is cheaper but its IPs are shared with every other Apify user, and this site blocks by IP.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "AT"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}