# Telefonbuch Scraper - German Business Directory (`studio-amba/telefonbuch-scraper`) Actor

Search and extract business listings from Das Telefonbuch (telefonbuch.de), Germany's classic phone-book directory. Get business names, categories, addresses, postal codes, cities, phone numbers, websites, and opening hours by trade/category and city. No API key, no login required.

- **URL**: https://apify.com/studio-amba/telefonbuch-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.00 / 1,000 result scrapeds

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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Telefonbuch Scraper — German Business Directory Data

Scrape business listings from [Das Telefonbuch](https://www.telefonbuch.de) (telefonbuch.de / dastelefonbuch.de), Germany's classic phone-book directory since 1881. Search by trade/category keyword and city, and export clean structured business records with names, categories, addresses, postal codes, cities, phone numbers, websites, and opening hours. No login, no cookies, no API key.

### Why use this actor?

Das Telefonbuch is one of the oldest and most complete business directories in Germany, covering craftsmen, doctors, lawyers, tax advisors, restaurants, salons, and every other trade that wants to be found by phone. Every listing carries the data a sales or research team actually needs: what the business does, where it sits, and how to reach it.

Typical uses:

- **Lead generation** — build prospect lists for a trade and city, ready for a CRM import.
- **Local market research** — count and map businesses per category and region, compare cities.
- **Data enrichment** — match business names to addresses, phone numbers, websites, and opening hours.
- **Competitor analysis** — list every provider in a category around a location.

The actor reads the server-rendered search results directly, so records are complete and consistent. It only returns contact details that businesses publish openly on the directory.

### How to scrape Telefonbuch data

1. Open the actor and set a **Search Query (Branche)** — a trade or category keyword in German, such as `Steuerberater`, `Friseur`, `Zahnarzt`, or `Restaurant`. Business names work too.
2. Set a **Location (Stadt)** — a city or town (`München`, `Berlin`, `Hamburg`).
3. Set **Max Results** to the number of businesses you want.
4. Keep the residential proxy prefill and click **Start**.
5. When the run finishes, export the dataset as JSON, CSV, or Excel, or pull it from the Apify API.

The actor requests the search results page and pages through it automatically (10 listings per page) until it reaches your Max Results or runs out of matching businesses.

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchQuery` | String | No | Trade or category keywords in German (e.g. `Steuerberater`, `Friseur`). Defaults to `Steuerberater` if empty. |
| `location` | String | No | City or town to search in (e.g. `München`, `Berlin`). Defaults to `München` if empty. |
| `maxResults` | Integer | No | Maximum number of businesses to return (default: 50, max: 1000). |
| `proxyConfiguration` | Object | No | Proxy settings. Residential proxies recommended. |

Example input:

```json
{
    "searchQuery": "Steuerberater",
    "location": "München",
    "maxResults": 100,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

### Output

One record per business listing:

| Field | Type | Description |
|-------|------|-------------|
| `businessName` | String | Business name as listed on Das Telefonbuch |
| `category` | String | Primary branche/category (e.g. `Steuerberatung`, `Friseure`) |
| `address` | String | Street address |
| `postalCode` | String | German postal code (PLZ) |
| `city` | String | City |
| `district` | String | City district (Stadtteil), when shown |
| `phone` | String | Phone number, when publicly listed |
| `website` | String | Business's own website, when published |
| `openingHours` | String | Opening status at scrape time (e.g. `Geöffnet bis 18:00 Uhr`) |
| `rating` | Number | Average customer rating (0–5), when shown |
| `reviewCount` | Number | Number of customer reviews, when shown |
| `imageUrl` | String | Business logo or listing image, when shown |
| `url` | String | Full URL of the business detail page on Das Telefonbuch |
| `listingId` | String | Internal Das Telefonbuch listing ID |
| `searchQuery` | String | The query that returned this business |
| `searchLocation` | String | The city used for the search |
| `scrapedAt` | String | ISO timestamp of the scrape |

Example output (from a real `Steuerberater` / `München` run):

```json
{
    "businessName": "Ebermann u. Partner Steuerberatungsgesellschaft mbB",
    "category": "Steuerberatung",
    "address": "Rindermarkt 17",
    "postalCode": "80331",
    "city": "München",
    "district": "Altstadt",
    "phone": "089 2 60 44 02",
    "website": "https://steuerberater-münchen.net",
    "openingHours": "Geöffnet bis 12:00 Uhr",
    "rating": 5,
    "reviewCount": 1,
    "imageUrl": "https://ies.v4all.de/200/TB/1126/3/6813/70516813_210x130.png",
    "url": "https://adresse.dastelefonbuch.de/M%C3%BCnchen/1-0099096133810-Steuerberatung-Ebermann-u-Partner-Steuerberatungsgesellschaft-mbB-M%C3%BCnchen-Rindermarkt.html",
    "listingId": "0099096133810",
    "searchQuery": "Steuerberater",
    "searchLocation": "München",
    "scrapedAt": "2026-07-31T09:12:41.412Z"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

### Cost estimate

The actor uses lightweight HTTP requests (no browser). Each request returns 10 businesses. A 100-result run typically finishes in under a minute and uses only a few cents of platform credits plus the per-result fee.

### Tips

- Search queries and locations are the same words you would type on telefonbuch.de. German keywords match best (`Rechtsanwalt`, not `lawyer`).
- Multi-word queries are fine: `Italienisches Restaurant`.
- Websites, ratings, and opening hours only appear when the business publishes them; expect them on a subset of records.
- The actor targets `dastelefonbuch.de` directly — telefonbuch.de's own search form redirects there for every query, so results are identical either way.

### Limitations

- The actor scrapes the search results list, not the full detail pages. Fields that only exist on detail pages (full weekly opening-hours tables, email addresses, extra photos) are not included — `openingHours` is the current status snippet shown on the listing card, not a weekly table.
- Das Telefonbuch covers Germany only.
- Very deep pagination (roughly page 90+ on categories with 900+ results) can hit the site's own backend timeout; the actor stops cleanly instead of failing the whole run when that happens.

### Legal

This actor only extracts business information that is publicly listed on the Das Telefonbuch directory, where businesses publish it precisely to be found and contacted. No login is bypassed and no private data is collected. You are responsible for using the data in compliance with applicable laws (GDPR, competition law) in your jurisdiction.

### Related scrapers

- [Gelbe Seiten Scraper](https://apify.com/studio-amba/gelbeseiten-scraper) — Germany's other major yellow-pages directory, same business-listing fields.
- [Pages Jaunes Scraper](https://apify.com/studio-amba/pagesjaunes-scraper) — the French equivalent business directory.
- [Firmenbuch Scraper](https://apify.com/studio-amba/firmenbuch-scraper) — Austrian company register data for deeper company-level enrichment.

### Need this data on a schedule, or a custom version?

We run this scraper as a managed service for businesses: scheduled runs,
deduplication, delta detection, and delivery to your inbox, Google Sheets,
or API — maintenance included. We can also build a custom version with your
exact fields and filters, or combine multiple sources into one feed.

See [studioamba.dev/services](https://studioamba.dev/services/) or email
<hello@studioamba.dev> for a free data sample.
We maintain 300+ European web scrapers and answer within one business day.

# Actor input Schema

## `searchQuery` (type: `string`):

Trade, category, or business keywords in German (e.g. 'Steuerberater', 'Friseur', 'Zahnarzt', 'Restaurant'). Business names also work.

## `location` (type: `string`):

City or town to search in (e.g. 'München', 'Berlin', 'Hamburg').

## `maxResults` (type: `integer`):

Maximum number of businesses to return. Results load in pages of 10.

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

Proxy settings. Residential proxies recommended for reliable access.

## Actor input object example

```json
{
  "searchQuery": "Steuerberater",
  "location": "München",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "searchQuery": "Steuerberater",
    "location": "München",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/telefonbuch-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 = {
    "searchQuery": "Steuerberater",
    "location": "München",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/telefonbuch-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 '{
  "searchQuery": "Steuerberater",
  "location": "München",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call studio-amba/telefonbuch-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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