Impressum & Imprint Scraper – Company Data, VAT Number & ID
Pricing
from $2.50 / 1,000 results
Impressum & Imprint Scraper – Company Data, VAT Number & ID
Website domains – or a trade and a city, e.g. dentists in Graz – in, one company record per site out from the imprint (Impressum, legal notice): company name, managing directors (opt-in), address, register number, VAT number (VAT ID) checked in EU VIES, email, phone. Germany, Austria, Switzerland.
Pricing
from $2.50 / 1,000 results
Rating
0.0
(0)
Developer
Perceptron Data
Maintained by CommunityActor stats
0
Bookmarked
14
Total users
5
Monthly active users
15 days ago
Last modified
Categories
Share
Imprint & VAT Check
New (13 October 2026): fewer dead ends. Sites that block bots, don't answer or need JavaScript now get a second pass through Apify's Web Fetch, rendered in a browser where needed – in our platform test, 8 of 9 such sites came back complete with a VIES-valid VAT ID.
Paste website domains, get one company row per domain from its Impressum: legal name, address, register number, VAT ID, email and phone. Every EU VAT ID is checked live through the EU's VIES service, and a row without an imprint says why.
Limits: a row is only as complete as the site's imprint – a missing imprint, a blocked site or a timeout is named in the row. Sites this actor cannot read directly – they refuse automated requests, do not answer our server or draw their pages with JavaScript – are searched once more through Apify's own Web Fetch, which Apify bills on your account ($0.0015 per delivered page, at most 6 pages per site; JavaScript pages are rendered in a browser there) – web_fetch: false switches it off. Swiss UIDs cannot be checked (VIES does not cover Switzerland); Germany confirms validity only, without the name. Director names are off by default.
| Website | Status | Company | Register | VAT ID (VIES) | |
|---|---|---|---|---|---|
| haribo.com | found | HARIBO GmbH & Co. KG, Grafschaft | HRA 22030 | DE815499929 – valid | info@haribo.com |
| ritter-sport.de | found | Alfred Ritter GmbH & Co. KG, Waldenbuch | HRA 242329 | DE147645259 – valid | info@ritter-sport.de |
| tuwien.at | found | Technische Universität Wien, Wien (AT) | – | ATU37675002 – valid, name matches the VAT register | pr@tuwien.ac.at |
Local test run of 12 October 2026: 6 websites in 4.3 seconds. A sixth site, miele.de, refused automated requests and got an error row with the reason blocked instead of an empty one; since 13 October 2026 such sites are searched once more through Apify's Web Fetch, and miele.de came back as Miele Vertriebsgesellschaft Deutschland KG with a VIES-valid VAT ID.
What you are not charged for: duplicate entries (firma.de, https://www.firma.de/ – merged into one row), entries that are not a website, websites the run did not reach before your cost limit or its timeout (all listed in the run report OUTPUT), and the VIES check itself. Rows that report a blocked site or a missing imprint are charged – the status says which. Every run has a start fee of $0.01.
Want to try it first? The Free Imprint & Contact Check returns the identical row for up to 10 websites per run – nothing held back.
How to use – step by step
- Click Try for free on this page (a free Apify account is enough) – the form opens with three example websites.
- Paste your domains into Websites, one per line – full URLs and messy copy-paste are fine. No list? Type a trade and a place into Search: a trade and a place instead, e.g.
Zahnärzte in Hamburg. - Optional: enter Your own EU VAT ID to get a VIES consultation number per check; switch on person names only if you need them.
- Click Start. Six websites took 4.3 seconds in a local test run on 12 October 2026; long lists run at 0.25–0.9 websites per second.
- Open the Output tab: Companies (one row per website), Contacts only and Evidence (input, status, source page, check time, VIES answer). Export as CSV, Excel or JSON, or read the rows through the API (examples below).
- The run report
OUTPUTin the key-value store counts the rows per status and lists duplicates, unusable entries and websites not processed – ready for the next run.

Two ways in: a list, or a search
You have the domains. Paste them – one row comes back per distinct website.
Duplicates (firma.de, https://www.firma.de/, FIRMA.de/kontakt) are merged
into one row before anything is fetched.
You don't have the domains. Type the trade and the place instead:
{ "search": "Zahnärzte in Hamburg", "max_companies": 25 }
The businesses are looked up in OpenStreetMap, and every website found is
then enriched from its imprint. About 180 trades are recognised, in German and
English – dentist, Steuerberater, roofer, Bäckerei, Autohaus,
Rechtsanwalt, Hotel, Elektriker, Physiotherapie and so on, including
plurals. Places can be a city, a district, a county or a whole state
(Hamburg, Landkreis Rosenheim, Bayern).
For a trade the list does not know, pass the OpenStreetMap tag yourself:
{ "osm_filter": "[\"office\"=\"company\"]", "location": "Wien" }
What a search actually returns
Nine searches across trades, city sizes and all three countries, run on the platform on 28 September 2026, five companies requested each:
| Search | Rows | With name | With e-mail | With VAT ID | Runtime |
|---|---|---|---|---|---|
| Steuerberater Wien 🇦🇹 | 5 | 5 | 4 | 3 | 103 s |
| Rechtsanwälte München | 5 | 5 | 4 | 3 | 102 s |
| Apotheken Leipzig | 5 | 5 | 2 | 2 | 130 s |
| Autohäuser Stuttgart | 5 | 5 | 3 | 2 | 53 s |
| Elektriker Köln | 5 | 5 | 3 | 2 | 99 s |
| Restaurants Zürich 🇨🇭 | 5 | 5 | 4 | 2 | 28 s |
| Hotels Berlin | 5 | 4 | 1 | 1 | 34 s |
| Dachdecker Landkreis Rosenheim | 1 | 1 | 1 | 1 | 13 s |
| Bäckereien Bayern (whole state) | failed | – | – | – | 104 s |
City-sized searches work, rural districts are thin, and a whole federal state
is too much for the free query service. Swiss VAT numbers are never marked
valid because CHE- identifiers are outside the EU's VIES system.
- Not every business is in OpenStreetMap, and not every entry has a website. Measured on 28 September 2026: hotels in Berlin 76 % with a website, dentists in Hamburg 52 %, bakeries in Munich 35 %.
- OpenStreetMap's query service is volunteer-run and throttles hard. A busy moment produces a clear message rather than an empty result; the actor retries across three mirrors within a fixed 100-second budget.
- Attribution travels with the data. Every discovered row carries
dataSource: "© OpenStreetMap contributors"anddataLicense: "ODbL 1.0", because that licence requires it – of you as well, if you republish. - The map fields (
osmName,osmCategory,osmCity,osmPhone) stay in the row next to the imprint fields, so you can see what came from where. Where they disagree, the imprint wins.
What you get per website
Example values are from a real run of the default input (liebherr.com, 12 October 2026):
| Field | Example |
|---|---|
input, status, reason | liebherr.com, found, imprint – see the status table below |
companyName, legalForm | Liebherr-International Deutschland GmbH, GmbH |
street, postalCode, city, country | Memminger Straße 120, 88400, Biberach an der Riß, DE |
registerType, registerNumber, registerCourt | HRB, HRB 640080, Ulm |
vatId, vatCountry | DE811154028, DE |
vatStatus, vatChecked, vatValid | valid, true, true – VIES answered |
vatCheckedAt, vatRequestDate, vatRequestIdentifier | when it was checked, VIES's own answer timestamp, and VIES's consultation number if you give your own VAT ID |
vatRegisteredName, vatRegisteredAddress, vatNameMatch | what the tax register holds, where the member state discloses it, and whether it matches the imprint |
email, allEmails, emailNote | info.lho@liebherr.com – Liebherr writes it with Cloudflare's e-mail protection, which the actor decodes like a browser does; emailNote says so when an address cannot be read |
phone, allPhones, fax | +49 7351 41-0, up to 5 numbers |
socialProfiles | LinkedIn, Xing, Facebook, Instagram, X, YouTube, TikTok |
impressumUrl = sourceUrl, foundVia | the page the data came from, verbatim, and how it was found |
evidence, coverage, matchedOn | why this page counts as the legal notice, what was checked, what the row is keyed on |
checkedAt, schemaVersion | when the row was made, "2" |
completeness, dataQuality | 0–1 and high / medium / low |
duplicateInputs | your other entries that pointed to the same website |
contactSource | where contact data comes from when it is not the legal notice: footer, structured data, contact page |
representatives | managing directors – only if you switch them on |
Three countries, three legal bases, one schema
| Country | Duty to publish | Register identifier the scraper reads |
|---|---|---|
| 🇩🇪 Germany | § 5 DDG (successor to § 5 TMG) | HRB, HRA, VR, GnR, PR + Amtsgericht |
| 🇦🇹 Austria | § 5 ECG, § 25 MedienG | FN 123456a + Firmenbuchgericht |
| 🇨🇭 Switzerland | UWG Art. 3(1)(s) | CHE-123.456.789 + Handelsregister of the canton |
Four-digit Austrian and Swiss postal codes are handled as well – a German-only parser silently drops those addresses.
The VAT check
An imprint states a VAT ID. Whether it is registered is a different question, and only the member state can answer it. This actor asks VIES for every EU VAT ID it finds and reports exactly what VIES said:
vatStatus | vatChecked | vatValid | Meaning |
|---|---|---|---|
valid | true | true | VIES confirmed the number |
invalid | true | false | VIES answered: not registered – a red flag for invoicing |
unavailable | false | null | VIES or the member state's register did not answer. Validity is unknown, not invalid |
not_checked | false | null | Swiss CHE- number (outside the EU system), or the check is switched off |
VIES is often down or overloaded (MS_UNAVAILABLE, MS_MAX_CONCURRENT_REQ,
timeouts). Each check is tried up to three times with growing pauses; when a
member state keeps failing it is paused for a minute instead of being asked for
every company, and all unanswered checks get a second pass at the end of the
run. The row says how it went (vatCheckNote). Measured on 12 October 2026:
VIES answered MS_MAX_CONCURRENT_REQ for Germany during a run; both German
numbers came back valid in the second pass.
vatRequestDateis VIES's own timestamp of the answer – your evidence of when the number was valid. Enter your own EU VAT ID inrequester_vat_idand VIES also issues a consultation number (vatRequestIdentifier); per the VIES API documentation it is only issued with requester data. If VIES rejects your ID, the checks still run, without the number.- Austria, Italy, Spain and most other member states also return the
registered name and address, so you can cross-check the imprint against
the register in the same row (
vatNameMatch). - Germany discloses validity only – no name, no address. That is a limit of the German tax authority, not of this actor.
It costs you nothing extra and usually adds well under a second per company; a VIES outage can add up to about a minute to a run.
This actor is not affiliated with or endorsed by the European Commission, which runs VIES.
Input
{"websites": ["liebherr.com", "frischpack.de", "tuwien.at", "sbb.ch"],"validate_vat": true,"requester_vat_id": "","allow_contact_page": true,"include_person_names": false}
Paste domains, full URLs or a messy copy-paste – they are normalised. Each
distinct website gives exactly one row (its input field is your entry as you
typed it). Entries that point to the same website are merged into that row
(duplicateInputs); entries that are not a website at all (Thomann GmbH,
hornbach,de) give no row – both are listed in the run report (OUTPUT in the
key-value store), so nothing disappears silently.
Output (shortened)
Real row from 12 October 2026 (tuwien.at; the legal notice writes its e-mail address as "pr @ tuwien.ac.at"):
{"input": "tuwien.at","website": "https://tuwien.at","status": "found","reason": "imprint","companyName": "Technische Universität Wien","street": "Karlsplatz 13","postalCode": "1040","city": "Wien","country": "AT","vatId": "ATU37675002","vatStatus": "valid","vatChecked": true,"vatValid": true,"vatCheckedAt": "2026-10-12T18:58:04Z","vatRequestDate": "2026-10-12T18:58:04.279Z","vatRegisteredName": "Technische Universität Wien","vatRegisteredAddress": "Karlsplatz 13 AT-1040 Wien","vatNameMatch": true,"email": "pr@tuwien.ac.at","phone": "+43 1 58801 0","socialProfiles": { "linkedin": "https://www.linkedin.com/school/tuwien" },"impressumUrl": "https://www.tuwien.at/tu-wien/kontakt/impressum","impressumFound": true,"foundVia": "footer link","evidence": "title + heading + URL name the legal notice; 3 legal-notice terms, register/VAT number, postal address, e-mail/phone","coverage": "start page, 1 imprint link","dataQuality": "high","checkedAt": "2026-10-12T18:58:04Z","schemaVersion": "2"}
What does a run cost?
| Websites | Cost |
|---|---|
| 100 | $0.51 |
| 1,000 | $5.01 |
| 10,000 | $50.01 |
$5.01 per 1,000 websites on the Apify free plan ($0.01 per run start plus $0.005 per website). Plainly:
- Every row is charged, including rows that say a site was blocked, unreachable, drawn by JavaScript or has no legal notice – the status tells you which, so you can see what you paid for.
- Duplicates and unusable entries produce no row and cost nothing. In a test list of 45 entries, 4 duplicates and 2 non-websites were merged or reported instead of charged (39 rows instead of 42).
- If you set a maximum cost per run, the actor stops starting new websites when
the limit is reached and says so in its status ("maximum cost per run reached
– N of M websites processed"); the rest is listed in
OUTPUT. - Web Fetch is billed by Apify, not by this actor. A site this actor cannot read
directly – it refuses automated requests (in a test list of 39 large DACH websites
8 did, 12 October 2026), does not answer our server, or draws its pages with
JavaScript – is searched once more through Apify's own
Web Fetch actor: its start page (the German
version first), the site's own legal-notice links and, failing those, a contact
page – at most 6 pages per site; JavaScript pages are rendered in a browser there.
It runs on your Apify account and Apify bills it there: $0.0015 per delivered page
on the free plan plus $0.00005 per call start (Apify Store, 13 October 2026) –
usually 2–3 pages, at most about $0.01 for such a site; sites read directly cost
nothing extra. Rows read this way say
foundVia: "Apify Web Fetch"(or"Apify Web Fetch (browser)"when rendered), andcoveragecounts the pages.web_fetch: falseswitches it off; such sites then keep their reason (blocked,timeout,unreachable,js_only).
Honesty about coverage
Not every website has a readable imprint, and pretending otherwise would waste
your money. Every row carries status and reason, and note explains it:
status | reason | Meaning |
|---|---|---|
found | imprint | the legal notice was read (foundVia: footer link, known path, sitemap, the site's public WordPress API, a section of a one-page site, or Apify's Web Fetch) |
found | contact_page | no legal notice found; the contact page was read instead – switch allow_contact_page off if you only want real imprints |
not_found | no_imprint | the site answered, but no legal notice was found on the linked pages or the usual paths (coverage lists what was checked). For a .de site the note points out that one is mandatory (§ 5 DDG) – as something to check, not as a verdict |
error | blocked | the site refused automated requests (401/403/429 or a bot-challenge page). The actor stops after two direct tries; with web_fetch on (the default) Apify's Web Fetch then searches the site, and the row stays blocked only when that fails too |
error | js_only | the site draws its legal notice with JavaScript – it very likely has one. With web_fetch on, its pages are first rendered in a browser by Apify's Web Fetch; the row stays js_only only when that shows no legal notice either. Contact data the site shows without JavaScript (start page footer, its JSON-LD, the contact page) is still returned, marked in contactSource and never as the legal notice |
error | timeout | the site did not answer in time (12 s per page, 45 s per website at most) – and, with web_fetch on, not through Apify's Web Fetch either |
error | unreachable | no connection: refused, TLS failure, server errors only – and, with web_fetch on, not through Apify's Web Fetch either |
error | dns | the domain does not exist – found out in well under a second instead of waiting |
Before a site counts as js_only, the ways that need no JavaScript are tried:
the pages a legal-notice overview links to, the sitemap, and – on WordPress
sites with a JavaScript front end – the site's public WordPress API. Measured on
12 October 2026 with the five JavaScript-heavy sites of our test list: ÖBB and
Doppelmayr were read completely that way, Manufactum gave its footer data, and
dm and Migros offer nothing without JavaScript.
With web_fetch on, the site is then rendered in a browser by Apify's Web Fetch
(test on the Apify platform, 13 October 2026: fischer.de and festo.com came back
complete with their VIES-valid VAT IDs; sto.de did not in a local test).
Pages that merely mention "Impressum" – a 404 page with a footer link, the
start page an unknown path redirects to, a bot challenge – are not reported as a
legal notice. A legal notice found under a guessed path that names a company
without the site's name (a subsidiary, an operator) is flagged in note.
You never get an empty row without an explanation of why it is empty. The run
report (OUTPUT in the key-value store) counts the rows per status and lists
duplicates, unusable entries and websites not processed.
Use it from code (Python, JavaScript, cURL)
Get your API token under Settings → API & Integrations in Apify Console.
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("perceptr0n/imprint-impressum-website-contact-scraper").call(run_input={"websites": ["haribo.com", "ritter-sport.de", "tuwien.at"],})# apify-client 3.x; with versions 1–2 use run["defaultDatasetId"]for row in client.dataset(run.default_dataset_id).iterate_items():print(row["input"], row["status"], row.get("companyName"), row.get("vatId"), row.get("vatStatus"))
JavaScript (npm install apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('perceptr0n/imprint-impressum-website-contact-scraper').call({websites: ['haribo.com', 'ritter-sport.de', 'tuwien.at'],});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.map((row) => [row.input, row.status, row.companyName, row.vatId, row.vatStatus]));
cURL – one call, rows in the response. The synchronous endpoint waits at most 5 minutes, so use it for lists of up to about 50 websites and the clients above for longer ones:
curl -X POST "https://api.apify.com/v2/acts/perceptr0n~imprint-impressum-website-contact-scraper/run-sync-get-dataset-items" \-H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \-d '{"websites": ["haribo.com", "ritter-sport.de", "tuwien.at"]}'
Use it from an AI agent (MCP)
Add the Apify MCP server with this actor as a tool to Claude, Cursor, VS Code or any other MCP client:
https://mcp.apify.com?tools=perceptr0n/imprint-impressum-website-contact-scraper
The client signs in to Apify on first connection, or you set the header Authorization: Bearer <APIFY_TOKEN>. The agent sends websites (or a search such as Steuerberater in Wien) and reads status, companyName, registerNumber, vatId and vatStatus per website; reason and note say why a row is empty.
What the agent's runs cost (live price on 12 October 2026): $0.005 per website row on the Apify Free plan (less on paid plans) plus $0.01 per run start. Duplicates, unusable entries and websites the run did not reach are free.
Data protection
- For companies with a legal form (GmbH, AG …), the imprint holds company data: name, legal form, address, register number, VAT ID. For sole traders, name and address are personal data.
- Person names are off by default. Managing directors and editorial contacts
are personal data under GDPR;
include_person_namesmust be switched on deliberately, and the input form says so. While it is off, no person name slips out through another field either: a sole trader's name is not returned as the company name (companyNameWithheldsays why), personal e-mail addresses likefirstname.lastname@are left out, and a VIES-registered name that is a person's is dropped. - Only publicly reachable pages are fetched, at a polite request rate, with no login and no circumvention of any access control.
- Using contact data for cold e-mail in Germany requires prior consent under § 7 UWG. That is your call to make, not this actor's – but you should know it before you buy a list of addresses from anyone.
FAQ
Is there an API for German company data? Register data is sold by commercial data providers. This actor takes another route: the imprint is a company record that commercial websites in Germany, Austria and Switzerland publish themselves, so no register licence is needed.
What is an Impressum? The legal notice a commercial website must carry: who runs it, where they are registered, how to reach them. In Germany it is required by § 5 DDG, in Austria by § 5 ECG, in Switzerland by UWG Art. 3(1)(s).
Does it work for Austrian and Swiss sites?
Yes – Firmenbuch numbers, Swiss UIDs and four-digit postal codes are all parsed,
and the country field tells you which set of rules applied. Swiss UIDs are not
checked: VIES covers EU VAT IDs only.
Can I get the managing director's name?
Yes, via include_person_names, but read the data protection note first. It is
off by default on purpose.
Is the VAT number checked or just copied?
Checked, live, against the EU's official VIES service. vatChecked is true
only when VIES actually answered; vatStatus says valid, invalid,
unavailable (VIES down – validity unknown) or not_checked.
What happens if a website has no imprint?
You get a row with status: not_found and, if you allowed it, whatever the
contact page held (reason: contact_page). A blocked, dead or JavaScript-only
site is an error row with its reason. You are never left guessing.
Can I feed it 50,000 domains?
Yes, but give it time: five websites are checked at once with a polite delay,
which measured 0.25–0.9 websites per second on 12 October 2026 depending on how
many sites answer slowly – about 20–65 minutes per 1,000. Raise the run timeout
for big lists. Shortly before the timeout – two minutes on runs of eight minutes
or more, a quarter of the time limit (at least 15 seconds) on shorter runs – the
actor stops starting new websites, stores what it has and lists the rest in
OUTPUT, so you can re-run exactly those. The cost scales linearly: $0.005 per website plus $0.01 per run start.
Does it need a proxy?
It uses none. No login, no cookies, no API key, no CAPTCHA solving in this actor. Sites it
cannot read directly – in a mixed test list of 39 large DACH websites 8 turned automated
clients away (12 October 2026); others do not answer our server or need JavaScript – are
searched once more through Apify's own Web Fetch (billed by Apify on your account, see "What
does a run cost?"); with web_fetch: false they keep their reason (blocked, timeout,
unreachable, js_only).
Changelog
- 13 October 2026 (evening) – Apify's Web Fetch now covers every site this actor cannot read directly: besides sites that refuse automated requests also sites that do not answer our server (timeout, no connection) and sites that draw their legal notice with JavaScript, which are rendered in a browser there. It reads the start page in its German version, the site's own legal-notice links and, failing those, a contact page – at most 6 pages per site (before: 3, refusing sites only). Footer links labelled "Impressum / AGB" are followed (idealo.de). Test on the Apify platform, 13 October 2026: of nine sites our own requests could not read, eight came back complete with a VIES-valid VAT ID (Miele, idealo, Trumpf, Zalando, Hansgrohe, Würth and – rendered in a browser – fischer and Festo); hornbach.de stayed
blocked. - 13 October 2026 – International sites that show visitors from abroad another country's version (Apify runs in the US; haribo.com then linked the legal notice of HARIBO of America) are read in their German version when the start page names one on the same site – the
notesays so. A "Website-Development by:" credit is no longer taken as the company name. - 13 October 2026 – Sites that refuse automated requests (bot challenge, HTTP 403) are now read through Apify's Web Fetch: start page and legal notice, at most 3 pages, billed by Apify on your account ($0.0015 per delivered page); input
web_fetch, on by default. Test of 13 October 2026: wuerth.de, refused behind an Akamai challenge from data centres, came back complete with its VIES-valid VAT ID. - 12 October 2026 – Repairs from a field-by-field sample against the source: imprint links written with HTML entities are followed (voestalpine.com was reported without one); a bot-challenge page is reported as
blocked, not as "no imprint"; when a legal notice lists several group companies, name, address, register number, VAT ID, phone and e-mail come from the publisher's block only (verbund.com); a legal notice on another domain is read when the start page links it as its own and it names the site's company (notesays so); e-mail addresses behind Cloudflare's e-mail protection or written as "info (at) …" / "office @ …" are read; phone numbers with labels such as "Infoline" or "p:" or alone on their line, "FIRMENBUCH-NUMMER" and names like "… AS GmbH" are recognised; an Austrian company gets its Firmenbuch number, not a subsidiary's HRB; trademark sentences and menu entries are no longer taken as the company name; an unfilled template legal notice ({{phone}}) gives no data. A run with a time limit of two minutes or less now checks websites instead of stopping before the first one. - 12 October 2026 – Sole traders: the VAT register gives the owner's own name, often surname first ("Surname Firstname"). With person names switched off, that name is now withheld and
companyNameWithheldsays why; before, it could appear as the company name. The same applies to a business that OpenStreetMap lists under its owner's name in search runs. - 12 October 2026 – JavaScript sites: the imprint is now also found through the sitemap, the pages an imprint overview links to and the public WordPress API; contact data a site shows without JavaScript is kept and marked in
contactSource. - 12 October 2026 – A VIES outage is reported as
unavailable, never "invalid" (three tries, a second pass at the end of the run). Duplicate entries are merged into one row and not charged; unusable entries are listed inOUTPUT. Every row hasstatus,reason, source page and check time; error rows name the cause (blocked,js_only,timeout,unreachable,dns).
Auf Deutsch: Impressum-Daten aus Websites extrahieren
Domainliste rein, je Website eine Firmenzeile aus dem Impressum raus: Firmenname, Rechtsform, Anschrift, Handelsregisternummer, E-Mail und Telefon. Jede EU-USt-IdNr. wird live über die EU-Prüfung VIES bestätigt; Schweizer UIDs kennt VIES nicht. Fehlt ein Impressum oder blockiert die Seite, steht der Grund in der Zeile. Websites, die der Actor selbst nicht lesen kann – sie weisen automatische Abrufe ab, antworten unserem Server nicht oder bauen ihre Seiten mit JavaScript auf –, durchsucht er ein zweites Mal über Apifys eigenen Web Fetch, JavaScript-Seiten dort im Browser (Apify rechnet das über das eigene Apify-Konto ab: 0,0015 $ je gelieferter Seite, höchstens 6 Seiten je Website; web_fetch: false schaltet es ab).
Ohne eigene Domainliste genügt eine Suche wie Zahnärzte in Hamburg: Die
Firmen werden über OpenStreetMap gefunden und anschließend aus ihrem Impressum
angereichert. Fällt VIES aus, steht in der Zeile unavailable – nie „ungültig“.
Doppelte Einträge werden zu einer Zeile zusammengeführt und nicht berechnet.
Typische Anwendungsfälle: Adresslisten bereinigen und anreichern, Lieferanten- und Kundenstammdaten prüfen, EU-USt-IdNr. prüfen, CRM-Pflege. Hinweis: Werbe-E-Mails an Firmen brauchen in Deutschland nach § 7 UWG eine vorherige Einwilligung.
More from Perceptron Data
| Actor | What it does |
|---|---|
| Free Imprint & Contact Check | The same company row, free, for up to 10 websites per run |
| Advertiser Check (Google & Bing) | Company list in, one row per company out: Google ads, Bing ads, ad counts, accounts |
| PDF to Markdown | PDF, Word, Excel and PowerPoint to Markdown for AI – tables as JSON, OCR for scans |
| Research Agent | A question in, cited passages out – every source graded by evidence level |
| App Store & Google Play Data | App IDs or App Store keywords in, one row per app out, plus App Store reviews |
| Arbeitsagentur Jobs | German job listings from the Jobbörse of the Bundesagentur für Arbeit |
| kununu Employer Data | Employer score vs. industry, salary ranges, benefits and reviews for DACH companies |
| Messe München Exhibitors | Exhibitor lists of bauma, IFAT, BAU and more |
| Koelnmesse Exhibitors | Exhibitor lists of Anuga, ISM, imm cologne and more |
| TED Tenders | EU public tenders and contract awards from TED |
| MaStR Energy Assets | Solar, wind and storage units in Germany with operator and capacity |
| EUDAMED Medical Devices | EU medical devices, manufacturers and certificates |
| Data Source Finder | Free: tells you which ready-made scraper covers your data source |
Support
Bug reports are welcome in the Issues tab.