# Romania Company Data — ANAF CUI Lookup, VAT & Tax Status (`foxlabs/romania-anaf-company-data`) Actor

Look up Romanian companies by CUI (fiscal code) in the official ANAF register. Returns legal name, trade register number, registered and fiscal addresses, phone, VAT registration status and periods, split-VAT and cash-VAT status, inactive-taxpayer flag and e-Invoice registration.

- **URL**: https://apify.com/foxlabs/romania-anaf-company-data.md
- **Developed by:** [Berkan Kaplan](https://apify.com/foxlabs) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$4.00 / 1,000 company records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Romania Company Data — ANAF CUI Lookup, VAT & Tax Status

ANAF is the Romanian tax authority, and its VAT-payer service is the authoritative answer on whether a Romanian company exists, is VAT-registered and is in good standing. This actor turns a list of CUIs into full records — name, trade register number, both addresses, VAT history and the inactive-taxpayer flag that says whether you can legally deduct their invoices.

**No API key · Official source · Pay only for delivered rows · Same schema across the series**

### What data do you get?

| Field | Description |
|---|---|
| `companyName` | Registered legal name |
| `registrationNumber` | CUI — the fiscal identification code |
| `taxNumber` | VAT number (`RO` + CUI) when VAT-registered |
| `tradeRegisterNumber` | Trade register number (`J40/…`) |
| `status` | `active`, or `inactive` when ANAF has flagged the taxpayer inactive |
| `statusRaw` | ANAF's own registration-state wording |
| `address` | Address as printed on the taxpayer record |
| `registeredOfficeAddress` | Registered office (sediu social), assembled from ANAF's parts |
| `fiscalAddress` | Fiscal domicile where it differs |
| `city` | Locality |
| `postalCode` | Postcode |
| `phone` | Registered phone |
| `isVatRegistered` | Whether the company is currently registered for VAT |
| `vatPeriods` | Every VAT registration period with start and end dates |
| `vatOnCollection` | Whether the company uses cash-basis VAT (TVA la încasare) |
| `splitVat` | Split-VAT status |
| `isInactive` | ANAF inactive-taxpayer flag — invoices from inactive taxpayers are not deductible |
| `inactivatedOn` | Date declared inactive |
| `reactivatedOn` | Date reactivated |
| `struckOffOn` | Date struck off the register |
| `eInvoiceRegistered` | Registered in the RO e-Factura system |
| `sourceUrl` | ANAF taxpayer lookup |

Every row also carries `query` (what you asked for), `scrapedAt` (ISO timestamp) and, when a
lookup fails, `error` explaining why.

### Example output

```json
{
  "country": "RO",
  "registry": "ANAF — Registrul persoanelor impozabile",
  "companyName": "DANTE INTERNATIONAL SA",
  "registrationNumber": "14399840",
  "taxNumber": "RO14399840",
  "tradeRegisterNumber": "J40/372/2002",
  "status": "active",
  "address": "MUNICIPIUL BUCUREŞTI, SECTOR 2, STR. GARA HERĂSTRĂU, NR.6",
  "city": "Sector 2 Mun. Bucureşti",
  "isVatRegistered": true,
  "vatPeriods": [
    {
      "from": "2002-02-01",
      "to": null
    }
  ],
  "isInactive": false,
  "sourceUrl": "https://mfinante.gov.ro/en/web/site/persoane-juridice"
}
```

### Input

```json
{
  "queries": ["14399840","8971726","RO1590082"],
  "maxResultsPerQuery": 1,
  "maxConcurrency": 1,
  "includeRaw": false
}
```

| Input | What it does |
|---|---|
| `queries` | Romanian fiscal codes (`14399840`, `RO1590082`). ANAF has no name search — CUIs only. |
| `maxResultsPerQuery` | Caps how many rows one query may produce. |
| `maxConcurrency` | How many queries run at once. Lower it if the source starts throttling. |
| `includeRaw` | Attaches the source's untouched record under `raw`, for fields this actor does not map. |
| `requestDelayMs` | Politeness delay between requests. |
| `proxyConfiguration` | Optional. ANAF answers datacenter IPs, but it rate-limits by IP on large runs. |

### What people use it for

- **Invoice compliance** — an invoice from an inactive taxpayer is not deductible in Romania. `isInactive` is the field that decides it.
- **VAT validation at scale** — check a whole supplier list's VAT registration and cash-VAT status in one run.
- **Counterparty onboarding** — confirm the legal name and trade register number before signing.

### Notes and limits

- ANAF batches up to 100 CUIs per request, and this actor uses that: a 500-company run costs five requests, not five hundred.
- There is no name search. If you only have a company name, resolve the CUI first — the EU VIES lookup or the trade register will give it to you.
- ANAF rate-limits by IP. The defaults are one request at a time with a short delay; turn the proxy on for very large lists.

### Where the data comes from

ANAF publishes the taxpayer register as a documented open REST service with no key. Source: [ANAF PlatitorTvaRest v9](https://mfinante.gov.ro/en/web/site/persoane-juridice)

### FAQ

#### Is this Romania ANAF scraper free?

The data source is free and needs no API key — you pay only for the rows the run delivers ($0.004 each). Failed or empty lookups are never charged.

#### Do I need an API key or a login?

No. ANAF publishes the taxpayer register as a documented open REST service with no key.

#### What can I search by?

By CUI only — the Romanian fiscal identification code, with or without the `RO` prefix. ANAF does not expose a name search, so a company name will not resolve; get the CUI from an invoice, the trade register or a VIES lookup first.

#### How current is the data?

Every run queries the source live, so results are as fresh as the source itself. ANAF's register is the live tax record; VAT status changes appear the day they take effect.

#### How fast is it, and how many queries can I run?

Queries run concurrently (1 at a time by default, tunable in the input). A prefilled run finishes in seconds; large lists scale roughly linearly and stay well inside a normal run timeout.

#### Can I export the results to CSV, Excel or JSON?

Yes. Apify datasets export to CSV, Excel, JSON, XML and HTML, and can be pulled through the API or pushed to your own storage.

#### What happens when a query returns nothing?

You still get a row, carrying your original `query` and an `error` field explaining why. Nothing is silently dropped, and you are not charged for it.

#### Is scraping this data legal?

Yes. ANAF publishes the VAT-payer register precisely so businesses can verify counterparties before invoicing them — it is a statutory transparency service.

***

Built by [Fox Labs](https://apify.com/foxlabs) — B2B company intelligence from public sources, as clean JSON.

# Changelog

This Actor's version history is a separate document: https://apify.com/foxlabs/romania-anaf-company-data/changelog.md

# Actor input Schema

## `queries` (type: `array`):

Romanian fiscal codes (`14399840`, `RO1590082`). ANAF has no name search — CUIs only.

## `maxResultsPerQuery` (type: `integer`):

How many rows a single query may produce.

## `maxConcurrency` (type: `integer`):

How many queries to run at the same time. Lower it if the source throttles you.

## `includeRaw` (type: `boolean`):

Attach the source's untouched response under `raw`. Useful when you need a field this actor does not map.

## `requestDelayMs` (type: `integer`):

Politeness delay against a public source. Raise it for large runs.

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

Optional. ANAF answers datacenter IPs, but it rate-limits by IP on large runs.

## Actor input object example

```json
{
  "queries": [
    "14399840",
    "8971726",
    "RO1590082"
  ],
  "maxResultsPerQuery": 1,
  "maxConcurrency": 1,
  "includeRaw": false,
  "requestDelayMs": 200,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "queries": [
        "14399840",
        "8971726",
        "RO1590082"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("foxlabs/romania-anaf-company-data").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 = { "queries": [
        "14399840",
        "8971726",
        "RO1590082",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("foxlabs/romania-anaf-company-data").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 '{
  "queries": [
    "14399840",
    "8971726",
    "RO1590082"
  ]
}' |
apify call foxlabs/romania-anaf-company-data --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,foxlabs/romania-anaf-company-data"
        }
    }
}
```

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/1LgnmOLuUv63bncga/builds/DvkVlGMIA4scFV4gz/openapi.json
