EU Impressum Lookup
Pricing
from $1.70 / 1,000 company founds
EU Impressum Lookup
Extract company details from EU websites' Impressum, Imprint, legal notice, Mentions légales or Colofon pages. Returns company data only by default.
Pricing
from $1.70 / 1,000 company founds
Rating
0.0
(0)
Developer
Mike Berckmoes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Security
Limited permissionsShare
Impressum Scraper: EU legal-notice company data from a list of domains
Turn a list of company websites into clean company records taken from each site's legally required legal notice. The legal notice is called Impressum in Germany, Austria and Switzerland, Mentions légales in France, Colofon in the Netherlands, Note legali in Italy, and Imprint, Legal notice or company information in the UK and Ireland. For each domain you get the legal name, legal form, register court and number, VAT ID, address, generic company email and phone. Use it for B2B lead enrichment, CRM cleaning, KYB/supplier checks and matching websites to legal entities. DACH comes first. French, Dutch, Italian, Belgian, Luxembourg, UK and Irish pages also work.
What does Impressum Scraper do?
For every domain it:
- reads
robots.txtand respects it (includingCrawl-delay, max 5 s), - fetches the homepage over plain HTTP (no browser, no proxy),
- when the homepage HTML contains
cdn.shopify.comorShopify.theme, fetches/policies/legal-noticeand/policies/terms-of-serviceon that same host, - finds the legal-notice link (Impressum, Imprint, Legal notice, Mentions légales, Colofon, Note legali, Notizie legali, company information, Offenlegung, Rechtliche Hinweise …) and opens the best candidates,
- if no page with company data was found, tries common paths such as
/impressum,/imprintand/mentions-legales, then looks for an Impressum URL in the site'ssitemap.xml(listed in robots.txt), - parses the page and returns one row per domain with a
status.
| Field | Examples / formats recognised |
|---|---|
legalName, legalForm | GmbH, AG, SE, KG, GmbH & Co. KG(aA), UG (haftungsbeschränkt), e.K., GesmbH, Genossenschaft, SAS/SASU/SA/SARL/SCA (also spelled out: "société par actions simplifiée"), B.V., N.V., S.r.l., S.p.A., S.r.l.s., BVBA, SPRL, Ltd … |
registerType, registerNumber | HRB/HRA/GnR/PR/VR (DE), FN (AT Firmenbuch), CHE-UID (CH, check digit verified), SIREN (FR, Luhn verified, also read from RCS/SIRET), KvK (NL, 8 digits), CRN (UK company number), CRO (Ireland, 6 digits), REA and P.IVA (Italy, P.IVA Luhn-checked), KBO/BCE (Belgium, check digit), RCS B-number (Luxembourg) |
registerCourt | Amtsgericht / Registergericht, Handelsgericht / Landesgericht, Handelsregister des Kantons …, RCS + city |
vatId, vatIdChecksumValid | USt-IdNr., UID (ATU…), TVA (FR..), BTW (NL…B..), BE, IT, LU, GB, IE, CHE … MWST; check digit verified for DE, AT, FR, NL, BE, IT, LU and CHE. GB and IE numbers are kept with a null check result |
street, postcode, city, country | DE/FR/IT 5-digit, AT/CH/BE/LU 4-digit (also A-/CH-/B-/L- prefixes), NL 1234 AB, UK postcode (SW1A 1AA), Irish Eircode (A65 F4E2) |
email, phone | Generic company addresses only (info@, kontakt@, contact@, office@, service@ …); phone from Tel/Telefon/Phone/Tél labels |
status | ok, no_impressum, fetch_error, robots_disallowed, charge_limit |
confidence | 0–1 completeness score (see the dataset schema) |
Why use it?
- Cheap and light. Plain HTTP requests only: no browser, no proxies, no search-engine fees.
- One row per domain, always. Failures are labelled (
fetch_errorwith the HTTP status or error,no_impressum). A run that hits its charge cap still gets a freecharge_limitrow per domain that was not stored, so you can join the output back to your list. - Validated identifiers. VAT IDs, Swiss UIDs and French SIRENs are check-digit verified, so typos and look-alike numbers are flagged or dropped.
- Polite by design. robots.txt is obeyed (an unreachable robots.txt counts as "disallow", per RFC 9309). Requests to the same site are sequential, at least 0.5 s apart. The crawler identifies itself as
EUImpressumLookup. - Company data only by default (see GDPR below).
How to use it
- Paste your own domains or URLs into Domains or URLs (e.g.
example.de,https://www.example.at/), or pass an Apify dataset ID from a Google Maps / places scraper (each item'swebsite/websiteUrl/urlis mapped to a domain), or pastemapsItemsinline. There is no Shopify store discovery: the Actor only checks websites you supply. - Optionally turn on Verify VAT via VIES (default off) to check extracted USt-IdNr numbers with the free EU REST API.
- Optionally change Max parallel domains (default 10) and the Request timeout.
- Run, then export to CSV, Excel or JSON, or connect Google Sheets, Make, Zapier or your CRM.
Shopify stores
The input stays your own domains, URLs, Google Maps datasetId, or mapsItems. This Actor does not discover Shopify stores, and it never requests apps.shopify.com (including subdomains such as something.apps.shopify.com). A store you already know, including a *.myshopify.com hostname, is checked like any other domain you listed.
Shopify is detected from the homepage HTML (cdn.shopify.com or Shopify.theme). The Actor then fetches /policies/legal-notice and, if that page is missing or incomplete, /policies/terms-of-service, on the same host. Those pages go through the existing in-process register extraction and VAT check-digit test. There is no call to another Actor. vatIdChecksumValid remains a check digit. Optional verifyVat can then check that VAT id with VIES, the same as for any other legal notice.
When a policy page supplies the company fields, platform is shopify and foundVia is shopify_policy. An ok row is charged as company-found at the same $0.002. no_impressum, fetch_error and robots_disallowed are not charged.
Input example
{"domains": ["example.de", "https://www.example.at/", "example.fr"],"maxConcurrency": 10,"includePersonNames": false,"verifyVat": false}
Google Maps dataset:
{"domains": [],"datasetId": "YOUR_PLACES_DATASET_ID","maxDatasetItems": 200,"verifyVat": false}
Output example
{"input": "example.de","domain": "example.de","status": "ok","foundVia": "link","sourceUrl": "https://www.example.de/impressum","legalName": "Example GmbH","legalForm": "GmbH","registerType": "HRB","registerNumber": "HRB 12345","registerCourt": "Amtsgericht München","vatId": "DE123456789","vatIdChecksumValid": true,"street": "Musterstraße 1","postcode": "80331","city": "München","country": "DE","email": "info@example.de","phone": "+49 89 123456-0","confidence": 1.0,"requests": 3,"checkedAt": "2026-10-03T18:00:00+00:00"}
vatIdChecksumValid is a check-digit test, not a VIES lookup. Set verifyVat to call POST https://ec.europa.eu/taxation_customs/vies/rest-api/check-vat-number (free, no key). vatVerified is true only when VIES returns valid: true.
How much does it cost?
$2 per 1,000 domains with company data found ($0.002 per ok row, event company-found), pay per event, with no start fee. Live pricing is unchanged, including for Shopify policy pages. Every input domain still gets one row, but rows with no_impressum, fetch_error, robots_disallowed or charge_limit are free. 500 domains with 300 ok rows cost $0.60. If your maximum charge per run is reached, company data that was not charged is not stored. Each of those domains, and any domain not fetched after the cap, gets one free charge_limit row. notCheckedDueToChargeLimit in RUN_SUMMARY counts domains that were not fetched.
Optional event vat-verified: charged only when VIES confirms a number (valid: true). Proposed $0.001–0.002. This event is not published and Store prices are not changed by this upgrade; until PPE is configured the charge call is ignored on a private Actor.
GDPR and person names
Impressum pages often list managing directors (Geschäftsführer), board members or a publisher by name, and sometimes a personal email address. These are personal data under the GDPR. By default this Actor does not output them: only generic company emails (info@, kontakt@ …) are returned, and no names.
If you switch on Include person names, the Actor adds managingPersons and may return a non-generic email address. Only do this if you have a lawful basis, for example legitimate interest for B2B outreach with an opt-out. Inform the data subjects where Art. 14 GDPR requires it, respect objections, and store and delete the data according to your own policies. You are the controller for the data you collect with this Actor.
Limitations (honest)
- Bot-protected sites (Akamai, Cloudflare and similar) answer plain HTTP clients with HTTP 403 or time out. They come back as
fetch_error, because this Actor does not use proxies or browsers. In our test this affected many large retail and consumer brands. - JavaScript-only sites whose homepage and legal page are rendered in the browser give
no_impressum. - Geo-redirects. Some global
.comsites redirect to a country version (e.g. the US site) that has no Impressum. Pass the country URL instead (e.g.https://www.example.com/de-de/). - Groups with several entities. The Actor returns the main operator of the site. When a page lists several registrations (e.g. a dual-seat AG), the first one is returned.
- Register court and wording are returned as printed. For example, it may return "Vienna Commercial Court" or "Berlin-Charlottenburg".
- Text is parsed with rules, not AI. Unusual layouts can produce missing fields. Check
confidence.
Test results (local, 3 Oct 2026)
22 well-known DE/AT/CH/FR company sites: 12 ok, 4 no_impressum, 6 fetch_error (HTTP 403 or timeouts from bot protection). For all 12 ok rows, the legal name and register number match the legal-notice page. 7 of these were also matched to the GLEIF LEI register: the legal name matched in 7/7, the register number in 6/7 (the 7th is a dual-seat company where the page and GLEIF list different but valid registrations), and the postcode in 7/7. Every VAT ID that the EU VIES service could check (6/6) was valid. VIES did not answer for German numbers during the test.
FAQ
What does EU Impressum Lookup extract? From a website's legal notice (Impressum, Mentions légales, legal notice) it extracts company fields such as legal name and register details. It reads only that page plus the homepage.
Is reading an Impressum legal? The notice is information that companies must publish, for example under § 5 DDG in Germany, § 25 MedienG in Austria and LCEN in France. The Actor respects robots.txt and returns company data by default. You are responsible for how you use the results.
Are person names collected? Not by default. includePersonNames is off by default.
Can it find a website from a company name? No. The input is a list of domains, a Google Maps dataset ID or mapsItems with a website field.
How is it priced? $0.002 per company-found event on the Free plan. verifyVat adds a separate optional vat-verified event and does not change the company-found price.
Why does a domain return fetch_error when it opens in my browser? The site blocks non-browser clients, or its robots.txt cannot be reached. Retry later or check the page manually.
Related Actors
- EU Company Register: UK, FR, NO, FI, PL, CZ, SK, IE, RO, CH: Looks the company name or number from the notice up in official registers.
- EU TIN & VAT Validator: Validates the VAT number found in the notice.
- Domain to Company Resolver: Does RDAP, legal notice, register and VAT in one run per domain.