Impressum Email Scraper (German Sites)
Pricing
from $3.00 / 1,000 verified contacts
Impressum Email Scraper (German Sites)
Scrape emails, phone numbers and social links from German websites' Impressum pages. Decodes obfuscated addresses, returns German phone numbers in E.164. Pay per contact found.
Pricing
from $3.00 / 1,000 verified contacts
Rating
0.0
(0)
Developer
Rafal Sav
Maintained by CommunityActor stats
1
Bookmarked
1
Total users
0
Monthly active users
6 hours ago
Last modified
Categories
Share
What does Impressum Email Scraper do?
Impressum Email Scraper extracts emails, phone numbers and social profiles from German websites by going straight to the page where German law puts them: the Impressum. Give it a list of .de domains and it returns one clean record per site — with MX-validated emails, German phone numbers normalized to E.164 and de-duplicated social links.
German law (§ 5 DDG / § 18 MStV) requires almost every commercial website to publish a reachable contact on its Impressum page — a postal address, an email address and a second quick way to get in touch, usually a phone number. That makes German sites the single richest source of business contact data on the web, and this Actor is tuned to read it.
It runs on the Apify platform: API access, scheduling, integrations (Make, Zapier, n8n), proxy rotation and run monitoring included.
Why use it for German sites specifically?
- The Impressum is crawled first. Subpage discovery ranks
/impressumabove/kontakt,/aboutand everything else, so the legally mandated contact block is read even on sites whose homepage shows nothing. - German phone numbers come back usable. Numbers written as
+49 (0)40 3007-0,040 30070orTel.: 040/3007-0are parsed with Google's libphonenumber into E.164 (+494030070). The default phone region is preset toDE, so local-format numbers on.comdomains of German companies are parsed correctly too. - Obfuscated addresses are decoded. German publishers hide addresses aggressively: Cloudflare
data-cfemailprotection, HTML entities (@), andname [at] domain [dot] de. All three are recovered. - Datenschutz read too. The privacy policy (
/datenschutz) is read as well — the GDPR data-controller contact has to be published there. - Authorities, chambers and web agencies filtered out, not billed. German legal pages must also name bodies that are not the site — the data protection authority, the consumer arbitration board, a regulator, and for regulated professions the chamber and supervisory authority (Rechtsanwaltskammer, Zahnärztekammer, KZV, Bezirksregierung, the § 34c licensing office) — with their full contact details, and many credit the agency that built the site. Those are dropped instead of sold to you as the site's: on 150 random German domains, 12 records carried a supervisory authority's inbox before this filter.
best_emailprefers the site's own domain. - Fax numbers kept apart, never billed. Nearly every Impressum lists one; they come back in their own
faxesfield at no charge. - You pay per contact found, not per page. A site that yields nothing costs nothing.
Use cases
- B2B lead generation in the DACH market — turn a list of German company domains into reachable inboxes and phone numbers.
- Compliance and imprint checks — verify that a portfolio of sites publishes a valid, reachable contact under § 5 DDG.
- Agency prospecting — scrape a niche (Handwerker, Kanzleien, Onlineshops) and get the details a directory listing does not carry.
- Recruiting in DACH — collect HR and careers contacts from employer sites.
- Market research — map which companies publish a phone number versus a form-only contact page.
How to use it
- Add your German domains under Start URLs (one record per URL is returned).
- Optionally adjust Max contact subpages (default 6), the Default phone region (
DE, orAT/CHfor Austrian and Swiss sites), or switch JavaScript rendering toautofor sites that need a browser (raise run memory to 2048 MB first). - Click Start and download the results as JSON, CSV, Excel or HTML.
Output
{"domain": "https://www.beispiel.de","status": "ok","best_email": "kontakt@beispiel.de","emails": [{ "email": "kontakt@beispiel.de", "valid_mx": true, "role": true, "confidence": 0.85 },{ "email": "datenschutz@beispiel.de", "valid_mx": true, "role": true, "confidence": 0.7 }],"phones": ["+494030070"],"faxes": ["+4940300799"],"socials": { "linkedin": ["https://linkedin.com/company/beispiel"] },"email_count": 2,"pages_crawled": 3,"rendered": false}
| Field | Description |
|---|---|
domain | The site the record is for. |
status | ok, no_contacts (pages read, nothing published) or unreachable (site refused the request, or forwards to a platform's front page). |
best_email | Highest-confidence address on the site's own domain — a named person outranks a general inbox, which outranks a legal or technical mailbox. |
emails | Every address found, each with valid_mx (null if DNS could not be asked), role and a confidence score. |
phones | Phone numbers in E.164. |
faxes | Fax numbers in E.164 — returned, not billed. |
socials | Profile URLs grouped by platform, de-duplicated (twitter.com/x counts once). |
pages_crawled | How many pages were read for this site. |
rendered | Whether a browser was needed. |
Accuracy
The extraction engine is benchmarked against a hand-verified set of 32 real pages — heise.de's Impressum among them — scored against ground truth read out of the raw HTML. In July 2026 it scored 100% precision and 100% recall on emails, phones and social profiles; on a September re-run precision stayed at 100%, and every miss came from sites that refuse the connection. Against the category incumbent on 28 of those pages (July 2026): emails 100% vs 94%, phone numbers 100% vs 0% usable (it returns unnormalized strings in an "uncertain" bucket).
On German sites specifically we ran both Actors over the same 150 random German domains (drawn from the Tranco top-1M list, seed 42), in the Apify cloud on September 24, 2026, at the same crawl depth:
| Metric | This Actor | Incumbent |
|---|---|---|
| Domains with an email | 97 (64.7%) | 85 (56.7%) |
| Unique emails found | 330 | 239 |
| Domains with a usable phone number | 91 | 37 (plus 112 unnormalized) |
| Domains with a social profile | 76 | 80 |
| Cost per domain | $0.015 | $0.006 |
It finds an email on more domains and a usable phone number on far more, and bills no regulator inboxes as leads; the incumbent finds slightly more social profiles. It also costs more per domain, and we say so: Impressum pages publish many contacts, and this Actor bills per contact where the incumbent bills per page. Many random .de names have no website behind them at all, which is why coverage is lower than on a list of real companies. Method and caveats: head_to_head_de150.md.
How much does it cost?
You pay only for results:
- Verified contact — $0.003 (~$3 per 1,000): one email or one phone number. An address whose domain accepts no mail (
valid_mx: false) is returned but not charged. - Social profile — $0.001 (~$1 per 1,000): one clean, de-duplicated profile link.
- Empty sites — $0. No contact, no charge.
- The Apify Free plan includes $5 in monthly credits — at the default of 6 subpages, about 250 German domains (measured: $2.91 for 150 random ones, September 2026).
FAQ
Which sites does this work on?
Any website, but it is configured for German-language ones: the Impressum read first, DE phone parsing preset, and the authorities German legal pages must name filtered out. For an international list use the general Website Contact & Email Scraper instead — same engine, neutral defaults.
Does it work for Austrian and Swiss sites?
Yes. Set Default phone region to AT or CH so local-format numbers are parsed correctly; the Impressum requirement exists in both countries.
Why did a site return nothing?
Check status. no_contacts means the pages were read and there was nothing to extract — rare for German sites, but it happens with form-only contact pages. unreachable means nothing could be downloaded — not even through Apify's datacenter proxy, which the Actor tries by itself when a site refuses the direct connection (on 150 random German domains it got into 4 of the 7 that turned the cloud away). Retry with renderJs: auto or a residential proxy, billed separately. A domain that only forwards to Facebook or to its registrar stays unreachable on purpose: nothing of the firm is on those pages. Neither status is charged.
What if the run times out or is moved to another server?
A few minutes before its timeout the run stops taking new sites, finishes the ones in progress and says in its status message how many were left — raise the run's timeout for long lists. The same happens at the maximum cost per run you set: nothing beyond it is read or charged, and the status message says how many sites were left. A run the platform moves to another server picks up where it was: no site is read or charged twice.
Is scraping Impressum data legal?
The Impressum exists precisely so that the contact is publicly reachable, and this Actor respects robots.txt and rate-limits its requests. What you do with the data is your responsibility: under GDPR you are the data controller, you need a lawful basis for outreach (§ 7 UWG restricts unsolicited commercial email in Germany), and you must honour opt-outs.
Disclaimer
This Actor is a tool. You are the data controller for any personal data you collect and are responsible for complying with GDPR, UWG, the target site's Terms of Service and robots.txt. It does not build or sell contact databases.
Support
Found a German site where contacts were missed? Open an issue on the Issues tab — accuracy reports shape the roadmap directly.