Guide · last verified 2026-10-10
How to check Romanian company VAT, inactive and e-Factura status by CUI in bulk
Short answer: ANAF publishes a free public web service that returns VAT registration, inactive status, split VAT and RO e-Factura registry data for a Romanian CUI. You can call it yourself (up to 100 CUIs per request, one request per second), or run the Clearsource actor on Apify, which batches, retries and returns one JSON record per CUI with its source and retrieval time.
What the status fields mean
| Question | Field in the actor output | ANAF source field |
|---|---|---|
| Is the company VAT-registered? | vat.registered, vat.periods[] | scpTVA, perioade_TVA |
| Does it use VAT on cash? | vat_on_cash | inregistrare_RTVAI |
| Is it an inactive taxpayer, or struck off? | inactive (deregistered_on = struck-off date) | dataRadiere and inactive fields |
| Is split VAT applied? | split_vat | inregistrare_SplitTVA |
| Is it in the RO e-Factura registry? | e_invoice_registered | statusRO_e_Factura |
More on single flags: inactive taxpayers and VAT deduction and the RO e-Factura registry flag.
All statuses are as at the query date, as ANAF answers for that date. Insolvency is not part of this service and is always null in the actor output.
Way 1: call ANAF's web service yourself (free)
- Read the ANAF web service documentation (version 9).
- POST a JSON array of objects with a numeric
cuiand adatadate (YYYY-MM-DD) tohttps://webservicesp.anaf.ro/api/PlatitorTvaRest/v9/tva. Strip theROprefix and any spaces or dots first. - Send at most 100 CUIs per request and at most one request per second, as the documentation states.
- Read the
foundandnotFoundlists in the answer.
curl -s -X POST https://webservicesp.anaf.ro/api/PlatitorTvaRest/v9/tva \
-H 'Content-Type: application/json' \
-d '[{"cui": 16054368, "data": "2026-10-10"}]'
The request shape comes from the ANAF documentation. What you must still build yourself for a large list: batching, retries and backoff, normalising CUIs, a stable output format, and storing the retrieval time.
Way 2: run the Apify actor
- Open Romania CUI Status Check on the Apify Store.
- Paste your CUIs (with or without
RO) into the input. Up to 10,000 CUIs per run in lookup mode. - Optionally set
queryDatefor a past date, ordryRun: trueto validate the list without sending anything to ANAF and without being charged. - Start the run and download the dataset as JSON, CSV or Excel, or call it by API.
Input
{ "mode": "lookup", "cuis": ["RO16054368", "9900000010"] }
Output (one record, shortened; the example is synthetic, 9900000010 is a test code)
{
"record_type": "ro-company-status",
"cui": "9900000010",
"query_date": "2026-10-05",
"found": true,
"name": "TEST SINTETIC SRL",
"entity_kind": "legal-entity",
"e_invoice_registered": true,
"vat": { "registered": true, "periods": [{ "from": "2004-03-01", "to": null }] },
"vat_on_cash": { "active": false },
"inactive": { "is_inactive": false, "inactivated_on": null },
"split_vat": { "active": false },
"insolvency": null,
"provenance": {
"source_url": "https://webservicesp.anaf.ro/api/PlatitorTvaRest/v9/tva",
"retrieved_at": "2026-10-05T04:12:03.512Z",
"record_hash": "sha256:..."
}
}
A CUI that ANAF does not know comes back with "found": false and every status field null. Invalid or duplicate CUIs are listed in INVALID_INPUTS and not charged.
Price
Pay per event on Apify (README of 2026-10-10): $0.003 per CUI answered by ANAF, found or not found; invalid, duplicate or unavailable CUIs, failed requests and dry runs are not charged. For example, 500 CUIs looked up once cost $1.50. Apify also charges a start event, by default $0.00005 per run.
Watch mode: be told when a status changes
With mode: "watch" the actor re-checks your list on the schedule you set in Apify (daily or weekly) and outputs a record only when VAT, inactive, split-VAT or e-Factura status has changed. The first run stores a baseline and emits nothing.
- Up to 5,000 CUIs per watch list; each company is queried at most once per calendar day (Europe/Bucharest).
- State is kept in your own Apify account, in a key-value store you can delete (
resetWatch: true). - Price: $0.001 per company re-checked and $0.01 per change record. Watching 500 companies daily is about $15 per month plus $0.01 per change.
- Not real-time, not a monitor of all companies, no insolvency, and sole-trader businesses (PFA and similar) are not watched.
{ "mode": "watch", "cuis": ["RO16054368", "9900000010"] }
Frequently asked questions
Is the actor an official ANAF product?
No. It is not affiliated with or endorsed by ANAF. Its output is not official or certified; the ANAF response is authoritative. Check ANAF before relying on a status for a legal or tax decision.
Does it tell me whether a company is insolvent?
No. ANAF's version 9 service has no insolvency field, and the insolvency bulletin is free only after login, so the actor does not use it. insolvency is always null.
How fast is it?
ANAF allows one request per second. All users of the actor share one queue spaced 1.5 seconds apart with 100 CUIs per request, so a run may wait when others are running. Limits per run: 10,000 CUIs in lookup, 5,000 in watch, 55 minutes.
What about sole traders?
For sole traders (PFA, II, IF, liberal professions) the street, number, details and postal code of the address are removed, and they are not watched. Phone, fax and IBAN are never output. See the privacy notice; objections to support@ppftec.com are answered within 24 hours.
Is it real-time?
No. Each record carries the time it was retrieved from ANAF (provenance.retrieved_at) and the query date it refers to.
Sources
- ANAF web service documentation, PlatitorTvaRest v9
- Actor page on the Apify Store (prices and limits as in its README, 2026-10-10)
Information only, not legal or tax advice. Terms: terms of use.