# Herold.at Scraper & API - Austrian Business Leads & Emails (`rel8ble/herold-scraper`) Actor

Herold.at scraper and API for Austrian B2B leads: search Herold (Gelbe Seiten Austria) by category and city or Bundesland. One result = one business: name, phone, email, website, address, Bezirk, rating, Firmenbuchnummer, founding year, hours. No login. $0.70 per 1,000, cheapest on 5 Nov 2026.

- **URL**: https://apify.com/rel8ble/herold-scraper.md
- **Developed by:** [Giovanni Rich](https://apify.com/rel8ble) (community)
- **Categories:** Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.70 / 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.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Herold.at Scraper & API - Austrian Business Leads & Emails

This **Herold.at scraper** turns herold.at, Austria's Gelbe Seiten (yellow pages), into clean **B2B lead lists**: give it categories (Branchen) like `Installateur`, `Steuerberater` or `Rechtsanwalt` and Austrian cities, Bundesländer or postal codes, and get one row per business with **name, phone, email, website, full address with Bezirk and Bundesland, rating, Firmenbuchnummer (company register number), founding year, employees, opening hours, services, fax, social links and coordinates**, as JSON, CSV or Excel.
Use it as a **Herold API**, an **Austrian business directory scraper**, an **Austria lead generation** tool for cold outreach and sales prospecting, or a **herold.at email extractor** from your own code, Make, Zapier or n8n.

It reads the public result pages and business pages over plain HTTP, with **no headless browser and no login**. The 20-business demo took under 10 seconds in a cloud run. **$0.70 per 1,000 businesses, no start fee: the cheapest of the Herold scrapers we found on 5 Nov 2026.**

### What you get

- **Contact**: business name, every phone number (+43 format), every email, website, fax, Facebook / Instagram / LinkedIn links.
- **Address**: street, postal code (PLZ), city, Bezirk (political district), Bundesland, one-line address, latitude and longitude.
- **Company data**: Firmenbuchnummer (e.g. `FN 282492 f`), founding year, employee range, parking.
- **Reputation**: average Herold rating and number of reviews, "Verifiziert" and "Empfohlen" flags.
- **Business profile**: all Herold categories, services (Leistungen), products (Produktangebot), description, opening hours per day, payment methods, logo, data date.
- **Search context**: the category and location that found it, its position in the Herold results and how many businesses that search lists.

### Sample output

Real rows from the prefilled cloud run (`Installateur` in Wien, 20 businesses), a few of the 42 fields:

| name | phone | email | website | district | Firmenbuch-Nr. | founded |
|---|---|---|---|---|---|---|
| Lugar Installateur GmbH | +43 1 8862759 | office@lugar.at | lugar.at | Wien 23 (Liesing) | FN 282492 f | 1996 |
| Allgas - Volkmann GmbH - Gasgerätekundendienst | +43 1 48890880 | gasgeraete@allgas.at | allgas.at | Wien 16 (Ottakring) | FN 382162 d | 1986 |
| Pölzl Christoph GmbH | +43 1 5874358 | office@poelzl-installationen.at | poelzl-installationen.at | Wien 6 (Mariahilf) | FN 104488 i | 1994 |
| G.S.H.T Installateur Notdienst | +43 1 7134387 | gsht@aon.at | notdienst-installateur.at | Wien 3 (Landstrasse) | - | 2003 |
| Georg Wagner GmbH | +43 1 9111550 | office@doktor-wasser.at | doktor-wasser.at | Wien 14 (Penzing) | FN 324907 f | 1978 |

All 20 rows of that run have a phone, an email and a website. Fill rates in a bigger 412-business test (`Rechtsanwalt` and `Elektriker` in Wien and Linz): coordinates and address 100%, **phone 91%, email 83%**, website 84%, services 58%, founding year 56%, opening hours 43%, fax 40%, **Firmenbuchnummer 31%**, rating 24%, social links 13%.

### Use cases

- **B2B lead generation in Austria**: build call and email lists of tradespeople, tax advisors, lawyers, doctors, agencies or any other Branche, city by city or Bundesland by Bundesland
- **KYB and CRM enrichment**: add phone, email, website, Firmenbuchnummer, founding year and address to the Austrian companies you already track
- **Sales territory planning**: count and map every business of a category in a Bezirk or Bundesland (coordinates included)
- **Local SEO and marketing agencies**: find businesses without a website, with few reviews or a low rating, and pitch them
- **DACH expansion**: pair it with a German directory scraper to cover Germany and Austria with the same columns

### Pricing

**$0.70 per 1,000 businesses** (pay per result; one result = one business saved to the dataset). No start fee, and emails, phones and company data are included at the same price. Apify platform usage and proxies are included too: the price above is all you pay.

| You scrape | You pay |
|---|---|
| 100 businesses | $0.07 |
| 1,000 businesses | $0.70 |
| 10,000 businesses | $7.00 |
| 100,000 businesses | $70.00 |

Other Herold.at scrapers on the Apify Store (free-plan prices per 1,000 businesses and 30-day users, 5 November 2026):

| Actor | Price per 1,000 |
|---|---|
| memo23 Herold.at Scraper (most used, 17 users) | $5.00 + $0.005 per run + $2.00 per 1,000 phones + $50.00 per 1,000 emails |
| lexis-solutions Herold.at Scraper (4) | $9.00 + $0.005 per run |
| fatihtahta Herold.At Scraper (5) | $1.79 |
| santamaria-automations Herold.at Scraper (3) | $2.00 list rows / $5.00 detail rows + $0.05 per run |
| studio-amba Herold.at Scraper (0) | $12.00 + $0.01 per run |
| powerai Herold Business Listing Scraper (1) | $4.99 + $0.09 per run |
| themineworks Herold Scraper (1) | $2.00 + $30.00 per 1,000 emails + $0.005 per run |
| hipersoft Herold.at Scraper (1) | $2.00 + start fee |
| solidcode Herold.at Scraper (1) | $1.80 + $0.005 per run |
| delectable_incubator Herold.at Scraper (1) | $1.78 + start fee |
| abotapi Herold.at Scraper (0) | $1.50 + $0.04 per run + $0.80 per 1,000 details |
| bovi Herold Scraper (1) | $1.40 + start fee |
| blackfalcondata Herold.at Scraper (1) | $1.26 + start fee |
| thriftykiwi / dach_leads Herold scrapers (1 / 0) | $1.00 |
| **This actor** | **$0.70, no start fee, emails and company data included** |

Three "low-cost" / "billig" Herold actors show a $0.05 headline price, but that is their per-run start event; each saved business costs $1.78, $2.99 or $9.99 per 1,000 on top.

The Apify free plan's $5 monthly credit covers about 7,100 businesses. The prefilled input (`Installateur` in Wien, 20 businesses) costs $0.014 and finished in under 10 seconds in a cloud test. Businesses skipped by your filters, duplicates, categories or locations that do not exist, removed listings and failed requests are never charged. If you set a maximum cost per run, the scraper stops cleanly when it reaches it.

#### Why this one

- **Cheapest Herold scraper we found (5 Nov 2026)**: $0.70 per 1,000 with emails, phones and the Firmenbuchnummer, no start fee; the next cheapest charge $1.00 (the most-used one charges $5.00 plus $50.00 per 1,000 emails).
- **Forgiving input**: plain words are matched to Herold's category list (`Psychologe` -> `Psychologen`), and city spellings are fixed for you (`Graz` -> `graz-stadt`, `Sankt Pölten` -> `st-pölten-stadt`).
- **Filters before you pay**: keep only businesses with an email, a website, a phone number, a verified listing or a minimum rating.
- **Ready for your CRM**: Bezirk and Bundesland split out, +43 phones, coordinates and company register number in each row.
- **Light**: plain HTTP, no browser, no login.

### FAQ

**Is there an official Herold API?**
Not for searching the directory: herold.at has no public self-service API for its listings, and Herold sells business address data separately on request. This actor works as a Herold API: start it over the Apify API with categories and locations and get JSON back.

**What does a typical run cost?**
500 plumbers (`Installateur`) across Austria cost $0.35. A 3,000-business list (several Branchen across a Bundesland) costs $2.10. A weekly run of 200 new leads costs about $0.60 a month. Refreshing 5 Branchen in all 9 Bundesländer at 100 businesses each (4,500 rows) once a month costs $3.15.

**Does it need a browser, cookies or a Herold account?**
No. Plain HTTPS requests to the public pages, no login.

**Which proxy should I use?**
None: leave the default. The actor connects directly and retries any blocked request through Apify Proxy automatically (datacenter, then residential).

**Why is my category not found?**
Herold uses fixed German category names. The actor tries your word as a category, then matches it against Herold's Branchen A-Z list and tries the closest 3 names. If it still finds nothing, open herold.at, browse to the category in your city and paste the `/gelbe-seiten/<location>/<category>/` URL into **Herold.at URLs**. The run summary names every spelling it tried.

**Why does my city show as "Graz (Stadt)"?**
Austria's statutory cities (Graz, Linz, Innsbruck, Klagenfurt, Villach, Wels, St. Pölten, Krems, Steyr, Eisenstadt, Wiener Neustadt ...) are their own Bezirk on Herold. Typing `Graz` is enough; the actor switches to `graz-stadt` when needed.

**Is there a cheaper mode without business pages?**
The price per business is the same; turning `scrapeDetails` off only makes the run faster (30 businesses per request instead of one request per business). Phone, email, website, address and rating are on the result list too, but the Firmenbuchnummer, founding year, fax, hours and coordinates are not.

**Is scraping Herold legal?**
The actor only reads public business listings that herold.at's robots.txt allows (read 5 Nov 2026). You are responsible for how you use the data: contact data of sole traders can count as personal data under the GDPR, and Austrian law (TKG 2021 § 174) restricts unsolicited advertising emails and calls, so check your outreach before sending.

### How to use

1. Type **Categories (Branchen)** in German, one per line: `Installateur`, `Steuerberater`, `Zahnarzt`, `Elektriker`, `Rechtsanwalt`, `Tischler` ... A word that is not an exact Herold category is matched against Herold's Branchen A-Z list.
2. Type **Locations** (optional), one per line: a city (`Wien`, `Graz`, `Linz`, `Innsbruck`), a Bundesland (`Tirol`, `Steiermark`) or a postal code (`1010`). Leave it empty to search all of Austria. Every category is searched in every location.
3. Or paste **Herold.at URLs**: result pages (`https://www.herold.at/gelbe-seiten/wien/installateur/`) and single business pages (`https://www.herold.at/gelbe-seiten/wien/N1JdH/lugar-installateur-gmbh/`).
4. Set **Max businesses per category + location** (0 = every listing), keep **Open each business page** on for the company data, and add filters if you only want businesses with an email, a website, a phone number or a minimum rating.
5. Click **Start** and download the leads from the **Output** tab, or fetch them through the Apify API.

### Input

| Field | Default | Description |
|---|---|---|
| `categories` | - | Herold categories in German, e.g. `Installateur`, `Steuerberater` |
| `locations` | all of Austria | Cities, Bundesländer or PLZ, e.g. `Wien`, `Graz`, `Tirol`, `1010` |
| `startUrls` | - | Result pages (`/gelbe-seiten/<location>/<category>/`) or business pages |
| `maxResultsPerSearch` | 100 | Businesses per category-location pair. 0 = all (up to 6,000) |
| `scrapeDetails` | true | Open each business page for Firmenbuchnummer, founding year, fax, hours, services, geo |
| `requireEmail` / `requireWebsite` / `requirePhone` | false | Only keep businesses with that contact field |
| `verifiedOnly` | false | Only keep listings marked "Verifiziert" |
| `minRating` | - | Only keep businesses rated at least this (0-5) |

With no input at all, a 20-business demo (Installateur in Wien) runs.

### Input example

```json
{
    "categories": ["Steuerberater", "Rechtsanwalt"],
    "locations": ["Wien", "Graz", "Salzburg"],
    "startUrls": ["https://www.herold.at/gelbe-seiten/tirol/tischlerei/"],
    "maxResultsPerSearch": 100,
    "scrapeDetails": true,
    "requireEmail": true
}
```

### Output example

```json
{
    "id": "N1JdH",
    "name": "Lugar Installateur GmbH",
    "phone": "+43 1 8862759",
    "phones": ["+43 1 8862759"],
    "fax": null,
    "email": "office@lugar.at",
    "emails": ["office@lugar.at"],
    "website": "https://www.lugar.at/wien23/",
    "socialLinks": ["https://www.facebook.com/Lugar-Installateur-GmbH-1050924018362456/"],
    "street": "Triester Straße 346",
    "postalCode": "1230",
    "city": "Wien",
    "district": "Wien 23 (Liesing)",
    "state": "Wien",
    "country": "AT",
    "address": "Triester Straße 346 1230 Wien Wien 23 (Liesing) Wien",
    "latitude": 48.12698,
    "longitude": 16.31962,
    "rating": 4.5,
    "reviewCount": 28,
    "categories": ["Installateur", "Photovoltaik", "Wärmepumpen", "Heizungsanlage"],
    "services": ["Bad- und Sanitärinstallationen", "Heizungsservice", "Rohrreinigung", "Notrufdienst"],
    "products": ["Heizungen", "Klimaanlagen", "Solaranlagen", "Wärmepumpen"],
    "description": "Die Firma Lugar wurde am 03.06.1996 von Herrn Christian Lugar MBA gegründet. ...",
    "openingHours": ["Monday 06:00-22:00", "Tuesday 06:00-22:00", "Wednesday 06:00-22:00"],
    "openNowText": "Jetzt geöffnet",
    "paymentMethods": ["Rechnung"],
    "foundingYear": 1996,
    "companyRegisterNumber": "FN 282492 f",
    "employees": null,
    "parking": "Kundenparkplatz",
    "verified": true,
    "recommended": true,
    "logo": "https://a.mktgcdn.com/p/i_UOqBZkaBvjB8aTLU5k4P5VLF4T-wb6z1nnbbO2N2w/600x600.jpg",
    "dataDate": "2026-10-27",
    "url": "https://www.herold.at/gelbe-seiten/wien/N1JdH/lugar-installateur-gmbh/",
    "searchCategory": "Installateur",
    "searchLocation": "Wien",
    "position": 1,
    "totalInSearch": 839,
    "detailsScraped": true,
    "scrapedAt": "2026-10-29T09:31:40.112Z"
}
```

A `RUN_SUMMARY` record in the key-value store lists, per category and location, the resolved Herold category, how many businesses Herold lists, how many were saved, and why each search stopped (for example a location Herold does not know).

### Integrations

Export the dataset as JSON, CSV, Excel, XML or HTML, or pull it with the Apify API and the JavaScript / Python clients. Connect it to Make, Zapier, n8n, Google Sheets, HubSpot or Slack with Apify integrations and webhooks, schedule weekly runs to keep your lead lists fresh, or call it from an AI agent through the Apify MCP server.

Need a custom scraper or a ready dataset? Hire me on Fiverr: https://www.fiverr.com/rel8ble

# Actor input Schema

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

What to search: Herold categories in German, one per line, e.g. "Installateur", "Steuerberater", "Zahnarzt", "Elektriker", "Rechtsanwälte", "Hotels". Every category is searched in every location below. A word that is not an exact Herold category is matched against Herold's Branchen A-Z list automatically (e.g. "Psychologe" -> "Psychologen").

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

Where to search: Austrian cities, Bundesländer or 4-digit postal codes, one per line, e.g. "Wien", "Graz", "Salzburg", "Tirol", "1010". Leave empty to search all of Austria.

## `startUrls` (type: `array`):

Optional. Result pages (https://www.herold.at/gelbe-seiten/wien/installateur/) and/or single business pages (https://www.herold.at/gelbe-seiten/wien/N1JdH/lugar-installateur-gmbh/), one per line. Use these instead of, or on top of, categories x locations.

## `maxResultsPerSearch` (type: `integer`):

Optional. Businesses saved per category-location pair, integer >= 0. Default 100; 0 = every listing (up to 6,000 per pair). You pay per business, so start small.

## `scrapeDetails` (type: `boolean`):

Optional boolean. true (default) = also open every business page for the Firmenbuchnummer, founding year, employees, fax, social links, opening hours, services, products, categories and coordinates. false = result list only (name, phone, email, website, address, rating): about 3x faster. Same price either way.

## `requireEmail` (type: `boolean`):

Optional filter. Skip businesses without an email address. Skipped businesses are not charged.

## `requireWebsite` (type: `boolean`):

Optional filter. Skip businesses without a website. Skipped businesses are not charged.

## `requirePhone` (type: `boolean`):

Optional filter. Skip businesses without a phone number. Skipped businesses are not charged.

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

Optional filter. Keep only listings Herold marks as "Verifiziert" (claimed and checked by the owner). Skipped businesses are not charged.

## `minRating` (type: `number`):

Optional filter, 0-5. Skip businesses rated below this (unrated businesses are skipped too). Skipped businesses are not charged.

## `maxConcurrency` (type: `integer`):

Optional, advanced. Parallel requests, integer 1-20. Default 8. Leave unset.

## `maxRequestRetries` (type: `integer`):

Optional, advanced. Retries per failed or blocked request, integer 0-20; each retry uses a new session. Default 6.

## `proxyConfiguration` (type: `object`):

Optional, advanced. Leave as is. Default {"useApifyProxy": false} = automatic: direct connection first, and only requests that get blocked are retried through Apify Proxy (datacenter, then residential). Set your own Apify Proxy groups or proxy URLs to force them for every request.

## Actor input object example

```json
{
  "categories": [
    "Installateur"
  ],
  "locations": [
    "Wien"
  ],
  "maxResultsPerSearch": 20,
  "scrapeDetails": true,
  "requireEmail": false,
  "requireWebsite": false,
  "requirePhone": false,
  "verifiedOnly": false,
  "maxConcurrency": 8,
  "maxRequestRetries": 6,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `businesses` (type: `string`):

One row per Austrian business: name, phone, email, website, address, Bezirk, Bundesland, rating, company register number, hours, services.

## `summary` (type: `string`):

Counts per category and location, filtered businesses and any input that is not a Herold category.

# 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": [
        "Installateur"
    ],
    "locations": [
        "Wien"
    ],
    "maxResultsPerSearch": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rel8ble/herold-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": ["Installateur"],
    "locations": ["Wien"],
    "maxResultsPerSearch": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("rel8ble/herold-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).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": [
    "Installateur"
  ],
  "locations": [
    "Wien"
  ],
  "maxResultsPerSearch": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call rel8ble/herold-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rel8ble/herold-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/oj2UVwY3cRbjjT3JI/builds/I0vufb9IWX5foTJgJ/openapi.json
