# dasoertliche.de Scraper (`plowdata/das-oertliche`) Actor

Extract German business leads and company data from Das Örtliche (dasoertliche.de) with clean, structured output. Each result represents one deduplicated business listing and includes phone numbers, addresses, reviews, and rich profile data - ready for analysis, enrichment, or automation workflows.

- **URL**: https://apify.com/plowdata/das-oertliche.md
- **Developed by:** [Frederic](https://apify.com/plowdata) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.35 / 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

## Das Örtliche Scraper

Turn **Das Örtliche (dasoertliche.de)** into a clean, structured **German business lead and company intelligence dataset**.

This actor is built for users who want to extract **high-quality local business listings** — including **phone numbers, addresses, websites, opening hours, and rich profile data** — in a format that’s immediately usable for analysis, outreach, or automation.

---

### 🚀 Built for agencies & data workflows

This scraper focuses on **reliability, consistency, and maintainability**, making it ideal for production pipelines and recurring data collection.

* **One listing = one row**
  Each business is emitted once and deduplicated automatically, ensuring clean datasets across runs.

* **Structured, canonical output**
  All data is normalized into a consistent schema, making it easy to combine with other sources or plug into existing pipelines.

* **Rich contact information**
  Phone numbers, addresses, websites, and additional links are extracted wherever available.

* **Deep profile extraction**
  Includes opening hours, taxonomies, services, media, and other structured metadata when present.

* **No hard page limit**
  Automatically paginates through all available results and stops only when the directory is exhausted.

* **Built for unattended runs**
  Handles missing fields, partial failures, and layout changes gracefully. Logs unknown page changes for fast debugging and maintenance.

* **Clean exports by default**
  Works out of the box with CSV, Excel, JSON, XML, and Apify’s table view.

---

### 🎯 Typical use cases

* **Local Lead Generation** – Build German business lead lists by category and location
* **Sales & Marketing** – Extract verified contact data for outreach campaigns
* **Market Research** – Analyze industries, services, and local competition
* **Data Enrichment** – Augment existing datasets with structured business data
* **Automation Pipelines** – Feed normalized business data into CRMs or internal tools

---

### ⚙️ Input

| Parameter  |   Type | Default | Description                                                                 |
| ---------- | -----: | ------: | --------------------------------------------------------------------------- |
| `query`    | string |       — | Search term you’d type on Das Örtliche (required).                          |
| `location` | string |       — | Location to search in (optional). Defaults to broader search scope.         |
| `maxPages` | number |       — | Maximum number of pages to scrape. If not set, all pages are processed.     |

Example:

```json
{
  "query": "Elektriker",
  "location": "Hamburg"
}
````

## 📦 Output: canonical business data

Each dataset row represents one business listing, normalized into a consistent, schema-validated structure.

The output is designed for both:

- Flat usage (spreadsheets, CRMs)
- Nested usage (APIs, automation pipelines)

### ⭐ Commonly used fields

- `name`
- `address`
- `phones[]`
- `links[]` (website, email, etc.)
- `openingHours`
- `services`

## 📘 Schema overview

All records follow a canonical business schema, allowing seamless integration across multiple data sources.

- Identity & provenance
  - `provenance.sourceId` – Always dasoertliche.de
  - `provenance.sourceUrl` – Original listing URL
  - `scrapedAt` – Timestamp of extraction
- Contact & location
  - `address` – Structured address fields
  - `phones[]` – Normalized phone numbers (raw and parsed to E.164)
  - `links[]` – Website, email, and other links
  - `social[]` – Social media profiles (if available)
- Operations
  - `openingHours[]` – Structured weekly schedule
- Business content
  - `taxonomies` – Source-specific categories and tags
  - `services`, `products`, `brands` – Extracted where available
- Reputation
  - `ratings[]` – Aggregated ratings from various sources
  - `reviews[]` – Individual reviews (if present)
- Media & extras
  - `media[]` – Images and videos
  - `faq[]` – Structured Q\&A content
  - `extra` – Source-specific data not covered by the schema

## 🛡️ Reliability & guarantees

- Strongly typed, schema-validated output
- Automatic recovery from transient errors
- Safe to stop and restart without duplicating results
- Continues scraping even if individual fields are missing
- Logs structural changes for quick scraper updates

## 👥 Target audience

This scraper is designed for:

- Agencies & Sales Teams – Build high-quality local lead lists
- Business Owners – Research competitors and local markets
- Data Teams – Integrate structured business data into pipelines
- Automation Builders – Use normalized output across multiple sources

## 💬 Support

Questions, edge cases, or unexpected output?

Attach a run log or example URL — fixes are usually quick.

# Actor input Schema

## `query` (type: `string`):

Search query for the Das Örtliche search.

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

Location for the Das Örtliche search, optional.

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

Maximum number of pages to scrape, optional, by default all pages are scraped.

## Actor input object example

```json
{
  "query": "Cafe",
  "location": "Berlin",
  "maxPages": 1
}
```

# Actor output Schema

## `companies` (type: `string`):

Extracted companies

# 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 = {
    "query": "Cafe",
    "location": "Berlin",
    "maxPages": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("plowdata/das-oertliche").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 = {
    "query": "Cafe",
    "location": "Berlin",
    "maxPages": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("plowdata/das-oertliche").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 '{
  "query": "Cafe",
  "location": "Berlin",
  "maxPages": 1
}' |
apify call plowdata/das-oertliche --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "dasoertliche.de Scraper",
        "description": "Extract German business leads and company data from Das Örtliche (dasoertliche.de) with clean, structured output. Each result represents one deduplicated business listing and includes phone numbers, addresses, reviews, and rich profile data - ready for analysis, enrichment, or automation workflows.",
        "version": "1.0",
        "x-build-id": "XOnY4eWwgy3cUQM0V"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/plowdata~das-oertliche/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-plowdata-das-oertliche",
                "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/plowdata~das-oertliche/runs": {
            "post": {
                "operationId": "runs-sync-plowdata-das-oertliche",
                "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/plowdata~das-oertliche/run-sync": {
            "post": {
                "operationId": "run-sync-plowdata-das-oertliche",
                "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": [
                    "query"
                ],
                "properties": {
                    "query": {
                        "title": "Query",
                        "type": "string",
                        "description": "Search query for the Das Örtliche search."
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Location for the Das Örtliche search, optional."
                    },
                    "maxPages": {
                        "title": "Max Pages",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of pages to scrape, optional, by default all pages are scraped."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
