# Gelbe Seiten Scraper (`parsebird/gelbeseiten-scraper`) Actor

Extract German business listings from Gelbe Seiten: names, addresses, phones, ratings, opening hours, and reviews.

- **URL**: https://apify.com/parsebird/gelbeseiten-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.99 / 1,000 businesses

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/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

### Gelbe Seiten Scraper

Extract structured business data from [Gelbe Seiten](https://www.gelbeseiten.de) — Germany's largest business directory — by keyword and city, postal code, or direct URL. Gelbe Seiten Scraper returns names, addresses, phone numbers, websites, ratings, opening hours, categories, services, and reviews for any German business category, ready for lead generation, market research, or local SEO analysis.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Search by keyword and city or postal code, sort by rating, or paste Gelbe Seiten URLs directly — get 20+ structured fields per business, with optional review, photo, and opening-hours enrichment.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor: Actor ID `parsebird/gelbeseiten-scraper`; call it with the Apify API or `ApifyClient` — e.g. in Python: `from apify_client import ApifyClient; client = ApifyClient("<APIFY_TOKEN>"); run = client.actor("parsebird/gelbeseiten-scraper").call(run_input={"searchQueries": ["Restaurant"], "location": "Berlin", "sort": "relevanz", "includeReviews": True, "maxReviewsPerBusiness": 20, "maxResults": 100}); items = client.dataset(run["defaultDatasetId"]).list_items().items`; key inputs are `searchQueries` (string array, default `["Restaurant"]`), `location` (string, default `"Berlin"`), `searchUrls` (string array of Gelbe Seiten URLs, default `[]`), `sort` (`"relevanz"` or `"bewertung"`, default `"relevanz"`), `includeReviews` (boolean, default `true`), `maxReviewsPerBusiness` (integer, default `20`, `0` = uncapped), and `maxResults` (integer, default `100`, `0` = uncapped); output is one JSON object per business with name, categories, description, phone, email, website, street/postalCode/city/district/country, latitude/longitude, rating/ratingCount, openingHours, services, socialLinks, images, and a nested reviews array; full API spec is on the Actor's API tab in Apify Console, and an API token is available under Settings → Integrations.

### What does Gelbe Seiten Scraper do?

Gelbe Seiten Scraper automates the two ways people use [Gelbe Seiten](https://www.gelbeseiten.de) — Germany's equivalent of the Yellow Pages — to find businesses: keyword + location search, and direct business or category URLs.

- 🔍 **Keyword + city search** — search any German business category (Restaurant, Klempner, Steuerberater, Friseur, Rechtsanwalt, Notar…) in any German city or by 5-digit postal code (PLZ)
- ⭐ **Sort by rating** — pull the highest-rated providers first instead of Gelbe Seiten's default relevance order
- 🔗 **Direct URL mode** — paste search-result pages, category pages, or single business (`/gsbiz/...`) pages and the actor honors any filters already in the URL
- 📋 **Full business profiles** — optionally enrich each result with reviews, opening hours, description, services, photos, and social links from the business's own Gelbe Seiten page
- 💸 **Lead-only mode** — turn off profile enrichment for the fastest, cheapest run: names, addresses, phones, websites, ratings, and primary categories only, with zero review charges
- 🇩🇪 **Germany-wide coverage** — works across every German city, district, and postal code Gelbe Seiten indexes

Like [Fotocasa Scraper](https://apify.com/parsebird/fotocasa-scraper) for Spanish real estate or [YellowPages Scraper](https://apify.com/parsebird/yellowpages-scraper) for the US directory, Gelbe Seiten Scraper turns a directory site into structured, exportable data — no manual copy-pasting, no CAPTCHA-solving, no rate-limit babysitting.

Run it on-demand from the Apify Console, [schedule](https://docs.apify.com/platform/schedules) it to refresh a lead list daily or weekly, or call it from your own code via the [Apify API](https://docs.apify.com/api/v2) or [Python](https://docs.apify.com/api/client/python)/[JavaScript](https://docs.apify.com/api/client/js) client and pipe results straight into a CRM, spreadsheet, or database through Apify's [integrations](https://apify.com/integrations) (Zapier, Make, Google Sheets, Slack, and more).

### What data can you extract from Gelbe Seiten?

| Field | Description |
|-------|-------------|
| `name` | Business name |
| `categories` | Gelbe Seiten business category/categories |
| `description` | Business description, when the profile has one |
| `phone`, `email`, `website` | Contact details |
| `street`, `postalCode`, `city`, `district` | Structured German address |
| `latitude`, `longitude` | GPS coordinates (profile pages only) |
| `rating`, `ratingCount` | Average star rating and total number of ratings |
| `openingHours` | Per-weekday opening and closing times |
| `services` | Services/specialties listed on the business's profile |
| `socialLinks`, `images` | Social media links and photo gallery, when published |
| `reviews` | Rating, date, title, preview text, and source for each visible review |

See the full field reference in [Output](#output) below.

### How to scrape Gelbe Seiten with Gelbe Seiten Scraper

1. Open Gelbe Seiten Scraper on the [Apify Store](https://apify.com/parsebird/gelbeseiten-scraper) and click **Try for free**.
2. Enter one or more **search terms** (e.g. `Restaurant`, `Klempner`, `Steuerberater`) and a **location** — a city name or postal code.
3. Optionally set **sort order** to "Highest Rated First", and decide whether you need full profile data (reviews, hours, photos) or just lead fields (name, address, phone, rating).
4. Set **max results** and, if profile data is on, a cap on reviews per business.
5. Click **Start** and download results as JSON, CSV, or Excel once the run finishes.

Prefer URLs? Paste any Gelbe Seiten search-result page, category page, or business page into **Direct URLs** instead of (or alongside) search terms — the actor reads whatever sort order or postal-code filter is already in the URL.

### How much does it cost to scrape Gelbe Seiten?

Gelbe Seiten Scraper uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize#pay-per-event-pricing) pricing — you pay only for businesses and reviews actually returned, not for compute time.

| Event | What it covers | Price per 1,000 |
|-------|-----------------|------------------|
| `business-scraped` | A business row in your dataset | **$1.39 / $1.19 / $1.09 / $0.99** (Free / Bronze / Silver / Gold) |
| `review-scraped` | A review inside a business's `reviews` array (only when profile data is on) | **$0.39 / $0.29 / $0.19 / $0.19** (Free / Bronze / Silver / Gold) |

A `business-scraped` event fires once per business row in your dataset. A `review-scraped` event fires once per review returned inside that business's `reviews` array. On the Free plan, scraping 1,000 businesses with profile data off costs about $1.39, while 1,000 businesses averaging 5 reviews each with profile data on costs roughly $1.39 + (5,000 × $0.00039) ≈ $3.34. Turn off **Include detailed profile data** for lead-generation runs to avoid review charges entirely. Apify's free monthly platform usage credits apply to this actor like any other.

### Input

The full input reference is on the Actor's [Input tab](https://apify.com/parsebird/gelbeseiten-scraper/input-schema) in Apify Console.

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `searchQueries` | string\[] | No | `["Restaurant"]` | Search terms (business category/keyword) |
| `location` | string | No | `"Berlin"` | City name or 5-digit postal code |
| `searchUrls` | string\[] | No | `[]` | Direct Gelbe Seiten search, category, or business URLs |
| `sort` | select | No | `relevanz` | `relevanz` (default) or `bewertung` (highest rated first) |
| `includeReviews` | boolean | No | `true` | Fetch each business's profile page for reviews, hours, description, services, photos, and social links |
| `maxReviewsPerBusiness` | integer | No | `20` | Cap on reviews per business; `0` = every review Gelbe Seiten renders on the page |
| `maxResults` | integer | No | `100` | Hard cap on total business rows across all search terms and URLs; `0` = no cap |

### Output example

```json
{
    "name": "Bass Gastro UG",
    "url": "https://www.gelbeseiten.de/gsbiz/00000000-0000-0000-0000-000000000000",
    "gelbeseitenId": "00000000-0000-0000-0000-000000000000",
    "categories": ["Gaststätten und Restaurants"],
    "description": "Familiengeführtes italienisches Restaurant im Herzen von Köpenick...",
    "phone": "+49 30 12345678",
    "email": "info@example.de",
    "website": "https://www.example.de",
    "street": "Beispielstraße 12",
    "postalCode": "12555",
    "city": "Berlin",
    "district": "Köpenick",
    "country": "DE",
    "latitude": 52.4561,
    "longitude": 13.5712,
    "rating": 4.9,
    "ratingCount": 233,
    "openingHours": [
        { "day": "Monday", "open": "11:30", "close": "22:00" },
        { "day": "Tuesday", "open": "11:30", "close": "22:00" }
    ],
    "services": ["Lieferung", "Außerhausverkauf"],
    "socialLinks": { "instagram": "https://www.instagram.com/example" },
    "images": ["https://www.golocal.de/media/.../ori_example.jpg"],
    "reviews": [
        {
            "author": null,
            "rating": 5.0,
            "date": "2024-04-02",
            "title": "Sehr empfehlenswert",
            "body": "Tolles Essen, freundlicher Service, schöne Atmosphäre.",
            "source": "KennstDuEinen",
            "sourceUrl": "https://www.kennstdueinen.de/...#id748169",
            "reviewId": "748169"
        }
    ],
    "searchQuery": "Restaurant",
    "searchLocation": "Berlin",
    "scrapedAt": "2026-09-17T14:30:00Z"
}
```

Download results as **JSON, CSV, Excel, HTML, or XML** from the Console, or pull them programmatically via the [dataset API](https://docs.apify.com/api/v2#/reference/datasets).

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("parsebird/gelbeseiten-scraper").call(run_input={
    "searchQueries": ["Klempner"],
    "location": "München",
    "sort": "bewertung",
    "maxResults": 100,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["name"], item["phone"], item["rating"])
```

#### JavaScript

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

const client = new ApifyClient({ token: '<APIFY_TOKEN>' });
const run = await client.actor('parsebird/gelbeseiten-scraper').call({
    searchQueries: ['Steuerberater'],
    location: 'Hamburg',
    includeReviews: false,
    maxResults: 1000,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Is it legal to scrape Gelbe Seiten?

Gelbe Seiten Scraper only collects data that businesses have published publicly on Gelbe Seiten's own listing pages. Scraping publicly available data is generally legal, but you're responsible for how you use the data — always comply with GDPR when handling personal data (such as reviewer information) and with Gelbe Seiten's own [terms of service](https://www.gelbeseiten.de/agb). See Apify's [guide to web scraping legality](https://blog.apify.com/is-web-scraping-legal/) for more background.

### Other Gelbe Seiten and directory scrapers

- [YellowPages Scraper](https://apify.com/parsebird/yellowpages-scraper) — the same workflow for the US Yellow Pages
- Browse the [ParseBird Store profile](https://apify.com/parsebird) for more location- and lead-focused actors

### FAQ

**Do I need proxies or an Apify subscription to run this?**
No. Gelbe Seiten Scraper handles requests internally with no separate proxy setup required. Any Apify plan, including the free tier, can run it — you pay per business/review scraped through pay-per-event pricing.

**Why is a field like `latitude`, `openingHours`, or `reviews` empty?**
Those fields come from each business's full Gelbe Seiten profile page. Turn on **Include detailed profile data** to fetch them — with it off, you get fast, cheap search-card data only (name, address, phone, website, rating, primary category).

**Are review bodies always the full text?**
Gelbe Seiten itself only renders a short preview of longer reviews and titles on its own pages (ending in "…"); the actor returns exactly what's visible there. Short reviews are usually complete.

**Does Gelbe Seiten expose reviewer names?**
No — Gelbe Seiten anonymizes reviewer identities on its public pages, so `author` is always `null`.

**Why does the same business sometimes appear twice?**
Gelbe Seiten occasionally lists one real-world business under two separate internal listing IDs (e.g. merged from different source directories). The actor deduplicates by Gelbe Seiten's own listing ID, so a rare source-side duplicate can still appear twice — dedupe further downstream by `name` + `postalCode` if this matters for your use case.

**Can I filter by radius or open-now status?**
Not through dedicated input fields, but you can paste a Gelbe Seiten URL with those filters already applied into **Direct URLs** and the actor will honor them.

**Can I schedule recurring runs?**
Yes — use Apify's [Schedules](https://docs.apify.com/platform/schedules) feature to refresh your lead list daily, weekly, or at any interval, and combine it with [webhooks](https://docs.apify.com/platform/integrations/webhooks) or [integrations](https://apify.com/integrations) to push new results wherever you need them.

**I found a bug or a business page that doesn't parse correctly. Where do I report it?**
Open an issue on the Actor's [Issues tab](https://apify.com/parsebird/gelbeseiten-scraper/issues) in Apify Console with the URL that failed — Gelbe Seiten's page templates vary slightly by listing type, and reports help prioritize fixes.

**Can I use this actor via API?**
Yes — every Apify Actor is API-first. See the [API tab](https://apify.com/parsebird/gelbeseiten-scraper/api) for ready-made request examples in multiple languages, or use the [Python](https://docs.apify.com/api/client/python) or [JavaScript](https://docs.apify.com/api/client/js) client as shown above.

# Changelog

This Actor's version history is a separate document: https://apify.com/parsebird/gelbeseiten-scraper/changelog.md

# Actor input Schema

## `searchQueries` (type: `array`):

What to search for on Gelbe Seiten (e.g. Restaurant, Klempner, Steuerberater, Friseur). One row per term.

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

Where to search in Germany. A city name (e.g. Berlin, München, Hamburg) or a 5-digit postal code (e.g. 10115). Leave empty if your search terms already include a location, or if you're only using direct URLs.

## `searchUrls` (type: `array`):

Paste Gelbe Seiten URLs directly: search-result pages, category pages, or individual business pages (gelbeseiten.de/gsbiz/...). Filters already in the URL (sort order, postal code) are honored as-is.

## `sort` (type: `string`):

Order of results. "Highest Rated First" surfaces the top-rated businesses from row 1 instead of Gelbe Seiten's default relevance order.

## `includeReviews` (type: `boolean`):

Visit each business's page to collect reviews, opening hours, description, services, photos, and social links. Turn off for a faster, cheaper run that returns only search-card data (name, address, phone, website, rating, primary category).

## `maxReviewsPerBusiness` (type: `integer`):

Cap on reviews captured per business (most recent/relevant first, as shown on the business page). Set to 0 to capture every review Gelbe Seiten renders on the page. Ignored when "Include detailed profile data" is off.

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

Hard cap on total business rows across all search terms and URLs. Set to 0 for no cap. The run stops requesting new pages once this number is reached.

## Actor input object example

```json
{
  "searchQueries": [
    "Restaurant"
  ],
  "location": "Berlin",
  "searchUrls": [],
  "sort": "relevanz",
  "includeReviews": true,
  "maxReviewsPerBusiness": 20,
  "maxResults": 20
}
```

# Actor output Schema

## `dataset` (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 = {
    "searchQueries": [
        "Restaurant"
    ],
    "location": "Berlin",
    "searchUrls": [],
    "includeReviews": true,
    "maxReviewsPerBusiness": 20,
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/gelbeseiten-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 = {
    "searchQueries": ["Restaurant"],
    "location": "Berlin",
    "searchUrls": [],
    "includeReviews": True,
    "maxReviewsPerBusiness": 20,
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/gelbeseiten-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 '{
  "searchQueries": [
    "Restaurant"
  ],
  "location": "Berlin",
  "searchUrls": [],
  "includeReviews": true,
  "maxReviewsPerBusiness": 20,
  "maxResults": 20
}' |
apify call parsebird/gelbeseiten-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/gelbeseiten-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/HaHP9ecaggjaMbEnF/builds/y2nEcTumFvSXtsLkA/openapi.json
