Impressum Scraper — EU Legal Notice Company Data Extractor · Apify
Impressum & EU Legal Notice Extractor — Company & VAT Data avatar

Impressum & EU Legal Notice Extractor — Company & VAT Data

Pricing

from $1.70 / 1,000 results

Go to Apify Store
Impressum & EU Legal Notice Extractor — Company & VAT Data

Impressum & EU Legal Notice Extractor — Company & VAT Data

Turn a list of domains into structured company data from Impressum, Mentions légales, Aviso legal and other EU legal-notice pages: legal company name, VAT / USt-IdNr, managing director, registration number, court, address, email and phone. Fast, keyless B2B lead & KYB enrichment.

Pricing

from $1.70 / 1,000 results

Rating

0.0

(0)

Developer

Haketa

Haketa

Maintained by Community

Actor stats

0

Bookmarked

109

Total users

39

Monthly active users

4 days ago

Last modified

Features

Limited permissions

Share

Apify Actor

Turn any list of domains, URLs, or email addresses into verified B2B company records extracted directly from each website's mandatory European legal notice — the German Impressum (§ 5 DDG / TMG), Austrian Offenlegung (§ 25 MedienG / ECG), Swiss Impressum (UWG), French Mentions légales, Spanish Aviso legal, Italian Note legali, and Dutch Colofon.

For every domain you scrape Impressum data into one clean, deduplicated row: legal company name (GmbH, AG, UG, GmbH & Co. KG, SAS, S.L., S.r.l., B.V.), EU/EFTA VAT ID (USt-IdNr. / UID), managing director (Geschäftsführer / Vorstand), commercial register number (Handelsregister HRB/HRA, SIREN, KvK, REA), register court (Amtsgericht), full street and postal address, direct email addresses, and phone number. No login, no API key, no browser overhead.

Export to JSON, CSV, Excel (XLSX), XML, or the Apify REST API.

Built for DACH & European B2B lead generation agencies, SDR/RevOps teams, KYB/KYC compliance officers, M&A analysts, and CRM data enrichment pipelines that need the real legal entity and decision-maker behind every domain.


⚡ At a glance

FeatureDetails
Target PagesGerman/Austrian/Swiss Impressum, French Mentions légales, Spanish Aviso legal, Italian Note legali, Dutch Colofon, UK/EU Imprint / Legal Notice, plus /kontakt & /contact fallback
Accepted InputsBare domains (heise.de), full URLs (https://www.heise.de/kontakt), or email addresses (info@heise.de) — automatically normalized and deduplicated
Core Extracted FieldscompanyName, managingDirector, vatId, registrationNumber, registerCourt, address, emails, phone, legalPageUrl, legalPageType, foundVia
Supported Legal FormsGmbH, GmbH & Co. KG, GmbH & Co. KGaA, UG (haftungsbeschränkt), AG, SE, OHG, KG, GbR, e.K., SAS, SASU, SARL, S.A., S.L., S.L.U., B.V., N.V., S.p.A., S.r.l., Ltd, AB, Oy, A/S, Sp. z o.o.
VAT Format CoverageAll 27 EU Member States + Switzerland & UK (DE, ATU, CHE, FR, IT, ES, NL, BE, PL, SE, DK, FI, IE, PT, CZ, HU, RO, BG, HR, SI, SK, LT, LV, EE, LU, MT, CY, EL, GB)
Scale & SpeedParallel lookup pool (up to 100 concurrent workers); processes 1,000+ domains in minutes with 0 duplicates
Empty-Input BehaviorRunning with {} automatically processes a curated sample of 20 German & European companies
AuthenticationNone required — 100% keyless
Export FormatsJSON, JSONL, CSV, Excel (XLSX), HTML table, XML, RSS, and REST API

Across the DACH region (Germany, Austria, Switzerland) and the European Union, nearly every commercial website is required by law to publish a complete corporate disclosure page:

  • Germany (§ 5 DDG, formerly § 5 TMG): Mandatory Impressum disclosing the full legal entity name (Firmenname), legal form (Rechtsform), authorized representatives (Vertretungsberechtigte / Geschäftsführer / Vorstand), full street address (ladungsfähige Anschrift), phone/email contact, commercial register court (Registergericht) and number (Handelsregisternummer HRB/HRA), and VAT identification number (Umsatzsteuer-Identifikationsnummer USt-IdNr.).
  • Austria (§ 5 ECG & § 25 MedienG): Mandatory Impressum / Offenlegung with Firmenbuchnummer (FN), Firmenbuchgericht, UID-Nummer (ATU...), and managing directors.
  • Switzerland (Art. 3 Abs. 1 lit. s UWG): Mandatory corporate identity, postal address, contact email, and CHE-xxx.xxx.xxx UID.
  • France (LCEN), Spain (LSSI-CE), Italy (Codice Civile), Netherlands (Burgerlijk Wetboek): Mandatory Mentions légales, Aviso legal, Note legali, and Colofon with SIREN/SIRET/RCS, NIF/CIF, Partita IVA/REA, and KvK/BTW numbers.

While generic website email scrapers crawl dozens of random subpages only to return noisy newsletter addresses or broken links, this Impressum scraper goes straight to the legally mandated corporate disclosure page and extracts the structured legal entity record.

Key business benefits

  1. Decision-maker identification (Geschäftsführer / Vorstand): Stop pitching generic info@ inboxes without a name. Address your DACH outbound sequences to the legally registered managing director or board member.
  2. Instant KYB & vendor verification: Cross-check companyName, vatId, registrationNumber, and registerCourt before onboarding merchants, suppliers, or B2B customers.
  3. CRM deduplication & account mapping: Resolve thousands of brand domains, product microsites, and regional TLDs (.de, .at, .ch, .eu, .com) to their parent GmbH or AG legal entity.
  4. High-speed bulk enrichment: Enrich 1,000 to 100,000+ domains exported from Google Maps, LinkedIn, Crunchbase, BuiltWith, or exhibition directories in a single automated run.

✨ Key features

  • ✅ 3-stage page discovery engine:
    1. Footer & page link detection (footer-link): Scans homepage links in 7 European languages (Impressum, Imprint, Mentions légales, Aviso legal, Note legali, Colofon, Legal notice, Dati societari, Juridische informatie).
    2. Direct path probing (common-path): Automatically probes 18 standard legal-notice URL paths (/impressum, /de/impressum, /imprint, /legal-notice, /mentions-legales, /aviso-legal, /note-legali, /colofon, etc.) and validates legal content signatures when SPAs hide footer links.
    3. Contact page fallback (contact-page): When contactPageFallback: true and no formal Impressum exists (e.g. non-EU domains), falls back to /kontakt or /contact so you still capture verified email and phone contacts.
  • ✅ Smart company name & legal form parser: Accurately extracts German and European corporate entities while stripping surrounding sentence noise, copyright prefixes, and template placeholders (Max Mustermann, Musterfirma).
  • ✅ Named executive extraction: Captures the person name(s) listed after Geschäftsführer, Geschäftsführung, Vorstand, Vertreten durch, Inhaber, Managing Director, Gérant, Amministratore Unico/Delegato, or Bestuurder.
  • ✅ Format-first EU & EFTA VAT validation: Recognizes all 29 European VAT/UID patterns (DE123456789, ATU12345678, CHE-123.456.789, FRXX123456789, IT12345678901, NL123456789B01, etc.) plus labeled tax numbers.
  • ✅ Commercial register & court extraction: Captures German HRB / HRA numbers, Amtsgericht / Registergericht cities, French RCS / SIREN, Dutch KvK, and Italian REA / Registro Imprese.
  • ✅ Automatic input normalization & 0-duplicate guarantee: Paste bare domains, full https:// URLs, or name@company.de email addresses — all inputs are normalized to canonical root domains and deduplicated before crawling.

🎯 Use cases

1. DACH B2B outbound sales & cold outreach

German, Austrian, and Swiss outbound campaigns perform dramatically better when personalized with the managing director's name (Geschäftsführer), local city, and exact legal entity name. Feed your prospect domain list into this extractor and push enriched rows straight into HubSpot, Lemlist, Instantly, Smartlead, or Salesforce.

2. KYB, KYC & merchant onboarding automation

Fintechs, payment processors, marketplaces, and B2B SaaS platforms use this Actor to automatically verify a corporate applicant's website Impressum against their submitted USt-IdNr., Handelsregisternummer (HRB/HRA), and Amtsgericht.

3. Enriching e-commerce & agency lead lists

Combine store lists (Shopify, Shopware, WooCommerce, Magento) with Impressum extraction to uncover the operating GmbH or UG, warehouse/headquarters postal code, phone number, and owner name behind online shops.

4. M&A deal sourcing & private-company mapping

Private equity analysts and corporate development teams map fragmented Mittelstand industries across Germany, Austria, and Switzerland by turning trade-association member links or regional directories into structured firmographic tables.

5. CRM data hygiene & account consolidation

Clean up legacy CRM databases where reps entered bare domains or brand names. Populate missing billing addresses, VAT numbers, and official legal names in bulk.


📥 Input parameters

All input fields are optional. Running with an empty input ({}) automatically processes a built-in sample of 20 German and European company domains so you can inspect the output structure right away.

ParameterTypeDefaultDescription
domainsarray<string>Sample of 20 EU domainsCompanies to enrich — one per line. Accepts bare domains (heise.de), full URLs (https://www.heise.de/kontakt), or email addresses (info@heise.de). Automatically normalized and deduplicated.
contactPageFallbackbooleantrueWhen no legal-notice page is found, also check /kontakt and /contact pages so you still capture email and phone numbers.
maxItemsinteger0 (prefill 100)Stop after processing this many domains. Set 0 to process your entire domain list without limit (supports 1,000+ domains per run).
maxConcurrencyinteger20Number of domains processed in parallel (1–100). Increase to 40–60 for large multi-thousand domain lists.
proxyConfigurationobject{ "useApifyProxy": false }Optional Apify Proxy configuration. Off by default for maximum speed and zero proxy cost; enable if specific target hosts rate-limit direct connections.

Example input — DACH B2B lead enrichment

{
"domains": [
"heise.de",
"golem.de",
"contabo.com",
"hetzner.com",
"sevdesk.de",
"personio.de",
"sipgate.de",
"shopware.com"
],
"contactPageFallback": true,
"maxItems": 0,
"maxConcurrency": 25,
"proxyConfiguration": {
"useApifyProxy": false
}
}

Example input — 1,000+ domain bulk enrichment run

{
"domains": [
"https://www.westwing.de/de/",
"info@verivox.de",
"flaconi.de",
"doctolib.fr",
"bol.com"
],
"contactPageFallback": true,
"maxItems": 5000,
"maxConcurrency": 50,
"proxyConfiguration": {
"useApifyProxy": false
}
}

📤 Output schema & field reference

Each domain produces one structured JSON record. Fields are organized into four logical groups:

FieldTypeCoverageDescription
domainstring🟢 High (100%)Normalized root domain processed (e.g. westwing.de, hetzner.com). Primary deduplication key.
companyNamestring🟢 High (DACH ~80%+)Official legal entity name including corporate suffix (e.g. Westwing GmbH, Hetzner Online GmbH).
managingDirectorstring🟢 High (DACH ~70%+)Authorized managing director(s), board member(s), or owner (Geschäftsführer, Vorstand, Inhaber).
vatIdstring🟢 High (DACH ~75%+)Validated EU/EFTA VAT identification number (USt-IdNr., UID, TVA, P.IVA, BTW), e.g. DE815289147.
registrationNumberstring🟡 Conditional (~65%)Commercial register entry (Handelsregisternummer such as HRB 191901, HRA 51246, SIREN, KvK).
registerCourtstring🟡 Conditional (~60%)Registering court or chamber (Amtsgericht München, Mannheim, Charlottenburg, Tribunal de Commerce).

📍 Address & Direct Contact Details

FieldTypeCoverageDescription
addressstring🟢 High (~85%)Full street address, postal code, and city (e.g. Moosacher Str. 88, 80809 München).
emailsstring🟢 High (~80%)Up to 5 deduplicated email addresses found on the legal/contact page, comma-separated (filtered for image/Sentry noise).
phonestring🟢 High (~75%)Direct telephone number extracted from tel: links or labeled Tel / Telefon / Phone lines.

🔗 Discovery & Run Metadata

FieldTypeCoverageDescription
legalPageUrlstring🟢 High (~95%)Exact URL of the Impressum, legal notice, or contact page that was parsed.
legalPageTypestring🟢 High (~95%)'legal-notice' when extracted from an Impressum/legal page, or 'contact' when contact fallback was used.
foundViastring🟢 High (~95%)Discovery method: 'footer-link', 'common-path', or 'contact-page'.
errorstring🟡 ConditionalEmpty string "" on success; diagnostic note when a host is unreachable or renders exclusively via client-side JS.
scrapedAtstring🟢 High (100%)ISO-8601 UTC timestamp of extraction.

Sample output records

[
{
"domain": "westwing.de",
"companyName": "Westwing GmbH",
"address": "Moosacher Str. 88, 80809 München",
"emails": "impressum@westwing.de, service@westwing.de",
"phone": "+49 (89) 550 544 -0",
"vatId": "DE815289147",
"managingDirector": "Dr. Andreas Hoerning",
"registrationNumber": "HRB 191901",
"registerCourt": "München",
"legalPageUrl": "https://www.westwing.de/i/imprint/",
"legalPageType": "legal-notice",
"foundVia": "footer-link",
"error": "",
"scrapedAt": "2026-11-10T02:00:00.000Z"
},
{
"domain": "verivox.de",
"companyName": "Verivox GmbH",
"address": "Max-Jarecki-Straße 21, 69115 Heidelberg",
"emails": "finanzen@verivox.de, versicherungen@verivox.de",
"phone": "+49 6221 777 00 50",
"vatId": "DE464574039",
"managingDirector": "Daniel Puschmann",
"registrationNumber": "HRB 754408",
"registerCourt": "Mannheim",
"legalPageUrl": "https://www.verivox.de/impressum/",
"legalPageType": "legal-notice",
"foundVia": "footer-link",
"error": "",
"scrapedAt": "2026-11-10T02:00:00.000Z"
}
]

🔁 Bulk processing & 1,000+ domain scale

Unlike search scrapers that paginate through a single directory, this Actor operates as a high-throughput parallel domain enrichment engine:

  • Zero artificial caps: Set maxItems: 0 (the default) to process 1,000, 10,000, or 100,000+ domains in a single run.
  • Fast fail on dead hosts: Unreachable or expired domains fail fast on the initial check without wasting time probing fallback paths, keeping bulk runs snappy.
  • Automatic deduplication: If your input list contains https://www.hetzner.com/de/, hetzner.com, and info@hetzner.com, the normalizer collapses them into a single hetzner.com lookup — guaranteeing 0 duplicate rows.
  • Configurable concurrency: Tune maxConcurrency between 20 and 100 to match your throughput targets.

⚙️ How to use & integrate

1. Run in the Apify Console

  1. Open the Impressum & EU Legal Notice Extractor on Apify.
  2. Paste your list of domains, URLs, or emails into Domains to look up.
  3. Leave Max results at 0 to process your full list (or set 100 for a quick test).
  4. Click Start and download your enriched dataset as CSV, Excel, or JSON.

2. Run via Python SDK

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("haketa/impressum-legal-notice-extractor").call(run_input={
"domains": [
"heise.de",
"golem.de",
"contabo.com",
"hetzner.com",
"sevdesk.de",
"personio.de"
],
"contactPageFallback": True,
"maxItems": 0,
"maxConcurrency": 30,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{item['domain']} -> {item['companyName']} | CEO: {item['managingDirector']} | VAT: {item['vatId']} | {item['emails']}")

3. Run via Node.js SDK

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('haketa/impressum-legal-notice-extractor').call({
domains: ['heise.de', 'hetzner.com', 'sevdesk.de', 'shopware.com'],
contactPageFallback: true,
maxItems: 0,
maxConcurrency: 25,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.table(items.map(({ domain, companyName, managingDirector, vatId, emails }) => ({
domain, companyName, managingDirector, vatId, emails,
})));

4. Connect to Make, Zapier, n8n, Clay, or HubSpot

  • Clay / n8n / Make: Trigger the Actor via HTTP webhook whenever new leads enter your pipeline, and map companyName, managingDirector, vatId, and phone back to your CRM.
  • Google Sheets: Export directly to Google Sheets or schedule weekly enrichment jobs.

💡 Pro tips for maximum extraction rates

  • Focus on .de, .at, .ch, .fr, .it, .es, .nl, and .eu business domains: DACH websites have the strictest Impressum laws (§ 5 DDG), delivering the highest fill rates on managingDirector, vatId, registrationNumber, and registerCourt.
  • Keep contactPageFallback: true enabled: For international .com domains that don't publish a German-style Impressum, the fallback still captures verified email addresses and phone numbers from /contact or /kontakt.
  • Use vatId and registrationNumber as unique join keys: When enriching CRM accounts, joining on vatId (DE..., ATU..., CHE...) or registrationNumber (HRB ...) eliminates duplicate accounts across multiple brand domains.
  • Enable Apify Proxy only when needed: Direct requests work for 95%+ of corporate websites and use zero proxy bandwidth. If a small subset of domains sits behind strict firewall rules, re-run just those domains with useApifyProxy: true.

❓ Frequently Asked Questions

The extractor is optimized for Germany, Austria, and Switzerland (DACH) (Impressum / Offenlegung), and also supports France (Mentions légales), Spain (Aviso legal), Italy (Note legali / Dati societari), Netherlands & Belgium (Colofon / Juridische informatie), and English-language Imprint / Legal Notice pages across all 27 EU member states and the UK.

Can I paste full URLs or email addresses instead of bare domains?

Yes. You can paste https://www.company.de/en/about, company.de, or contact@company.de. The Actor automatically normalizes every entry to its bare domain (company.de) and removes duplicates before running.

How many domains can I enrich in a single run?

There is no hard cap. Set maxItems: 0 to process 1,000, 10,000, or 100,000+ domains. With maxConcurrency: 40, the Actor processes roughly 1,000 domains in 15–20 minutes on standard compute.

Why are some fields empty on certain domains?

Legal disclosure requirements vary by legal form and country. For example, a sole proprietor (Einzelunternehmen) or small partnership (GbR) does not have a Handelsregisternummer (HRB) or Amtsgericht, and some non-DACH sites only list company name, address, and email without a VAT ID. If a site renders its entire legal notice inside a client-side image or canvas, the error field notes that no static fields were found.

Does this require a proxy or third-party API key?

No API keys or logins are required, and proxy is off by default so runs are fast and economical.

How does the extractor distinguish between a real managing director and random page text?

The parser locates the statutory representative label (Geschäftsführer, Geschäftsführung, Vorstand, Vertreten durch, Inhaber, Managing Director, Gérant, Amministratore, Bestuurder) and validates that the extracted value starts with an uppercase personal name, contains both given and family name tokens, excludes corporate suffixes or street patterns, and strips academic/parenthetical noise.

Can I enrich a list of 10,000+ domains from Google Maps or LinkedIn Sales Navigator?

Yes. Export your prospect website column from Google Maps, Apollo, Clay, Crunchbase, or LinkedIn Sales Navigator, paste the URLs directly into domains, set maxItems: 0 and maxConcurrency: 50, and export the resulting CSV/XLSX with companyName, managingDirector, vatId, registrationNumber, address, emails, and phone.


Country / RegionLegal Notice TermStatutory BasisTypical Register & Tax Identifiers Extracted
🇩🇪 GermanyImpressum / Anbieterkennzeichnung§ 5 DDG (ex-§ 5 TMG), § 18 MStVUSt-IdNr. (DE + 9 digits), Handelsregister (HRB / HRA), Amtsgericht, Geschäftsführer / Vorstand
🇦🇹 AustriaImpressum / Offenlegung§ 5 ECG, § 25 MedienG, § 14 UGBUID-Nummer (ATU + 8 digits), Firmenbuchnummer (FN), Handelsgericht / Landesgericht
🇨🇭 SwitzerlandImpressumArt. 3 Abs. 1 lit. s UWGUID / MWST (CHE-xxx.xxx.xxx), Handelsregisteramt, Geschäftsführer / Verwaltungsrat
🇫🇷 FranceMentions légalesArt. 6 LCENN° TVA intracommunautaire (FR + 11 chars), SIREN / SIRET, RCS + Greffe (Tribunal de Commerce), Gérant / Président
🇪🇸 SpainAviso legalArt. 10 LSSI-CENIF / CIF (ES + 9 chars), Registro Mercantil, Administrador
🇮🇹 ItalyNote legali / Dati societariArt. 2250 Codice CivilePartita IVA (IT + 11 digits), Registro Imprese, REA, Amministratore Unico / Delegato
🇳🇱 NetherlandsColofon / Juridische informatieArt. 3:15d BWBTW-nummer (NL + 9 digits + Bxx), KvK-nummer (Kamer van Koophandel), Bestuurder
🇧🇪 BelgiumMentions légales / Wettelijke vermeldingenCode de droit économiqueTVA / BTW (BE0 + 9 digits), BCE / KBO, Gérant / Zaakvoerder
🇬🇧 United Kingdom & IEImprint / Legal Notice / Legal DisclosureCompanies Act 2006VAT Reg No (GB / IE), Company Registration No, Directors

🛠️ Ready-to-run workflow recipes

Recipe 1: Enriching a German Mittelstand prospect list for cold email & phone outreach

{
"domains": [
"https://www.personio.de",
"https://www.sevdesk.de",
"https://www.lexoffice.de",
"https://www.shopware.com",
"https://www.hetzner.com",
"https://www.contabo.com"
],
"contactPageFallback": true,
"maxItems": 0,
"maxConcurrency": 30
}

Recipe 2: High-speed KYB VAT & Commercial Register verification

{
"domains": [
"westwing.de",
"verivox.de",
"flaconi.de",
"doctolib.fr",
"bol.com",
"ionos.de"
],
"contactPageFallback": false,
"maxItems": 0,
"maxConcurrency": 40
}

Pair the Impressum & EU Legal Notice Extractor with these company and lead-generation Actors:


📋 Changelog

  • v1.2 (2026-11) — Unlocked 1,000+ domain scale & faster execution: Added fast-fail handling on unreachable root hosts so dead domains never probe fallback paths, reduced per-probe timeouts for faster batch throughput, expanded built-in DACH/EU sample domains for zero-input runs, and enhanced README documentation with field coverage tables.
  • v1.1 (2026-08) — Improved German company name and Geschäftsführer extraction accuracy; added filters against template placeholder names (Max Mustermann) and mid-sentence fragments.
  • v1.0 (2026-05) — Initial release with 3-stage legal page discovery (footer-link, common-path, contact-page), 29 EU/EFTA VAT formats, commercial register (HRB/HRA/Amtsgericht) extraction, and parallel concurrency pool.