German Website Impressum Scraper
Pricing
Pay per event
German Website Impressum Scraper
Find public Impressum pages on supplied German business websites and extract legal company, address, contact, VAT, register, and representative records with source evidence.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Turn a list of public German company websites into evidence-backed legal and contact records. The Actor finds each site's statutory Impressum, then extracts the legal company name, address, public email and phone, VAT ID, commercial register details, representatives, and short source excerpts.
It is designed for recurring B2B lead enrichment, CRM cleanup, supplier research, and compliance triage where a homepage alone does not provide the legal entity behind a brand. You provide the websites; the Actor performs bounded same-site discovery and returns one typed result row per unique input URL.
What does this German website scraper do?
For every submitted homepage or direct legal-notice URL, the Actor:
- validates that the target is a public HTTP or HTTPS URL;
- downloads the supplied page as lightweight HTML;
- follows a same-host link labelled
Impressum,Imprint, orAnbieterkennzeichnung; - tries a bounded set of conventional Impressum paths when no link is available;
- detects statutory German legal labels;
- extracts normalized lead fields and source evidence;
- records every URL checked and a clear
found,not_found, orerroroutcome.
Direct Impressum URLs are supported too. In that case, the Actor avoids an unnecessary homepage crawl.
Who is it for?
- Sales operations teams enriching a domain list before account assignment.
- Revenue operations teams matching brands to their legal entities in a CRM.
- Procurement teams collecting displayed supplier identity and register evidence.
- Market researchers building structured samples of German business websites.
- Compliance analysts triaging public legal-notice coverage before manual review.
- Data engineers feeding recurring website enrichment into a warehouse or spreadsheet.
The Actor does not discover companies from Google or another directory. It processes the public website URLs that you supply.
Why use structured Impressum records?
German legal notices often contain fields that are absent from a homepage or contact page:
- the exact legal entity rather than only a trading brand;
- a registered or service address;
- managing directors or board representatives;
- VAT identification and commercial register numbers;
- a register court;
- editorial responsibility details;
- direct evidence from the source page.
Unlike a generic contact extractor, this Actor keeps the located Impressum URL, checked-page trail, processing status, and bounded evidence excerpts next to the extracted values. That makes downstream review and refresh workflows easier.
What data can I extract?
| Field | Meaning |
|---|---|
inputUrl | Original normalized website or Impressum URL |
inputDomain | Hostname from the input |
resolvedDomain | Hostname after redirects |
status | found, not_found, or error |
imprintUrl | Located public legal-notice URL |
companyName | Displayed legal company or organization name |
legalForm | Detected form such as GmbH, AG, KG, SE, or e.V. |
address | Displayed legal or registered address text |
emails | Public email addresses on the legal page |
phoneNumbers | Public phone numbers on the legal page |
vatId | Displayed German VAT ID |
registrationCourt | Register or local court text |
registrationNumber | HRB or HRA number |
representatives | Managing directors, board members, or representatives |
responsiblePerson | Editorially responsible person when displayed |
sourceEvidence | Short legal-label excerpts supporting the fields |
pagesChecked | Pages visited during bounded discovery |
httpStatus | Last relevant HTTP status |
errorMessage | Bounded failure diagnostic |
scrapedAt | ISO 8601 extraction timestamp |
Website markup varies. Any unavailable extracted field is returned as null or an empty
array rather than being invented.
How to run the German Website Impressum Scraper
- Open the Actor in Apify Console.
- Add one or more company homepages or direct Impressum URLs to Company website URLs.
- Keep Maximum pages per website at
6for normal discovery. - Set Maximum websites to cap the batch.
- Click Start.
- Open the Impressum leads dataset view or export it as JSON, CSV, Excel, XML, or RSS.
A useful first input is:
{"startUrls": [{ "url": "https://www.bosch.de/" },{ "url": "https://www.zeit.de/" }],"maxItems": 2,"maxPagesPerWebsite": 6,"maxConcurrency": 2}
Input parameters
startUrls (required)
A list of public HTTP or HTTPS URLs. Values may be homepages or direct Impressum pages. Private-network, localhost, credential-bearing, and unsupported-protocol URLs are rejected. Duplicate normalized URLs are processed once.
maxItems
Maximum unique input URLs processed in the run. Default: 100. Range: 1 to 1000.
The limit is applied before requests are scheduled.
maxPagesPerWebsite
Maximum number of supplied/homepage and candidate legal pages checked per website.
Default: 6. Range: 1 to 15.
maxConcurrency
Maximum websites processed at once. Default: 5. Range: 1 to 15. Reduce this for
small or rate-sensitive sites.
requestTimeoutSecs
Per-page HTTP timeout. Default: 20 seconds. Range: 5 to 60 seconds. Transient network
and selected temporary HTTP failures receive bounded retries.
Output example
A current real-site run returns rows shaped like this (representative values shortened):
{"inputUrl": "https://www.zeit.de/","inputDomain": "zeit.de","resolvedDomain": "zeit.de","status": "found","imprintUrl": "https://www.zeit.de/impressum/index","companyName": "Zeitverlag Gerd Bucerius GmbH & Co. KG","legalForm": "GmbH & Co. KG","address": "Helmut-Schmidt-Haus, Buceriusstraße, 20095 Hamburg","emails": ["redaktion@zeit.de"],"phoneNumbers": ["+49 40 ..."],"vatId": "DE189342458","registrationCourt": "Amtsgericht Hamburg","registrationNumber": "HRA 91","representatives": ["Nils von der Kall"],"responsiblePerson": null,"sourceEvidence": ["Vertreten durch die Geschäftsführung ..."],"pagesChecked": ["https://www.zeit.de/","https://www.zeit.de/impressum/index"],"httpStatus": 200,"errorMessage": null,"scrapedAt": "2026-08-13T05:30:00.000Z"}
The dataset retains diagnostic outcome rows so batch integrations can reconcile every
submitted URL. Only a successfully located legal record triggers the lead billing event.
How much does it cost to extract German website Impressum leads?
The Actor uses pay-per-event pricing:
startevent:$0.005once per run.leadevent: applies once for each successfully located and extracted Impressum record.- Diagnostic outcome rows do not trigger the
leadevent.
Current per-lead prices decrease by Apify plan:
| Plan | Price per found lead |
|---|---|
| FREE | $0.005336 |
| BRONZE | $0.00464 |
| SILVER | $0.0036192 |
| GOLD | $0.002784 |
| PLATINUM | $0.001856 |
| DIAMOND | $0.0012992 |
At BRONZE pricing, a run with 10 found Impressum leads costs about $0.0514; 100 found leads
cost about $0.469; and 1,000 found leads cost about $4.645. Batches with fewer extracted
records trigger fewer lead events. Apify compute usage is billed under the user's
platform plan.
Bulk lead-enrichment workflow
For a recurring CRM process:
- export domains missing legal-entity fields from the CRM;
- map them into
startUrls; - schedule the Actor daily, weekly, or monthly;
- join rows back on
inputDomain; - accept
foundfields into a staging table; - route
not_foundanderrorstatuses to a retry or review queue; - compare
sourceEvidenceandscrapedAton later runs.
The Actor returns current public page content. It does not maintain history or claim that a field changed; store snapshots in your own dataset or warehouse when change detection is needed.
Export to spreadsheets and data pipelines
The default dataset works with Apify's standard exports. Common patterns include:
- CSV or Excel export for sales operations;
- Google Sheets via an Apify integration;
- Make or Zapier workflows triggered after a run;
- webhook delivery to an enrichment service;
- JSON API ingestion into a data warehouse;
- scheduled Tasks for recurring domain batches.
Use status as the workflow branch and keep imprintUrl plus sourceEvidence for review.
Run with the Apify API
Replace YOUR_TOKEN with an Apify API token.
cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~german-imprint-leads/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"startUrls": [{"url": "https://www.bosch.de/"}],"maxItems": 1}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/german-imprint-leads').call({startUrls: [{ url: 'https://www.bosch.de/' }],maxItems: 1,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/german-imprint-leads').call(run_input={'startUrls': [{'url': 'https://www.bosch.de/'}],'maxItems': 1,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
Use with MCP and AI assistants
Claude Code
Add the Actor as an Apify MCP tool in Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/german-imprint-leads"
Claude Desktop, Cursor, and VS Code
Use this equivalent MCP JSON configuration in Claude Desktop, Cursor, or VS Code:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/german-imprint-leads"}}}
Example prompts:
- “Extract the public Impressum records for these five German supplier websites.”
- “Return company name, VAT ID, register number, representatives, and source URL as JSON.”
- “Separate found records from websites that need manual review.”
Accuracy, limits, and failure behavior
- Extraction uses public server-rendered HTML; it does not run a browser.
- JavaScript-only or challenge-protected legal pages may return
not_foundorerror. - Labels and page structures differ, so fields may be null even when other fields are found.
- The Actor checks same-host pages only and does not crawl an entire site.
- It does not validate email deliverability, VAT registration, or register status.
- It does not infer hidden contacts or enrich people from third-party sources.
- A
foundresult means a page with German legal signals was located, not that every field was available or legally sufficient. - Redirects are followed and recorded through
resolvedDomainandimprintUrl. - Temporary request failures receive bounded retries; permanent HTTP failures do not loop.
For best results, provide canonical company homepages or direct Impressum URLs and keep the crawl limit at its default.
Responsible and legal use
Only process pages you are permitted to access. Respect website terms, robots guidance, applicable rate limits, database rights, privacy rules, and the purpose for which public contact data was displayed. German Impressum pages can contain personal names and contact details. A public page does not automatically authorize unsolicited marketing, profiling, or unrestricted redistribution.
Use an appropriate lawful basis, minimize retained fields, secure exports, honor deletion or objection rights where applicable, and obtain legal advice for your jurisdiction and use case. This Actor is a technical extraction tool, not legal or compliance advice.
FAQ and troubleshooting
Why did I get not_found?
The Actor could fetch pages but did not find enough legal-page signals within the configured
page limit. Try supplying the site's direct Impressum URL or increasing
maxPagesPerWebsite up to 15.
Why did I get error?
Inspect errorMessage, httpStatus, and pagesChecked. The site may be unavailable,
challenge-protected, non-HTML, or too slow. Increase the request timeout when the public page
responds slowly.
Why is a field null?
The page may not display it in recognizable text. Check imprintUrl and sourceEvidence
before deciding whether manual extraction or another authoritative source is appropriate.
Does the Actor search Google for businesses?
No. It deliberately processes user-supplied URLs. This keeps the workflow predictable and avoids charging for unrelated search results.
How does event billing work?
The one-time start event applies to the run. The lead event applies only when an
Impressum record is successfully located and extracted; diagnostic rows do not trigger it.
Related automation-lab Actors
- Website Contact Details Extractor for broader email, phone, and social-link extraction outside legal notices.
- Website Company Address Extractor for identifying office, mailing, and company address candidates across public pages.
Use this Actor when Germany-specific statutory identity and evidence are the core job; use the related Actors when broader website contact or address coverage is more important.
Support
When reporting a problem, include a reproducible public URL, the input settings, run ID,
status, pagesChecked, and the bounded errorMessage. Do not post API tokens, private
customer lists, or confidential exports.