# ZVG Property Auction Scraper – German Foreclosure Data (`jve/zvg-property-auction-scraper`) Actor

Extract 🔥 every 🔥 German foreclosure auction (Zwangsversteigerung) from zvg-portal.de as structured JSON/CSV/Excel. Includes market values, auto-calculated bidding limits, Grundbuch data, and permanently mirrored PDFs (appraisals, exposés). All 16 states, daily monitoring mode.

- **URL**: https://apify.com/jve/zvg-property-auction-scraper.md
- **Developed by:** [T](https://apify.com/jve) (community)
- **Categories:** Real estate, Other, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

Scrape official German property foreclosure auctions (Zwangsversteigerungen) from
[**zvg-portal.de**](https://www.zvg-portal.de) — the official court auction portal run by the German state justice administrations. Extracts every publicly announced auction across all 16 Bundesländern.

---

### 🚀 Why use this scraper?

#### 🔗 Live links — no dead portal URLs

- Detail pages mirrored to the Apify Key-Value Store → `detail_url` is a public, permanent link
- All PDFs mirrored: appraisal reports (Gutachten), exposés, official announcements, photos, info sheets, every attachment
- PDF links inside the mirrored detail HTML are rewritten — click through directly from the detail page

#### 📊 Bidding limits calculated automatically

- `limit_50_percent` — minimum bid per § 85a ZVG (below this, no Zuschlag)
- `limit_70_percent` — threshold per § 74a ZVG (above this, creditors generally can't object)

#### 🔁 Monitoring mode — only new auctions

- Set `only_new_auctions: true` for recurring runs
- Day 1: full snapshot. From day 2: only new listings (~50–200/day nationwide)
- Zero duplicates — seen IDs persist across runs, crashes, and manual re-runs

#### 🏛️ Structured Grundbuch data

- `gemarkung`, `flurstueck`, `flaeche_ha`, `grundbuch_blatt` as separate fields

#### 🗺️ Geo links

- `map_url`: direct Google Maps link per property

#### 📋 33 structured fields per listing

- ISO dates, real numbers (not "224.000,00 €" strings)
- All 16 Bundesländer in one run. Each state's detail page variant handled

---

### ⚙️ Input Example

Single-family homes in Bavaria, Q3 2026:

```json
{
  "bundeslaender": ["by"],
  "objektarten": ["3", "19"],
  "von_datum": "01.07.2026",
  "bis_datum": "30.09.2026",
  "nur_aktive_termine": true,
  "mit_details": true
}
````

Daily nationwide monitoring run:

```json
{
  "bundeslaender": [],
  "nur_aktive_termine": true,
  "only_new_auctions": true
}
```

### 📤 Output Example

Each dataset item represents one auction (Termin). All 33 fields filled:

```json
{
  "zvg_id": 48715,
  "land_abk": "by",
  "bundesland": "Bayern",
  "aktenzeichen": "K 0081/2024",
  "amtsgericht": "Augsburg",
  "art_der_versteigerung": "Zwangsversteigerung zum Zwecke der Aufhebung der Gemeinschaft",
  "objekt_typ": "Doppelhaushälfte",
  "objekt_adresse": "Afrastraße 5 a, 86179 Augsburg",
  "objekt_beschreibung": "Doppelhaushälfte und Garage mit Schuppen; Wohnfläche ca. 141 m²; Baujahr 2004; Grundstücksgröße 375 m²",
  "verkehrswert_eur": 690000.00,
  "limit_50_percent": 345000.00,
  "limit_70_percent": 483000.00,
  "termin_datum": "2026-10-15",
  "termin_uhrzeit": "09:30",
  "termin_aufgehoben": false,
  "ort_der_versteigerung": "Amtsgericht Augsburg, Justizgebäude Am Alten Einlaß 1, 86150 Augsburg, Sitzungssaal Zi.Nr. 101",
  "glaeubiger_info": "Sparkasse XYZ, Aktenzeichen 1234/5678",
  "gemarkung": "Haunstetten",
  "flurstueck": "1234/5",
  "flaeche_ha": 0.0375,
  "grundbuch_blatt": "15265",
  "grundbuch_text": "Haunstetten Blatt 15265",
  "ansprechpartner": "Rechtspfleger Müller, Amtsgericht Augsburg, Tel. 0821/1234-0",
  "url_amtl_bekanntmachung": "https://api.apify.com/v2/key-value-stores/xxxx/records/amtl_bekanntmachung_48715.pdf",
  "url_gutachten": "https://api.apify.com/v2/key-value-stores/xxxx/records/gutachten_48715.pdf",
  "url_exposee": "https://api.apify.com/v2/key-value-stores/xxxx/records/exposee_48715.pdf",
  "url_gericht": "https://www.justiz.bayern.de/gericht/ag/a/",
  "map_url": "https://maps.google.de/maps?q=Afrastraße+5+a+86179+Augsburg",
  "anhang_urls": [
    "https://api.apify.com/v2/key-value-stores/xxxx/records/anhang_125267.pdf",
    "https://api.apify.com/v2/key-value-stores/xxxx/records/anhang_125270.pdf"
  ],
  "detail_url": "https://api.apify.com/v2/key-value-stores/xxxx/records/detail_48715.html",
  "detail_url_source": "https://www.zvg-portal.de/index.php?button=showZvg&zvg_id=48715&land_abk=by",
  "letzte_aktualisierung": "2026-09-28",
  "scraped_at": "2026-10-01T06:00:00+00:00"
}
```

> **Note:** All PDF and detail URLs point to your **Apify Key-Value Store**, not the session-locked portal — they work permanently, in your browser, CRM, or spreadsheet.

***

#### Field Descriptions

| Field                     | Type       | Description                                             |
| ------------------------- | ---------- | ------------------------------------------------------- |
| `zvg_id`                  | `integer`  | Unique auction ID from zvg-portal.de                    |
| `land_abk`                | `string`   | State code (`by`, `nw`, `be`, …)                        |
| `bundesland`              | `string`   | Full state name                                         |
| `aktenzeichen`            | `string`   | Court file number                                       |
| `amtsgericht`             | `string`   | Responsible court                                       |
| `art_der_versteigerung`   | `string`   | Auction type (foreclosure, partition, …)                |
| `objekt_typ`              | `string`   | Property type (detached house, condo, plot, …)          |
| `objekt_adresse`          | `string`   | Property address                                        |
| `objekt_beschreibung`     | `string`   | Full property description (size, year built, condition) |
| `verkehrswert_eur`        | `number`   | Court-appraised market value in EUR                     |
| `limit_50_percent`        | `number`   | 50% minimum bid (§ 85a ZVG)                             |
| `limit_70_percent`        | `number`   | 70% threshold (§ 74a ZVG)                               |
| `termin_datum`            | `date`     | Auction date (ISO format)                               |
| `termin_uhrzeit`          | `string`   | Auction time (HH:MM)                                    |
| `termin_aufgehoben`       | `boolean`  | `true` if the auction was cancelled                     |
| `ort_der_versteigerung`   | `string`   | Courtroom / session location                            |
| `glaeubiger_info`         | `string`   | Creditor details (bank, reference)                      |
| `gemarkung`               | `string`   | Land-registry district                                  |
| `flurstueck`              | `string`   | Plot number                                             |
| `flaeche_ha`              | `number`   | Plot area (hectares)                                    |
| `grundbuch_blatt`         | `string`   | Land-registry folio number                              |
| `grundbuch_text`          | `string`   | Raw land-registry text line                             |
| `ansprechpartner`         | `string`   | Contact person / firm                                   |
| `url_amtl_bekanntmachung` | `string`   | PDF: official announcement (KV Store)                   |
| `url_gutachten`           | `string`   | PDF: expert opinion / valuation (KV Store)              |
| `url_exposee`             | `string`   | PDF: sales exposé (KV Store)                            |
| `url_gericht`             | `string`   | Court website URL                                       |
| `map_url`                 | `string`   | Map location URL (Google Maps / GeoServer)              |
| `anhang_urls`             | `string[]` | All attachments (KV Store)                              |
| `detail_url`              | `string`   | Mirrored detail page (KV Store, clickable)              |
| `detail_url_source`       | `string`   | Original portal URL for reference                       |
| `letzte_aktualisierung`   | `date`     | Last update date on the portal                          |
| `scraped_at`              | `datetime` | UTC timestamp when scraped                              |

> **Note on KV-Store URLs:** Fields `detail_url`, `url_amtl_bekanntmachung`,
> `url_gutachten`, `url_exposee`, and entries in `anhang_urls` point to the
> Apify Key-Value Store — not the original portal. The portal protects detail
> pages and PDFs with session cookies. By mirroring them to the KV store, they
> are **permanently accessible without a session**. The original portal URL is
> preserved in `detail_url_source` for traceability.

***

### 🔁 Monitoring Mode

Set `only_new_auctions: true` to activate cross-run deduplication:

1. The actor creates a persistent KV store (`zvg-seen`) on first run.
2. Each yielded auction is recorded in this store.
3. On subsequent runs, only auctions *not* seen before are returned.
4. The state survives crashes, restarts, and configuration changes.

**Ideal for cron jobs:**

- **Day 1:** all current auctions
- **Day 2+:** only new auctions since the last run

***

### ⚙️ Input Konfiguration / Input Configuration

#### Parameter Overview

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `bundeslaender` | `string[]` | `[]` (= all 16) | 2-letter state codes (`by`, `nw`, `be`, …). Empty = all states. |
| `objektarten` | `string[]` | `[]` (= all) | Property type IDs. See table below. |
| `verfahrensart` | `string` | `""` (= all) | Procedure type. See table below. |
| `ort` | `string` | `""` | City / town name |
| `plz` | `string` | `""` | 5-digit ZIP code |
| `strasse` | `string` | `""` | Street name |
| `von_datum` | `string` | `""` | Earliest auction date (`DD.MM.YYYY`) |
| `bis_datum` | `string` | `""` | Latest auction date (`DD.MM.YYYY`) |
| `nur_aktive_termine` | `boolean` | `true` | Skip cancelled auctions (recommended) |
| `mit_details` | `boolean` | `true` | Fetch full detail pages (descriptions, PDFs, Grundbuch). Adds ~2× runtime but significantly more data. |
| `max_listings` | `integer` | `0` (= no limit) | Maximum number of listings per run |
| `only_new_auctions` | `boolean` | `false` | Monitoring mode: only return auctions not seen in previous runs |

#### Property Types (`objektarten`)

| ID | Type |
|----|------|
| `1` | Reihenhaus (terraced house) |
| `2` | Doppelhaushälfte (semi-detached) |
| `3` | Einfamilienhaus (detached house) |
| `19` | Zweifamilienhaus (two-family house) |
| `4` | Mehrfamilienhaus (multi-family) |
| `5` | Eigentumswohnung 1–2 Zi. (condo 1–2 rooms) |
| `6` | Eigentumswohnung 3–4 Zi. (condo 3–4 rooms) |
| `7` | Eigentumswohnung ab 5 Zi. (condo 5+ rooms) |
| `8` | Gewerbeeinheit (commercial unit) |
| `13` | Wohn-/Geschäftshaus (residential-commercial) |
| `9` | Garage |
| `10` | Kfz-Stellplatz (parking space) |
| `11` | Kfz-Stellplatz Tiefgarage (underground parking) |
| `12` | Sonstiges Teileigentum (other partial ownership) |
| `14` | Gewerblich genutztes Grundstück (commercial plot) |

#### Procedure Types (`verfahrensart`)

| ID | Type |
|----|------|
| `""` | All types |
| `"-1"` | Aufhebung der Gemeinschaft (partition sale) |
| `"0"` | Zwangsvollstreckung (ordinary foreclosure) |
| `"1"` | Antrag Insolvenzverwalter (insolvency) |
| `"2"` | Antrag Erbe (inheritance) |
| `"3"` | Zwangsversteigerung von Schiffen (ships) |
| `"4"` | Zwangsversteigerung von Luftfahrzeugen (aircraft) |
| `"5"` | Wohnungseigentum (condominium) |
| `"6"` | Seekabel (submarine cable) |
| `"7"` | Aufgebotsverfahren (public summons) |
| `"8"` | Sonstiges (other) |

***

### ❓Use Cases

| Use Case | Description |
|----------|-------------|
| **🏗️ Investor Deal Flow** | Daily feed of new distressed-asset opportunities filtered by region, property type, value range |
| **📊 Portfolio Benchmarking** | Compare court-appointed valuations (Verkehrswert) against private-market appraisals |
| **📈 Market Research** | Track foreclosure volume trends by state, city, property type over time |
| **🔗 CRM Enrichment** | Augment internal property leads with public foreclosure signals |
| **📄 PDF Pipeline** | Automatically download expert opinions (Gutachten) for automated valuation models |
| **🔔 Auction Monitoring** | Get notified only when *new* auctions appear in your target regions |
| **🏛️ PropTech Integration** | Feed structured foreclosure data into real-estate platforms and analytics tools |
| **⚖️ Legal & Insolvency** | Stay current on proceedings for active cases |

***

### ❓ FAQ

#### Is it legal to scrape zvg-portal.de?

Foreclosure auction dates are **public court announcements required by law** (§ 39, § 40 ZVG). The Actor accesses only publicly available data — no login, no circumvention of access restrictions. Results may contain personal data (creditors, contact persons) protected under GDPR; only process it with a legitimate reason and consult your lawyer if unsure.

#### Why do PDF links point to apify.com instead of zvg-portal.de?

The portal locks PDFs and detail pages behind session cookies — original links die when the session ends. This Actor mirrors every document to the Key-Value Store during the crawl, so your links **keep working permanently**. The original URL stays in `detail_url_source`.

#### How does monitoring mode avoid duplicates?

Seen listing IDs persist in a named Key-Value Store across runs. State survives crashes, restarts, and manual re-runs — you never get the same auction twice.

#### Do I need proxies?

No. The portal has no meaningful anti-bot protection. Proxies are optional.

#### Can I get the data via API?

Yes — every run's dataset is available through the [Apify API](https://docs.apify.com/api/v2) (see the **API tab**), plus webhooks and integrations (Slack, Google Sheets, Zapier/Make, and more).

#### Something's not working / I need a custom feature

Open a ticket in the **Issues tab** — the Actor is actively maintained. Custom extensions (geocoding, webhook alerts, extra fields) on request.

# Actor input Schema

## `bundeslaender` (type: `array`):

ISO-2-Kürzel der zu durchsuchenden Bundesländer. Leer = alle 16 Bundesländer werden durchsucht.

## `objektarten` (type: `array`):

Filter nach Objektart. Leer = alle Objektarten.

## `verfahrensart` (type: `string`):

Filter nach Art des Verfahrens. Leer = alle Verfahrensarten.

## `ort` (type: `string`):

Stadt- oder Gemeindename (z. B. München, Berlin).

## `plz` (type: `string`):

Postleitzahl (5-stellig, z. B. 80331).

## `strasse` (type: `string`):

Straßenname (optional).

## `von_datum` (type: `string`):

Frühester Versteigerungstermin (Format TT.MM.JJJJ, z. B. 01.01.2026).

## `bis_datum` (type: `string`):

Spätester Versteigerungstermin (Format TT.MM.JJJJ, z. B. 31.12.2026).

## `nur_aktive_termine` (type: `boolean`):

Aufgehobene Termine überspringen (empfohlen).

## `mit_details` (type: `boolean`):

Für jedes Listing die Detailseite abrufen (Beschreibung, Gutachten-URLs, Grundbuch, Gläubiger). Deutlich mehr Daten, aber ca. 2× langsamer.

## `max_listings` (type: `integer`):

Maximale Anzahl Listings pro Lauf. 0 = kein Limit.

## `only_new_auctions` (type: `boolean`):

Monitoring Mode: gibt bei jedem Lauf NUR Termine aus, die noch nie zuvor ausgegeben wurden. Ideal für tägliche Cron-Jobs — Tag 1 alle Termine, ab Tag 2 nur die neuen. Der Zustand überlebt Runs, Crashes und Restarts (persistiert im benannten Key-Value-Store 'zvg-seen').

## `proxy_configuration` (type: `object`):

Apify-Proxy-Konfiguration. Standard: keine Proxies (zvg-portal.de hat keine nennenswerten Anti-Bot-Maßnahmen).

## Actor input object example

```json
{
  "bundeslaender": [],
  "objektarten": [],
  "verfahrensart": "",
  "ort": "",
  "plz": "",
  "strasse": "",
  "von_datum": "",
  "bis_datum": "",
  "nur_aktive_termine": true,
  "mit_details": true,
  "max_listings": 0,
  "only_new_auctions": false,
  "proxy_configuration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped auction listings as structured JSON. Each item = one auction with 33 fields including property details, court info, bidding limits, and PDF links.

## `detail_pages` (type: `string`):

Mirrored detail page HTML files with rewritten PDF links. Accessible per listing via the detail\_url field in the dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("jve/zvg-property-auction-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("jve/zvg-property-auction-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call jve/zvg-property-auction-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=jve/zvg-property-auction-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "ZVG Property Auction Scraper – German Foreclosure Data",
        "description": "Extract 🔥 every 🔥 German foreclosure auction (Zwangsversteigerung) from zvg-portal.de as structured JSON/CSV/Excel. Includes market values, auto-calculated bidding limits, Grundbuch data, and permanently mirrored PDFs (appraisals, exposés). All 16 states, daily monitoring mode.",
        "version": "0.1",
        "x-build-id": "P91jwD7JWpxG2WVVb"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/jve~zvg-property-auction-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-jve-zvg-property-auction-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/jve~zvg-property-auction-scraper/runs": {
            "post": {
                "operationId": "runs-sync-jve-zvg-property-auction-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/jve~zvg-property-auction-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-jve-zvg-property-auction-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": {
                    "bundeslaender": {
                        "title": "Bundesländer",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "ISO-2-Kürzel der zu durchsuchenden Bundesländer. Leer = alle 16 Bundesländer werden durchsucht.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "bw",
                                "by",
                                "be",
                                "br",
                                "hb",
                                "hh",
                                "he",
                                "mv",
                                "ni",
                                "nw",
                                "rp",
                                "sl",
                                "sn",
                                "st",
                                "sh",
                                "th"
                            ],
                            "enumTitles": [
                                "Baden-Württemberg",
                                "Bayern",
                                "Berlin",
                                "Brandenburg",
                                "Bremen",
                                "Hamburg",
                                "Hessen",
                                "Mecklenburg-Vorpommern",
                                "Niedersachsen",
                                "Nordrhein-Westfalen",
                                "Rheinland-Pfalz",
                                "Saarland",
                                "Sachsen",
                                "Sachsen-Anhalt",
                                "Schleswig-Holstein",
                                "Thüringen"
                            ]
                        },
                        "default": []
                    },
                    "objektarten": {
                        "title": "Objektarten",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Filter nach Objektart. Leer = alle Objektarten.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "1",
                                "2",
                                "3",
                                "19",
                                "4",
                                "5",
                                "6",
                                "7",
                                "8",
                                "13",
                                "9",
                                "10",
                                "11",
                                "12",
                                "14"
                            ],
                            "enumTitles": [
                                "Reihenhaus",
                                "Doppelhaushälfte",
                                "Einfamilienhaus",
                                "Zweifamilienhaus",
                                "Mehrfamilienhaus",
                                "Eigentumswohnung (1–2 Zi.)",
                                "Eigentumswohnung (3–4 Zi.)",
                                "Eigentumswohnung (ab 5 Zi.)",
                                "Gewerbeeinheit",
                                "Wohn-/Geschäftshaus",
                                "Garage",
                                "Kfz-Stellplatz",
                                "Kfz-Stellplatz (Tiefgarage)",
                                "Sonstiges Teileigentum",
                                "Gewerblich genutztes Grundstück"
                            ]
                        },
                        "default": []
                    },
                    "verfahrensart": {
                        "title": "Verfahrensart",
                        "enum": [
                            "",
                            "-1",
                            "0",
                            "1",
                            "2",
                            "3",
                            "4",
                            "5",
                            "6",
                            "7",
                            "8"
                        ],
                        "type": "string",
                        "description": "Filter nach Art des Verfahrens. Leer = alle Verfahrensarten.",
                        "default": ""
                    },
                    "ort": {
                        "title": "Ort",
                        "type": "string",
                        "description": "Stadt- oder Gemeindename (z. B. München, Berlin).",
                        "default": ""
                    },
                    "plz": {
                        "title": "Postleitzahl",
                        "pattern": "^(\\d{5})?$",
                        "type": "string",
                        "description": "Postleitzahl (5-stellig, z. B. 80331).",
                        "default": ""
                    },
                    "strasse": {
                        "title": "Straße",
                        "type": "string",
                        "description": "Straßenname (optional).",
                        "default": ""
                    },
                    "von_datum": {
                        "title": "Termin von",
                        "pattern": "^(\\d{2}\\.\\d{2}\\.\\d{4})?$",
                        "type": "string",
                        "description": "Frühester Versteigerungstermin (Format TT.MM.JJJJ, z. B. 01.01.2026).",
                        "default": ""
                    },
                    "bis_datum": {
                        "title": "Termin bis",
                        "pattern": "^(\\d{2}\\.\\d{2}\\.\\d{4})?$",
                        "type": "string",
                        "description": "Spätester Versteigerungstermin (Format TT.MM.JJJJ, z. B. 31.12.2026).",
                        "default": ""
                    },
                    "nur_aktive_termine": {
                        "title": "Nur aktive Termine",
                        "type": "boolean",
                        "description": "Aufgehobene Termine überspringen (empfohlen).",
                        "default": true
                    },
                    "mit_details": {
                        "title": "Detailseiten laden",
                        "type": "boolean",
                        "description": "Für jedes Listing die Detailseite abrufen (Beschreibung, Gutachten-URLs, Grundbuch, Gläubiger). Deutlich mehr Daten, aber ca. 2× langsamer.",
                        "default": true
                    },
                    "max_listings": {
                        "title": "Maximale Anzahl Listings",
                        "minimum": 0,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Maximale Anzahl Listings pro Lauf. 0 = kein Limit.",
                        "default": 0
                    },
                    "only_new_auctions": {
                        "title": "Nur neue Termine (Monitoring)",
                        "type": "boolean",
                        "description": "Monitoring Mode: gibt bei jedem Lauf NUR Termine aus, die noch nie zuvor ausgegeben wurden. Ideal für tägliche Cron-Jobs — Tag 1 alle Termine, ab Tag 2 nur die neuen. Der Zustand überlebt Runs, Crashes und Restarts (persistiert im benannten Key-Value-Store 'zvg-seen').",
                        "default": false
                    },
                    "proxy_configuration": {
                        "title": "Proxy-Konfiguration",
                        "type": "object",
                        "description": "Apify-Proxy-Konfiguration. Standard: keine Proxies (zvg-portal.de hat keine nennenswerten Anti-Bot-Maßnahmen).",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
