{
  "openapi": "3.0.1",
  "info": {
    "title": "Czech Company Scraper - IČO, DIČ & Website Contacts",
    "description": "Turn Czech company domains into B2B leads from each site's statutory disclosure (občanský zákoník § 435): obchodní firma, IČO with its mod-11 check digit, DIČ, sídlo, the rejstřík entry (soud, oddíl, vložka), datová schránka, email and phone — optionally checked against ARES. $0.007 per disclosure.",
    "version": "0.1",
    "x-build-id": "bbUxcRbX3PGcEL2qQ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~cz-ico-website-contact-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-cz-ico-website-contact-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~cz-ico-website-contact-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-cz-ico-website-contact-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~cz-ico-website-contact-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-cz-ico-website-contact-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": {
          "domains": {
            "title": "Czech domains",
            "type": "array",
            "description": "The company websites to read. A bare domain (alza.cz), a homepage URL (https://www.alza.cz/) or a direct link to the page carrying the disclosure (https://www.alza.cz/obchodni-podminky) all work. Leave every input empty and the Actor runs a small built-in Czech demo batch so the run still returns rows.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs (from another Actor, Make, Clay or a Google Sheet)",
            "type": "array",
            "description": "The same list in Apify's standard URL-list format, so an upstream Actor or an integration can hand it over natively. Merged with Domains.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "sourceDatasetId": {
            "title": "Enrich a dataset from a previous run",
            "type": "string",
            "description": "Dataset ID of an earlier run (yours or another Actor's). Every row's website field becomes an input domain."
          },
          "domainFieldName": {
            "title": "Which field holds the website",
            "type": "string",
            "description": "Field name to read the domain from in the source dataset or file, e.g. \"website\" or \"company.url\". Left empty, the Actor tries domain, website, websiteUrl, url, site, homepage."
          },
          "domainsFileUrl": {
            "title": "Domain list at a URL",
            "type": "string",
            "description": "A public CSV, TSV, TXT, JSON or JSONL file of domains, one per line or one per row."
          },
          "skipDomains": {
            "title": "Domains to skip",
            "type": "array",
            "description": "Domains you already have. They are dropped before any request is made, so they cost nothing and are never charged.",
            "items": {
              "type": "string"
            }
          },
          "previousDatasetId": {
            "title": "Do not re-deliver rows from this dataset",
            "type": "string",
            "description": "Dataset ID of an earlier run of this Actor. Every IČO and domain it delivered is suppressed, so a monthly re-run never re-buys a row you already paid for."
          },
          "maxItems": {
            "title": "Max results (billing cap)",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop after this many BILLED rows. A row is billed only when a statutory disclosure was found and delivered, so this is a hard ceiling on what the run can cost. 0 means no cap.",
            "default": 1000
          },
          "maxDomains": {
            "title": "Max domains to attempt",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop queueing after this many input domains, whether or not they yield a disclosure. 0 means no limit.",
            "default": 0
          },
          "maxDiscoveryRequestsPerDomain": {
            "title": "Max requests per domain",
            "minimum": 0,
            "maximum": 40,
            "type": "integer",
            "description": "How many pages the Actor may fetch while hunting for the disclosure on one site, after the homepage.",
            "default": 8
          },
          "maxPagesParsed": {
            "title": "Max pages parsed per domain",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many fetched pages are actually parsed and merged. Czech sites routinely split the disclosure between the footer, /kontakt and /obchodni-podminky, so more than one is normal.",
            "default": 3
          },
          "perDomainTimeoutSecs": {
            "title": "Per-domain timeout (seconds)",
            "minimum": 5,
            "maximum": 600,
            "type": "integer",
            "description": "Give up on one domain after this long and move on. The domain is reported as unreachable and never charged.",
            "default": 60
          },
          "requestConcurrency": {
            "title": "Parallel domains",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "How many domains to work on at once. Each one needs roughly 80 MB (a fetched page plus its DOM), so the Actor lowers this automatically if the memory you allocated cannot support it.",
            "default": 10
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "Timeout for a single HTTP request.",
            "default": 25
          },
          "maxRequestRetries": {
            "title": "Retries per request",
            "minimum": 0,
            "maximum": 6,
            "type": "integer",
            "description": "How many times to retry a failed request, each time on a fresh proxy IP.",
            "default": 2
          },
          "discoveryChannels": {
            "title": "Where to look for the disclosure",
            "type": "array",
            "description": "The cascade, in order. homepage reads the site-wide footer (where most Czech disclosures live), anchor follows the footer's own links to obchodní podmínky / kontakt / o nás, sitemap and wpJson index the site, pathGuess tries the conventional Czech paths.",
            "items": {
              "type": "string",
              "enum": [
                "homepage",
                "anchor",
                "sitemap",
                "wpJson",
                "pathGuess"
              ],
              "enumTitles": [
                "Homepage footer",
                "Footer links",
                "XML sitemap",
                "WordPress page index",
                "Guessed Czech paths"
              ]
            },
            "default": [
              "homepage",
              "anchor",
              "sitemap",
              "wpJson",
              "pathGuess"
            ]
          },
          "followWwwAndRootVariants": {
            "title": "Try www. and the bare host",
            "type": "boolean",
            "description": "If the host does not answer, try the other form once before giving up.",
            "default": true
          },
          "deepJsDiscovery": {
            "title": "Read JavaScript bundles for the footer",
            "type": "boolean",
            "description": "For sites whose footer only exists after a client-side render. No browser is launched: the Actor reads the inline JSON payloads and JS bundles a render would have read from. Slower, off by default.",
            "default": false
          },
          "respectRobotsTxt": {
            "title": "Respect robots.txt",
            "type": "boolean",
            "description": "Off by default. A statutory disclosure is published under § 435 precisely so that the public can read it; this switch exists because some buyers' own compliance policy asks for it.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify DATACENTER proxy by default, which is the cheapest rung that works on this corpus. Supply your own proxies here if you prefer.",
            "default": {
              "useApifyProxy": true
            }
          },
          "proxyCountry": {
            "title": "Proxy country",
            "enum": [
              "none",
              "CZ",
              "SK",
              "DE",
              "AT",
              "PL",
              "GB",
              "US"
            ],
            "type": "string",
            "description": "Pinning a country means RESIDENTIAL exit nodes, because Apify datacenter proxies cannot be pinned to a country. Leave at None for the cheaper, measured-faster datacenter path.",
            "default": "none"
          },
          "escalateToResidentialOnBlock": {
            "title": "Escalate to residential on a block",
            "type": "boolean",
            "description": "When a host refuses the datacenter IP with a 403 or a challenge page, retry once through a residential IP.",
            "default": true
          },
          "escalateToUnblockerOnBlock": {
            "title": "Escalate to Unblocker on a block",
            "type": "boolean",
            "description": "A second escalation for hosts that refuse both datacenter and residential. Costs more per request, so it is off by default.",
            "default": false
          },
          "customUserAgent": {
            "title": "User-Agent",
            "type": "string",
            "description": "Override the browser User-Agent sent with every request."
          },
          "extraHttpHeaders": {
            "title": "Extra HTTP headers",
            "type": "object",
            "description": "Additional headers sent with every request, as a JSON object."
          },
          "verifyAgainstAres": {
            "title": "Verify the IČO against ARES",
            "type": "boolean",
            "description": "After the disclosure is parsed, look the published IČO up in ARES, the Ministry of Finance's official register, and return the register's own name, seat, legal form, DIČ, VAT-payer status and incorporation date alongside the site's. The register NEVER overwrites what the website published: where the two disagree the row says so in aresDisagreement. Adds one request per row.",
            "default": false
          },
          "requireAresMatch": {
            "title": "Only keep rows ARES confirms",
            "type": "boolean",
            "description": "Drop any row whose IČO is not in ARES, or whose registered name the register disagrees with. Dropped rows are never charged. Turns the ARES lookup on automatically.",
            "default": false
          },
          "validateChecksum": {
            "title": "Check the IČO mod-11 check digit",
            "type": "boolean",
            "description": "Run the published IČO through its weighted mod-11 check digit and report the result in icoChecksumValid. A number that fails is still delivered, flagged false, because that is a fact about the website.",
            "default": true
          },
          "requireIco": {
            "title": "Only keep rows with an IČO",
            "type": "boolean",
            "description": "Drop rows that publish a disclosure but no IČO (a foreign trader, or an entity that has not been assigned one). Dropped rows are never charged.",
            "default": false
          },
          "requireValidIco": {
            "title": "Only keep rows whose IČO passes the check digit",
            "type": "boolean",
            "description": "Stricter than the above: the IČO must also pass its mod-11 check digit. Dropped rows are never charged.",
            "default": false
          },
          "requireContact": {
            "title": "Only keep rows with an email or a phone",
            "type": "boolean",
            "description": "Drop rows with no way to reach the business. Dropped rows are never charged.",
            "default": false
          },
          "minFieldsRequired": {
            "title": "Minimum filled fields",
            "minimum": 0,
            "maximum": 23,
            "type": "integer",
            "description": "Drop any row with fewer than this many populated value fields. 0 keeps everything.",
            "default": 0
          },
          "tldFilterMode": {
            "title": "Domain-ending filter",
            "enum": [
              "none",
              "include",
              "exclude"
            ],
            "type": "string",
            "description": "Restrict the input by domain ending. Off by default: a large share of real Czech businesses use .com or .eu, so filtering to .cz would silently discard them.",
            "default": "none"
          },
          "tldFilter": {
            "title": "Domain endings",
            "type": "array",
            "description": "The endings the filter applies to, e.g. cz, eu, com.",
            "items": {
              "type": "string"
            }
          },
          "emailPolicy": {
            "title": "Which emails count",
            "enum": [
              "all",
              "role-only",
              "exclude-role"
            ],
            "type": "string",
            "description": "Role mailboxes are info@, obchod@, fakturace@ and the like. Agencies split hard on whether they count as a lead, so it is your call.",
            "default": "all"
          },
          "dedupeBy": {
            "title": "Deduplicate by",
            "enum": [
              "ico-then-domain",
              "ico",
              "domain",
              "none"
            ],
            "type": "string",
            "description": "Collapse duplicates BEFORE delivery, so a duplicate can never be charged twice. Two domains of the same company share one IČO.",
            "default": "ico-then-domain"
          },
          "extractRegisterEntry": {
            "title": "Extract the register entry (soud, oddíl, vložka)",
            "type": "boolean",
            "description": "The obchodní rejstřík entry § 435 requires by name: which register, which court, the oddíl and the vložka, assembled into one file reference.",
            "default": true
          },
          "extractDataBox": {
            "title": "Extract the datová schránka ID",
            "type": "boolean",
            "description": "The seven-character ID of the company's statutory electronic mailbox, where it publishes one.",
            "default": true
          },
          "extractBankAccount": {
            "title": "Extract bank account and IBAN",
            "type": "boolean",
            "description": "The account number and IBAN a Czech site publishes for invoicing. The IBAN is checked against its own ISO 13616 mod-97; the domestic account number is returned as published.",
            "default": true
          },
          "extractOfficer": {
            "title": "Extract a named person",
            "type": "boolean",
            "description": "A jednatel, ředitel or kontaktní osoba named next to their role. Personal data: handle it under GDPR.",
            "default": true
          },
          "extractSocials": {
            "title": "Extract social profile links",
            "type": "boolean",
            "description": "LinkedIn, Facebook, Instagram and the rest, from the page's own links.",
            "default": true
          },
          "extractPolicyUrls": {
            "title": "Extract terms and privacy URLs",
            "type": "boolean",
            "description": "Links to the site's obchodní podmínky and ochrana osobních údajů pages.",
            "default": true
          },
          "includeMissRows": {
            "title": "Include unbilled coverage rows",
            "type": "boolean",
            "description": "Also deliver a row for every domain that produced nothing, saying which kind of nothing it was: unreachable, blocked, publishes no disclosure, filtered out by your own settings, duplicate or suppressed. None of these is ever charged.",
            "default": false
          },
          "includeFieldSources": {
            "title": "Include which page each field came from",
            "type": "boolean",
            "description": "Adds fieldSources, mapping every populated field to the URL it was read from.",
            "default": false
          },
          "flattenOutput": {
            "title": "Flat output",
            "type": "boolean",
            "description": "One flat object per row, which is what a CSV export and most CRMs want. Turn off for a nested company / registry / contact / banking / people / ares structure.",
            "default": true
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}