# Free Website Contact & Imprint Scraper — Email, Phone, VAT (`perceptr0n/free-website-contact-imprint-scraper`) Actor

Free, up to 10 websites per run. Reads the imprint / Impressum / legal notice of any site in Germany, Austria or Switzerland: company name, address, register number, VAT ID verified via EU VIES, e-mails, phones, social profiles. No login, no key, no credit card.

- **URL**: https://apify.com/perceptr0n/free-website-contact-imprint-scraper.md
- **Developed by:** [Perceptron Data](https://apify.com/perceptr0n) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Free Website Contact & Imprint Scraper — emails, phones, VAT, socials

Paste up to **10 domains**, get a clean company record for each. Free, no credit
card, no API key, no login.

The data comes from the **imprint** — the *Impressum*, *legal notice*,
*Offenlegung* — that every commercial website in **Germany, Austria and
Switzerland** must publish by law, which is why it can be read reliably instead
of guessed. Every VAT ID found is verified live against the European
Commission's official **VIES** register.

### Two ways in: a list, or a search

**You have the domains.** Paste them — one company record per entry, first ten.

**You don't.** Type the trade and the place instead:

```json
{ "search": "Zahnärzte in Hamburg" }
```

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`, `Hotel`,
`Elektriker` and so on, including plurals. Places can be a city, district,
county or state.

Measured on the platform, 28.09.2026, five companies per search: Steuerberater Wien 5/5 with a name and 4 with an e-mail, Rechtsanwälte München 5/5 and 4, Hotels Berlin 4/5 and 1, Dachdecker Landkreis Rosenheim only 1 company at all, and a whole federal state fails outright. City-sized searches work; rural districts are thin.

Honest limits: not every business is on the map, and not every entry has a
website — measured 28.09.2026, hotels in Berlin 76 %, 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 instead of an empty
result. Every discovered row carries `dataSource: "© OpenStreetMap
contributors"` and `dataLicense: "ODbL 1.0"`, because that licence requires it.

### What you get per website

| Field | Example |
|---|---|
| `companyName`, `legalForm` | `Frischpack GmbH`, `GmbH` |
| `street`, `postalCode`, `city`, `country` | `Am Kreuzberg 1`, `83104`, `Tuntenhausen`, `DE` |
| `registerType`, `registerNumber`, `registerCourt` | `HRB`, `HRB 19182`, `Traunstein` |
| `vatId`, `vatChecked`, `vatValid` | `DE127913213`, `true`, `true` |
| `vatRegisteredName`, `vatRegisteredAddress` | what the tax register holds, where the member state discloses it |
| `email`, `allEmails`, `phone`, `allPhones`, `fax` | up to 5 addresses and 5 numbers |
| `socialProfiles` | LinkedIn, Xing, Facebook, Instagram, X, YouTube, TikTok |
| `impressumUrl`, `impressumFound`, `foundVia` | where the data came from, verbatim |

Nothing is held back: a free row contains exactly what a paid row contains.

### Three countries, three legal bases, one schema

| Country | Duty to publish | Register identifier |
|---|---|---|
| 🇩🇪 Germany | § 5 DDG | `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 |

### Honest about what you get back

- **`impressumFound: false`** — the site publishes no reachable legal notice.
  For a German site that is itself a finding.
- **`foundVia: "contact page"`** — no imprint existed, so the contact page was
  read. You get the address, but the row is *not* marked as a legal notice.
- **`foundVia: "blocked"`** — the site turns away automated clients (403, 429).
- **`foundVia: "timeout"`** — no answer within 45 seconds. Every website has that
  hard budget, so one stalling host cannot hold up your run.

You never get an empty row without an explanation of why it is empty.

### Need more than 10 websites?

The unlimited edition is the same code without the cap, at **$5 per 1,000
websites**:

👉 **[Imprint & Impressum Scraper — Email, Phone, VAT & Socials](https://apify.com/perceptr0n/imprint-impressum-website-contact-scraper)**

| Websites | Cost there |
|---|---|
| 100 | $0.51 |
| 1,000 | $5.01 |
| 10,000 | $50.01 |

### Legal and data protection

- Company data — name, legal form, address, register number, VAT ID — is **not**
  personal data and is published under a statutory duty.
- **Person names are off by default.** Managing directors are personal data
  under GDPR; `include_person_names` must be switched on deliberately.
- 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. Worth knowing before you buy an address list from anyone.

### Auf Deutsch: Impressum-Daten kostenlos auslesen

Die **kostenlose Ausgabe**: bis zu 10 Websites je Lauf, mit exakt denselben
Feldern wie die Vollversion. Aus dem **Impressum** jeder Website entsteht ein
Firmendatensatz mit Firmenname, Rechtsform, Anschrift, Handelsregister,
**geprüfter USt-IdNr.** (EU-VIES), E-Mail, Telefon und Social-Media-Profilen —
für Deutschland, Österreich und die Schweiz.

Statt einer Domainliste geht auch eine Suche nach Branche und Ort, etwa
`Steuerberater in Wien`; die Firmen kommen dann aus OpenStreetMap. Für mehr als
10 Websites gibt es die unbegrenzte Ausgabe (Link unten).

### FAQ

**Is it really free?**
Yes — no actor fee at all. Runs use a few cents of platform time, which Apify's
free monthly credit covers. You get up to 10 websites per run, with exactly the
same fields as the paid edition.

**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).

**I have no list of websites. Can it find companies?**
Yes. Type a trade and a place into `search` — for example `Zahnärzte in
Hamburg` — and businesses are looked up in OpenStreetMap, then enriched from
their imprints.

**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.

**Is the VAT number checked or just copied?**
Checked, live, against the EU's official VIES service — and `vatChecked` tells
you whether the check actually ran.

**What happens if a website has no imprint?**
You get a row with `impressumFound: false` and, if you allowed it, whatever the
contact page held. You are never left guessing.

**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.

**Does it need a proxy?**
No. No login, no cookies, no API key, no CAPTCHA.

### Related actors

| Actor | What it does |
|---|---|
| [Imprint & Impressum Scraper](https://apify.com/perceptr0n/imprint-impressum-website-contact-scraper) | Company data from the Impressum of any DACH website: e-mail, phone, VIES-checked VAT ID, register number |
| [Google Ads Transparency Scraper](https://apify.com/perceptr0n/google-ads-transparency-scraper) | Which companies advertise on Google, how many ads, who runs them — plus every ad and a monitoring mode |
| [PDF & DOCX to Markdown Converter](https://apify.com/perceptr0n/pdf-to-markdown-converter) | PDF, Word, Excel and PowerPoint to Markdown for AI — tables as JSON, OCR for scans |
| [Arbeitsagentur Jobs Scraper](https://apify.com/perceptr0n/arbeitsagentur-jobs-scraper) | Jobs from the Bundesagentur für Arbeit Jobbörse via the official API |
| [kununu Scraper](https://apify.com/perceptr0n/kununu-employer-data-scraper) | Employer reviews, ratings, salaries and benefits for DACH companies |
| [TED Tenders API](https://apify.com/perceptr0n/eu-tenders-ted-scraper) | EU public tenders from TED — all 27 member states, CPV and deadline filters |
| [Marktstammdatenregister (MaStR) Scraper](https://apify.com/perceptr0n/german-energy-assets-mastr) | Solar, wind and battery storage plants in Germany with operator and capacity |
| [EUDAMED Scraper](https://apify.com/perceptr0n/eudamed-medical-device-scraper) | EU medical devices, manufacturers and notified-body certificates (MDR/IVDR) |
| [Messe München Exhibitor List Scraper](https://apify.com/perceptr0n/messe-muenchen-exhibitor-list-scraper) | Exhibitor lists of bauma, IFAT, BAU, automatica, ceramitec and more |
| [Koelnmesse Exhibitor List Scraper](https://apify.com/perceptr0n/anuga-ism-koelnmesse-exhibitor-scraper) | Exhibitor lists of Anuga, ISM, imm cologne, interzum, ORGATEC and more |
| [App Store & Google Play Scraper](https://apify.com/perceptr0n/appstore-google-play-intelligence) | Ratings, reviews and keyword rankings from both app stores in one dataset |
| [DACH & EU Data Source Finder](https://apify.com/perceptr0n/dach-eu-data-source-finder) | Free: tells you which ready-made scraper covers your data source |

# Actor input Schema

## `search` (type: `string`):

Type what you are looking for instead of pasting domains — for example `Zahnärzte in Hamburg`, `dentists in Hamburg`, `Bäckereien Köln`. Businesses are looked up in **OpenStreetMap** (© OpenStreetMap contributors, ODbL) and enriched from their imprint. **This free version returns the first 10.** About 180 trades are recognised in German and English. Left empty by default, so an automated run never depends on OpenStreetMap being reachable.

## `websites` (type: `array`):

Domains or URLs — e.g. `liebherr.com`, `https://www.sap.com`, `tuwien.at`. Paste as many as you like: **this free version processes the first 10 per run** and tells you where to get the unlimited one. Germany, Austria and Switzerland are covered.

## `validate_vat` (type: `boolean`):

ON by default. Every VAT ID found is checked against the European Commission's VIES service, so you learn whether the number a company publishes is actually registered. Adds about a quarter of a second per company and costs nothing extra. Austria, Italy, Spain and most other member states also return the registered name and address, which lets you cross-check the imprint against the register. Germany discloses validity only. Swiss UIDs are outside the EU system and are never checked.

## `allow_contact_page` (type: `boolean`):

ON by default. If a site publishes no imprint, the contact page is read instead and the row is marked `foundVia: contact page` with `impressumFound: false` — you still get the address and the mail box, and you can see exactly where the data came from.

## `include_person_names` (type: `boolean`):

OFF by default. Person names in a legal notice are personal data under GDPR — switch this on only if you have a lawful basis for processing them. Company data, address, register and VAT number are returned either way.

## `osm_filter` (type: `string`):

For trades the search does not know, e.g. `["amenity"="dentist"]`, together with a location below.

## `location` (type: `string`):

City, district, county or state — e.g. `Hamburg`, `Bayern`.

## Actor input object example

```json
{
  "websites": [
    "liebherr.com",
    "frischpack.de",
    "tuwien.at"
  ],
  "validate_vat": true,
  "allow_contact_page": true,
  "include_person_names": false
}
```

# Actor output Schema

## `companies` (type: `string`):

No description

## `companiesCsv` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "websites": [
        "liebherr.com",
        "frischpack.de",
        "tuwien.at"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("perceptr0n/free-website-contact-imprint-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "websites": [
        "liebherr.com",
        "frischpack.de",
        "tuwien.at",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("perceptr0n/free-website-contact-imprint-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "websites": [
    "liebherr.com",
    "frischpack.de",
    "tuwien.at"
  ]
}' |
apify call perceptr0n/free-website-contact-imprint-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,perceptr0n/free-website-contact-imprint-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/iTt3C4bvJpCHHuwxe/builds/kF3JwOfffl32QuTgR/openapi.json
