Italy Company Registry & PEC Scraper - Registro Imprese avatar

Italy Company Registry & PEC Scraper - Registro Imprese

Pricing

from $1.00 / 1,000 company records

Go to Apify Store
Italy Company Registry & PEC Scraper - Registro Imprese

Italy Company Registry & PEC Scraper - Registro Imprese

Italian company data from the Registro Imprese via ufficiocamerale.it: search by name, Partita IVA or REA, or paste URLs. VAT, REA, ATECO, legal form, status, address, employees, revenue, profit, share capital, PEC and SDI code. $0.001 per company + $0.10 per run.

Pricing

from $1.00 / 1,000 company records

Rating

0.0

(0)

Developer

Scrapers Delight

Scrapers Delight

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

3

Monthly active users

7 days ago

Last modified

Share

Italy Company Registry & PEC Scraper - Registro Imprese, VAT, REA

Turn any Italian company name, VAT number (Partita IVA) or REA code into a structured registry record. The data comes from the public company pages on ufficiocamerale.it, which republish Registro Imprese / Camera di Commercio information: VAT number, tax code, REA, chamber of commerce, legal form, status, ATECO activity, registered address, employees, revenue, profit, share capital, the PEC certified email and the SDI codice destinatario for e-invoicing - one flat row per company.

Search by name, VAT number or REA code, paste company page URLs, or send a whole batch list. Cloudflare and the Italy-only IP requirement are handled for you. Optional add-on: the company's own verified website and contact email.

Why use this scraper

  • Every VAT number works. Each Partita IVA is looked up through the site's own search, so it finds the company whatever its page address looks like. An 11-digit number is matched as the Partita IVA or the numeric codice fiscale (Enel S.p.A.: codice fiscale 00811720580, Partita IVA 00934061003 - both find it). Mistyped numbers fail the check digit and are never fetched or charged.
  • REA lookup that returns the right company. A REA code is resolved to candidate companies and a record is delivered only when that company's own card carries the same chamber and REA number.
  • $0.001 per company + $0.10 per run. No charge for companies that are not found, invalid numbers or unreachable lookups.
  • Financials from the free page. Revenue (Fatturato), profit (Utile), share capital and employees, each with the year the card prints beside it.
  • PEC confirmed twice. The card carries the PEC in its visible block (Cloudflare-obfuscated) and in its schema.org data; both are read and compared (pec_matches_structured_data).
  • Only-with-PEC filter. onlyWithPec skips companies without a PEC - not delivered, not charged.
  • Verified websites only. With enrichEmails, a website is attached only when one of its pages shows the company's tax code / VAT number, its registered postcode and town, or its registered name with its legal form. Anything else goes to website_candidate, with no email taken from it and no charge.

Coming from another Registro Imprese scraper?

Input names (mode, query, province, directUrls, maxItems, maxConcurrency, includePec, enrichEmails) and output field names (vat_number, rea_number, legal_name, pec_email, codice_destinatario, ...) follow the conventions already used for ufficiocamerale.it data on the Store, so an existing input or pipeline works unchanged.

This actor
Price per company$0.001
Actor start$0.10 per run
VAT lookupevery Partita IVA, through the site's own search (not only VATs that appear in a page address)
REA lookupresolved and checked against the company's own card
Revenue / profit / share capital / employees from the free pageyes, each with its year
SDI codice destinatarioyes (the 0000000 default is kept apart in codice_destinatario_as_published)
PEC from the pageyes, confirmed against the page's structured data
PEC from INI-PEC when the page has noneno - INI-PEC asks for a CAPTCHA on every search (see FAQ)
Only companies with a PECyes (onlyWithPec, skipped companies not charged)
Website + email add-on$0.0009 per verified website, proof type in website_matched_by
Directors, shareholders, insolvency, XBRL bilancionull - those are paid visure, not on the free page
Batch list mixing VAT numbers, names, REA codes and URLsyes (identifiers)

Supported inputs

The actor takes a search (mode + query), a list of direct company URLs, a batch list, or any combination.

Search modes

  • by_name - searches the company name on the site, best match first: exact name, then names that start with yours, then names containing every word you typed (e.g. BCC Felsinea). province narrows it to one province.
  • by_vat_number - looks up each Partita IVA (e.g. 00159560366). Several can go in query, separated by commas or new lines.
  • by_rea_number - looks up each REA code with its chamber (e.g. MO-187940). A bare number takes its chamber from province.

Direct company URLs look like https://www.ufficiocamerale.it/1295/bcc-felsinea-banca-di-credito-cooperativo-dal-1902-sc and override mode/query.

Batch list (identifiers): VAT numbers, company names, REA codes and URLs mixed, one per line.

Not supported: the paid "ACQUISTA VISURA / ACQUISTA BILANCIO" documents and anything behind them (directors list, shareholders, insolvency detail, XBRL accounts). Those fields are returned as null.

Use cases

TeamWhat they build
KYC / KYB complianceVerify company identity, legal form, VAT, status and registration before onboarding
B2B sales & lead genProspect lists by name or keyword and province, with PEC and (add-on) website + email
Credit & risk analystsScreen revenue, profit, share capital and filing status before extending credit
Accounting & e-invoicingBulk PEC certified emails and SDI codes for invoicing and formal correspondence
Data enrichmentAppend Italian company attributes to CRM records using VAT as the join key

How it works

  1. Give a query, URLs or a batch list. VAT numbers are checked against the Partita IVA check digit first.
  2. Each company is found through the site's own search (VAT or name), or read straight from its URL. REA codes are resolved to candidate VAT numbers and kept only when the card's REA matches.
  3. Each page is fetched through an Italian residential IP with a real browser fingerprint - the site refuses datacenter and non-Italian IPs. A challenged IP is replaced and the lookup retried; it is never read as "not found".
  4. The card is parsed: registry fields, financials with their years, the PEC (decoded and cross-checked) and the SDI code.
  5. Optional enrichment: the company's own website is looked for (the domain of its PEC, then its registered name as .it / .com domains), checked for proof of ownership, and a contact email is read from it.
  6. One row per company is pushed, up to maxItems.

Input configuration

FieldTypeDefaultDescription
modestringby_nameby_name, by_vat_number or by_rea_number
querystring-Company name, VAT number(s) or REA code(s), matching mode
provincestringall of ItalyTwo-letter province code (or name) to filter name searches; in REA mode, the chamber for a bare REA number
directUrlsarray-ufficiocamerale.it company page URLs. Override mode/query
identifiersarray-Batch list: VAT numbers, names, REA codes, URLs, one per line
maxMatchesPerNameinteger1Companies opened per name in the batch list (1-200)
maxItemsinteger10Maximum company records delivered (and charged) in the run (1-10,000)
maxConcurrencyinteger8Company pages fetched in parallel (1-16)
onlyWithPecbooleanfalseSkip companies without a PEC (not delivered, not charged)
includePecbooleantrueAccepted for compatibility; INI-PEC asks for a CAPTCHA on every company search, so it is not used and pec_source is page or null
enrichEmailsbooleanfalseAdd the company's verified website and contact email ($0.0009 per verified website)
proxyConfigurationobjectRESIDENTIAL, ItalyLeave as is; the site answers Italian IPs only

Provide query, directUrls or identifiers. An empty input runs the demo search (BCC Felsinea, by name).

Search by name, filtered by province:

{ "mode": "by_name", "query": "BCC Felsinea", "province": "BO", "maxItems": 10 }

Direct URL - when you already have the company link:

{ "directUrls": ["https://www.ufficiocamerale.it/1295/bcc-felsinea-banca-di-credito-cooperativo-dal-1902-sc"], "maxItems": 1 }

Lookup by VAT number:

{ "mode": "by_vat_number", "query": "00602670556", "maxItems": 1 }

Lookup by REA code:

{ "mode": "by_rea_number", "query": "VI-333040", "maxItems": 1 }

A batch of VAT numbers, names and REA codes, companies with a PEC only, with website + email:

{
"identifiers": ["00159560366", "IT01928950466", "Barilla G. e R. Fratelli", "TR-63492"],
"onlyWithPec": true,
"enrichEmails": true,
"maxItems": 100
}

A keyword and a province as a small directory - up to 50 plumbers in Milan:

{ "mode": "by_name", "query": "idraulico", "province": "MI", "maxItems": 50 }

Output sample

A real row from a verification run of this actor ({"mode": "by_vat_number", "query": "00602670556"}, 2026-09-30) - the same company, and the same values, as the sample row other ufficiocamerale.it scrapers publish:

{
"vat_number": "00602670556",
"tax_code": "00602670556",
"rea_number": "TR-63492",
"cciaa_chamber": "TR",
"legal_name": "TERNINOX S.P.A.",
"trade_name": null,
"legal_form": "SOCIETA' PER AZIONI",
"status": "attiva",
"incorporation_date": "15/10/1991",
"cessation_date": null,
"share_capital_eur": 20800000,
"share_capital_year": 2024,
"registered_address": "VIALE B. BRIN 218 - 05100 - TERNI (TR)",
"address_locality": "TERNI",
"address_province": "TR",
"address_postal_code": "05100",
"ateco_code": "241",
"ateco_description": "SIDERURGIA",
"employees_count": 54,
"employees_year": 2024,
"revenue_eur": 124885370,
"revenue_year": 2023,
"profit_eur": -17218371,
"profit_year": 2023,
"pec_email": "terninox@pec.acciaiterni.info",
"pec_source": "page",
"phone": null,
"website": null,
"codice_destinatario": "YZW23AT",
"amministratori": null,
"soci": null,
"has_filed_bilancio": true,
"latest_bilancio_year": 2023,
"bilancio_xbrl_url": null,
"has_insolvency": null,
"last_modification_date": null,
"source_url": "https://www.ufficiocamerale.it/4527/terninox-spa",
"scraped_at": "2026-09-30T03:15:24.910Z",
"contact_email": null,
"contact_website": null,
"website_matched_by": null,
"website_candidate": null,
"emailEnrichment": null,
"query": "00602670556",
"query_type": "partita_iva",
"name_match": null,
"matched_listing_name": null,
"pec_domain": "pec.acciaiterni.info",
"pec_matches_structured_data": true,
"codice_destinatario_as_published": "YZW23AT",
"vat_number_eu": "IT00602670556",
"vat_checksum_valid": true,
"tax_code_masked": null,
"legal_nature_code": "SP",
"status_notice": null,
"incorporation_date_iso": "1991-10-15",
"address_street": "VIALE B. BRIN 218",
"latitude": 42.56216,
"longitude": 12.66911
}

With enrichEmails on - OBER ALP S.P.A. (VAT 00122250210, PEC info@pec.oberalp.it) in a verification run, 2026-09-30:

{
"contact_email": "info@oberalp.it",
"contact_website": "https://oberalp.com/",
"website_matched_by": "company-number",
"website_candidate": null,
"emailEnrichment": {
"status": "verified",
"found_by": "domain-guess",
"pages_checked": 4,
"additional_emails": ["at_customerservice@oberalp.com", "polska@oberalp.com", "salewa.czech@oberalp.com", "customerservice.uk@oberalp.com"],
"email_mx_verified": true,
"email_confidence": "high"
}
}

The site's legal notice prints the company's VAT number (company-number); info@oberalp.it leads because it is a general inbox on the domain of the company's own PEC.

Output fields

Identity

FieldTypeDescription
vat_numberstringPartita IVA
tax_codestringCodice fiscale when the card prints it in full (companies)
rea_numberstringREA number with chamber prefix (e.g. TR-63492)
cciaa_chamberstringCamera di Commercio province code
legal_namestringDenominazione / ragione sociale
trade_namestringAlways null (the free card has no separate trading name)
legal_formstringForma giuridica as printed
statusstringattiva or cessata
incorporation_datestringRegistration date (DD/MM/YYYY)
cessation_datestringAlways null (the card marks a company cessata but prints no date)

Address

FieldTypeDescription
registered_addressstringSede legale as printed
address_localitystringCity / comune
address_provincestringProvince code
address_postal_codestringCAP (null when the card leaves it empty)

Classification & financials

FieldTypeDescription
ateco_code / ateco_descriptionstringActivity code and description
employees_count / employees_yearnumberEmployees and the year beside them
revenue_eur / revenue_yearnumberFatturato and its year
profit_eur / profit_yearnumberUtile (negative = loss) and its year; null when the card prints a zero with no accounts on record
share_capital_eur / share_capital_yearnumberCapitale sociale and its year
has_filed_bilanciobooleantrue when the card offers filed accounts (a bilancio) for sale, i.e. accounts are on record
latest_bilancio_yearnumberYear of the latest accounts' figures
amministratori, soci, has_insolvency, bilancio_xbrl_url-Always null: paid visure on the site

Contact & e-invoicing

FieldTypeDescription
pec_emailstringPEC certified email, exactly as the card publishes it
pec_sourcestringpage when read from the card, otherwise null
codice_destinatariostringSDI code for e-invoicing (null for the 0000000 default)
phone / websitestringAlways null: the free card publishes neither (use enrichEmails)
contact_email / contact_websitestringWith enrichEmails: the company's own website and an email read from it
website_matched_bystringWith enrichEmails: company-number (a page shows the company's codice fiscale or Partita IVA), postcode (registered postcode and town) or registered-name (legal name with legal form)
website_candidatestringWith enrichEmails: a site found by name that showed none of those - probably another business with a similar name; no email is taken from it and it is not charged
emailEnrichmentobjectWith enrichEmails: status, found_by (pec-domain or domain-guess), pages_checked, additional_emails, email_mx_verified, email_confidence
source_url / scraped_atstringThe company page read, and when

Extra fields

FieldDescription
query / query_typeYour input, and partita_iva, codice_fiscale, company_name, rea_number or url
name_match / matched_listing_nameName searches: exact, startsWith or allWords, and the name as the result list printed it
pec_domain / pec_matches_structured_dataDomain of the PEC; true when the visible PEC equals the page's schema.org email
codice_destinatario_as_publishedThe SDI code exactly as printed, including 0000000
vat_number_eu / vat_checksum_validIT-prefixed VAT, and the Partita IVA check-digit result
tax_code_maskedSole traders: the owner's codice fiscale as the card masks it (DLSRSL*****E131N)
legal_nature_codeThe site's short legal-nature code (SP, SR, SN, DI ...)
status_notice / incorporation_date_isoThe card's Cessata notice; registration date as YYYY-MM-DD
address_street / latitude / longitudeStreet part of the address and the card's map pin (null when missing or outside Italy)

Measured coverage

Field fill of the company card, measured on three samples (n = companies read):

30 random pages from the site's own sitemap40 VAT numbers printed on Italian company websites27 pages - 24 small businesses (19 sole traders) + 3 large firms
active / cessata29 / 139 / 117 / 10
PEC, active companies28 / 2938 / 3912 / 17
PEC, ceased companies0 / 10 / 10 / 10
SDI code (not 0000000)22 / 3029 / 406 / 27
legal form, ATECO, employees28 / 3038 / 4020 / 27
revenue / profit / share capital18 / 18 / 1924 / 25 / 265 / 5 / 6
postal code / map pin29 / 2938 / 3823 / 27

An active company publishes its PEC on its card 71% to 97% of the time depending on the mix (sole traders less often); a ceased one did in none of 12.

enrichEmails, measured in verification runs on the first two samples (2026-09-30):

30 random sitemap companies35 companies known to have a website
verified website9 (30%)12 (34%)
...of which with a contact email48
unverified website_candidate only1113
how the verified sites were proven7 VAT/tax code, 1 postcode, 1 registered name12 VAT/tax code

Every verified site was checked by hand: each is the company's own site or its group's site. A website whose domain comes from neither the company's registered name nor its PEC (a brand or shop name) is not found; that is what website_candidate and the rates above reflect.

Speed (verification runs, default settings): 5 companies by VAT number in 5 seconds, 35 in 15 seconds; with enrichEmails, 30 companies in 174 seconds.

Pricing

$0.10 per run + $0.001 per company record. Optional add-on: $0.0009 per company delivered with a verified website.

OutcomeCharged
Run starts$0.10 (once per run)
Company found and delivered (with or without a PEC)$0.001
Company skipped by onlyWithPecno
VAT number, name or REA the site does not knowno
Invalid VAT number (fails the check digit)no - never fetched
Unreachable after retriesno
The same company twice in your inputcharged once
enrichEmails: verified website attached+$0.0009
enrichEmails: only an unverified website_candidate, or nothing foundno

Examples: 10 companies = $0.11; 1,000 companies = $1.10; 1,000 companies with enrichEmails at the ~30% verified-website rate measured above = about $1.37. maxItems caps what one run can charge.

Run summary

Each run writes RUN_SUMMARY to its key-value store: delivered vs charged, name-search totals (results the site reported, openable companies, queued), each REA lookup (candidates checked, the one verified), enrichment statistics, and every lookup that did not produce a record, each in its own list - invalidInput (with the reason), notFound, skippedNoPec, unreachable (with the last error).

FAQ

How do I search Italian companies by name? Set mode to by_name and put the name in query. Add province to narrow it. The best matches come first: exact name, then names starting with yours, then names containing every word. Some listings on the site carry no VAT number and cannot be opened (58 of 451 results for enel in Rome); they are counted in the run summary.

Can I look a company up by VAT number (Partita IVA)? Yes - by_vat_number, or VAT numbers in identifiers. Every VAT is looked up through the site's own search, so it works whatever the company's page address is. IT prefixes, spaces and dots are fine.

Can I look a company up by REA number? Yes - by_rea_number with the chamber, e.g. MO-187940 (or a bare number plus province). The site's own search does not accept REA numbers, so the actor finds candidate VAT numbers published next to that REA on the web and delivers a company only when its own card carries the same chamber and REA. A REA that no web page links to a VAT number is reported as notFound and not charged.

What is PEC and why does it matter? PEC (Posta Elettronica Certificata) is Italy's certified email, legally equivalent to registered post. Every Italian company must file one with the Registro Imprese. The actor reads it from the company page and confirms it against the page's structured data.

Does it use INI-PEC when the page has no PEC? No. includePec is accepted, but INI-PEC (inipec.gov.it) asks for a CAPTCHA on every company search, so it is not queried. pec_source is page or null.

Which fields are always null? amministratori, soci, has_insolvency and bilancio_xbrl_url sit behind the site's paid visura/bilancio; trade_name, cessation_date, last_modification_date, phone and website are not printed on the free card. With enrichEmails, the company's website and email come in contact_website / contact_email.

Do I need to configure proxies? No. The default is Apify RESIDENTIAL with country Italy, which the site requires. If another setting is refused, the run switches to it by itself.

How many companies can I get per run? Up to 10,000 via maxItems.

Why is a company I know missing? Check RUN_SUMMARY: notFound (the site has no card for it), invalidInput (the VAT fails the check digit), skippedNoPec (with onlyWithPec) or unreachable (re-run just those).

Run it from code

curl -X POST "https://api.apify.com/v2/acts/scrapersdelight~it-company-pec-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "mode": "by_vat_number", "query": "00159560366, 01928950466" }'
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('scrapersdelight/it-company-pec-scraper').call({ identifiers: ['00159560366', 'Barilla G. e R. Fratelli'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("scrapersdelight/it-company-pec-scraper").call(run_input={"mode": "by_vat_number", "query": "00159560366"})
items = client.dataset(run["defaultDatasetId"]).list_items().items

For AI agents & LLM apps

  • Purpose: Italian company registry data (VAT, REA, ATECO, financials, PEC, SDI code) from ufficiocamerale.it.
  • Minimal input: { "mode": "by_name", "query": "BCC Felsinea", "maxItems": 5 } or { "mode": "by_vat_number", "query": "00159560366" }.
  • Output: flat JSON rows. Key fields: vat_number, tax_code, rea_number, cciaa_chamber, legal_name, legal_form, status, registered_address, ateco_code, employees_count, revenue_eur, profit_eur, share_capital_eur, pec_email, pec_source, codice_destinatario, source_url.
  • Billing: $0.10 per run + $0.001 per company record; enrichEmails adds $0.0009 per record with a verified website.
  • Always null: amministratori, soci, has_insolvency, bilancio_xbrl_url (paid visure).