{
  "openapi": "3.0.1",
  "info": {
    "title": "Germany Transport Operators - VUDat Permits & Fleet",
    "description": "From $2.00 per 1,000 operators, no start fee. Germany's official BALM/VUDat licence register: ~57,645 haulage and bus operators with address, legal form, trade-register number, named legal rep and transport manager, vehicle counts and permit numbers. No email or phone - the register publishes none.",
    "version": "0.1",
    "x-build-id": "StaB4T3jXLiDk0jdj"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~vudat-transport-permits-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-vudat-transport-permits-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~vudat-transport-permits-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-vudat-transport-permits-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~vudat-transport-permits-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-vudat-transport-permits-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": {
          "startId": {
            "title": "Start at operator id",
            "minimum": 1,
            "type": "integer",
            "description": "First `idUnternehmen` to read. Ids run from 1; the highest populated id measured on 2026-09-16 was 57,645.",
            "default": 1
          },
          "endId": {
            "title": "Stop at operator id (0 = end of register)",
            "minimum": 0,
            "type": "integer",
            "description": "Last id to read. Leave at 0 to walk until the register ends — the walk stops after 150 consecutive ids that hold no record, which is decisive because no holes were observed anywhere inside the populated range.",
            "default": 0
          },
          "maxOperators": {
            "title": "Maximum operators to deliver (0 = no limit)",
            "minimum": 0,
            "type": "integer",
            "description": "Stops once this many rows have been delivered. This is also your bill: you are charged per delivered row and for nothing else. 0 means no limit — the whole register is ~57,645 operators.",
            "default": 1000
          },
          "operatorIds": {
            "title": "Specific operator ids (optional)",
            "type": "array",
            "description": "Read exactly these `idUnternehmen` values and nothing else, ignoring the range above. This is the cheap, precise mode: one page fetched per id. Example: 2816, 28701, 56000.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "postalCodePrefixes": {
            "title": "Postcode prefixes",
            "type": "array",
            "description": "German postcode prefixes, 1-5 digits, matched against the operator's postcode: \"8\" = the south-east eighth of Germany, \"80\" = Munich area, \"80331\" = one exact postcode. Multiple entries are OR-ed. Leave empty for all of Germany.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "transportModes": {
            "title": "Freight or passenger",
            "type": "array",
            "description": "Derived from the permit type. Leave empty for both.",
            "items": {
              "type": "string",
              "enum": [
                "freight",
                "passenger"
              ],
              "enumTitles": [
                "freight - Güterverkehr (115 of 120 sampled operators)",
                "passenger - Personenverkehr, buses (5 of 120 sampled operators)"
              ]
            },
            "default": []
          },
          "permitTypes": {
            "title": "Permit type",
            "type": "array",
            "description": "The register uses exactly these three. A value that is not one of them is rejected before the run starts, because a typo here would return an empty result that looks like a real answer.",
            "items": {
              "type": "string",
              "enum": [
                "Gemeinschaftslizenz zur Beförderung von Gütern",
                "Erlaubnis zur Beförderung von Gütern",
                "Gemeinschaftslizenz zur Beförderung von Personen"
              ],
              "enumTitles": [
                "Gemeinschaftslizenz Güter - EU freight licence (93 of 127 sampled permits)",
                "Erlaubnis Güter - national freight permit (28 of 127, often open-ended)",
                "Gemeinschaftslizenz Personen - EU passenger licence (6 of 127)"
              ]
            },
            "default": []
          },
          "minTrucks": {
            "title": "Minimum trucks (Lastkraftwagen)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only operators running at least this many trucks. The register publishes the count, so this is a real fleet-size filter, not a guess. An operator whose fleet block is missing is excluded rather than treated as zero. Measured over 120 operators: mean 7.5 trucks, max 102, 34% had 5 or more, 19% had 10 or more.",
            "default": 0
          },
          "minTotalVehicles": {
            "title": "Minimum total vehicles",
            "minimum": 0,
            "type": "integer",
            "description": "Trucks + buses + small 2.5-3.5 t vehicles. 90% of the 120 sampled operators run at least one vehicle; the rest are licensed with none recorded.",
            "default": 0
          },
          "onlyCurrentPermits": {
            "title": "Only operators with a currently valid permit",
            "type": "boolean",
            "description": "Keeps an operator only when at least one of its permits is valid today, counting open-ended (\"unbefristet\") permits as valid. An operator whose permits publish no end date at all is excluded — \"we do not know\" is not \"yes\". All 120 sampled operators passed this, so it is a safety net rather than a narrowing filter.",
            "default": false
          },
          "requireTradeRegisterNumber": {
            "title": "Only companies with a trade-register number (HRA/HRB)",
            "type": "boolean",
            "description": "Filters out sole traders and natural persons, who have no Handelsregister entry. Measured: 49% of the 120 sampled operators carry one — so this roughly halves the result set, and the half it removes are real one-person haulage businesses, not bad data.",
            "default": false
          },
          "requireAddress": {
            "title": "Only operators with a postal address",
            "type": "boolean",
            "description": "A very small number of real records carry no address block at all (1 of 120 sampled). Turn this on if a postal address is mandatory for your use.",
            "default": false
          },
          "requireTransportManager": {
            "title": "Only operators with a named transport manager (Verkehrsleiter)",
            "type": "boolean",
            "description": "The Verkehrsleiter is the person legally responsible for the fleet — usually the best-qualified contact in the business. 95% of the 120 sampled operators name one.",
            "default": false
          },
          "maxRecordsExamined": {
            "title": "Maximum ids to examine (0 = no limit)",
            "minimum": 0,
            "type": "integer",
            "description": "Hard budget on pages fetched, whether or not they yield a row. Use it with filters: \"look at at most 5,000 ids and give me whatever matched\".",
            "default": 0
          },
          "maxRunSeconds": {
            "title": "Maximum run time in seconds (0 = no limit)",
            "minimum": 0,
            "type": "integer",
            "description": "Soft wall-clock budget. When it is reached the walk stops, everything already delivered is kept, and RUN_SUMMARY records `stoppedBy: maxRunSeconds`. Useful because this host throttles by dropping connections rather than returning an error, so a bad network moment makes a run slow rather than making it fail.",
            "default": 0
          },
          "concurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Pages fetched at once. Measured on 2026-09-16 from a single IP: 120 requests at concurrency 10 produced 53 dropped connections and then a total cut-off lasting minutes, while concurrency 4 and a serial pass both ran clean. 4 is the default for that reason. Raise it only with rotating residential proxies, and watch the unreachable count in RUN_SUMMARY.",
            "default": 4
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "balm.bund.de has no CAPTCHA, no Cloudflare and no JS gate — a bare request with no User-Agent gets a byte-identical page. What it does have is per-IP connection throttling, so the point of the proxy here is rotation, not evasion. Apify Proxy is enabled by default; switch to RESIDENTIAL if you see the unreachable count climb in RUN_SUMMARY.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}