Discover/Registro Imprese API
live

Registro Imprese APIregistroimprese.it

Search and retrieve official Italian company data from Registro Imprese. Access VAT numbers, legal form, REA numbers, addresses, and PEC email via 2 endpoints.

Endpoints
2
Updated
2mo ago

What is the Registro Imprese API?

The Registro Imprese API provides structured access to Italy's official business registry through 2 endpoints. Use search_companies to find companies by name and filter by province, then pass the returned company_id to get_company_details to retrieve verified fields including VAT number, fiscal code, REA number, registered address, legal form, and certified email (PEC).

Try it
Company name or keyword to search for.
Two-letter province code (e.g. VI for Vicenza) or empty for all.
api.parse.bot/scraper/084917d9-3f65-4303-bdbd-736a43473dea/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/084917d9-3f65-4303-bdbd-736a43473dea/search_companies' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace registroimprese-it-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""
Italian Business Registry API (Registro Imprese) - Parse Client
Search and extract official company data from the Italian Business Registry.
Get your API key from: https://parse.bot/settings
"""

import os
import json
import requests
from typing import Optional, Any, Dict, List


class ParseClient:
    """Client for the Italian Business Registry API via Parse."""

    def __init__(self, api_key: Optional[str] = None):
        """
        Initialize the Parse API client.

        Args:
            api_key: API key for Parse. If not provided, reads from PARSE_API_KEY env var.
        """
        self.base_url = "https://api.parse.bot"
        self.scraper_id = "718193c2-9b35-4cca-a2a7-60c1e7c12f98"
        self.api_key = api_key or os.getenv("PARSE_API_KEY")

        if not self.api_key:
            raise ValueError("API key not provided. Set PARSE_API_KEY environment variable or pass api_key parameter.")

    def _call(self, endpoint: str, method: str = "POST", **params) -> Dict[str, Any]:
        """
        Make a request to the Parse API.

        Args:
            endpoint: The API endpoint name
            method: HTTP method (GET or POST)
            **params: Parameters to send with the request

        Returns:
            Response JSON as a dictionary
        """
        url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
        headers = {
            "X-API-Key": self.api_key,
            "Content-Type": "application/json"
        }

        if method == "GET":
            response = requests.get(url, headers=headers, params=params)
        elif method == "POST":
            response = requests.post(url, headers=headers, json=params)
        else:
            raise ValueError(f"Unsupported HTTP method: {method}")

        response.raise_for_status()
        return response.json()

    def search_companies(self, query: str, province: Optional[str] = None) -> Dict[str, Any]:
        """
        Search for Italian companies by name and province.

        Args:
            query: Company name or keyword to search for
            province: Two-letter province code (e.g., 'VI' for Vicenza), optional

        Returns:
            Dictionary with total count and items list containing company info
        """
        params = {"query": query}
        if province:
            params["province"] = province

        return self._call("search_companies", method="GET", **params)

    def get_company_details(self, p_auth: str, instance_id: str, company_id: str) -> Dict[str, Any]:
        """
        Get full details for a specific company.

        Args:
            p_auth: Session auth token from search results
            instance_id: Portlet instance ID from search results
            company_id: Encrypted company ID from search results

        Returns:
            Dictionary with complete company details
        """
        params = {
            "p_auth": p_auth,
            "instance_id": instance_id,
            "company_id": company_id
        }
        return self._call("get_company_details", method="GET", **params)


def main():
    """Practical workflow example: search companies and get their details."""

    # Initialize the client
    client = ParseClient()

    print("=" * 60)
    print("Italian Business Registry API - Company Search")
    print("=" * 60)

    # Search for companies
    search_query = "ARROWELD"
    province_code = "VI"  # Vicenza

    print(f"\nSearching for companies: '{search_query}' in province {province_code}...")
    search_results = client.search_companies(query=search_query, province=province_code)

    print(f"\nFound {search_results['total']} company/companies:")
    print("-" * 60)

    # Get p_auth token for use in subsequent calls
    p_auth = search_results.get('p_auth')

    # Process each company found
    for idx, company in enumerate(search_results.get('items', []), 1):
        print(f"\nResult {idx}: {company['name']}")
        print(f"  Location: {company['municipality']}, {company['province']}")
        print(f"  Address: {company['address']}")
        print(f"  Instance ID: {company['instance_id']}")

        # Get detailed information for this company
        print("\n  Fetching detailed information...")
        try:
            details = client.get_company_details(
                p_auth=p_auth,
                instance_id=company['instance_id'],
                company_id=company['company_id']
            )

            print(f"  Full Details:")
            print(f"    Legal Form: {details.get('legal_form', 'N/A')}")
            print(f"    VAT Number: {details.get('vat_number', 'N/A')}")
            print(f"    Fiscal Code: {details.get('fiscal_code', 'N/A')}")
            print(f"    REA Number: {details.get('rea_number', 'N/A')}")
            print(f"    Full Address: {details.get('address', 'N/A')}")
            print(f"    PEC Email: {details.get('pec', 'N/A')}")

        except requests.exceptions.RequestException as e:
            print(f"  Error fetching details: {e}")

    print("\n" + "=" * 60)
    print("Search completed successfully!")
    print("=" * 60)


if __name__ == "__main__":
    main()
All endpoints · 2 totalmissing one? ·

Search for Italian companies by name and province. returns basic info and a company_id for details.

Input
ParamTypeDescription
queryrequiredstringCompany name or keyword to search for.
provincestringTwo-letter province code (e.g. VI for Vicenza) or empty for all.
Response
{
  "type": "object",
  "fields": {
    "items": "array",
    "total": "integer",
    "p_auth": "string"
  },
  "sample": {
    "items": [
      {
        "name": "ARROWELD ITALIA S.P.A.",
        "address": "VIA GIOVANNI PASCOLI 5",
        "province": "VI",
        "company_id": "nNcW12/el7tWYr0/wb7VQw==",
        "instance_id": "o6uJEv91oybn",
        "municipality": "ZANE'"
      }
    ],
    "total": 1,
    "p_auth": "IIWDr120"
  }
}

About the Registro Imprese API

What the API Returns

The API covers official registration data held by the Italian Business Registry (Registro Imprese), the authoritative public source for Italian company information. Responses include fields used in legal, compliance, and due-diligence contexts: vat_number, fiscal_code, rea_number, legal_form, address, name, and pec (the certified email address required for formal communications with Italian businesses).

Endpoints

search_companies accepts a query string (company name or keyword) and an optional province parameter using the standard two-letter Italian province code (e.g. MI for Milan, RM for Rome). It returns an array of matching companies, a total count, and a p_auth session token needed for the next call. get_company_details takes three parameters sourced directly from search results — company_id, p_auth, and instance_id — and returns the full company profile.

Workflow and Parameters

Because get_company_details depends on p_auth, company_id, and instance_id from search_companies, the two endpoints are designed to be used in sequence. You cannot call get_company_details with a standalone company identifier; you must first run a search to obtain all three required parameters. The province filter in search is optional — omitting it searches across all Italian provinces.

Coverage

Data reflects what is publicly filed with the Italian Chamber of Commerce system. This includes legally registered entities such as limited liability companies (SRL), joint-stock companies (SPA), sole proprietorships, and other recognized Italian legal forms. The legal_form field in the detail response identifies the exact entity type.

Reliability & maintenance

The Registro Imprese API is a managed, monitored endpoint for registroimprese.it — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when registroimprese.it changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official registroimprese.it API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Verify a supplier's VAT number and fiscal code before onboarding them as a vendor
  • Look up the certified PEC email address to send legally valid communications to an Italian company
  • Build a CRM enrichment pipeline that appends REA numbers and registered addresses to Italian business contacts
  • Screen Italian counterparties by legal form before entering contracts
  • Filter company searches by province to generate regional business lists for territory-based sales teams
  • Automate due-diligence checks on Italian entities by retrieving their official registration details programmatically
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min

One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does Registro Imprese have an official developer API?+
Registro Imprese does not publish a free, self-service developer API. Official bulk or programmatic data access typically requires formal agreements through the Italian Chambers of Commerce (Infocamere). This Parse API provides structured endpoint access without that overhead.
What does get_company_details return beyond what search_companies shows?+
search_companies returns a list of matched companies with identifiers needed for follow-up calls. get_company_details returns the full profile: name, address, legal_form, rea_number, vat_number, fiscal_code, and pec. The search step exists to obtain the company_id, p_auth, and instance_id parameters that get_company_details requires.
Can I search by VAT number or fiscal code directly instead of by company name?+
The search_companies endpoint accepts a company name or keyword via the query parameter. Direct lookup by VAT number or fiscal code is not currently supported. You can fork this API on Parse and revise it to add a lookup-by-tax-identifier endpoint.
Does the API return company directors, shareholders, or financial statements?+
Not currently. The API covers registration identifiers, legal form, address, and PEC email. Corporate structure details such as directors, shareholders, and filed financial statements are not exposed. You can fork it on Parse and revise to add endpoints targeting those data categories.
How current is the data returned by the API?+
The data reflects what is on file with Registro Imprese at the time of the request. Changes filed with the Chamber of Commerce — such as address updates or legal form changes — appear once they are processed and published by the registry. There is no historical or time-series data exposed; responses reflect the current registered state.
Page content last updated . Spec covers 2 endpoints from registroimprese.it.
Related APIs in B2b DirectorySee all →
allabolag.se API
Search and retrieve detailed information about Swedish companies, including their industry classifications and historical financial records from annual reports. Access comprehensive company profiles to analyze financial performance and business data for any registered Swedish business.
regnskapstall.no API
Search Norwegian companies and retrieve their financial statements, ownership details, roles, competitors, and regulatory announcements all in one place. Get comprehensive company overviews including registration data and financial metrics to research businesses and track new market entries.
einforma.com API
Search for companies, self-employed individuals, and executives across Spain's business directory, then access detailed company profiles including financial and operational information. Perfect for business research, lead generation, and competitive intelligence.
justice.cz API
Look up official information about Czech companies including their legal status, representatives, and shareholders directly from the government's ARES registry and Insolvency Register. Search for companies by name or ID number to instantly access verified business details and check if they're involved in insolvency proceedings.
pappers.fr API
Search French companies and directors to access detailed business profiles, ownership structures, trademark information, and legal filings all in one place. Build professional networks, track company leadership, and monitor business intelligence across France's official registry data.
opencorporates.com API
Access comprehensive company registration data, officer details, and filing histories from OpenCorporates across jurisdictions worldwide to research businesses and their leadership. Search for specific companies or officers, retrieve detailed corporate information, and explore filing records to support due diligence, compliance checks, and business intelligence.
immobiliare.it API
Search Italian property listings for sale or rent, browse real estate agencies, and explore price trends across Italian cities — all via immobiliare.it.
drimble.nl API
Search and access detailed business information from Drimble.nl, including company addresses, SBI classifications, and activity descriptions. Find specific companies or browse listings to get comprehensive details about Dutch businesses.