# Impressum Scraper – German Company Data, HRB & VAT Check (`ram1eal/company-imprint`) Actor

Turn German, Austrian and Swiss company websites into verified firmographics from the Impressum: legal name, legal form, address, Handelsregister/Firmenbuch number and court, VAT ID validated in EU VIES. GDPR-safe: no person data.

- **URL**: https://apify.com/ram1eal/company-imprint.md
- **Developed by:** [Hiếu Trần Quang](https://apify.com/ram1eal) (community)
- **Categories:** Lead generation, Business, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.60 / 1,000 company founds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## 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

## Impressum Scraper – German Company Data, HRB & VAT Check

Turn a list of company websites into **verified firmographics** from their legally required **legal notice** (Impressum, Mentions légales, Colofon…): **legal name, legal form, registered address, commercial register number and court, VAT ID validated in the EU VIES service**, company phone and generic e-mail. Built for **B2B lead lists, CRM enrichment and KYB** in Germany, Austria and Switzerland – and **GDPR-safe: no personal data**.

### Why this one

- **Verified, not just scraped.** Every VAT ID is checked in **EU VIES** (valid / invalid), with the registered name and address where the member state publishes them.
- **Register data done right.** Handelsregister (HRB/HRA/VR, court), Austrian Firmenbuch (FN, court), Swiss UID, French RCS/SIREN, Dutch KvK and UK company numbers – normalised.
- **The right company.** Legal notices often name the owner, the agency, the bank and the parent company. The site owner is picked by matching the domain and the register data.
- **GDPR-safe by design.** Managing directors, owners and editors are never extracted; only role-based mailboxes (info@, kontakt@, service@ …) of the company itself are kept; sole traders are skipped.
- **Pay only for companies found.** Websites without a legal notice, blocked sites and sole traders are free.

### Compared with alternatives

|                                      | This Actor                              | Typical alternatives |
| ------------------------------------ | --------------------------------------- | -------------------- |
| VAT ID validated in EU VIES          | Yes, with registered name               | No                   |
| Right company when several are named | Owner picked by domain + register match | First name found     |
| Personal data (directors)            | Never – GDPR-safe                       | Usually included     |
| JavaScript-rendered legal notices    | Read from embedded data                 | Often missed         |

### What you get

`companyName`, `legalForm`, `country`, `street`, `postalCode`, `city`, `registerType`, `registerNumber`, `registerCourt`, `vatId`, `vatStatus` (valid / invalid / unavailable / not_checked), `vatRegisteredName`, `vatRegisteredAddress`, `phone`, `fax`, `emails`, `legalNoticeUrl`, `domain`.

### Sample output

```json
{
  "domain": "zalando.de",
  "companyName": "Zalando SE",
  "legalForm": "SE",
  "country": "DE",
  "street": "Valeska-Gert-Straße 5",
  "postalCode": "10243",
  "city": "Berlin",
  "registerType": "HRB",
  "registerNumber": "HRB 158855 B",
  "registerCourt": "Charlottenburg Berlin",
  "vatId": "DE260543043",
  "vatStatus": "valid",
  "emails": ["impressum@zalando.de"],
  "legalNoticeUrl": "https://www.zalando.de/zalando-impressum/"
}
```

### How to use

1. Paste company websites or domains (one per line) – e.g. exported from your CRM or a lead list.
2. Keep "Validate VAT IDs in EU VIES" on.
3. Click Start. Export to CSV/Excel/JSON or send to your CRM via the API, n8n, Make or Zapier.

### Use cases

- **B2B lead lists (DACH):** turn domains into legal names, addresses and register numbers.
- **CRM enrichment & cleaning:** fix legal names and addresses, add VAT IDs and register numbers.
- **KYB & supplier onboarding:** confirm a website belongs to a registered company with a valid VAT ID.
- **Invoicing & tax:** collect and validate customers' VAT IDs in bulk.
- **Monitoring:** schedule with "only new or changed" to catch address, legal form or register changes.

### Pricing

Pay per company found, VIES check included:

| Apify plan | Per 1,000 companies | Per run |
| ---------- | ------------------- | ------- |
| Free       | $5.00               | $0.005  |
| Starter    | $4.60               | $0.005  |
| Scale      | $4.20               | $0.005  |
| Business   | $3.60               | $0.005  |

### Cost examples

- 100 company websites: ≤ $0.50 (only sites with data are charged)
- Enrich 5,000 CRM accounts: ≤ $25

### Use it from code, n8n or AI agents

Run it from the Apify API, the Python or JavaScript client, n8n, Make or Zapier – or let an AI agent call it through the **Apify MCP server** (Claude, ChatGPT, Cursor).

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("ram1eal/company-imprint").call(run_input={"websites":["zalando.de","billa.at"]})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

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

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client
  .actor('ram1eal/company-imprint')
  .call({ websites: ['zalando.de', 'billa.at'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

**MCP:** add `ram1eal/company-imprint` to the Apify MCP server and ask in plain English – the agent fills the input and pays per result.

### Data sourcing & compliance

- Reads the public legal notice each company must publish (German §5 DDG, Austrian §25 MedienG, Swiss UWG, French LCEN…): the home page, the legal-notice page, and common legal-notice paths if needed. **robots.txt is respected.**
- Websites that block automated access are reported and skipped – never forced.
- VAT validation: the European Commission's official VIES REST service.
- **No personal data:** no person names, no personal e-mail addresses, no sole traders.

### FAQ

- **Why are some big websites skipped?** A few large consumer sites block automated visits; they are free and listed in the run log. Company websites of SMEs and B2B firms work best.
- **Why is the VAT status "unavailable"?** The member state's VIES service was busy or down; run again later.
- **Why no managing director?** Person data is excluded on purpose (GDPR).
- **What if something breaks?** Open an issue – typical response under 12 hours.

### More tools from this author

- [Companies House API & Company Registry – UK, France, LEI](https://apify.com/ram1eal/company-registry-search) – UK Companies House, France SIRENE & LEI search with a KYB risk score
- [Contact Info Scraper – Company Emails, Phones & Socials](https://apify.com/ram1eal/company-contact-finder) – company e-mails, phones and social profiles, GDPR-safe
- [WHOIS Lookup & Domain Checker – Age, DNS, Email, SSL](https://apify.com/ram1eal/domain-intelligence) – bulk WHOIS: domain age, DNS, email provider, SSL and risk
- [Public Tenders – EU TED & UK Find a Tender Procurement](https://apify.com/ram1eal/public-tenders-search) – EU TED & UK Find a Tender notices with daily alerts
- [Shopify Scraper – Products, Prices, Stock & Price Monitor](https://apify.com/ram1eal/shopify-store-products) – any Shopify store: products, prices, stock, price-drop alerts
- [Tech Stack Detector – BuiltWith & Wappalyzer Alternative](https://apify.com/ram1eal/website-tech-stack) – 3,500+ technologies per website, plus the email provider
- [SEC EDGAR API – Company Financials, 10-K Data & Filings](https://apify.com/ram1eal/sec-company-financials) – SEC EDGAR financials and 10-K/10-Q/8-K filings by ticker
- [SAM.gov & USAspending – US Federal Contracts & Awards](https://apify.com/ram1eal/us-federal-contracts) – new US federal contract awards and SAM.gov opportunities
- [Startup Funding Rounds – Crunchbase Alternative (SEC Form D)](https://apify.com/ram1eal/startup-funding-rounds) – US startups raising money, daily from SEC Form D

### Input reference

| Field         | Type    | Default | Description                                   |
| ------------- | ------- | ------- | --------------------------------------------- |
| `websites`    | array   | –       | Company websites, domains or e-mail addresses |
| `maxItems`    | integer | 1000    | Maximum companies                             |
| `validateVat` | boolean | true    | Validate VAT IDs in EU VIES                   |
| `onlyNew`     | boolean | false   | Only new or changed companies                 |
| `stateKey`    | string  | –       | History name for only-changed mode            |

### Changelog

- 0.1 – DACH legal notices (+ FR, NL, BE, IT, ES, UK IDs), VIES validation, GDPR-safe output.

# Actor input Schema

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

Company websites, domains or e-mail addresses (the domain is used), one per line. Works best for Germany, Austria and Switzerland; also reads French, Dutch, Belgian, Italian, Spanish and UK legal notices.

## `maxItems` (type: `integer`):

Stop after this many companies. You pay only for websites where company data was found.

## `validateVat` (type: `boolean`):

Check each VAT ID with the European Commission's VIES service and add the registered name and address when the member state publishes them.

## `onlyNew` (type: `boolean`):

For scheduled monitoring: return (and pay for) only companies whose legal-notice data changed since your previous run with the same list (new address, new register number, new legal form…).

## `stateKey` (type: `string`):

Runs with the same history name share what was already delivered. Leave empty to use one history per list.

## Actor input object example

```json
{
  "websites": [
    "zalando.de",
    "billa.at",
    "igus.de"
  ],
  "maxItems": 100,
  "validateVat": true,
  "onlyNew": false
}
```

# Actor output Schema

## `results` (type: `string`):

One record per website: legal company name and form, country, street, postal code, city, register type/number/court (HRB, FN, UID, RCS, KvK, CRN), VAT ID with EU VIES status and registered name, company phone/fax and role-based e-mails. No person data.

## `runSummary` (type: `string`):

JSON summary of the run: pages read, companies delivered and charged, unchanged companies skipped (only-changed mode) and error counts.

# 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": [
        "zalando.de",
        "billa.at",
        "igus.de"
    ],
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("ram1eal/company-imprint").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": [
        "zalando.de",
        "billa.at",
        "igus.de",
    ],
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("ram1eal/company-imprint").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": [
    "zalando.de",
    "billa.at",
    "igus.de"
  ],
  "maxItems": 100
}' |
apify call ram1eal/company-imprint --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ram1eal/company-imprint"
        }
    }
}
```

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/mj49YFrdPBLgkaQ5h/builds/AkLcVUSMHa5La8KYb/openapi.json
