# Romanian Company Lookup + EU VAT Validation (ANAF + VIES) (`apnoda/anaf-vies-company-lookup`) Actor

Bulk Romanian company lookup from the ANAF v9 registry (fiscal status, VAT-payer flag, CAEN sector, registration state, PFA/II/IF handling) plus EU VAT validation via VIES. CUI-keyed, scored health flags, MCP-native, agent-callable in one round-trip. CNP + contact details stripped per GDPR.

- **URL**: https://apify.com/apnoda/anaf-vies-company-lookup.md
- **Developed by:** [Apnoda](https://apify.com/apnoda) (community)
- **Categories:** Developer tools, MCP servers, AI
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $60.00 / 1,000 company enriched (primary)s

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Verificare Firme România + Validare TVA UE (ANAF + VIES)

🇷🇴 [Română](#română) · 🇬🇧 [English](#english)

---

### Română

**Date despre firme românești (ANAF) + validare TVA UE (VIES), livrate ca date structurate pentru agenți AI și dezvoltatori.** Căutare în masă după CUI, indicatori de sănătate fiscală, compatibil MCP, plată pe rezultat, fără abonament și fără cont.

> 🤖 **Pregătit pentru plăți agentice:** x402 (automat pentru orice Actor cu preț pay-per-event). <!-- OPERATOR: adaugă „ · Skyfire" după aprobarea allowlist-ului Apify; vezi XP-06-followup-1 -->

#### Ce face acest Actor

Caută firme românești după CUI în registrul ANAF v9 ([webservicesp.anaf.ro](https://webservicesp.anaf.ro)) și livrează înregistrări JSON normalizate: stare fiscală, indicator plătitor de TVA, cod CAEN + sector rezolvat, stare de înregistrare, plus tratarea PFA/II/IF (persoane fizice). În plus, validează numere de TVA din UE direct prin serviciul oficial **VIES**.

Pe scurt, pentru fiecare CUI primești:

- **Stare fiscală scorată**: `inactiv fiscal`, `neplătitor TVA`, `radiat recent`, `regim TVA la încasare / split`, `înrolat e-Factura`. Fapte fiscale, formulate neutru (niciodată „fraudă"/„suspect").
- **Sector CAEN rezolvat**: codul + denumirea clasei + secțiunea (A–U) din nomenclatorul oficial INS.
- **Tratare PFA/II/IF**: persoanele fizice autorizate primesc îmbogățire completă (date publice din registrul comerțului), marcate `is_natural_person`. CNP întotdeauna redactat; date de contact (telefon/fax/email) niciodată returnate.
- **Validare TVA UE (VIES)**: valabilitate + dată, pentru orice stat membru, plus numărul de consultare VIES ca dovadă a verificării (emis în modul consultare; `null` în modul basic). Pentru RO, încrucișat cu indicatorul ANAF de plătitor de TVA.

Datele de bază sunt publice și gratuite la ANAF, diferența acestui Actor este **în masă + scorat + nativ-MCP + cu validare TVA transfrontalieră**, apelabil de un agent într-un singur tur.

#### De ce să folosești acest Actor

Trei profiluri:

**Pentru dezvoltatori de agenți AI:** Compatibil MCP din prima zi. Te conectezi via `mcp.apify.com?tools=apnoda/anaf-vies-company-lookup` și agentul tău are **3 unelte**: `lookup_company`, `lookup_companies` (în masă), `validate_eu_vat`. Fără abonamente, fără chei API, fără infrastructură.

**Pentru dezvoltatori care construiesc instrumente de due-diligence:** API-ul ANAF v9 este SOAP/REST cu particularități (limită de rată ≥1.5s, batch nativ, câmpuri cuibărite). Acest Actor îl abstractizează, atașează nomenclatorul CAEN și indicatorii de sănătate, și adaugă validarea VIES. Output stabil și tipat.

**Pentru conformitate, KYC/AML și jurnaliști:** Verifică o listă de furnizori/contrapărți după CUI într-un singur apel. Export în CSV. Plătești cenți pe verificare. Fără cont la un SaaS românesc.

#### Încearcă acum

1. **Lipește una sau mai multe CUI-uri** în câmpul `cuis` (ex.: `["14399840", "RO 38150891"]`) și pornește Actorul.
2. **Exportă ca CSV** și deschide în Excel / Google Sheets.
3. **SAU** conectează via MCP și întreabă Claude în limbaj natural (vezi secțiunea următoare).

Plătești doar pe firmă returnată, CUI-urile inexistente la ANAF nu se taxează. Creditul Apify de $5 la înscriere acoperă mii de verificări.

#### Comparație rapidă

| Capabilitate | Acest Actor | Formular web ANAF (gratuit) | ListaFirme.ro | Risco.ro | RRF.ro |
|---|---|---|---|---|---|
| Căutare în masă (multe CUI, un apel) | ✅ până la 100 | ❌ unul câte unul | parțial | parțial | parțial |
| Indicatori de sănătate scorați | ✅ | parțial (stare brută) | ✅ în UI | ✅ în UI | ✅ în UI |
| Acces MCP / agenți AI | ✅ | ❌ | ❌ | ❌ | ❌ |
| Validare TVA UE transfrontalieră (VIES) | ✅ | ❌ | ❌ | ❌ | ❌ |
| Îmbogățire PFA/II/IF | ✅ completă | ✅ | ✅ | ✅ | ✅ |
| API programatic / export CSV | ✅ | ❌ | limitat | limitat | limitat |
| Redactare CNP + eliminare contact (GDPR) | ✅ | n/a | variabil | variabil | variabil |
| Plată la utilizare, fără cont | ✅ | ✅ (gratuit, manual) | ❌ abonament | ❌ abonament | ❌ abonament |
| Model de preț | pay-per-event | gratuit (manual, 1 la 1) | abonament | abonament | abonament |

Nișa acestui Actor: **acces programatic la datele ANAF, via MCP, API sau CSV, în masă, scorat și cu validare TVA UE, fără abonament și fără cont.** Datele de bază există gratuit pe formularul ANAF și pe platformele românești de informații despre firme (UI web, abonamente). Diferența: livrăm raw, în masă, prin API sau MCP, plătit doar la utilizare, pentru integrare în propriul cod, agenți AI sau verificări one-shot.

⚠️ **Acest Actor NU oferă direct:**
- Date ONRC (administratori, capital social, beneficiari reali), vin în pachetul de due-diligence (build #6).
- Căutare după nume / administrator (gardă de re-identificare GDPR, doar după CUI).
- Situații financiare / bilanț.
- Interfață vizuală pentru echipă (datele se accesează via API, MCP sau dataset Apify).

#### Utilizare MCP

Conectează Claude Desktop (sau orice client MCP) adăugând în configurație:

```json
{
  "mcpServers": {
    "romanian-companies": {
      "url": "https://mcp.apify.com?tools=apnoda/anaf-vies-company-lookup"
    }
  }
}
````

Apoi întreabă Claude lucruri precum:

- *"Verifică firma cu CUI 14399840, este plătitoare de TVA și activă fiscal?"*
- *"Îmbogățește această listă de 40 de CUI-uri de furnizori și spune-mi care sunt inactivi fiscal sau radiați."*
- *"Validează numărul de TVA german DE811569869 prin VIES."*

Claude alege unealta potrivită, o apelează și răspunde. Plătești pe firmă returnată / verificare completată, nu pe interogare.

##### Unelte MCP disponibile (3)

| Unealtă | Ce face |
|---|---|
| **`lookup_company`** | O firmă după CUI: stare fiscală, indicator TVA, sector CAEN rezolvat, stare de înregistrare, semnal de arierate fiscale (listă trimestrială ANAF), tratare PFA/II/IF. Acceptă „14399840", „RO14399840" sau „RO 14399840". |
| **`lookup_companies`** | Căutare în masă, până la 100 de CUI-uri într-un apel, punctul de pârghie (ANAF e nativ batch). Returnează `companies[]` + `not_found[]` + `invalid[]` + `unresolved[]` + un bloc `summary`. Rezultate parțiale prin construcție: câteva CUI greșite nu opresc lotul. |
| **`validate_eu_vat`** | Validare TVA UE prin VIES, un singur `country_code`+`vat_number` sau în masă `vat_checks[]` (până la 100). Codul de țară este cel VIES (EL pentru Grecia, XI pentru Irlanda de Nord; „GR" este acceptat ca alias pentru EL); un cod din afara VIES (ex. US, GB) revine ca `INVALID_INPUT` per intrare, fără apel irosit. Returnează valabilitate + numărul de consultare VIES (emis în modul consultare; `null` în modul basic); pentru RO atașează indicatorul ANAF `scpTVA` pentru încrucișare ANAF↔VIES. Degradare grațioasă per-verificare (stat membru indisponibil → `MS_UNAVAILABLE`), niciodată eroare la nivel de lot. |

#### Utilizare Apify (non-MCP)

Rulaj standard. Configurezi input-ul, pornești, colectezi rezultatele din dataset.

```json
{
  "cuis": ["14399840", "RO 38150891", "11111111"],
  "maxAcceptableLagMinutes": 1440,
  "coarsenNaturalPersonAddress": false
}
```

Output-ul ajunge într-un dataset Apify standard. Exportă ca JSON, CSV sau XLSX. Trei vederi pre-definite: `overview` (JSON implicit), `csv_export` (plat, toate câmpurile) și `mcp_compact` (6 câmpuri esențiale pentru decizia de tip „merge / nu merge").

#### Ce primești

Fiecare înregistrare include:

```json
{
  "cui": "14399840",
  "denumire": "DANTE INTERNATIONAL SA",
  "tip_persoana": "PJ",
  "is_natural_person": false,
  "cod_caen": "4754",
  "caen_label": "Comerţ cu amănuntul al articolelor şi aparatelor electrocasnice, în magazine specializate",
  "caen_section": "G",
  "caen_section_label": "COMERŢ CU RIDICATA ŞI CU AMĂNUNTUL; REPARAREA AUTOVEHICULELOR ŞI MOTOCICLETELOR",
  "stare_inregistrare": "INREGISTRAT din data 29.08.2006",
  "forma_juridica": "SOCIETATE COMERCIALĂ PE ACŢIUNI",
  "adresa": "MUNICIPIUL BUCUREŞTI, SECTOR 2, STR. GARA HERĂSTRĂU, NR.6, CLADIREA GLOBALWORTH SQUARE, ET.1,2,3,5,8",
  "fiscal_inactive": false,
  "vat_payer": true,
  "vat_deregistered": false,
  "recently_radiata": false,
  "split_tva_regime": false,
  "e_factura_enrolled": false,
  "tva_incasare": false,
  "data_inceput_scp_tva": "2002-01-23",
  "data_sfarsit_scp_tva": null,
  "data_inactivare": null,
  "data_reactivare": null,
  "data_inregistrare": "2002-01-23",
  "data_radiere": null,
  "as_of": "2026-06-07T20:04:32.000Z",
  "lag_minutes": 12,
  "is_stale": false,
  "source": "cache",
  "arrears_on_published_list": false,
  "arrears_as_of": "2026-03-31",
  "arrears_amount_lei": null,
  "arrears_observatii": null
}
```

Adnotarea de prospețime (`as_of` / `lag_minutes` / `is_stale` / `source`) urmărește momentul ultimei verificări a stării fiscale (ANAF), astfel încât agentul tău știe cât de proaspete sunt datele. Semnalul de arierate (`arrears_*`) are un ceas separat: lista debitorilor cu obligații fiscale restante este publicată trimestrial de ANAF, deci `arrears_as_of` reflectă data acelei liste, nu reîmprospătarea zilnică a stării fiscale.

#### Exemplu real: verificarea unei liste de furnizori

Apelezi `lookup_companies({cuis: [...40 CUI-uri...]})` cu lista de furnizori și citești indicatorii:

```
40 CUI-uri trimise → 38 firme returnate, 1 inexistent la ANAF (not_found), 1 input invalid

  2 firme  fiscal_inactive: true   → necesită atenție înainte de contractare
  1 firmă  recently_radiata: true  → radiată în ultimele 12 luni
  5 firme  vat_payer: false        → neplătitoare de TVA (relevant pentru deducere)
  3 firme  is_natural_person: true → PFA/II (verifică CNP redactat, fără contact)
  1 firmă  arrears_on_published_list: true → pe lista trimestrială ANAF de arierate
```

Costul întregii verificări: **~$2.28** (38 × $0.06). Timp de răspuns: câteva secunde. Exact genul de verificare pe care echipele de achiziții, KYC/AML și jurnaliștii o rulează zilnic.

#### Calculator de costuri

**Prețuri:**

- Pornire Actor: $0.01 (o dată per rulaj / pornire la rece în standby)
- Per firmă returnată (`company_enriched`): **$0.06**, evenimentul principal
- Per validare TVA UE completată (`vat_validated`): $0.02
- CUI-uri inexistente la ANAF (NOT\_FOUND), input-uri invalide și verificări care nu s-au putut finaliza (stat membru indisponibil), **niciodată taxate**.

Costurile de platformă/calcul sunt absorbite în prețul evenimentului, fără taxe ascunse.

| Caz de utilizare | Apel | Rezultate | Cost |
|---|---|---|---|
| Verifici un singur furnizor | `lookup_company` | 1 firmă | ~$0.06 |
| Îmbogățești o listă de 100 CUI | `lookup_companies` | 100 firme | ~$6.00 |
| Validezi un număr de TVA UE | `validate_eu_vat` | 1 verificare | ~$0.02 |
| Sweep TVA transfrontalier | `validate_eu_vat` (lot 50) | 50 verificări | ~$1.00 |
| Triezi un portofoliu de 500 furnizori | `lookup_companies` ×5 | 500 firme | ~$30.00 |

#### Limitări cunoscute

Sincer, de la început:

- **Fără date ONRC** (administratori, capital social, beneficiari reali): acestea sunt în pachetul de due-diligence (build #6), unde apar ca eveniment premium. ANAF v9 nu le expune.
- **Fără căutare după nume / administrator.** Input-ul este exclusiv CUI: gardă de re-identificare GDPR.
- **Prospețimea stării fiscale ~24h.** ANAF este reîmprospătat zilnic; fiecare înregistrare poartă adnotarea de prospețime, iar `max_acceptable_lag_minutes` poate strânge (niciodată lărgi) fereastra.
- **Nomenclator CAEN Rev.2.** Codurile exclusiv Rev.3 și divizarea feroviară (4911/4912) se rezolvă la `caen_label`/`caen_section` null: codul CAEN brut + CUI sunt întotdeauna returnate.
- **Disponibilitatea VIES per stat membru este uneori instabilă** → `MS_UNAVAILABLE` cu rezervă din cache (`stale_cache`), niciodată o eroare dură.
- **Fără situații financiare / bilanț** (sursă separată; un Actor dedicat dacă apare cerere).
- **Semnalul de arierate este o listă-prag, nu un certificat fiscal.** `arrears_on_published_list` reflectă lista trimestrială ANAF a datoriilor fiscale semnificative (peste praguri de 500k / 250k / 100k lei în funcție de mărimea contribuabilului, cu ~1 lună întârziere); `false` nu înseamnă „fără datorii", iar PFA/II/IF sunt listate separat după CNP (necuprinse aici). Pentru o situație fiscală completă, cere un certificat de atestare fiscală ANAF. Fără snapshot încărcat, câmpurile `arrears_*` sunt `null` (necunoscut, nu negativ).

#### Sursa datelor și aspecte legale

- **ANAF v9** ([webservicesp.anaf.ro/PlatitorTvaRest](https://webservicesp.anaf.ro)): date publice, gratuite, fără cheie: stare fiscală/TVA/CAEN/înregistrare.
- **VIES**: serviciul oficial de validare TVA al Comisiei Europene.
- **Nomenclator CAEN** sub licență OGL-ROU-1.0 (atribuire: INS).

Registrul de firme ANAF este public prin statut; acest Actor îl împachetează pentru consum automat și agenți AI.

#### Confidențialitate & date personale

apnoda-daas este operatorul de date; Apify, Cloudflare și Hetzner sunt persoane împuternicite conform Art. 28. Controalele de confidențialitate sunt arhitecturale, nu improvizate per sursă:

- **CNP întotdeauna redactat.**
- **Date de contact** (telefon/fax/email) **niciodată returnate**: eliminate prin proiecție (nici măcar nu sunt citite din cache).
- **PFA/II/IF** primesc îmbogățire publică completă, marcate `is_natural_person`; adresa de înregistrare este returnată integral implicit, cu un comutator opțional `coarsen_natural_person_address` (→ doar județ/localitate).
- **Doar input CUI**: fără căutare după nume (garda de re-identificare).
- **ROPA** menținut (Art. 30), retenție documentată și ștergere per-înregistrare din arhiva R2 la o cerere validă. Prelucrarea folosește date publice de registru, minimizate (câmpuri fiscale ale persoanei juridice plus numele public înregistrat al unui PFA/ÎI/IF), deci nu este necesară o evaluare DPIA separată.
- **Cereri ale persoanelor vizate (DSR):** scrie la `privacy@apnoda.com`: răspuns în 30 de zile (Art. 12(3) GDPR).
- **Notă publică de confidențialitate:** [apnoda.com/privacy](https://apnoda.com/privacy).

#### Fiabilitate

- **Citire Postgres-first**; fiecare înregistrare poartă prospețime (`as_of` / `lag_minutes` / `is_stale` / `source` ∈ cache / anaf / stale\_cache).
- **Fail-open:** o pană tranzitorie de reîmprospătare servește o înregistrare ușor învechită (adnotată), în loc să eșueze.
- `POSTGRES_UNREACHABLE` / `COMPUTE_UNREACHABLE` = reîncearcă în ~30s; `COMPUTE_BAD_REQUEST` = eroare permanentă (nu reîncerca).
- **Rulajul în masă (dataset) eșuează vizibil** la o eroare de fiabilitate (bază de date indisponibilă, input invalid), în loc să se încheie „cu succes" cu un dataset gol, astfel încât un rulaj programat nu ascunde o pană.
- **Backup** la fiecare 6 ore, retenție 7 zile în Cloudflare R2 (criptat AES-256); exercițiu DR bilunar. Infrastructura este permanentă, niciodată „șterge-și-reconstruiește".

#### Transparență privind utilizarea platformei

Calea MCP rulează în modul standby Apify.

- **Memorie standby:** 1024 MB (RSS de vârf măsurat ~52 MB, marjă confortabilă).
- **Profil de latență warm, p50 / p95** (măsurat 2026-06-24 împotriva URL-ului standby de producție, N=30 per categorie):
  - citiri din cache (`lookup_company` / `lookup_companies`): 682 / 727 ms
  - validare VIES (cache hit): 786 / 815 ms
  - pornire la rece (primul apel după inactivitate prelungită): ~5900 ms (provizionare container Apify + pornire Node; afectează doar primul apel)
- **Calcul de platformă:** absorbit în prețul per-eveniment, fără taxe ascunse. Facturarea standby este bazată pe timp: containerul rămâne activ ~5 minute între apeluri (coada de inactivitate), deci costul dominant este timpul de standby în timp real, nu apelul activ de sub o secundă.

> Cifrele de mai sus sunt fixate în `docs/latency-baseline.json` (calibrate 2026-06-24, măsurate împotriva URL-ului standby de producție) și verificate de `tests/latency-baseline.test.ts`.

#### Suport

- **Probleme sau întrebări:** folosește formularul de contact din pagina Actorului din Apify Store.
- **Alți Actori:** răsfoiește [profilul apnoda](https://apify.com/apnoda) pentru instrumente de date birocratice România/CEE.

#### Întrebări frecvente

**Î: Datele sunt în timp real?**
R: Reflectă cache-ul nostru, reîmprospătat zilnic din ANAF. Fiecare înregistrare poartă adnotarea de prospețime (`as_of` / `lag_minutes` / `is_stale`), deci agentul tău știe cât de proaspete sunt datele și poate cere o reîmprospătare cu `max_acceptable_lag_minutes`.

**Î: Pot folosi datele într-un produs comercial?**
R: Da, datele ANAF sunt publice. Nu poți revinde datele brute ca un API ANAF concurent.

**Î: Cât de des este actualizat Actorul?**
R: Întreținut activ. Corecții și adaptări la schimbările API ANAF/VIES în 72 de ore pentru utilizatorii activi.

**Î: Cum sunt tratate datele PFA / persoanelor fizice autorizate?**
R: Îmbogățire publică completă din registru (bază de interes legitim pentru due-diligence), cu CNP redactat, contact eliminat, comutator opțional de generalizare a adresei și input exclusiv după CUI. PFA/II/IF nu sunt sub-îmbogățite, un segment cheie de furnizori sub-prag.

**Î: Ce se întâmplă dacă VIES este indisponibil?**
R: Per-verificare `MS_UNAVAILABLE` (cu rezervă din cache dacă există), niciodată o eroare la nivel de lot. Plătești doar verificările finalizate.

**Î: Cum controlez cheltuielile?**
R: Plată pe eveniment, pe firmă returnată / verificare completată, fără abonament. Setezi limite per-rulaj și lunare în Apify Console. CUI-urile NOT\_FOUND și input-urile invalide nu se taxează.

**Î: Care e diferența față de formularul web gratuit ANAF?**
R: În masă (până la 100/apel), indicatori scorați, nativ-MCP, validare TVA UE transfrontalieră și export CSV, într-un singur apel, apelabil de un agent.

*Versiunea 1.0 · Actualizat iunie 2026*

***

### English

**Romanian company data (ANAF) + EU VAT validation (VIES) as structured data for AI agents and developers.** Bulk lookup by CUI, scored fiscal-health flags, MCP-native, pay-per-result, no subscription and no account.

> 🤖 **Agentic-payments ready:** x402 (automatic for any pay-per-event Actor).&#x20;

#### What this Actor does

Looks up Romanian companies by CUI in the ANAF v9 registry ([webservicesp.anaf.ro](https://webservicesp.anaf.ro)) and returns normalized JSON records: fiscal status, VAT-payer flag, resolved CAEN sector, registration state, plus PFA/II/IF (natural-person) handling. It also validates EU VAT numbers directly against the official **VIES** service.

For each CUI you get:

- **Scored fiscal status**: `fiscal_inactive`, `vat_payer`, `recently_radiata` (struck off), split/cash-VAT regime, e-Factura enrollment. Fiscal facts, phrased neutrally (never "fraud"/"suspect").
- **Resolved CAEN sector**: the code + the class label + the section (A–U) from the official INS nomenclature.
- **PFA/II/IF handling**: sole traders get full enrichment (public commercial-register data), flagged `is_natural_person`. CNP is always redacted; contact details (phone/fax/email) are never returned.
- **EU VAT validation (VIES)**: validity + request date, for any member state, plus the VIES consultation number as proof of the check (issued in consultation mode; `null` in basic mode). For RO, cross-checked against the ANAF VAT-payer flag.

The underlying data is public and free at ANAF, this Actor's difference is **bulk + scored + MCP-native + cross-border VAT validation**, callable by an agent in one round-trip.

#### Why use this Actor

Three buyer profiles:

**For AI-agent developers:** MCP-native from day one. Connect via `mcp.apify.com?tools=apnoda/anaf-vies-company-lookup` and your agent has **3 tools**: `lookup_company`, `lookup_companies` (batch), `validate_eu_vat`. No subscriptions, no API keys, no infrastructure.

**For developers building due-diligence tools:** The ANAF v9 API is SOAP/REST with quirks (≥1.5s rate limit, native batching, nested fields). This Actor abstracts it, joins the CAEN nomenclature and the health flags, and adds VIES validation. Output is stable and typed.

**For compliance, KYC/AML and journalists:** Vet a list of suppliers/counterparties by CUI in one call. Export to CSV. Pay cents per check. No account with a Romanian SaaS required.

#### Try it now

1. **Paste one or more CUIs** into the `cuis` field (e.g. `["14399840", "RO 38150891"]`) and start the Actor.
2. **Export as CSV** and open in Excel / Google Sheets.
3. **OR** connect via MCP and ask Claude in natural language (see next section).

You pay only per company returned, CUIs ANAF has no record of are not billed. Apify's $5 signup credit covers thousands of lookups.

#### Quick comparison

| Capability | This Actor | ANAF web form (free) | ListaFirme.ro | Risco.ro | RRF.ro |
|---|---|---|---|---|---|
| Bulk lookup (many CUIs, one call) | ✅ up to 100 | ❌ one at a time | partial | partial | partial |
| Scored health flags | ✅ | partial (raw status) | ✅ in UI | ✅ in UI | ✅ in UI |
| MCP / AI-agent access | ✅ | ❌ | ❌ | ❌ | ❌ |
| Cross-border EU VAT validation (VIES) | ✅ | ❌ | ❌ | ❌ | ❌ |
| PFA/II/IF enrichment | ✅ full | ✅ | ✅ | ✅ | ✅ |
| Programmatic API / CSV export | ✅ | ❌ | limited | limited | limited |
| CNP redaction + contact stripping (GDPR) | ✅ | n/a | varies | varies | varies |
| Pay-per-use, no account | ✅ | ✅ (free, manual) | ❌ subscription | ❌ subscription | ❌ subscription |
| Pricing model | pay-per-event | free (manual, 1-at-a-time) | subscription | subscription | subscription |

This Actor's niche: **programmatic access to ANAF data, via MCP, API, or CSV, in bulk, scored, and with EU VAT validation, with no subscription and no account.** The base data exists for free on the ANAF web form and on Romanian company-intelligence platforms (web UI, subscriptions). The difference: we deliver raw, in bulk, via API or MCP, pay-per-use only, for integration into your own code, AI agents, or one-shot checks.

⚠️ **This Actor does NOT provide directly:**

- ONRC data (administrators, share capital, beneficial owners), coming in the due-diligence bundle (build #6).
- Name-based / director search (GDPR re-identification guardrail, CUI-only input).
- Financial statements / balance sheets (bilanț).
- A visual team UI (data is accessed via API, MCP, or the Apify dataset).

#### MCP-first usage

Connect Claude Desktop (or any MCP client) by adding this to your config:

```json
{
  "mcpServers": {
    "romanian-companies": {
      "url": "https://mcp.apify.com?tools=apnoda/anaf-vies-company-lookup"
    }
  }
}
```

Now ask Claude things like:

- *"Look up the company with CUI 14399840, is it a VAT payer and fiscally active?"*
- *"Enrich this list of 40 supplier CUIs and tell me which are fiscally inactive or struck off."*
- *"Validate the German VAT number DE811569869 via VIES."*

Claude picks the right tool, calls it, and answers. You pay per company returned / per completed check, not per query.

##### Available MCP tools (3)

| Tool | What it does |
|---|---|
| **`lookup_company`** | One company by CUI: fiscal status, VAT flag, resolved CAEN sector, registration state, tax-arrears signal (ANAF quarterly list), PFA/II/IF handling. Accepts "14399840", "RO14399840", or "RO 14399840". |
| **`lookup_companies`** | Bulk lookup, up to 100 CUIs in one call, the leverage point (ANAF is natively a batch API). Returns `companies[]` + `not_found[]` + `invalid[]` + `unresolved[]` + a `summary` block. Partial results by design: a few bad CUIs never fail the batch. |
| **`validate_eu_vat`** | EU VAT validation via VIES, a single `country_code`+`vat_number` or bulk `vat_checks[]` (up to 100). The country code is the VIES code (EL for Greece, XI for Northern Ireland; "GR" is accepted as an alias for EL); a code outside VIES (e.g. US, GB) comes back as a per-entry `INVALID_INPUT`, no wasted lookup. Returns validity + the VIES consultation number (issued in consultation mode; `null` in basic mode); for RO it attaches the ANAF `scpTVA` flag for an ANAF↔VIES cross-check. Per-entry graceful degradation (member state unavailable → `MS_UNAVAILABLE`), never a batch-level error. |

#### Apify usage (non-MCP)

Standard Actor run. Configure inputs, start, collect dataset results.

```json
{
  "cuis": ["14399840", "RO 38150891", "11111111"],
  "maxAcceptableLagMinutes": 1440,
  "coarsenNaturalPersonAddress": false
}
```

Output lands in a standard Apify dataset. Export as JSON, CSV, or XLSX. Three pre-built views: `overview` (default JSON), `csv_export` (flat, all fields), and `mcp_compact` (the 6 go/no-go fields an LLM reasons on).

#### What you get

Every record includes:

```json
{
  "cui": "14399840",
  "denumire": "DANTE INTERNATIONAL SA",
  "tip_persoana": "PJ",
  "is_natural_person": false,
  "cod_caen": "4754",
  "caen_label": "Comerţ cu amănuntul al articolelor şi aparatelor electrocasnice, în magazine specializate",
  "caen_section": "G",
  "caen_section_label": "COMERŢ CU RIDICATA ŞI CU AMĂNUNTUL; REPARAREA AUTOVEHICULELOR ŞI MOTOCICLETELOR",
  "stare_inregistrare": "INREGISTRAT din data 29.08.2006",
  "forma_juridica": "SOCIETATE COMERCIALĂ PE ACŢIUNI",
  "adresa": "MUNICIPIUL BUCUREŞTI, SECTOR 2, STR. GARA HERĂSTRĂU, NR.6, CLADIREA GLOBALWORTH SQUARE, ET.1,2,3,5,8",
  "fiscal_inactive": false,
  "vat_payer": true,
  "vat_deregistered": false,
  "recently_radiata": false,
  "split_tva_regime": false,
  "e_factura_enrolled": false,
  "tva_incasare": false,
  "data_inceput_scp_tva": "2002-01-23",
  "data_sfarsit_scp_tva": null,
  "data_inactivare": null,
  "data_reactivare": null,
  "data_inregistrare": "2002-01-23",
  "data_radiere": null,
  "as_of": "2026-06-07T20:04:32.000Z",
  "lag_minutes": 12,
  "is_stale": false,
  "source": "cache",
  "arrears_on_published_list": false,
  "arrears_as_of": "2026-03-31",
  "arrears_amount_lei": null,
  "arrears_observatii": null
}
```

The freshness annotation (`as_of` / `lag_minutes` / `is_stale` / `source`) tracks when the fiscal status was last verified against ANAF, so your agent knows how fresh the data is. The arrears signal (`arrears_*`) is on a separate clock: ANAF publishes the significant-tax-arrears list quarterly, so `arrears_as_of` reflects that list's date, not the daily fiscal-status refresh.

#### Real example: vetting a supplier list

Call `lookup_companies({cuis: [...40 CUIs...]})` with your supplier list and read the flags:

```
40 CUIs sent → 38 companies returned, 1 not_found at ANAF, 1 invalid input

  2 companies  fiscal_inactive: true   → needs attention before contracting
  1 company    recently_radiata: true  → struck off in the last 12 months
  5 companies  vat_payer: false        → not VAT-registered (relevant for deduction)
  3 companies  is_natural_person: true → PFA/II (CNP redacted, no contact details)
  1 company    arrears_on_published_list: true → on ANAF's quarterly arrears list
```

Cost of the whole check: **~$2.28** (38 × $0.06). Time to return: a few seconds. Exactly the kind of check procurement, KYC/AML, and investigative teams run daily.

#### Cost calculator

**Pricing:**

- Actor start: $0.01 (once per run / standby cold boot)
- Per company returned (`company_enriched`): **$0.06**, the primary event
- Per completed EU VAT validation (`vat_validated`): $0.02
- CUIs ANAF has no record of (NOT\_FOUND), invalid inputs, and checks that couldn't complete (member state down) are **never billed**.

Platform/compute costs are absorbed in the event price, no hidden charges.

| Use case | Call | Records | Cost |
|---|---|---|---|
| Vet a single supplier | `lookup_company` | 1 company | ~$0.06 |
| Bulk-enrich a 100-CUI list | `lookup_companies` | 100 companies | ~$6.00 |
| Validate one EU VAT number | `validate_eu_vat` | 1 check | ~$0.02 |
| Cross-border VAT sweep | `validate_eu_vat` (bulk 50) | 50 checks | ~$1.00 |
| Screen a 500-supplier portfolio | `lookup_companies` ×5 | 500 companies | ~$30.00 |

#### Known limitations

Being honest up front:

- **No ONRC data** (administrators, share capital, beneficial owners): these live in the due-diligence bundle (build #6) as a premium event. ANAF v9 does not expose them.
- **No name-based / director search.** Input is CUI-only: a GDPR re-identification guardrail.
- **Fiscal-status freshness ~24h.** ANAF is refreshed daily; every record carries the freshness annotation, and `max_acceptable_lag_minutes` can tighten (never loosen) the window.
- **CAEN Rev.2 nomenclature.** Rev.3-only codes and the rail split (4911/4912) resolve to a null `caen_label`/`caen_section`: the raw CAEN code + CUI are always returned.
- **VIES per-member-state availability is occasionally flaky** → `MS_UNAVAILABLE` with a stale-cache fallback, never a hard error.
- **No financial statements / bilanț** (separate source; a dedicated Actor if demand emerges).
- **The arrears signal is a threshold list, not a tax certificate.** `arrears_on_published_list` reflects ANAF's quarterly list of significant tax arrears (above 500k / 250k / 100k lei thresholds by taxpayer size, published with a ~1-month lag); `false` does not mean "no debt", and PFA/II/IF are listed separately by CNP (not covered here). For complete fiscal standing, request an ANAF certificat de atestare fiscală. With no snapshot loaded, the `arrears_*` fields are `null` (unknown, not negative).

#### Data source and legal

- **ANAF v9** ([webservicesp.anaf.ro/PlatitorTvaRest](https://webservicesp.anaf.ro)): public, free, no key: fiscal/VAT/CAEN/registration status.
- **VIES**: the European Commission's official EU VAT validation service.
- **CAEN nomenclature** under the OGL-ROU-1.0 license (attribution: INS).

The ANAF company registry is public by statute; this Actor packages it for machine consumption and AI agents.

#### Privacy & personal data

apnoda-daas is the data controller; Apify, Cloudflare, and Hetzner are Article 28 processors. The privacy controls are architectural, not per-source improvisation:

- **CNP is always hard-redacted.**
- **Contact details** (phone/fax/email) **are never returned**: stripped by projection (they are not even read from the cache).
- **PFA/II/IF** get full public-registry enrichment, flagged `is_natural_person`; the registered address is returned in full by default, with an opt-in `coarsen_natural_person_address` toggle (→ județ/locality only).
- **CUI-only input**: no name search (the re-identification guardrail).
- **ROPA** entry maintained (Art. 30), documented retention, and per-record erasure of the R2 raw archive on a valid request. The processing is minimized public-register data (legal-entity fiscal fields plus a PFA/II/IF sole-trader's public registered name), so no standalone DPIA is required.
- **Data Subject Requests (DSR):** write to `privacy@apnoda.com`: answered within 30 days (Art. 12(3) GDPR).
- **Public privacy notice:** [apnoda.com/privacy](https://apnoda.com/privacy).

#### Reliability

- **Postgres-first reads**; every record carries freshness (`as_of` / `lag_minutes` / `is_stale` / `source` ∈ cache / anaf / stale\_cache).
- **Fail-open:** a transient refresh outage serves a held slightly-stale record (annotated) rather than erroring.
- `POSTGRES_UNREACHABLE` / `COMPUTE_UNREACHABLE` = retry in ~30s; `COMPUTE_BAD_REQUEST` = permanent (do not retry).
- **A batch (dataset) run fails visibly** on a reliability error (database unreachable, invalid input) instead of finishing "green" with an empty dataset, so a scheduled run never hides an outage.
- **Backups** every 6 hours, 7-day retention in Cloudflare R2 (AES-256 encrypted); bi-monthly DR drill. The infrastructure is permanent, never "delete-and-rebuild".

#### Platform-usage transparency

The MCP path runs in Apify standby mode.

- **Standby memory:** 1024 MB (measured peak RSS ~52 MB, comfortable headroom).
- **Warm latency profile, p50 / p95** (measured 2026-06-24 against the production standby URL, N=30 per category):
  - cached reads (`lookup_company` / `lookup_companies`): 682 / 727 ms
  - VIES validation (cache hit): 786 / 815 ms
  - cold-spawn (first call after extended idle): ~5900 ms (Apify container provisioning + Node start; affects only the first call)
- **Platform compute:** absorbed in the per-event price, no hidden charges. Standby billing is time-based: the container stays warm for a ~5 minute idle-tail between calls, so the dominant cost is wall-clock standby time, not the sub-second active call.

> The figures above are pinned in `docs/latency-baseline.json` (calibrated 2026-06-24, measured against the production standby URL) and guarded by `tests/latency-baseline.test.ts`.

#### Support

- **Issues or questions:** use the Apify Store contact form on this Actor's page.
- **Other Actors:** browse the [apnoda profile](https://apify.com/apnoda) for Romanian/CEE bureaucratic-data tools.

#### FAQ

**Q: Is the data real-time?**
A: It reflects our cache, refreshed daily from ANAF. Every record carries the freshness annotation (`as_of` / `lag_minutes` / `is_stale`), so your agent knows how fresh the data is and can request a refresh with `max_acceptable_lag_minutes`.

**Q: Can I use the data in a commercial product?**
A: Yes, ANAF data is public. You can't resell the raw data as a competing ANAF API.

**Q: How often is the Actor updated?**
A: Actively maintained. Bug fixes and adaptations to ANAF/VIES API changes within 72 hours for active users.

**Q: How is PFA / sole-trader data handled?**
A: Full public-registry enrichment (legitimate-interest DD basis), with CNP redacted, contact stripped, an optional address-coarsening toggle, and CUI-only input. PFA/II/IF are not under-enriched, a key segment of sub-threshold suppliers.

**Q: What happens if VIES is unavailable?**
A: Per-check `MS_UNAVAILABLE` (with a stale-cache fallback when present), never a batch-level error. You only pay for completed checks.

**Q: How do I control spend?**
A: Pay-per-event, per company returned / per completed check, no subscription. Set per-run and monthly spend limits in Apify Console. NOT\_FOUND CUIs and invalid inputs are not billed.

**Q: How is this different from the free ANAF web form?**
A: Bulk (up to 100/call), scored health flags, MCP-native, cross-border EU VAT validation, and CSV export, in one call, callable by an agent.

*Version 1.0 · Updated June 2026*

***

# Actor input Schema

## `cuis` (type: `array`):

Romanian company tax codes (CUI) to look up. Accepts any common form: "14399840", "RO14399840", or "RO 14399840", the actor normalizes all three. Max 100 CUIs per run; a cache miss triggers a quota-bounded on-demand ANAF fetch.

## `maxAcceptableLagMinutes` (type: `integer`):

Optional hard-staleness bound on the fiscal-status fields. When a cached company's status was last verified longer ago than this, the actor re-fetches it from ANAF (quota-bounded) rather than serving the cached row. Omit to accept the default cache freshness (the daily ANAF status refresh keeps in-universe rows fresh).

## `coarsenNaturalPersonAddress` (type: `boolean`):

When enabled, a natural person's (PFA/II/IF) registered address is narrowed to județ/locality only (street and number dropped). Company (PJ) and public-institution addresses are public commercial-register data and are returned in full regardless. CNP and contact details (phone/fax/email) are never returned in any case. Default off (full registered address, matching ListaFirme/Risco).

## Actor input object example

```json
{
  "cuis": [
    "14399840"
  ],
  "coarsenNaturalPersonAddress": false
}
```

# Actor output Schema

## `companies` (type: `string`):

All company records returned by this run. JSON / CSV / XLSX export is available from the Apify dataset API at the URL below.

# 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 = {
    "cuis": [
        "14399840"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("apnoda/anaf-vies-company-lookup").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 = { "cuis": ["14399840"] }

# Run the Actor and wait for it to finish
run = client.actor("apnoda/anaf-vies-company-lookup").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "cuis": [
    "14399840"
  ]
}' |
apify call apnoda/anaf-vies-company-lookup --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=apnoda/anaf-vies-company-lookup",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Romanian Company Lookup + EU VAT Validation (ANAF + VIES)",
        "description": "Bulk Romanian company lookup from the ANAF v9 registry (fiscal status, VAT-payer flag, CAEN sector, registration state, PFA/II/IF handling) plus EU VAT validation via VIES. CUI-keyed, scored health flags, MCP-native, agent-callable in one round-trip. CNP + contact details stripped per GDPR.",
        "version": "0.1",
        "x-build-id": "sjQK2SRFcxcprcT8n"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/apnoda~anaf-vies-company-lookup/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-apnoda-anaf-vies-company-lookup",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/apnoda~anaf-vies-company-lookup/runs": {
            "post": {
                "operationId": "runs-sync-apnoda-anaf-vies-company-lookup",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/apnoda~anaf-vies-company-lookup/run-sync": {
            "post": {
                "operationId": "run-sync-apnoda-anaf-vies-company-lookup",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "cuis"
                ],
                "properties": {
                    "cuis": {
                        "title": "Company tax codes (CUI)",
                        "maxItems": 100,
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Romanian company tax codes (CUI) to look up. Accepts any common form: \"14399840\", \"RO14399840\", or \"RO 14399840\", the actor normalizes all three. Max 100 CUIs per run; a cache miss triggers a quota-bounded on-demand ANAF fetch.",
                        "items": {
                            "type": "string",
                            "pattern": "^(?:[Rr][Oo]\\s*)?[0-9]{2,10}$"
                        }
                    },
                    "maxAcceptableLagMinutes": {
                        "title": "Max acceptable status lag (minutes)",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Optional hard-staleness bound on the fiscal-status fields. When a cached company's status was last verified longer ago than this, the actor re-fetches it from ANAF (quota-bounded) rather than serving the cached row. Omit to accept the default cache freshness (the daily ANAF status refresh keeps in-universe rows fresh)."
                    },
                    "coarsenNaturalPersonAddress": {
                        "title": "Coarsen natural-person addresses",
                        "type": "boolean",
                        "description": "When enabled, a natural person's (PFA/II/IF) registered address is narrowed to județ/locality only (street and number dropped). Company (PJ) and public-institution addresses are public commercial-register data and are returned in full regardless. CNP and contact details (phone/fax/email) are never returned in any case. Default off (full registered address, matching ListaFirme/Risco).",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
