Romanian Company Lookup + EU VAT Validation (ANAF + VIES)
Pricing
from $60.00 / 1,000 company enriched (primary)s
Romanian Company Lookup + EU VAT Validation (ANAF + VIES)
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.
Pricing
from $60.00 / 1,000 company enriched (primary)s
Rating
0.0
(0)
Developer
Apnoda
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
a day ago
Last modified
Categories
Share
Verificare Firme România + Validare TVA UE (ANAF + VIES)
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).
Ce face acest Actor
Caută firme românești după CUI în registrul ANAF v9 (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
- Lipește una sau mai multe CUI-uri în câmpul
cuis(ex.:["14399840", "RO 38150891"]) și pornește Actorul. - Exportă ca CSV și deschide în Excel / Google Sheets.
- 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:
{"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.
{"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:
{"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 invalid2 firme fiscal_inactive: true → necesită atenție înainte de contractare1 firmă recently_radiata: true → radiată în ultimele 12 luni5 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_minutespoate 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_sectionnull: codul CAEN brut + CUI sunt întotdeauna returnate. - Disponibilitatea VIES per stat membru este uneori instabilă →
MS_UNAVAILABLEcu 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_listreflectă 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);falsenu î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âmpurilearrears_*suntnull(necunoscut, nu negativ).
Sursa datelor și aspecte legale
- ANAF v9 (webservicesp.anaf.ro/PlatitorTvaRest): 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ționalcoarsen_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.
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)
- citiri din cache (
- 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 detests/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 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).
What this Actor does
Looks up Romanian companies by CUI in the ANAF v9 registry (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;
nullin 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
- Paste one or more CUIs into the
cuisfield (e.g.["14399840", "RO 38150891"]) and start the Actor. - Export as CSV and open in Excel / Google Sheets.
- 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:
{"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.
{"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:
{"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 input2 companies fiscal_inactive: true → needs attention before contracting1 company recently_radiata: true → struck off in the last 12 months5 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_minutescan 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_UNAVAILABLEwith 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_listreflects ANAF's quarterly list of significant tax arrears (above 500k / 250k / 100k lei thresholds by taxpayer size, published with a ~1-month lag);falsedoes 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, thearrears_*fields arenull(unknown, not negative).
Data source and legal
- ANAF v9 (webservicesp.anaf.ro/PlatitorTvaRest): 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-incoarsen_natural_person_addresstoggle (→ 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.
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)
- cached reads (
- 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 bytests/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 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