Impressum Scraper - Company, VAT ID & Register Number Extractor
Pricing
from $5.00 / 1,000 website with company data returneds
Impressum Scraper - Company, VAT ID & Register Number Extractor
For DACH B2B lead lists and KYB checks: an Impressum API that finds the legal notice (imprint, mentions légales, aviso legal, 特定商取引法) of each website and returns name, legal form, address, phone, email, directors, register number and court, VAT ID with a format check, each with its source line.
Pricing
from $5.00 / 1,000 website with company data returneds
Rating
0.0
(0)
Developer
NeverEmpty
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Give a list of websites. For each one this Actor finds the Impressum (legal notice, imprint, mentions légales, aviso legal, note legali, 特定商取引法に基づく表記) and returns one row with the company behind the site: legal name and legal form, address, phone, email, managing directors, commercial register number and court, and VAT ID. Every value comes with the line of the page it was read from, so a person or an AI agent can cite and check it.
Use it for B2B lead lists in the German-speaking market, KYB / supplier checks, invoice address checks, or to answer "which company runs this website?".
What makes it different
- Evidence for every field.
evidence.companyName,evidence.address,evidence.register,evidence.vatId… hold the exact line(s) the value was read from. Nothing is inferred by a language model; the reading is done with rules, and a field the rules are not sure about is leftnull. - It does not confuse the operator with other companies on the page. A German Impressum also names the web designer (Webdesign), the hosting company (Hosting), the supervisory authority (Aufsichtsbehörde), the dispute resolution body (Streitschlichtung) and the person responsible for content (Verantwortlich i.S.d. § 18 MStV). Those sections are recognised and not used for the company name, address, phone, register or VAT ID. The content-responsible person is returned separately in
contentResponsible. - VAT ID format check.
vatIdChecksays whether the VAT ID (USt-IdNr., UID, TVA, P.IVA) has the right length for its country and, for DE, AT, BE, FR, IT, GB and CH, whether its check digit is right (format-and-check-digit,format-only,check-digit-failed,format-invalid). This is not a VIES lookup. - Several languages and countries (German-speaking sites are the checked ones; the rest is best effort, see Limits). German (DE / AT / CH: HRB, HRA, FN, CHE-UID, Amtsgericht, Firmenbuchgericht), French (RCS, SIREN/SIRET), Spanish (NIF/CIF, Registro Mercantil), Italian (P.IVA, REA), English (Companies House number) and Japanese (特定商取引法に基づく表記, 会社概要, 法人番号).
- Honest misses, free of charge. A site without a findable legal notice, a site that refuses the reader, or a page whose text cannot be read comes back as a row with a
statusand anotethat says why. Those rows are not charged. - Polite by design. Only the sites you list are read, at most 5 pages per site. Each site's
robots.txtis read at run time and pages disallowed forUser-agent: *are not requested (robots-disallowed). Check pages (CAPTCHA) and HTTP 403 are not solved and not routed around with proxies (blocked).
Input
| Field | What it does |
|---|---|
websites | Domains (example.de) or legal notice URLs (https://example.de/impressum), 1 to 500. A domain is searched for its legal notice; a URL with a path is read as the legal notice. |
includePersonNames | Default true. Turn off to leave out representatives, contentResponsible and any company name without a legal form (it may be a sole trader's personal name). |
maxConcurrency | Websites read in parallel (1 to 8, default 4). |
requestTimeoutSecs | Time limit per request (5 to 60, default 20). |
{ "websites": ["www.hetzner.com", "www.thomann.de", "www.zotter.at"], "includePersonNames": true }
Output
One row per website. Example (shortened):
{"status": "ok","domain": "zotter.at","impressumUrl": "https://www.zotter.at/impressum","impressumFoundVia": "homepage-link","companyName": "Zotter Schokolade GmbH","legalForm": "GmbH","street": "Rastbühel 7d","postalCode": "8301","city": "Laßnitzhöhe","countryCode": "AT","phone": "+43 - 3152 - 5554","phoneE164": "+4331525554","email": "schokolade@zotter.at","representatives": [{ "name": "Julia Zotter", "role": "Geschäftsführerin" }],"registerType": "FN","registerNumber": "FN 220619s","registerCourt": "Graz","vatId": "ATU53816900","vatIdCountry": "AT","vatIdFormatValid": true,"vatIdCheck": "format-and-check-digit","fieldsFound": 7,"evidence": {"companyName": "Zotter Schokolade GmbH","address": "Rastbühel 7d / 8301 Laßnitzhöhe","phone": "Tel.: +43 - 3152 - 5554","representatives": "Geschäftsführerin: Julia Zotter","register": "Firmenbuchnummer: 220619s / Firmenbuchgericht: Landesgericht für ZRS Graz","vatId": "UID: ATU53816900","country": "vat-id-prefix: ATU53816900"}}
| Column | Meaning |
|---|---|
status | ok, or the reason nothing was returned: no-impressum-found, impressum-not-readable, blocked, robots-disallowed, robots-unreachable, unreachable, not-found, login-required, http-error, unreadable, not-html, bad-input, budget-reached. |
impressumUrl, impressumFoundVia | The page that was read and how it was found: homepage-link, legal-page-link, homepage (one-page sites), common-path, input-url. |
companyName, legalForm | The operator as written, and its legal form (GmbH, UG (haftungsbeschränkt), AG, GmbH & Co. KG, e.K., e.V., Ltd, PLC, SAS, SARL, S.L., S.r.l., 株式会社 …). legalForm is null when the name carries none. |
street, postalCode, city, region, countryCode, country, addressRaw | The first address that belongs to the operator. countryCode is filled only when the page itself gives it (country written in the address, a D-/A-/CH- prefix, the VAT ID prefix, a Japanese or UK postcode); it is never taken from the domain ending. |
phone, phoneE164 | The phone number as written, and in international form when the number starts with +/00 or the country was read from the page. Fax numbers are skipped. |
email | The first email address in the operator's part of the notice (also name [at] example.de and Cloudflare-protected addresses, as a browser shows them). |
representatives | [{ name, role }]: Geschäftsführer, Vorstand, Inhaber, Managing Director, Gérant, Directeur de la publication, 代表者, 運営統括責任者 … |
contentResponsible | The person named as responsible for content (V.i.S.d.P., § 18 MStV, § 55 RStV). |
registerType, registerNumber, registerCourt | For example HRB / HRB 6089 / Ansbach, FN / FN 220619s / Graz, RCS, SIREN, Companies House, NIF/CIF, REA, UID, 法人番号. |
vatId, vatIdCountry, vatIdFormatValid, vatIdCheck | The VAT ID without spaces, and the result of the format check. |
fieldsFound, fieldsRead | How many of the seven groups were read (company name, address, phone, email, representatives, register, VAT ID) and which. |
evidence | For each group, the line(s) the value was read from. Values taken from the page's JSON-LD (Organization) say so, for example JSON-LD Organization.legalName: …. When the JSON-LD name carries no legal form and the page text states the same name with one ("Monzo Bank Limited"), the text is used. |
dataSources | Per group: impressum-page-text or json-ld. |
note | What was not read, and the limits of the row. |
Pricing
Pay per event: impressum-returned is charged once for each website whose legal notice was found and from which at least two of the seven groups were read. Rows with any other status are free. There is no start fee. An empty input reads the example site and charges nothing.
Limits you should know
- Where it has been checked. The reading rules were checked in production (2026-10-05) on German, Austrian and Swiss websites: of 30 mixed sites, 16 came back with company data, 10 refused automated readers, disallowed the page in robots.txt or could not be reached, 1 needed JavaScript and 3 had no findable notice. French (mentions légales), Spanish (aviso legal), Italian (note legali) and Japanese (特定商取引法に基づく表記) notices are read by rules that are in place but have not been confirmed in production yet: treat those as best effort and check
evidence. - JavaScript-only pages are not read. If the legal notice text appears only after JavaScript runs (for example dm.de), the row is
impressum-not-readableand free. - Reading is done with rules, not a language model. Legal notices written as one long sentence, as an image, in a column layout where labels and values are far apart, or loaded by JavaScript after the page opens can yield fewer fields or
impressum-not-readable. Missing fields arenull; nothing is guessed. - For a group of companies the notice may name several entities. The first operator block from the top of the notice is taken. For a GmbH & Co. KG the notice also names the general partner; check
evidence.companyName. - Sites that answer HTTP 403 or show a check page to automated readers come back as
blocked. Shopify shops disallow/policies/in robots.txt, so a legal notice that lives only there comes back asrobots-disallowed. - The United Kingdom has no Impressum duty; company details there are often only in the page footer or the terms, so fewer UK sites are found.
- The VAT ID check is a format and check-digit check. It does not say the number is registered or belongs to this company.
- Legal notices contain personal data that the law requires traders to publish (names of directors and owners; for sole traders sometimes a home address or mobile number). You are responsible for how you use it: follow the GDPR and your country's rules on unsolicited marketing (in Germany § 7 UWG), and use
includePersonNames: falseif you do not need names.
FAQ
What is an Impressum? In Germany (§ 5 DDG, formerly § 5 TMG), Austria (§ 5 ECG, § 25 MedienG) and Switzerland (Art. 3 UWG) commercial websites must state who operates them. France (mentions légales), Spain (aviso legal, LSSI) and Italy (note legali) have similar duties, and Japanese online shops must publish a 特定商取引法に基づく表記.
Can an AI agent use this? Yes. Give it the domain; the row answers "who operates this site" and evidence gives the sentence to quote, with impressumUrl as the source.
Does it verify the VAT ID in VIES? No. It checks length and check digit only.
Thanks for using this Actor
We build these tools for people who run them every day, and we improve them from what users tell us.
- Missing a field, or need another filter? Tell us in the Issues tab. If the data is there, we add it.
- Found a bug or a wrong value? Post the run ID in the Issues tab. Wrong data is the thing we fix first.
If this Actor saved you time, a short review helps other people find it.