# eInforma Scraper - Spanish Companies, CIF, CNAE & Address (`scrapewise/einforma-scraper`) Actor

Scrape eInforma Spanish company data by name, CIF or profile link: legal name, CIF, address, province, legal form, activity, CNAE, SIC, share capital, employees, founding date, rankings, websites, BORME acts. Province filter, up to 200 matches per name.

- **URL**: https://apify.com/scrapewise/einforma-scraper.md
- **Developed by:** [Scrapewise Data](https://apify.com/scrapewise) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.28 / 1,000 company delivereds

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

## eInforma Scraper - Spanish Companies, CIF, CNAE & Address

**Scrape Spanish company data from eInforma without a login: legal name, trade names, CIF (tax ID), registered address, postal code, city, province, legal form, activity, CNAE code, corporate purpose, balance sheets on file and shareholder count. When the company has a full public profile, also the complete CIF, employees, founding date, share capital, websites, former name, SIC code, commercial registry, BORME acts, sales size, profit or loss, revenue trend and national, provincial and sector rankings. Search by name, brand or CIF, filter by province, or paste profile links.**

For B2B lead generation in Spain, KYC and supplier checks, sales teams enriching CRM accounts with CIF and CNAE, market researchers sizing a sector by province, and anyone who needs Spanish company register data as rows instead of one page at a time.

### eInforma scraper at a glance

- **Price:** US$ 3.00 per 1,000 companies on the Free plan, plus US$ 0.003 per run; full profile US$ 2.00 per 1,000 extra, only for companies that have one
- **Search the way the site does:** company name, brand, trade name or CIF; every name returns up to 200 matching companies, page after page
- **Province filter:** all 52 Spanish provinces, by name or 2-digit code
- **Two levels of data:** every company comes with its register basics; larger companies also get the full profile automatically (turn it off to pay only the basic price)
- **Profile links:** paste einforma.com company pages directly
- **Steady runs:** each request is retried on a fresh connection when the site pushes back, so long lists finish
- **No login, no browser.** Unknown links and empty searches return free error rows

### Quick start

```json
{
  "searchQuery": ["mahou"],
  "maxItems": 50
}
```

Every "construcciones" company in Seville, basics only:

```json
{
  "searchQuery": ["construcciones"],
  "province": "Sevilla",
  "maxItems": 0,
  "includeFullProfile": false
}
```

Look up a list of CIFs:

```json
{
  "searchQuery": ["A28078202", "A28017895"]
}
```

### Input

| Field | What it does |
|---|---|
| `searchQuery` | Company names, brands or CIFs, one per line. A CIF returns that company; a name returns the matching companies. |
| `startUrls` | einforma.com company pages (`/informacion-empresa/...`). |
| `province` | Only companies in one province: name (Madrid, Barcelona, Valencia, Sevilla...) or code (28, 08, 46, 41). |
| `maxItems` | Cap per name. The site lists up to 200 matches per name. 0 = all. Default 50. |
| `includeFullProfile` | On by default: read the full public profile when the company has one. |
| `proxyConfiguration` | Apify Proxy by default. |

Field names used by other eInforma tools (`profileUrls`, `provincia`, `maxResults`, a single `searchQuery` text) are accepted too, so an existing Task or integration keeps working after you switch.

### Example output

A real row from a run of 23 Oct 2026 for "mahou", with the full profile (corporate purpose shortened):

```json
{
  "type": "company",
  "companyName": "MAHOU, SA",
  "taxId": "A28078202",
  "tradeNames": ["LA PROHIBIDA CERVEZAS ALHAMBRA, S.A."],
  "address": "Calle Titan, 15",
  "postalCode": "28045",
  "city": "Madrid",
  "province": "Madrid",
  "legalForm": "Sociedad anónima",
  "activity": "Fabricación cerveza, Malta cervecera",
  "cnaeCode": "1105",
  "cnaeDescription": "Fabricación de cerveza",
  "sicCode": "20820000",
  "sicDescription": "Bebidas de malta",
  "corporatePurpose": "LA COMPRAVENTA, ADQUISICION Y EXPLOTACION DE INMUEBLES...",
  "websites": ["www.mahou-sanmiguel.com", "www.mahou.es"],
  "employees": 1459,
  "employeesYear": 2024,
  "foundingDate": "1957-12-30",
  "shareCapitalEur": 14028253,
  "listedOnStockExchange": false,
  "salesSize": "Empresa grande",
  "lastYearResult": "Positivo",
  "rankingNational": 137,
  "rankingProvince": 74,
  "rankingSector": 1,
  "commercialRegistry": "Registro Mercantil de Madrid",
  "bormeActsCount": 432,
  "lastBormeActDate": "2026-03-24",
  "lastBormeAct": "Nombramientos",
  "lastPressDate": "2026-10-06",
  "lastPressArticle": "El Economista CUOTA DE MERCADO",
  "internationalActivity": "Importa y Exporta",
  "shareholdersCount": 7,
  "subsidiariesCount": 22,
  "administratorsCount": 126,
  "lastBalanceYear": 2024,
  "balancesAvailable": "36 individuales y 32 consolidados",
  "lastDataDate": "2026-10-23",
  "fullProfile": true,
  "profileUrl": "https://www.einforma.com/informacion-empresa/mahou",
  "matchedName": "MAHOU, SA",
  "listProvince": "Madrid",
  "sourceUrl": "https://www.einforma.com/search?q=mahou",
  "scrapedAt": "2026-10-23T12:38:04Z"
}
```

A smaller company from the same run, basics only (eInforma shows only the start of the tax ID for companies without a full profile):

```json
{
  "type": "company",
  "companyName": "ATHIA MAHOU OLMEDA Y COMPAÑIA SL",
  "taxIdPartial": "B280...",
  "address": "CALLE ALCALA, 85",
  "postalCode": "28009",
  "city": "MADRID",
  "province": "Madrid",
  "legalForm": "Sociedad limitada",
  "lastDataDate": "2022-06-09",
  "fullProfile": false
}
```

### What data the eInforma scraper returns

| Field | What it is |
|---|---|
| `companyName`, `tradeNames`, `formerName` | Legal name, trade names and earlier legal name |
| `taxId` / `taxIdPartial` | Complete CIF (full profile) or the part eInforma shows |
| `address`, `postalCode`, `city`, `province` | Registered address |
| `legalForm` | Sociedad anónima, sociedad limitada, cooperativa... |
| `activity`, `cnaeCode`, `cnaeDescription`, `sicCode`, `sicDescription`, `corporatePurpose` | What the company does |
| `websites` | Company websites |
| `employees`, `employeesYear` | Headcount and the year it refers to |
| `foundingDate`, `shareCapitalEur`, `listedOnStockExchange` | Incorporation date, share capital in euros, listed or not |
| `salesSize`, `lastYearResult`, `revenueChangePercent` | Size by sales, profit or loss in the last year, revenue change |
| `rankingNational`, `rankingProvince`, `rankingSector` | Position in the national, provincial and sector rankings |
| `commercialRegistry`, `bormeActsCount`, `lastBormeActDate`, `lastBormeAct` | Commercial registry and acts published in the BORME |
| `lastPressDate`, `lastPressArticle` | Latest press mention |
| `shareholdersCount`, `subsidiariesCount`, `administratorsCount` | Counts (names are not collected) |
| `lastBalanceYear`, `balancesAvailable`, `lastFilingYear` | Balance sheets on file |
| `internationalActivity`, `lastDataDate`, `totalLookups`, `lookupsLastQuarter` | Import/export, last update, how often the company is looked up |
| `fullProfile`, `profileUrl`, `einformaUrl` | Whether the full profile was read, and the pages |
| `matchedName`, `matchedNameType`, `matchedNameOwner`, `listProvince` | What matched your search (a brand or sign of another company is labelled) |
| `sourceUrl` | The search or link that found the company |

Fields that are empty for a company are left out of its row. Names of directors, auditors and shareholders, phone numbers and sole traders (autónomos) are not collected. Partnerships owned directly by private individuals (comunidad de bienes, sociedad civil, herencia yacente) are left out and never charged.

### Pricing

Pay per event, no monthly fee.

| Event | Free plan price |
|---|---|
| Company delivered | US$ 0.003 (US$ 3.00 per 1,000) |
| Full company profile (only companies that have one) | US$ 0.002 (US$ 2.00 per 1,000) |
| Actor start | US$ 0.003 per run |

| Job | Cost at the Free plan price |
|---|---|
| 50 matches for one name, a third with full profiles | about US$ 0.19 |
| 1,000 companies, all with full profiles | about US$ 5.00 |
| 1,000 companies, basics only | about US$ 3.00 |

Error rows and duplicates are never charged.

### Errors

| `errorCode` | Meaning |
|---|---|
| `INVALID_URL` | The link is not an einforma.com company page |
| `NOT_FOUND` | The company page or CIF does not exist |
| `NO_RESULTS` | No Spanish company matches this name (in this province) |
| `INVALID_INPUT` | A value in the input is not valid, for example an unknown province |
| `BLOCKED` | The site did not answer after several tries; run again |
| `NOT_REACHED` | The run stopped (time, spending limit) before this search |

### Integrations, scheduling and AI agents

- **Schedules:** re-run a Task monthly to refresh CIF, address, headcount and BORME activity for your accounts.
- **Export** to JSON, CSV, Excel or HTML from the dataset, or read it through the Apify API.
- **Make, n8n, Zapier** and webhooks: enrich new CRM leads with CIF, CNAE and province, or push results to Google Sheets and HubSpot.
- **AI agents:** the Actor works through the Apify MCP server, so an agent can ask "what is the CIF, CNAE and headcount of a brewery in Madrid?" and get structured rows back.

### FAQ

**Why do some companies have only part of the CIF?** eInforma shows the complete CIF, employees and capital only on the full public profile, which exists for larger and more looked-up companies. For the rest you get the register basics and the start of the CIF, as the site shows it.

**How many companies can one name return?** Up to 200 per name, which is what the site lists. Use `province` or more specific names to reach more.

**Can I search by CIF?** Yes. Put the CIF in `searchQuery` and you get that company.

**Does it include sole traders?** No. Autónomos and partnerships of private individuals (comunidad de bienes, sociedad civil) are people, so they are left out without charge.

**Does it need an eInforma account?** No.

**Is it legal to scrape eInforma?** The Actor reads public company pages without logging in and does not collect personal data. You are responsible for how you use the data.

### Limitations

- Paid reports (balance sheet figures, credit risk, director names) are not collected.
- A name search returns at most 200 matches; narrow it with a province.
- Phone numbers are not collected (the site shows them only in part).

If this Actor saves you time, a short review on the Store page helps other people find it.

### Related scrapers

- [Northdata Scraper](https://apify.com/scrapewise/northdata-scraper): European company register data.
- [Companies House Scraper](https://apify.com/scrapewise/companies-house-scraper): UK companies.
- [Google Maps No Website Leads](https://apify.com/scrapewise/google-maps-no-website-leads): local businesses without a website.

### Changelog

- **23 Oct 2026, 0.1:** first release. Name, brand and CIF search with province filter, profile links, full public profiles with CIF, employees, capital, rankings and BORME acts.

This Actor collects only publicly available data. Independent tool, not affiliated with eInforma or Informa D\&B.

# Actor input Schema

## `searchQuery` (type: `array`):

Company names, brands or tax IDs (CIF), one per line, for example mahou, construcciones or A28078202. Each name returns the matching Spanish companies (up to 200).

## `startUrls` (type: `array`):

Optional: company pages on einforma.com, one per line (einforma.com/informacion-empresa/...).

## `province` (type: `string`):

Optional: only companies registered in one Spanish province, by name (Madrid, Barcelona, Sevilla...) or 2-digit code (28, 08, 41).

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

Cap for each name. The site lists up to 200 matches per name. 0 = all of them. Default 50.

## `includeFullProfile` (type: `boolean`):

On: when a company has a full public profile, it is read too (complete CIF, employees, capital, founding date, websites, rankings, BORME acts). Adds the 'Full company profile' charge for those companies only.

## `proxyConfiguration` (type: `object`):

Apify Proxy by default. Change it only if you know you need to.

## Actor input object example

```json
{
  "searchQuery": [
    "mahou"
  ],
  "maxItems": 50,
  "includeFullProfile": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `resultsCsv` (type: `string`):

No description

# 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 = {
    "searchQuery": [
        "mahou"
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapewise/einforma-scraper").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 = {
    "searchQuery": ["mahou"],
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapewise/einforma-scraper").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 '{
  "searchQuery": [
    "mahou"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapewise/einforma-scraper --silent --output-dataset

```

## MCP server setup

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

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/gbfMd4VfzeZzfe6Pb/builds/jNOm75CdocxV1JG0D/openapi.json
