EU Company Contacts & VAT Extractor avatar

EU Company Contacts & VAT Extractor

Pricing

from $5.00 / 1,000 website with data

Go to Apify Store
EU Company Contacts & VAT Extractor

EU Company Contacts & VAT Extractor

Turn a list of company websites into clean B2B rows: emails, phones, social profiles, checksum-validated VAT IDs, legal name, Italian PEC & REA, German Handelsregister, French SIREN/SIRET. Pay only for websites where data is found.

Pricing

from $5.00 / 1,000 website with data

Rating

0.0

(0)

Developer

EuroData Tools

EuroData Tools

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Turn a list of company websites into clean B2B rows: emails, phones, social profiles, checksum-validated VAT IDs, legal company name and European registry numbers. These are the details EU law requires companies to publish on their own website: Italian P.IVA, PEC and REA, German Impressum (USt-IdNr., Handelsregister), French SIREN/SIRET, Spanish CIF, Austrian FN and UK company numbers.

You pay only for websites where data is found. $5 per 1,000 websites. Unreachable, blocked or empty websites are free.

What can you use it for?

  • Enrich lead lists. Paste the websites from Google Maps, a trade-fair exhibitor list or your CRM, and get back emails, phones and LinkedIn profiles in one table.
  • Verify suppliers and customers (KYB). Get the VAT ID and legal name that each company publishes on its own website, already checked with the official check-digit algorithm, ready for a VIES lookup.
  • Clean B2B invoicing data. Italian companies need the PEC address or SDI code for e-invoicing, and this Actor finds the PEC. German companies need the Handelsregister entry, and this Actor finds it too.
  • Market mapping. Find out which companies in a list are Italian, German or French S.r.l./GmbH/SAS, and how to reach them.
  • Stay GDPR-friendly by default. Only company mailboxes (info@, sales@, kontakt@, amministrazione@ …) are returned unless you explicitly ask for all emails.

Example output

One row per website (real result, shortened):

{
"domain": "kartell.com",
"status": "ok",
"companyName": "KARTELL S.p.A.",
"legalName": "KARTELL S.p.A.",
"country": "IT",
"emails": ["privacy@kartell.it"],
"pecEmails": [],
"phones": [],
"vatIds": ["IT11349160157"],
"vatIdDetails": [{ "vatId": "IT11349160157", "country": "IT", "checksumValid": true }],
"reaNumber": "MI-2726347",
"linkedin": "https://it.linkedin.com/company/kartell",
"facebook": "https://www.facebook.com/Kartell",
"instagram": "https://www.instagram.com/kartell_official",
"x": "https://twitter.com/kartellofficial",
"youtube": "https://www.youtube.com/user/kartellpeople",
"tiktok": "https://www.tiktok.com/@kartell_official",
"pagesCrawled": 5
}

Other real rows from the test runs:

DomainLegal nameVAT IDRegistryEmailsPEC
bosch.de—DE811128135Amtsgericht Stuttgart HRB 14000kontakt@bosch.de—
manufactum.deManufactum GmbHDE315189509Recklinghausen HRB 7982info@manufactum.de—
venchi.comVenchi S.p.A.IT05744670968REA MI-1862619customercare@venchi.comvenchiamministrazione@pec.it
elica.comElica S.p.A.IT00096570429REA AN-63006privacy@elica.comelicaspa@sicurezzapostale.it
manner.comMannerATU14390602FN 40643wteam@manner.com—
mahou.esMahou, S.A.ESA28078202—contacta@mahou.es—
hema.nlHEMA B.V.NL814217412B01———

Why this Actor and not a generic contact scraper?

This ActorGeneric contact scrapers
VAT ID with check-digit validation (IT, DE, FR, ES, NL, BE, AT, PL, PT + format check for the rest of the EU, UK and CH)✅❌
Italian PEC, REA · German HRB/HRA · French SIREN/SIRET · Austrian FN · UK company number✅❌
Legal company name (S.r.l., GmbH, SAS, S.L., B.V. …)✅❌
Finds the legal-notice page automatically (Impressum, Note legali, Mentions légales, Aviso legal)✅partly
Decodes hidden emails (info [at] firma [dot] de, Cloudflare email protection)✅partly
GDPR mode: company mailboxes only✅ default❌
One clean row per website (not one row per page)✅❌
You pay only when data is found✅❌ (per page)

How to use it

  1. Paste your websites into Company websites, one per line. A domain (example.it) or a full URL both work.
  2. Optionally, chain it after another Actor. Put the dataset ID of a Google Maps Scraper run (or any dataset with a website field) into Or: read websites from a dataset.
  3. Click Start. Download the results as Excel, CSV or JSON, or get them through the API.

Input

FieldDefaultWhat it does
websites—Domains or URLs, one per line
sourceDatasetId / sourceDatasetField— / websiteRead websites from another Actor's dataset
maxPagesPerWebsite6Homepage + legal notice, contact, about and privacy pages
emailModegenericgeneric = company mailboxes only. all = also named people (only with a lawful basis)
includeWebsitesWithoutDatatrueAlso return a free row explaining why nothing was found
respectRobotsTxttrueSkip pages that robots.txt disallows
maxConcurrency20Pages downloaded in parallel
proxyConfigurationoffTurn on Apify Proxy only if many websites come back as blocked

Output fields

website, domain, url, status, companyName, legalName, country, emails, personalEmailsHidden, pecEmails, phones, vatIds, vatIdDetails (with checksumValid), reaNumber, commercialRegister, siren, siret, ukCompanyNumber, address, linkedin, facebook, instagram, x, youtube, tiktok, contactPageUrl, legalPageUrl, pagesCrawled, errorMessage, scrapedAt.

status tells you what happened:

statusmeaningcharged?
okdata foundyes
no-datawebsite works but publishes no contacts or IDsno
unreachabledomain does not exist, timeout, connection refusedno
blockedthe website blocks automated visits (try with Apify Proxy)no
js-onlythe website is built only with JavaScript and shows no content to a normal HTTP requestno
parkedthe domain is parked or for saleno
robots-disallowedthe website's robots.txt does not allow crawlingno

Pricing

$5 per 1,000 websites with data (website-with-data event, $0.005 each). Rows without data are free. Set Max cost per run in the run options and the Actor stops exactly there: you never pay more.

Example: 2,000 websites from a Google Maps search where 1,500 have data costs $7.50.

Good to know

  • Accuracy of VAT IDs. IDs from countries with a check-digit algorithm are returned only when the check passes (checksumValid: true). For other countries the ID is returned only when it appears next to a VAT label (checksumValid: null). The check proves the number is well formed. Run a VIES lookup if you need to know that it is currently active.
  • Group websites. Big brands sometimes show the VAT ID of the local subsidiary for your country (e.g. a .com that redirects by location).
  • Websites built only with JavaScript return js-only. Most small and mid-sized company websites work fine.
  • Legal. The Actor reads only public pages of company websites, respects robots.txt and returns company mailboxes by default. You are responsible for how you use the data, for example under GDPR and anti-spam rules when you contact people.

FAQ

Can I process 100,000 websites? Yes. Split very large lists into runs of 10,000–50,000 for easier monitoring.

Do I need a proxy? Usually not. Company websites rarely block. Turn on Apify Proxy if you see many blocked rows.

Something is missing or wrong? Open an issue on the Actor page with the website. Issues are usually answered within a day.