Impressum & Legal Notice Scraper: Company Data, VAT ID & Emails
Pricing
from $3.60 / 1,000 company leads
Impressum & Legal Notice Scraper: Company Data, VAT ID & Emails
Impressum scraper and legal notice extractor for German websites: company data from each legal notice - emails, Geschäftsführer (managing directors), VAT ID, Handelsregister number - plus checksum-verified SIREN, NIF, partita IVA and KvK numbers from EU sites. German B2B leads, $4.50 per 1,000.
Pricing
from $3.60 / 1,000 company leads
Rating
0.0
(0)
Developer
Rafal Sav
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
What does Impressum & Legal Notice Scraper do?
Impressum & Legal Notice 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, de-duplicated social links and the company behind the site: its name and legal form, managing directors, VAT ID (USt-IdNr.), commercial register court and number and address. You pay once per company you can write to — $4.50 per 1,000 — and nothing for a site without one.
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. - The company behind the site, from its Impressum. Name as printed, legal form, the persons who represent it (Geschäftsführer, Vorstand, Inhaber, a partnership's partners), VAT ID, register court and number, and the provider's address — read only from the provider's own block, never from the web agency's credit or the chamber's address below it, and left empty rather than guessed. On 40 German legal notices it had never read (September 2026) every VAT ID, register entry and postcode it returned was right, the company name 89% of the time and the managing directors 94%. Included at no extra charge.
- Fax numbers kept apart. Nearly every Impressum lists one; they come back in their own
faxesfield instead of posing as phone numbers. - You pay per company, not per contact. A German Impressum lists many contacts — heise.de eleven addresses and a phone — so a per-contact price bills one company a dozen times. Here a website costs one charge when it gives an email on its own domain (or a personal mailbox it uses) that accepts mail, with everything else included; a site without one costs nothing.
Use cases
- B2B lead generation in the DACH market — turn a list of German company domains into reachable inboxes and phone numbers, with the managing director's name to address.
- Company data enrichment — VAT ID, register number and legal form for a list of German company websites.
- 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) — paste them, upload or link a text or CSV file of them, or link a Google Sheet.
- 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"] },"company": {"company": "Beispiel Medien GmbH","legal_form": "GmbH","representatives": ["Anna Schmidt", "Dr. Jonas Weber"],"vat_id": "DE123456789","register_court": "Hamburg","register_number": "HRB 123456","address": { "street": "Musterweg 7", "postal_code": "20095", "city": "Hamburg" }},"email_count": 2,"pages_crawled": 3,"rendered": false,"billed": true}
| 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, kept apart from phones. |
socials | Profile URLs grouped by platform, de-duplicated (twitter.com/x counts once). |
company | From the site's Impressum: company (the name as printed), legal_form, representatives (the persons named as managing directors, board, owner or partners), vat_id, register_court, register_number and address (street, postal_code, city). A field it cannot place is null; the whole object is null when the site has no legal notice. For a French, Spanish, Italian or Dutch site the same object comes from its mentions légales, aviso legal, footer or contact page: register_number is the company's SIREN, NIF, codice fiscale or KvK number (register_type says which), vat_id its VAT number (TVA, partita IVA, BTW), each returned only when its checksum holds, with country (FR, ES, IT, NL). Included in the price of a company lead. |
pages_crawled | How many pages were read for this site. |
rendered | Whether a browser was needed. |
billed | Whether this website was charged: an email on its own domain (or the one it moved to) or a personal mailbox it uses, accepting mail. |
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.002 | $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. Our cost is the same run repriced at this listing's price since September 26, 2026: the run itself was billed per contact, at $0.0145 a domain - more than the incumbent, because an Impressum lists many contacts; of its 97 domains with an email, 67 had one on their own domain or a personal mailbox, and at $0.0045 each the 150 domains cost $0.30. 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.
The company data, against the other legal-notice extractor
Who runs a site is what a company-data buyer needs right, so we measured it apart. Forty German legal notices drawn at random from Google's results for twelve trades, each labelled by reading the page before any extractor saw it: the company as printed, VAT ID, register court and number, postcode, the people who represent it. The other Actor on Apify Store sold for this (31 users) got the same forty websites on October 4, 2026; our column is this engine's first run on those pages, before it was ever tuned on them.
| 40 German legal notices: right / wrong / missed | This Actor, first run | The other extractor |
|---|---|---|
| Company name (40 printed) | 33 / 4 / 7 | 15 / 10 / 25 |
| VAT ID (30) | 29 / 0 / 1 | 8 / 0 / 22 |
| Register court (18) | 16 / 0 / 2 | 4 / 12 / 14 |
| Register number (18) | 16 / 0 / 2 | 0 / 2 / 18 |
| Postcode (40) | 37 / 0 / 3 | 33 / 5 / 7 |
| Representatives (43) | 31 / 2 / 12 | 19 / 3 / 24 |
Its ten wrong company names are what this engine was built against: the web agency credited at the foot of the notice, the professional-liability insurer, a sponsor, a chat widget's vendor. It charges every domain it is given, whatever comes back. Method and both outputs: head_to_head_impressum40.md.
French, Spanish, Italian and Dutch legal notices
Germany is not the only country that makes a website say who runs it. France has its mentions légales (company, SIREN or SIRET, RCS), Spain its aviso legal (titular, NIF/CIF, Registro Mercantil), Italy prints the partita IVA at the foot of every page, the Netherlands the KvK and BTW numbers on the contact page. For sites of these four countries the company object carries:
register_number— the company's own number: SIREN (France), NIF (Spain), codice fiscale (Italy), KvK (Netherlands);register_typesays which.vat_id— its VAT number where the page prints one: French TVA, Italian partita IVA, Dutch BTW — and a German or Dutch company's VAT number on its Spanish or French shop.company,legal_form,address,representatives— where the page says which name, address and people are the company's own;register_courtfor a French RCS or a Spanish Registro Mercantil.
Every number is checked by its own checksum before it is returned, and one that fails is not replaced by the next number on the page: q-park.nl prints a VAT number with a wrong digit, and the EU's VAT register confirms it does not exist. The host French law makes every site name in full, the web agency, a lender on the front page, the parent company in an Italian footer are someone else's numbers and are left out.
Measured on 100 random .fr, .es, .it and .nl domains the extractor had never seen (Tranco top-1M, seed 44, labelled by reading each page first; October 4, 2026): of the 32 companies that print their number, 27 were returned right, 1 wrong, 5 missed; VAT numbers 9 right, 0 wrong. The company name is the weak field: 14 right, 3 wrong, 24 not returned — so treat the name as a hint and the number as the key to look the company up. The wrong number was a privacy policy naming two companies; it and every other error of that run have since been fixed. On a first sample of the same kind, the other legal-notice extractor returned the SIREN, NIF, partita IVA or KvK number of none of the 35 companies that print one. Method, samples and both first runs: head_to_head_eu_legal.md.
Set Default phone region to FR, ES, IT or NL for such a list, so that local-format phone numbers are parsed. The price is the same: one company lead per website with an email of its own that accepts mail.
How much does it cost?
You pay once per company, and only for companies you can write to:
- Company lead — $0.0045 ($4.50 per 1,000): a website that gave an email on its own domain (or on the one it moved to) or a personal mailbox it uses (t-online.de, gmx.de and the like) that accepts mail. Every other email, the phones, the fax, the social profiles and the company details from its Impressum come with it.
- Everything else — $0. A site with no contact, or only someone else's address — the web agency's, a chamber's —, a domain that accepts no mail or a noreply address, is returned but never charged.
- On 150 random German domains (September 2026) 67 were company leads: $0.30 for the whole list.
- The Apify Free plan includes $5 in monthly credits — about 1,100 company leads.
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. The company's registration and VAT numbers are also read from French, Spanish, Italian and Dutch sites (see above). 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.
Related Actors
- Website Contact & Email Scraper — emails, phone numbers and social profiles from any list of websites, priced per contact.
- Google Maps Email Extractor — local businesses from a Google Maps search, each with the email from its own website.
- Shopify Store Leads & Emails — Shopify stores by product keyword and country, with each store's email and its currency, catalogue size and shipping countries.
- No Website Leads — businesses on Google Maps without a real website, for web design agencies.
- Decision Maker Email Finder — the owners, CEOs and founders a company names on its own website, each with a work email it published or its mail server confirmed.
- Email Finder by Name & Domain — a person's work email from their name and company domain: published on the company's website or confirmed by its mail server.
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.