Einforma APIeinforma.com ↗
Search Spanish companies, autónomos, and executives via the Einforma API. Access company profiles with CNAE codes, legal form, address, financials, and report availability.
What is the Einforma API?
The Einforma API exposes 4 endpoints covering Spain's business directory, letting you search companies by name, NIF/CIF, or DUNS number, look up self-employed individuals (autónomos) by NIF, and find executives by name. The get_company_detail endpoint returns a company's full profile including identification fields, constitution date, CNAE activity, sales evolution data, and a list of available commercial reports with their pricing.
curl -X GET 'https://api.parse.bot/scraper/0dbd141e-b0b3-421c-acf4-dd335ceecf5c/search_companies?rows=5&query=Telefonica&start=0' \ -H 'X-API-Key: $PARSE_API_KEY'
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 einforma-com-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.
"""Walkthrough: eInforma SDK — search companies, drill into detail, search autónomos and executives."""
from parse_apis.einforma_api import Einforma, CompanySummary, Company, Autonomo, Executive, CompanyNotFound
client = Einforma()
# Search for companies by name — limit= caps total items fetched.
for summary in client.companysummaries.search(query="Telefonica", rows=5, limit=5):
print(summary.denominacion, summary.provincia, summary.ventas)
# Drill-down: take ONE company summary with .first(), then fetch full detail.
summary = client.companysummaries.search(query="Iberdrola", limit=1).first()
if summary:
detail = summary.details()
print(detail.denominacion, detail.situacion, detail.forma_juridica, detail.total_empleados)
# Fetch company detail directly by ID.
company = client.companies.get(id="kLfOC5ZktKdR5Ub9ALlHug")
print(company.denominacion, company.cnae, company.provincia)
# Search autónomos (self-employed individuals)
for autonomo in client.autonomos.search(query="Garcia", rows=3, limit=3):
print(autonomo.denominacion, autonomo.cnae, autonomo.provincia)
# Search executives and see how many companies they administer
for exec_ in client.executives.search(query="Lopez", rows=3, limit=3):
print(exec_.nombre_adm, exec_.count_adm)
# Typed error handling for company detail lookup
try:
company = client.companies.get(id="INVALID_ID_XYZ")
print(company.denominacion)
except CompanyNotFound as exc:
print(f"Company not found: {exc.company_id}")
print("exercised: companysummaries.search / summary.details / companies.get / autonomos.search / executives.search")
Full-text search over Spanish companies (empresas) by name, NIF/CIF, or DUNS number. Returns paginated results with facets for filtering by province, sector, legal form, and denomination type. Pagination is offset-based via start/rows.
| Param | Type | Description |
|---|---|---|
| rows | integer | Number of results per page. |
| queryrequired | string | Search term (company name, NIF, or DUNS number). |
| start | integer | Starting offset for pagination. |
| filters | string | JSON object string containing filters. Keys include codProvinci (province code, e.g. '{"codProvinci": "(28)"}' for Madrid). |
{
"type": "object",
"fields": {
"total": "integer total number of matching companies",
"facets": "object containing filtering facets keyed by codSector, formaJuridica, codTipoDeno, codProvinci each with title and data array",
"results": "array of company summary objects"
},
"sample": {
"data": {
"total": 2343,
"facets": {
"codSector": {
"data": [
{
"cod": "08",
"name": "Telecomunicaciones",
"count": "1.329"
}
],
"title": "Actividad"
},
"codProvinci": {
"data": [
{
"cod": "28",
"name": "Madrid",
"count": "1.590"
}
],
"title": "Provincia"
}
},
"results": [
{
"id": "kLfOC5ZktKdR5Ub9ALlHug",
"cnae": "Actividades de sociedades holding",
"ventas": "GRAN",
"codCnae": "6421",
"provincia": "Madrid",
"codProvincia": "28",
"denominacion": "TELEFONICA, SA",
"tipoDenominacion": "Denominación principal"
}
]
},
"status": "success"
}
}About the Einforma API
Search Endpoints
The search_companies endpoint accepts a required query string (company name, NIF/CIF, or DUNS number) and returns a total count, paginated results with per-company summary objects, and a facets object. Facets are keyed by codSector, formaJuridica, codTipoDeno, and codProvinci, each containing a title and an array of filterable values. You can narrow results by passing a JSON-serialized filters string — for example, {"codProvinci": "(28)"} restricts results to Madrid. Pagination is offset-based via start and rows.
search_autonomos targets self-employed individuals rather than registered companies. It takes the same query, start, and rows parameters and returns a total plus a results array of autónomo summaries. search_executives searches by executive or director name and returns the matched person alongside the count of companies they administer — useful for mapping corporate control networks.
Company Detail
get_company_detail takes a company_id obtained from search_companies results and returns a data array containing a single detail object. That object includes identificacion (name, address, phone numbers, website URLs), cabecera (headline summary fields), informacionEmpresa (legal form, CNAE activity code, constitution date), listaProductos (available report products with associated pricing), and ultimosCambiosEmpresa (recent changes logged against the company record). The outResponse object carries API-level metadata including result.rdo and result.codRdo status codes.
Coverage and Scope
All four endpoints cover Spanish entities only. Company searches support facet filtering by province code, sector, legal form, and denomination type. Financial data surfaced via get_company_detail is limited to sales evolution and report availability — full balance sheet figures are gated behind the commercial report products listed in listaProductos, not returned as raw JSON fields.
The Einforma API is a managed, monitored endpoint for einforma.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when einforma.com 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 einforma.com 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?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Qualify Spanish B2B leads by filtering
search_companiesresults by province (codProvinci) and sector (codSector) before outreach - Map executive relationships by querying
search_executivesand cross-referencing the number of companies each director administers - Verify a Spanish company's legal identity by looking up its NIF/CIF directly in
search_companies - Check available due-diligence report products for a target company via the
listaProductosfield inget_company_detail - Monitor recent corporate changes by polling
ultimosCambiosEmpresainget_company_detailfor registered entities - Identify self-employed contractors or freelancers in Spain by NIF using
search_autonomos - Enrich a CRM with address, phone, website, and CNAE activity data pulled from
get_company_detailidentification fields
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 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.
Does Einforma have an official developer API?+
What filters does `search_companies` support, and how do you apply them?+
filters parameter accepts a JSON object string. Supported filter keys are codProvinci (province code), codSector (sector), formaJuridica (legal form), and codTipoDeno (denomination type). Pass the desired key-value pair as a serialized string, for example {"codProvinci": "(28)"} for Madrid. The facets object in the response enumerates valid values for each key, so you can build a filter UI dynamically from a first unfiltered query.Does `get_company_detail` return full financial statements like balance sheets or profit-and-loss figures?+
listaProductos array listing available commercial report products (with pricing), but raw balance sheet or P&L line items are not returned as structured JSON fields. You can fork this API on Parse and revise it to add an endpoint that fetches the report data if Einforma exposes it through additional detail pages.Does the API cover companies outside Spain, such as Portuguese or Latin American entities?+
search_companies, search_autonomos, search_executives, and get_company_detail — cover Spanish-registered entities only. You can fork this API on Parse and revise it to point at a different regional business directory if you need coverage beyond Spain.How does pagination work across the search endpoints?+
start as the zero-based record offset and rows as the page size. The total field in each response tells you the overall match count, so you can calculate the number of pages and iterate accordingly. There is no cursor or token-based pagination.