# Hochzeitsportal24 Scraper — German Wedding Vendor Contact Data (`studio-amba/hochzeitsportal24-scraper`) Actor

Extract German wedding vendor leads from Hochzeitsportal24.de — 22,000+ venues, photographers, DJs, florists, caterers and more across 18 categories. Returns verified name, email, phone, website, address, coordinates and rating for every vendor. No login required.

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

## Pricing

from $1.20 / 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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## Hochzeitsportal24 Scraper — German Wedding Vendor Contact Data

Extract wedding vendor leads from [Hochzeitsportal24.de](https://www.hochzeitsportal24.de/), Germany's national wedding-vendor directory: over 22,000 venues, photographers, DJs, florists, caterers, wedding planners, dressmakers, and more, listed across 18 categories. This actor returns each vendor's name, category, email, phone, website, address, coordinates, and rating — a ready-to-use B2B contact list, not just a scraped web page.

Hochzeitsportal24 runs on an Angular single-page app, but the frontend calls a fully open, unauthenticated JSON API to load its listings. This actor talks to that API directly. No browser rendering, no anti-bot bypass, no login — which means fast runs and low compute cost per result.

### How to scrape Hochzeitsportal24 data

This actor paginates the directory's own listing API and normalizes every vendor record into a flat, structured row. You can pull the entire national directory or scope the run to a single category.

#### Scrape the full national directory

Leave the **Category** field empty and set **Max Results** to however many vendors you need. The actor walks through all 18 categories and returns vendors in the order the API serves them, deduplicated by vendor ID.

#### Scrape a single category

Set **Category** to a category slug to scope the run to one vendor type. The actor first resolves the slug against the directory's live category list, then filters every subsequent page request to just that category. Supported slugs (confirmed live, 2026-07-23):

| Slug | Category |
|------|----------|
| `hochzeitslocations` | Venues (Festsaal, Schloss, Zeltverleih) |
| `brautkleid` | Wedding dresses & bridal fashion |
| `hochzeitsfrisuren` | Hair & make-up |
| `braeutigam` | Groom's fashion |
| `hochzeitstorte` | Wedding cakes |
| `wedding-planer` | Wedding planners |
| `hochzeitsautos` | Wedding cars |
| `catering` | Catering & party service |
| `freie-redner` | Wedding officiants (Trauredner) |
| `blumen-deko` | Flowers & decoration |
| `einladungskarten` | Invitations & stationery |
| `trauringe` | Wedding rings |
| `hochzeitsfotos` | Photographers |
| `hochzeitsvideo` | Videographers |
| `fotobox` | Photo booths |
| `djs` | DJs |
| `musiker` | Live musicians |
| `unterhaltung` | Entertainment |

If a slug doesn't match a live category, the actor logs a warning and falls back to scraping all vendors rather than failing the run.

#### Pagination

Requests are batched at 500 vendors per page (the verified ceiling for this API — well above the 20–48 vendors a browser session normally requests). Against the 22,010-vendor directory, pulling every vendor takes under 50 requests.

### What data does Hochzeitsportal24 Scraper extract?

| Field | Type | Description |
|-------|------|-------------|
| **name** | String | Vendor / business name |
| **category** | String | Category title (e.g. "Hochzeitsfotos") |
| **description** | String | Vendor description or summary, where the vendor has filled one in |
| **email** | String | Contact email |
| **phone** | String | Landline or mobile contact number |
| **website** | String | Vendor's own website |
| **city** | String | City the vendor is based in |
| **latitude** | Number | Location latitude |
| **longitude** | Number | Location longitude |
| **rating** | Number | Average customer rating (1–5), where reviews exist |
| **reviewCount** | Number | Number of reviews |
| **packageTier** | String | Vendor's listing package on the directory (e.g. `FREE`) |
| **url** | String | Vendor's public profile page on Hochzeitsportal24 |
| **scrapedAt** | String | ISO timestamp of extraction |

#### Measured field coverage (live 500-vendor sample, 2026-07-23)

- **Email: 96.8%**
- **Phone/mobile: 98.0%**
- **Website: 100%**
- **City, latitude, longitude: 100%**
- **Rating: ~3.6%** (most vendors have no reviews yet — this field is genuinely sparse across the directory, not a scraping gap)

This is a real contact-lead dataset. The vast majority of vendors have a working email and phone number attached, which is rare for a general business directory scrape.

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|--------------|
| **Category** | String | none (all) | Optional category slug filter, see table above |
| **Max Results** | Integer | `100` | Maximum vendors to return (actor paginates 500 per request) |
| **Proxy Configuration** | Object | none | Optional — this is an open API with no anti-bot, no proxy required |

### Example output

```json
{
    "name": "Maßatelier Renate Kraft Couture",
    "category": "Brautmode",
    "description": "",
    "email": "kontakt@renatekraftcouture.com",
    "phone": "069 7073921",
    "website": "http://www.renatekraftcouture.com",
    "city": "Frankfurt am Main",
    "latitude": 50.16172,
    "longitude": 8.66339,
    "rating": null,
    "reviewCount": 0,
    "packageTier": "FREE",
    "url": "https://www.hochzeitsportal24.de/anbieter/massatelier-renate-kraft-couture",
    "scrapedAt": "2026-07-23T19:44:30.662Z"
}
````

### Common use cases

- Build a B2B outreach list of German wedding vendors by category or nationwide.
- Source suppliers for a wedding-planning business (venues, caterers, florists, photographers).
- Market research on vendor pricing tiers, geographic density, or category coverage across Germany.
- Feed vendor contact data into a CRM, cold-email tool, or lead-scoring pipeline.
- Competitive mapping for wedding-industry SaaS or marketplace products.

### Cost estimate

Pricing is pay-per-result. Each run paginates a single lightweight JSON endpoint (500 vendors per request) with no browser rendering, no proxy, and no anti-bot handling — compute cost per run is negligible, so nearly all of the result price reflects the value of the contact data itself.

### Limitations

- `description` is empty for the majority of vendors — most haven't filled in a profile description on the directory.
- `rating` and `reviewCount` are only populated where the vendor has received reviews (~3.6% of the directory has a rating).
- Data reflects what vendors have entered into their own directory profile; email/phone accuracy depends on the vendor keeping their listing current.
- Category coverage depends on the directory's own 18 fixed categories.

### Related scrapers

- **PagesJaunes Scraper** — French business directory (Annuaire Professionnel France).
- **Mariages.net Scraper** — French wedding vendor marketplace data.
- **BRREG Scraper** — official Norwegian business register lookups.

### Data source and legality

This actor reads publicly available vendor listings directly from Hochzeitsportal24's own open REST API, which the directory's own website uses to render its listings. It does not access any login-protected or paid area, and does not bypass any technical access control (no CORS restriction, no auth, no anti-bot exists on this endpoint).

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

## `category` (type: `string`):

Optional. Filter vendors by category slug. Leave empty to scrape all 18 categories. Examples: 'hochzeitslocations' (venues), 'brautkleid' (wedding dresses), 'djs', 'hochzeitsfotos' (photographers), 'catering', 'blumen-deko' (florists), 'trauringe' (wedding rings), 'wedding-planer'.

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

Maximum number of vendors to return. The actor paginates the open API (500 per page) until this many results are collected.

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

Optional. This actor reads Hochzeitsportal24's open REST API directly — no anti-bot protection, no proxy required. Leave empty unless you need a specific proxy.

## Actor input object example

```json
{
  "maxResults": 50,
  "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 = {
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

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

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

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Hochzeitsportal24 Scraper — German Wedding Vendor Contact Data",
        "description": "Extract German wedding vendor leads from Hochzeitsportal24.de — 22,000+ venues, photographers, DJs, florists, caterers and more across 18 categories. Returns verified name, email, phone, website, address, coordinates and rating for every vendor. No login required.",
        "version": "0.0",
        "x-build-id": "OvLPJkY9zXhscVaCO"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/studio-amba~hochzeitsportal24-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-studio-amba-hochzeitsportal24-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/studio-amba~hochzeitsportal24-scraper/runs": {
            "post": {
                "operationId": "runs-sync-studio-amba-hochzeitsportal24-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/studio-amba~hochzeitsportal24-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-studio-amba-hochzeitsportal24-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",
                "properties": {
                    "category": {
                        "title": "Category",
                        "type": "string",
                        "description": "Optional. Filter vendors by category slug. Leave empty to scrape all 18 categories. Examples: 'hochzeitslocations' (venues), 'brautkleid' (wedding dresses), 'djs', 'hochzeitsfotos' (photographers), 'catering', 'blumen-deko' (florists), 'trauringe' (wedding rings), 'wedding-planer'."
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 22010,
                        "type": "integer",
                        "description": "Maximum number of vendors to return. The actor paginates the open API (500 per page) until this many results are collected.",
                        "default": 100
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional. This actor reads Hochzeitsportal24's open REST API directly — no anti-bot protection, no proxy required. Leave empty unless you need a specific proxy."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
