# Herold At $0.8💰 URL Search | Keyword Filters | Enriched Output (`abotapi/herold-at-scraper`) Actor

From $0.8/1K. Scrape company listings from herold.at, into a clean, structured dataset. Pull names, full addresses, GPS coordinates, telephone numbers, emails, websites, ratings, reviews, opening hours, payment methods, and founding dates, for any category in any Austrian city or region.

- **URL**: https://apify.com/abotapi/herold-at-scraper.md
- **Developed by:** [AbotAPI](https://apify.com/abotapi) (community)
- **Categories:** Lead generation, Automation, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.80 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Herold.at Scraper, Austrian Yellow Pages Listings

Scrape company listings from **herold.at**, the largest Austrian directory portal, into a clean structured dataset. Pull names, full addresses, GPS coordinates, telephone numbers, emails, websites, ratings, reviews, opening hours, payment methods, and founding dates, for any category in any Austrian city or region.

Use it to build local lead lists, enrich CRM records with verified contacts, monitor competitor coverage by region, or feed a directory aggregator. Two start modes (search-builder and URL-paste) and forward auto-pagination keep large pulls effortless.

### Why This Scraper?

- **Full contact info on every listing without `fetchDetails`**: name, street address, postal code, city, region, telephone, email, website, rating, verified status, logo, branch code (~17 fields). The detail toggle adds GPS, opening hours, payment methods, founding date, reviews, and description (~25 fields total).
- **Two start modes**, pick categories and locations through the input panel, or paste any herold.at SERP URL straight from your browser
- **Multi-search batching**, categories × locations cartesian product in one run
- **Forward auto-pagination**, walks `/seite/N/` until the limit is reached
- **Detail enrichment toggle**, SERP-only happy path is fast and cheap (already includes street address, phone, email, website, rating); turn on `fetchDetails` to add GPS coordinates, opening hours, payment methods, founding date, and reviews
- **Resilient pagination**, picks up the page number from any pasted URL and walks forward
- **Post-fetch filters**, `verifiedOnly`, `ratedOnly`, `minRating` apply client-side without breaking the URL grammar

### Data You Get

> Sample shape, values are illustrative placeholders, not from a live listing.

The "Source" column shows where each field comes from. **SERP** fields are always populated (every run). **Detail** fields require `fetchDetails: true` and add ~30× the request count per page.

| Field | Source | Example | Notes |
|---|---|---|---|
| `id` | SERP | `"00000"` | 5-char herold.at branch code |
| `url` | SERP | `"https://www.herold.at/gelbe-seiten/wien/00000/sample-company/"` | Detail page URL |
| `name` | SERP | `"Sample Company"` | Company name |
| `category` | SERP | `"restaurant"` | Category slug from input or inferred from URL |
| `regionSlug` | SERP | `"wien"` | Location slug from URL path |
| `position` | SERP | `1` | Position in original SERP |
| `isVerified` | SERP | `true` | "Verifiziert" badge present on SERP card |
| `streetAddress` | SERP | `"Sample Street 1"` | Hidden popover on each card (always present) |
| `postalCode` | SERP | `"1010"` | Visible address line |
| `addressLocality` | SERP | `"Wien"` | City |
| `addressRegion` | SERP | `"Wien"` | Federal state |
| `addressCountry` | SERP | `"AT"` | Always "AT" |
| `telephone` | SERP | `"+43 1 0000000"` | International format, from `tel:` link in popover |
| `email` | SERP | `"contact@example.com"` | From `mailto:` link in popover (when company supplied one) |
| `website` | SERP | `"https://example.com"` | External link in popover (when company supplied one) |
| `logoUrl` | SERP | `"https://images.herold.at/optimize?url=...&width=320"` | Logo image (some categories show an icon instead) |
| `primaryImage` | SERP | `"https://images.herold.at/..."` | First image (logo or hero) |
| `ratingValue` | SERP | `4.8` | Average rating (1-5) |
| `ratingCount` | SERP | `42` | Number of ratings |
| `bestRating` | SERP | `5` | Rating scale max |
| `worstRating` | SERP | `1` | Rating scale min |
| `branchCode` | SERP | `"00000"` | Same as id, exposed for downstream joins |
| `latitude` | Detail | `48.0000` | Geo coordinate |
| `longitude` | Detail | `16.0000` | Geo coordinate |
| `imageCount` | Detail | `1` | Number of detail-page images |
| `foundingDate` | Detail | `"2020"` | When the company was founded |
| `paymentAccepted` | Detail | `["Cash", "Card"]` | Accepted payment methods |
| `openingHours` | Detail | `[{ "day": "Monday", "opens": "09:00", "closes": "18:00" }]` | When the company supplied them |
| `reviewCount` | Detail | `12` | Number of detailed reviews |
| `reviews` | Detail | `[{ "author": "Sample Reviewer", "body": "Sample review text.", "rating": 5, "datePublished": "2026-01-01" }]` | Detailed review list |
| `description` | Detail | `"Sample seller description text appears here when fetchDetails=true."` | Company-supplied description text under the "Beschreibung" heading |
| `breadcrumb` | Detail | `["Home", "Wien", "Restaurant"]` | Category breadcrumb |
| `services` | Detail | `["Gastronomie", "Internationale Küche", "Gastgarten"]` | Tag chips from the Leistungen section (cuisine, amenities, special services) |
| `branchen` | Detail | `[{"name": "Restaurant", "slug": "restaurant"}, {"name": "Bierlokale-Pubs", "slug": "bierlokale-pubs"}]` | Company-specific industry memberships, populated from "Sie finden dieses Unternehmen in den Branchen" |
| `scrapedAt` | runtime | `"2026-01-01T00:00:00.000Z"` | ISO timestamp of when this record was extracted |

### How to Use

#### Search mode, single category in Vienna (fast, SERP-only)

```json
{
  "mode": "search",
  "categories": ["restaurant"],
  "locations": ["wien"],
  "maxPages": 5,
  "maxListings": 100
}
````

#### Search mode, multi-category × multi-location with detail enrichment

```json
{
  "mode": "search",
  "categories": ["elektriker", "installateur"],
  "locations": ["wien", "graz", "linz"],
  "fetchDetails": true,
  "maxPages": 3,
  "maxListings": 200
}
```

#### Search mode, Austria-wide for a category (no location filter)

```json
{
  "mode": "search",
  "categories": ["zahnarzt"],
  "locations": [],
  "maxPages": 10
}
```

#### URL mode, paste prepared URLs

```json
{
  "mode": "url",
  "urls": [
    "https://www.herold.at/gelbe-seiten/wien/restaurant/",
    "https://www.herold.at/gelbe-seiten/graz/elektriker/"
  ],
  "maxPages": 5,
  "maxListings": 100
}
```

#### Search mode with post-filters (verified, rated 4+ stars)

```json
{
  "mode": "search",
  "categories": ["frisör"],
  "locations": ["wien"],
  "verifiedOnly": true,
  "ratedOnly": true,
  "minRating": 4,
  "maxListings": 50
}
```

### Input Parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `mode` | enum `search`/`url` | `search` | Pick search-builder or URL-paste mode |
| `categories` | string\[] | `["restaurant"]` | Category URL slugs, e.g. `restaurant`, `elektriker`, `zahnarzt` |
| `locations` | string\[] | `["wien"]` | Austrian location slugs, e.g. `wien`, `graz`, `linz`. Empty = Austria-wide |
| `verifiedOnly` | boolean | `false` | Keep only "Verifiziert" listings (post-filter) |
| `ratedOnly` | boolean | `false` | Keep only listings with at least one rating (post-filter) |
| `minRating` | integer 1-5 | (none) | Drop listings below this average rating (post-filter) |
| `urls` | string\[] | example URL | Full herold.at URLs (URL mode only) |
| `maxPages` | integer | `2` | Max SERP pages to walk per search |
| `maxListings` | integer | `0` | Total cap across all searches; `0` = unlimited |
| `fetchDetails` | boolean | `false` | Also fetch each listing's detail page (full address, phone, email, GPS, hours, reviews). Multiplies request count ~30× per page |
| `proxy` | object | Apify residential AT | Proxy configuration |

### Output Example

> Sample shape, values are illustrative placeholders, not from a live listing.

```json
{
  "id": "00000",
  "url": "https://www.herold.at/gelbe-seiten/wien/00000/sample-company/",
  "name": "Sample Company",
  "category": "restaurant",
  "regionSlug": "wien",
  "position": 1,
  "isVerified": true,
  "breadcrumb": ["Home", "Gelbe Seiten", "Restaurant", "Wien"],
  "streetAddress": "Sample Street 1",
  "postalCode": "1010",
  "addressLocality": "Wien",
  "addressRegion": "Wien",
  "addressCountry": "AT",
  "latitude": 48.0000,
  "longitude": 16.0000,
  "telephone": "+43 1 0000000",
  "email": "contact@example.com",
  "website": "https://example.com",
  "logoUrl": "https://images.herold.at/optimize?url=...&width=320",
  "primaryImage": "https://images.herold.at/optimize?url=...&width=320",
  "imageCount": 1,
  "foundingDate": "2020",
  "branchCode": "00000",
  "paymentAccepted": ["Cash", "Card"],
  "openingHours": [
    { "day": "Monday", "opens": "09:00", "closes": "18:00" },
    { "day": "Tuesday", "opens": "09:00", "closes": "18:00" }
  ],
  "ratingValue": 4.8,
  "ratingCount": 42,
  "reviewCount": 12,
  "bestRating": 5,
  "worstRating": 1,
  "reviews": [
    { "author": "Sample Reviewer", "body": "Sample review text.", "rating": 5, "datePublished": "2026-01-01" }
  ],
  "description": "Sample seller description text appears here when fetchDetails=true.",
  "scrapedAt": "2026-01-01T00:00:00.000Z"
}
```

### Plan Requirement

- **Apify Free plan**: works for small runs but does not include residential proxy access, set the proxy field to your own proxy URLs if available.
- **Apify Starter plan and above**: includes Apify residential, set `proxy.apifyProxyGroups: ["RESIDENTIAL"]` and `proxy.apifyProxyCountry: "AT"` for stable Austrian routing. The default input prefill already does this.
- **Datacenter proxies**: usually work but may be rate-limited under load. Residential is recommended for any run with `maxListings > 200`.
- **Memory**: 256 MB default is sufficient for HTTP-only runs (peak ~80 MB).

### Finding category and location slugs

The simplest way to learn valid slugs is to browse herold.at in your browser and copy URL fragments:

- Visit `https://www.herold.at/gelbe-seiten/` and click any category, note the slug after `/gelbe-seiten/` (e.g. `restaurant`, `elektriker`).
- Open a SERP URL like `https://www.herold.at/gelbe-seiten/wien/restaurant/`, the first path segment is the location slug (`wien`).
- Pass `mode=url` and paste the URL directly if you prefer to skip the slug discovery.

### Known limitations

- **Not every city × category combination has a SEO page.** Herold only generates `/<location>/<category>/` URLs where there is enough listing volume. Wien, Salzburg, and Bregenz work for most popular categories; Graz, Linz, Innsbruck, and Klagenfurt usually return 404 even though those cities appear in detail-page addresses. When a combo 404s, the actor logs a warning and moves to the next search. To get coverage for those cities, omit `locations` (Austria-wide search) and post-filter the dataset by `addressLocality` or `regionSlug`.
- **`openedNow` filter is not supported.** Herold's "Jetzt geöffnet" toggle is a client-side JavaScript filter; the URL grammar does not carry it. To get currently-open listings, run with `fetchDetails: true` (which populates `openingHours`) and post-filter the dataset against the current Europe/Vienna time.
- **GPS, opening hours, reviews, payment methods, and founding date require `fetchDetails: true`.** SERP cards already include name, full street address, postal code, city/region, phone, email, website, logo, rating, and verified status, so most use cases work without detail fetching. Turning detail fetch on multiplies request count ~30× per page. Even on detail pages, fields like `description`, `openingHours`, and `website` are populated only when the company supplied them to Herold.

# Actor input Schema

## `mode` (type: `string`):

Search mode = pick categories + locations + filters below. URL mode = paste any herold.at URL refined in a browser (recommended for filters not exposed below).

## `categories` (type: `array`):

Category URL slugs as they appear on herold.at, e.g. "restaurant", "elektriker", "installateur", "frisör", "zahnarzt", "rechtsanwalt". Open https://herold.at/gelbe-seiten/ → click any category → copy the slug from the URL path. The cartesian product of categories × locations is searched.

## `locations` (type: `array`):

Austrian city/region URL slugs (verified working combos: "wien", "salzburg", "bregenz"). Note: herold.at only generates SEO pages for some city × category combinations; cities like graz, linz, innsbruck, klagenfurt return 404 on the combined URL even though they appear in result addresses. Leave empty to search Austria-wide for each category, which always works. Open a herold.at SERP and copy the location segment from the URL path to verify before running large jobs.

## `verifiedOnly` (type: `boolean`):

Keep only listings flagged "Verifiziert" on herold.at. Applied after fetch as a client-side filter (the site does not expose a server-side URL filter for this).

## `ratedOnly` (type: `boolean`):

Keep only listings that have at least one rating. Applied after fetch as a client-side filter.

## `minRating` (type: `integer`):

Drop listings with an average rating below this value (1-5). Listings without a rating are also dropped. Applied after fetch as a client-side filter.

## `urls` (type: `array`):

One or more full herold.at URLs. Tip: open herold.at in your browser, navigate to a category (e.g. /gelbe-seiten/wien/restaurant/), then paste the resulting URL here. Multi-URL supported. Filter fields above are ignored. Pagination starts at the page in the URL and walks forward.

## `maxPages` (type: `integer`):

Hard cap on how many SERP pages to walk per category/location combination (or per pasted URL). Each page returns up to ~30 listings.

## `maxListings` (type: `integer`):

Stop after this many listings across all searches. 0 = no cap.

## `fetchDetails` (type: `boolean`):

When ON, also fetch each listing's detail page for GPS coordinates, opening hours, payment methods, founding date, full review list, description, and breadcrumb. SERP cards already carry name, full street address, postal code, city, region, telephone, email, website, rating, and verified status, so most use cases work fine with this OFF. Multiplies request count ~30× per SERP page when ON. Default OFF.

## `proxy` (type: `object`):

Herold.at accepts naked Apify residential out of the box. Use country=AT for stable Austrian routing. Datacenter proxies usually work too but may be rate-limited under load.

## Actor input object example

```json
{
  "mode": "search",
  "categories": [
    "restaurant"
  ],
  "locations": [
    "wien"
  ],
  "verifiedOnly": false,
  "ratedOnly": false,
  "urls": [
    "https://www.herold.at/gelbe-seiten/wien/restaurant/"
  ],
  "maxPages": 2,
  "maxListings": 0,
  "fetchDetails": false,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AT"
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "categories": [
        "restaurant"
    ],
    "locations": [
        "wien"
    ],
    "urls": [
        "https://www.herold.at/gelbe-seiten/wien/restaurant/"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "AT"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/herold-at-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 = {
    "categories": ["restaurant"],
    "locations": ["wien"],
    "urls": ["https://www.herold.at/gelbe-seiten/wien/restaurant/"],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "AT",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("abotapi/herold-at-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 '{
  "categories": [
    "restaurant"
  ],
  "locations": [
    "wien"
  ],
  "urls": [
    "https://www.herold.at/gelbe-seiten/wien/restaurant/"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AT"
  }
}' |
apify call abotapi/herold-at-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Herold At $0.8💰 URL Search | Keyword Filters | Enriched Output",
        "description": "From $0.8/1K. Scrape company listings from herold.at, into a clean, structured dataset. Pull names, full addresses, GPS coordinates, telephone numbers, emails, websites, ratings, reviews, opening hours, payment methods, and founding dates, for any category in any Austrian city or region.",
        "version": "1.8",
        "x-build-id": "5fLeH1lahJtcOlRh6"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/abotapi~herold-at-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-abotapi-herold-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/abotapi~herold-at-scraper/runs": {
            "post": {
                "operationId": "runs-sync-abotapi-herold-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/abotapi~herold-at-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-abotapi-herold-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",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "1. Search mode",
                        "enum": [
                            "search",
                            "url"
                        ],
                        "type": "string",
                        "description": "Search mode = pick categories + locations + filters below. URL mode = paste any herold.at URL refined in a browser (recommended for filters not exposed below).",
                        "default": "search"
                    },
                    "categories": {
                        "title": "Category slugs",
                        "type": "array",
                        "description": "Category URL slugs as they appear on herold.at, e.g. \"restaurant\", \"elektriker\", \"installateur\", \"frisör\", \"zahnarzt\", \"rechtsanwalt\". Open https://herold.at/gelbe-seiten/ → click any category → copy the slug from the URL path. The cartesian product of categories × locations is searched.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "locations": {
                        "title": "Location slugs (optional)",
                        "type": "array",
                        "description": "Austrian city/region URL slugs (verified working combos: \"wien\", \"salzburg\", \"bregenz\"). Note: herold.at only generates SEO pages for some city × category combinations; cities like graz, linz, innsbruck, klagenfurt return 404 on the combined URL even though they appear in result addresses. Leave empty to search Austria-wide for each category, which always works. Open a herold.at SERP and copy the location segment from the URL path to verify before running large jobs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "verifiedOnly": {
                        "title": "Verified businesses only (post-filter)",
                        "type": "boolean",
                        "description": "Keep only listings flagged \"Verifiziert\" on herold.at. Applied after fetch as a client-side filter (the site does not expose a server-side URL filter for this).",
                        "default": false
                    },
                    "ratedOnly": {
                        "title": "Rated businesses only (post-filter)",
                        "type": "boolean",
                        "description": "Keep only listings that have at least one rating. Applied after fetch as a client-side filter.",
                        "default": false
                    },
                    "minRating": {
                        "title": "Minimum average rating (post-filter)",
                        "minimum": 0,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Drop listings with an average rating below this value (1-5). Listings without a rating are also dropped. Applied after fetch as a client-side filter."
                    },
                    "urls": {
                        "title": "Search URLs (URL mode)",
                        "type": "array",
                        "description": "One or more full herold.at URLs. Tip: open herold.at in your browser, navigate to a category (e.g. /gelbe-seiten/wien/restaurant/), then paste the resulting URL here. Multi-URL supported. Filter fields above are ignored. Pagination starts at the page in the URL and walks forward.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxPages": {
                        "title": "Max pages per search",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Hard cap on how many SERP pages to walk per category/location combination (or per pasted URL). Each page returns up to ~30 listings.",
                        "default": 2
                    },
                    "maxListings": {
                        "title": "Max listings (total)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Stop after this many listings across all searches. 0 = no cap.",
                        "default": 0
                    },
                    "fetchDetails": {
                        "title": "Fetch detail pages (richer data, slower)",
                        "type": "boolean",
                        "description": "When ON, also fetch each listing's detail page for GPS coordinates, opening hours, payment methods, founding date, full review list, description, and breadcrumb. SERP cards already carry name, full street address, postal code, city, region, telephone, email, website, rating, and verified status, so most use cases work fine with this OFF. Multiplies request count ~30× per SERP page when ON. Default OFF.",
                        "default": false
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Herold.at accepts naked Apify residential out of the box. Use country=AT for stable Austrian routing. Datacenter proxies usually work too but may be rate-limited under load."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
