Impressum Email Scraper (German Sites) avatar

Impressum Email Scraper (German Sites)

Pricing

from $3.00 / 1,000 verified contacts

Go to Apify Store
Impressum Email Scraper (German Sites)

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

Rafal Sav

Maintained by Community

Actor stats

1

Bookmarked

1

Total users

0

Monthly active users

6 hours ago

Last modified

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 /impressum above /kontakt, /about and 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 30070 or Tel.: 040/3007-0 are parsed with Google's libphonenumber into E.164 (+494030070). The default phone region is preset to DE, so local-format numbers on .com domains of German companies are parsed correctly too.
  • Obfuscated addresses are decoded. German publishers hide addresses aggressively: Cloudflare data-cfemail protection, HTML entities (@), and name [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_email prefers the site's own domain.
  • Fax numbers kept apart, never billed. Nearly every Impressum lists one; they come back in their own faxes field 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

  1. Add your German domains under Start URLs (one record per URL is returned).
  2. Optionally adjust Max contact subpages (default 6), the Default phone region (DE, or AT / CH for Austrian and Swiss sites), or switch JavaScript rendering to auto for sites that need a browser (raise run memory to 2048 MB first).
  3. 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
}
FieldDescription
domainThe site the record is for.
statusok, no_contacts (pages read, nothing published) or unreachable (site refused the request, or forwards to a platform's front page).
best_emailHighest-confidence address on the site's own domain — a named person outranks a general inbox, which outranks a legal or technical mailbox.
emailsEvery address found, each with valid_mx (null if DNS could not be asked), role and a confidence score.
phonesPhone numbers in E.164.
faxesFax numbers in E.164 — returned, not billed.
socialsProfile URLs grouped by platform, de-duplicated (twitter.com/x counts once).
pages_crawledHow many pages were read for this site.
renderedWhether 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:

MetricThis ActorIncumbent
Domains with an email97 (64.7%)85 (56.7%)
Unique emails found330239
Domains with a usable phone number9137 (plus 112 unnormalized)
Domains with a social profile7680
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.

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.