{
  "openapi": "3.0.1",
  "info": {
    "title": "Austria Insolvency Scraper — Ediktsdatei Konkurs + Verwalter",
    "description": "Scrape Austria's official Insolvenzdatei (edikte.justiz.gv.at): newly opened company insolvencies with Firmenbuchnummer, court, case number, address, the Masseverwalter's name, e-mail and phone, the creditor claims deadline and the first hearing. Filter by date, Bundesland, court and type.",
    "version": "0.1",
    "x-build-id": "DD2XFLIGkGv3l6mAd"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~edikte-insolvency-at-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-edikte-insolvency-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~edikte-insolvency-at-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-edikte-insolvency-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~edikte-insolvency-at-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-edikte-insolvency-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": {
          "lookbackDays": {
            "title": "Last N days (rolling window)",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Scrape cases that FIRST appeared in the register in the last N days, ending today. This is the right setting for a scheduled monitor. Ignored when you set both fixed dates below. The register keeps roughly 76,700 live edicts going back to 2015, so a large value is a full backfill — see \"Slice size\" for how it is split.",
            "default": 7
          },
          "publishedFrom": {
            "title": "Published from (dd.mm.yyyy)",
            "type": "string",
            "description": "Start of a fixed date range, e.g. 01.08.2026 (YYYY-MM-DD also accepted). Must be set together with \"Published to\". This is the register own [DATBMA] field, filtered inside the search query — and it is the date the CASE FIRST APPEARED in the Insolvenzdatei, not the date of its most recent edict. Proven: a July search returned 2,107 documents and an August search 1,263 with ZERO overlap, and July cases that later gained an August edict stayed out of the August result. So a row can legitimately carry a last_edict_date after your window.",
            "default": ""
          },
          "publishedTo": {
            "title": "Published to (dd.mm.yyyy)",
            "type": "string",
            "description": "End of the fixed publication-date range, e.g. 07.09.2026. Must be set together with \"Published from\".",
            "default": ""
          },
          "sliceDays": {
            "title": "Slice size in days",
            "minimum": 1,
            "maximum": 366,
            "type": "integer",
            "description": "The date range is crawled in slices of this many days. Leave at 1. Two measured reasons: (a) past 4,998 hits the register returns ZERO rows with \"Bitte verfeinern Sie Ihre Suche\" instead of a truncated list — a single 3-month request comes back empty — and the busiest single day in the last 120 had only 127 edicts, so a 1-day slice sits 39x under the ceiling; (b) a 1-day slice tells the crawler each case registered date before it opens anything, so a maxItems cap keeps the newest cases rather than an arbitrary middle. Larger slices cost fewer searches on a long backfill and are safe: a slice that trips the ceiling is detected and halved automatically, recursively, down to a single day. Verified live — a single 243-day slice (01.01-31.08.2026, all proceeding types) tripped the ceiling, split into 01.01-02.05 and 03.05-31.08, and returned 2,602 + 2,593 = 5,195 rows from 3 searches where an undetected ceiling would have returned zero. Day-searches are cheap anyway: 120 of them took 22.9 s.",
            "default": 1
          },
          "proceedingTypes": {
            "title": "Proceeding types (server-side)",
            "uniqueItems": true,
            "type": "array",
            "description": "The register own [Verfahrenskurztext] filter, executed inside the search query — unselected types are never downloaded. Default is the three real corporate insolvency proceedings. KEV is only an APPLICATION for a proceeding: 0 of 366 KEV documents in the 745-document test corpus carried an opening, so it is pure waste while \"Only newly opened proceedings\" is on. Schuldenregulierungsverfahren (consumer debt settlement) is deliberately not offered — see the README.",
            "items": {
              "type": "string",
              "enum": [
                "KV",
                "SVOE",
                "SVME",
                "KEV",
                "AV",
                "GAV",
                "AIV"
              ],
              "enumTitles": [
                "KV — Konkursverfahren",
                "SVOE — Sanierungsverfahren ohne Eigenverwaltung",
                "SVME — Sanierungsverfahren mit Eigenverwaltung",
                "KEV — Konkurseröffnungsverfahren",
                "AV — Ausgleichsverfahren",
                "GAV — Geschäftsaufsichtsverfahren",
                "AIV — Ausländisches Insolvenzverfahren"
              ]
            },
            "default": [
              "KV",
              "SVOE",
              "SVME"
            ]
          },
          "federalState": {
            "title": "Bundesland (server-side)",
            "enum": [
              "",
              "0",
              "1",
              "2",
              "3",
              "4",
              "5",
              "6",
              "7",
              "8"
            ],
            "type": "string",
            "description": "Restrict to one Austrian federal state using the register own [BL] field, inside the query — a Vienna-only run never downloads the rest of Austria. Leave empty for all of Austria.",
            "default": ""
          },
          "courtDistricts": {
            "title": "Court districts / Gerichtshofsprengel (server-side)",
            "uniqueItems": true,
            "type": "array",
            "description": "Restrict to one or more Landesgericht districts using [GH]. A district covers the Landesgericht AND every Bezirksgericht under it (measured: [GH]=638 returned 31 hits for a week where the LGZ Graz alone returned 17). Leave empty for all courts. Combining this with a Bundesland that does not contain the district is rejected at input time, because the register would answer with zero rows and that reads like an empty market.",
            "items": {
              "type": "string",
              "enum": [
                "119",
                "129",
                "199",
                "239",
                "309",
                "458",
                "469",
                "499",
                "519",
                "569",
                "609",
                "638",
                "729",
                "818",
                "929",
                "007",
                "003"
              ],
              "enumTitles": [
                "Korneuburg, LG (119)",
                "Krems an der Donau, LG (129)",
                "St. Pölten, LG (199)",
                "Wiener Neustadt, LG (239)",
                "Eisenstadt, LG (309)",
                "Linz, LG (458)",
                "Ried im Innkreis, LG (469)",
                "Steyr, LG (499)",
                "Wels, LG (519)",
                "Salzburg, LG (569)",
                "Leoben, LG (609)",
                "Graz, LGZ (638)",
                "Klagenfurt, LG (729)",
                "Innsbruck, LG (818)",
                "Feldkirch, LG (929)",
                "Wien, HG (007)",
                "Wien, LGZ (003)"
              ]
            },
            "default": []
          },
          "courtCodes": {
            "title": "Individual courts / Dienststellen (server-side)",
            "type": "array",
            "description": "Restrict to specific courts by their 3-digit register code using [Ger] — narrower than a court district. Use this to get the commercial court alone: \"007\" is HG Wien, which handles Vienna corporate insolvencies, while the Vienna district also contains the Bezirksgerichte. Other common codes: 638 LGZ Graz, 458 LG Linz, 569 LG Salzburg, 818 LG Innsbruck, 929 LG Feldkirch, 729 LG Klagenfurt, 199 LG St. Poelten, 239 LG Wiener Neustadt, 119 LG Korneuburg, 519 LG Wels. Unknown codes are rejected with the valid list.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "debtorNameQuery": {
            "title": "Debtor name search (server-side)",
            "type": "string",
            "description": "Full-text search on the debtor name, executed inside the register query. Plain text is a word match ([Schuldner] CONTAINS): \"Bau\" returned 5 hits on a test week. Add * for a substring match: \"*Bau*\" returned 14 on the same week. Leave empty for everything.",
            "default": ""
          },
          "companiesOnly": {
            "title": "Companies only (require a Firmenbuchnummer)",
            "type": "boolean",
            "description": "Keep only debtors that carry a Schuldner-Firmenbuchnummer, i.e. entities registered in Austria company register. This makes company_register_number 100% filled on every delivered row and gives you a hard join key to the Firmenbuch. Turn it OFF to also receive corporate-type proceedings opened against natural persons (sole traders and entrepreneurs, not consumer debt settlement — this actor never requests that). Measured: 388 of 745 corporate-type edicts (52.1%) carry a Firmenbuchnummer.",
            "default": true
          },
          "newOpeningsOnly": {
            "title": "Only newly opened proceedings",
            "type": "boolean",
            "description": "Keep only cases whose OPENING edict was published inside your date window — a true new-openings trigger feed. One case is one live document the court keeps editing, so \"the document mentions an Eroeffnung\" is not the same question. Turn it OFF to also receive the cases whose first edict was NOT an opening: proceedings refused for lack of funds (Kostendeckung), applications, and other first notices. Measured on the default 7-day scope: 41 of 65 candidate edicts survived both gates, 18 were dropped as non-companies and 6 as non-openings.",
            "default": true
          },
          "requireAdministratorEmail": {
            "title": "Only rows with an administrator e-mail",
            "type": "boolean",
            "description": "Drop any row where the Masseverwalter / Sanierungsverwalter has no published e-mail address. Rarely needed on the default scope — the e-mail was present on 225 of 226 default rows (99.6%) — but useful when you are feeding an outreach tool that requires one.",
            "default": false
          },
          "excludeNoCostCoverage": {
            "title": "Exclude \"not opened for lack of funds\"",
            "type": "boolean",
            "description": "Drop edicts carrying a Kostendeckung section — the proceeding was refused or closed because the estate cannot cover the costs. There is no estate to work on and usually no administrator. Mostly redundant while \"Only newly opened proceedings\" is on (those edicts carry no opening), so this is for wider runs. Measured: 378 of 745 documents carry one.",
            "default": false
          },
          "excludeClosedProceedings": {
            "title": "Exclude closed / discontinued proceedings",
            "type": "boolean",
            "description": "Drop cases that already carry an Aufhebung, Beendigung or Einstellung section — the proceeding is over. Only relevant with \"Only newly opened proceedings\" off.",
            "default": false
          },
          "postalCodePrefixes": {
            "title": "Postal-code prefixes",
            "type": "array",
            "description": "Keep only debtors whose postal code starts with one of these, e.g. [\"10\",\"11\"] for the 10th and 11th districts of Vienna, or [\"8\"] for Styria. Applied to the debtor own address on the edict.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "companyNameContains": {
            "title": "Debtor name contains (client-side)",
            "type": "string",
            "description": "Plain case-insensitive substring match on the debtor name, applied after the documents are read. Use \"Debtor name search\" above instead when you can — that one runs inside the register and does not pay for the pages it excludes.",
            "default": ""
          },
          "claimsDeadlineFrom": {
            "title": "Claims deadline from (YYYY-MM-DD)",
            "type": "string",
            "description": "Keep only cases whose creditor claims deadline (Anmeldungsfrist) falls on or after this date — the \"which deadlines are still open\" filter. Rows with no deadline are dropped by it. Only opening edicts carry one.",
            "default": ""
          },
          "claimsDeadlineTo": {
            "title": "Claims deadline to (YYYY-MM-DD)",
            "type": "string",
            "description": "Keep only cases whose creditor claims deadline falls on or before this date.",
            "default": ""
          },
          "onlyNew": {
            "title": "Only cases not delivered by a previous run",
            "type": "boolean",
            "description": "Remember every case document already delivered (by its UNID, the register own stable document id) in a NAMED key-value store, and skip it next time. Made for a daily schedule with a 7-day window: the overlap is suppressed instead of re-charged. A case appears once even though the court keeps editing the same document. Skipped rows are never delivered and never charged.",
            "default": false
          },
          "seenStoreName": {
            "title": "Name of the \"already delivered\" store",
            "type": "string",
            "description": "Key-value store that holds the delivered UNIDs when the setting above is on. Change it to run several independent monitors (different regions, different filters) from one account without them sharing memory.",
            "default": "edikte-insolvency-at-seen"
          },
          "includeBirthDates": {
            "title": "Include dates of birth (personal data)",
            "type": "boolean",
            "description": "OFF by default, and it should usually stay off. The register prints natural persons inside company edicts: 83 of 388 company documents (21.4%) carry a managing director or sole trader date of birth, often with a private home address, INSIDE the company own Schuldner field where no row filter can reach it. With this off, debtor_birth_date is null and those fragments are redacted out of debtor_block, sections, notice_text and full_text (verified: 0 of 745 documents leak a date of birth). Turn it on only if you have a lawful basis for processing it.",
            "default": false
          },
          "includeSections": {
            "title": "Include the raw section map",
            "type": "boolean",
            "description": "Add `sections` — every labelled block of the edict, keyed by the court own German label, so nothing on the page is ever silently dropped. 25 distinct labels were seen across the test corpus, from Masseverwalter and Tagsatzung down to Rekurs and Vermoegenslosigkeit.",
            "default": true
          },
          "includePublicationHistory": {
            "title": "Include the publication history",
            "type": "boolean",
            "description": "Add `publications` — one entry per edict the court has published on this case, with its publication date, decision date and the section labels it carried. A case document grows in place: 121 of the 226 default rows had 1 edict, 90 had 2, 11 had 3 and 4 had 4.",
            "default": true
          },
          "includeFullText": {
            "title": "Include the full edict text",
            "type": "boolean",
            "description": "Add `full_text` — every section concatenated as one plain-text blob, for keyword search or an LLM. Off by default because it roughly doubles row size and duplicates `sections`.",
            "default": false
          },
          "sortBy": {
            "title": "Sort delivered rows by",
            "enum": [
              "registered_date",
              "last_edict_date",
              "opening_effective_date",
              "claims_deadline",
              "next_hearing_date",
              "company_name",
              "court"
            ],
            "type": "string",
            "description": "Orders the rows you receive. Note this sorts the DELIVERED array: if a cap stopped the crawl early, the sort ranks what was read, and every row then carries search_complete: false so you can tell.",
            "default": "registered_date"
          },
          "sortOrder": {
            "title": "Sort direction",
            "enum": [
              "desc",
              "asc"
            ],
            "type": "string",
            "description": "Descending (newest first) is the default and also the direction the date window is crawled in, so a maxItems cap keeps the newest rows. That alignment is exact for the two date sorts on registered_date; other sort fields rank whatever the crawl read.",
            "default": "desc"
          },
          "maxItems": {
            "title": "Maximum rows to return",
            "minimum": 0,
            "type": "integer",
            "description": "0 = no limit. The crawl STOPS as soon as this many rows have passed the filters, so the cap limits the pages read and the bill, not just the output. When it truncates the read, every row carries search_complete: false and search_incomplete_reasons [\"max_items_cap\"].",
            "default": 0
          },
          "maxDetailFetches": {
            "title": "Maximum edicts to open",
            "minimum": 0,
            "type": "integer",
            "description": "0 = no limit. A hard ceiling on how many case documents this run may read, whatever the filters do. Every filter here can only be judged on the document itself, so a very narrow filter over a wide window reads many pages for few rows — on the default 7-day scope roughly 3 pages are read per row delivered. Set this when you want a guaranteed worst-case cost. When it stops the run, rows carry search_complete: false and search_incomplete_reasons [\"max_detail_fetches\"].",
            "default": 0
          },
          "detailConcurrency": {
            "title": "Parallel document reads",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "Measured through the Apify datacenter proxy: 149/150 first attempt at 6, and 745/745 at 8 in 106 s. Above 8 there is nothing to gain — the register is not the bottleneck.",
            "default": 6
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 10,
            "maximum": 300,
            "type": "integer",
            "description": "Per HTTP request. A search takes 1-4 s and a document about 1 s, so 60 is generous.",
            "default": 60
          },
          "maxRequestRetries": {
            "title": "Retries per request",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Each retry rotates the proxy session. The observed failures were transient connection resets that recovered on the first retry.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "The plain Apify datacenter proxy is enough: 5/5 searches returned byte-identical HTTP 200 responses, and 745/745 documents were read through it. The site has no anti-bot challenge and residential IPs would only add proxy-byte cost.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}