Romanian Business Directory Scraper
Pricing
from $10.00 / 1,000 result extracteds
Romanian Business Directory Scraper
Scrape Romanian business directories (listafirme.ro). Extract company names, CUI, addresses, cities, CAEN codes, and trade register numbers.
Pricing
from $10.00 / 1,000 result extracteds
Rating
0.0
(0)
Developer
Oaida Adrian
Maintained by CommunityActor stats
0
Bookmarked
8
Total users
4
Monthly active users
2 days ago
Last modified
Categories
Share
Romanian Company Lookup by CUI/CIF & Business Directory Scraper
Look up a Romanian company by its CUI/CIF (fiscal code), or find companies by keyword, and get the clean CUI, VAT payer status, trade register number (J), CAEN code and activity, address, county, website and founding date, from the listafirme.eu directory. No API key needed.
For: KYC and supplier vetting, CRM enrichment, and B2B lead-generation teams that need Romanian companies with their official identifiers.
Try it: {"cui": ["14399840", "RO 37378251", "11291045"]} returns one record per company.
| Company | CUI | VAT payer | Trade register | CAEN / activity | County | Website | Founded |
|---|---|---|---|---|---|---|---|
| DANTE INTERNATIONAL SA | 14399840 | yes | J2002000372404 | 4754 - Retail sale of electrical household appliances | Bucuresti | emag.ro | 2002-01-23 |
| BULL SOFTWARE SRL | 37378251 | yes | J2017000878221 | 6210 - Computer programming activities | Iasi | bull-software.ro | 2017-04-12 |
| AROBS TRANSILVANIA SOFTWARE SA | 11291045 | not stated | J1998001845122 | 6210 - Computer programming activities | Cluj | arobs.com | 1998-11-24 |
Real output from this version's code, run on 15 Oct 2026 with the input above.
Price: $0.01 per company, plus a $0.01 run start at the default 1 GB memory. About $10.02 per 1,000 companies in one run ($10.00 in records + $0.01 in platform dataset-item fees + $0.01 start).
Got the data you needed? A 30-second review on the Apify Store helps other teams find this Actor.
What you get
- π Lookup by identifier: pass one or many CUI/CIF codes (with or without
RO, dots or spaces). Every code is checked against the CUI check digit first. - π·π΄ Official identifiers: a clean digits-only CUI (fiscal code), the CUI exactly as published (
cuiRaw), VAT payer status and the trade register number (J-number), ready for VIES/ANAF cross-checks - π Contact data β phone, email, website where published
- π Location β full address, city, county (judeΘ)
- π·οΈ Classification: predominant CAEN code (
caenCode) and activity (category), plus founding date - π Fresh data β scraped live at run time, with an ISO timestamp per record
Input
Look up by identifier:
{ "cui": ["14399840", "RO 37378251"] }
or search by keyword:
{"searchTerms": ["restaurant", "constructii", "software"],"maxResults": 100,"extractDetails": true}
| Field | Type | Default | Description |
|---|---|---|---|
cui | string or array | none | One or more CUI/CIF codes to look up directly. Accepts "14399840", "RO14399840", "RO 14.399.840", an array, or one string with codes separated by commas, spaces or new lines. When set, searchTerms is ignored. |
searchTerms | array | ["restaurant"] | Keywords to search: industries, company names, activities (e.g. design, transport, panificatie) |
maxResults | integer | 100 | Maximum companies across all search terms (also caps the number of CUIs resolved) |
extractDetails | boolean | true | Visit each company's page for CUI/VAT status, CAEN code, trade register, phone, email, website and founding date |
With extractDetails off you get the fast search-result fields only (name, CUI, address). That is useful for large list building. Detail fetches are paced to respect the directory's rate limits.
A blocked detail fetch never looks like missing data. The company page sits behind a Cloudflare challenge and a run can occasionally be refused it. Every record therefore carries detailsFetched: when it is false, an empty category, caenCode or vatPayer means the fetch was blocked, not that the company lacks the field, and detailsError says why. Treat those fields as unknown on such a record (or re-run it) rather than as absent.
How CUI lookup works: each code is validated (optional RO prefix; dots, spaces and dashes removed; check digit verified). Each valid code is then sent to listafirme.eu's own search (POST https://listafirme.eu/search.asp, searchfor=<CUI>). The result is accepted only if the company's directory URL ends in exactly that CUI (/dante-international-sa-14399840/).
Errors are per input, never a silent empty result. An invalid code, or a valid code that the directory does not know, becomes its own dataset item, for example:
{"inputCui": "14399841", "error": "Invalid CUI/CIF '14399841': check digit is 1, expected 0 (typo in the number?)"}{"inputCui": "99999992", "error": "CUI is valid but no company with this CUI was found on listafirme.eu"}
Error items are not charged as companies. If none of the supplied codes is valid, the run fails with the list of errors.
Output
One dataset item per company (real record, 15 Oct 2026):
{"companyName": "BULL SOFTWARE SRL","cui": "37378251","cuiRaw": "RO 37378251 VAT payer (invoice accounting)","vatPayer": true,"tradeRegister": "J2017000878221","address": "Str. Lujerului Cod 707406","city": "Sat Breazu","county": "Iasi","phone": "-","email": "contact@bull-software.com adi@bull-software.com","website": "https://bull-software.ro","category": "6210 - Computer programming activities","caenCode": "6210","caenRaw": "6210 Rev. 3 (equivalent to 6201 Rev. 2)","foundedDate": "2017-04-12 (9 years)","detailUrl": "https://listafirme.eu/bull-software-srl-37378251/","sourceUrl": "https://listafirme.eu/search.asp","scrapedAt": "2026-10-15T11:52:30.126872+00:00","inputCui": "37378251"}
| Field | Meaning |
|---|---|
cui | CUI/CIF, digits only ("37378251") |
cuiRaw | The CUI cell exactly as the directory shows it, e.g. "RO 37378251 VAT payer (invoice accounting)" |
vatPayer | true / false when the page states it (the RO prefix, the "VAT payer" label, or "registered for VAT" in the company description); null when the page does not say |
category | Predominant CAEN code and activity, e.g. "6210 - Computer programming activities" |
caenCode | Predominant CAEN code as published (4 digits) |
caenRaw | CAEN cell including the revision, e.g. "6210 Rev. 3 (equivalent to 6201 Rev. 2)" |
inputCui | CUI-lookup mode only: the input code this record (or error) belongs to |
Fields not published for a company are returned as empty strings, so records always have the same shape and CSV/Excel exports stay clean. category, caenCode and vatPayer need extractDetails: true.
Use cases
- B2B lead generation β build targeted Romanian prospect lists by industry and county, with direct contact details
- KYC / supplier vetting: resolve a CUI to name, J-number, VAT status and CAEN activity, or a company name to its CUI
- Market research β measure business density per sector or region; track founding dates for market-age analysis
- CRM enrichment: feed your CUI column in as
cuiand get the address, CAEN activity and website back - Local SEO & citations β assemble accurate name/address/phone data for Romanian businesses
Run it on a schedule or from your code
Create a Schedule in Apify Console to refresh your lists weekly, or call the Actor from anywhere:
curl -X POST "https://api.apify.com/v2/acts/darknezz~ro-business-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"searchTerms": ["software cluj"], "maxResults": 50}'
Look up known companies by CUI the same way:
curl -X POST "https://api.apify.com/v2/acts/darknezz~ro-business-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"cui": "14399840, RO 37378251"}'
The call returns the scraped companies directly as JSON. Every run's dataset can also be exported as CSV, Excel, XML or RSS from Apify Console.
From Python with the official SDK:
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("darknezz/ro-business-scraper").call(run_input={"searchTerms": ["software cluj", "transport marfa"],"maxResults": 50, "extractDetails": True})for company in client.dataset(run["defaultDatasetId"]).iterate_items():print(company["companyName"], company["cui"], company["city"])
Pricing
Pay-per-event, billed by Apify:
| Event | Price |
|---|---|
business-extracted (one per company returned) | $0.01 |
apify-default-dataset-item (platform fee per dataset item) | $0.00001 |
apify-actor-start (per run, per GB of memory) | $0.01 at the default 1 GB |
- 1,000 companies in one run: about $10.02 ($10.00 + $0.01 + $0.01).
- A 3-company CUI lookup costs about $0.04.
- The start fee scales with memory: if you raise a run to 4 GB, it starts at $0.04 instead of $0.01. The default 1 GB has been verified to run the browser-based detail extraction.
FAQ
Which directory does it scrape? listafirme.eu β a public Romanian company directory. Legacy startUrls inputs from older versions are still accepted; search terms are extracted from them automatically.
Can I look up a company by CUI/CIF? Yes. Pass it in cui (one code or many). Codes are checked against the CUI check digit. An invalid or unknown code comes back as an error item for that input instead of an empty result.
Is the CUI always present? Yes. It is part of the company's directory URL, and cui is always digits only. Trade register, phone and email depend on what the directory publishes and require extractDetails: true.
Can I search by CAEN code? Keyword search matches names and activity words, so use the activity name (e.g. panificatie, transport marfa) rather than the numeric code. Every record with details carries its predominant caenCode, so you can filter on the code afterwards.
Are financials included? No. This Actor returns identity and contact data. Pass the CUI to Romanian Financial Statements by CUI for turnover, profit and headcount.
Is this legal? The Actor reads publicly listed business information only, at a polite request rate. Company registry data (CUI, J-number, address) is public by law in Romania. You are responsible for GDPR compliance in how you use contact data downstream.
Can I search by county? The directory itself has no county filter, but you can post-filter the results β county is a first-class field on every record, and city narrows within it.
Why is phone empty on some records? extractDetails: true must be set to visit each company page; and even then, some companies simply don't publish a phone number on the directory. Email and website behave the same way.
Why are some phone/email values partial (e.g. 021-210.10 - - 8 removed)? listafirme.eu now gates full contact digits behind a site login/"Access package". Anonymous visitors β including this Actor's browser β see a masked preview with an N removed marker. The Actor returns exactly what the directory publishes publicly; the CUI, trade register, address and website domain are always complete.
How many results can I get? maxResults is a soft cap across all search terms; the Actor stops once it reaches it. For very large list-building runs, keep extractDetails: false for speed and run detail extraction on a second pass.
Limitations
- Contact fields reflect the directory's public mask. listafirme.eu gates full phone/email digits behind a site login/"Access package"; this Actor returns what anonymous visitors can see β complete CUI, trade register, address, website domain and founded date, but phone/email may arrive masked with an
N removedmarker. Full digits require the directory's paid package, which this Actor does not use. - No financial statements. The Actor returns identity and contact data only. For bilanΘuri (turnover, profit, assets) pair the CUI with ANAF's public webservice β sibling actor
darknezz/ro-financial-statementsdoes exactly that per CUI. - Lookup by CUI or keyword, not a full registry dump. The directory has no county or CAEN-code filter on its side, so filter results by the
county,cityandcaenCodefields instead. - VAT status is only what the directory states.
vatPayerisnullwhen the page shows neither theRO/"VAT payer" label nor a VAT sentence. For a legally binding answer, check ANAF's VAT register. - Live directory dependency. The Actor scrapes listafirme.eu at run time; if the site changes its markup or hardens anti-bot protections, detail extraction may degrade until a maintenance build ships (the detail fetch already runs through a real browser to pass Cloudflare's check).
- Not a bulk registry export. For a complete ONRC-style register, use the official monthly dumps; this Actor targets search-driven lead lists and enrichment.
Related Romanian company data tools
| Step | Tool | Input β output |
|---|---|---|
| 2. Check the numbers | Romanian Financial Statements by CUI | CUI β turnover, net profit, assets, employees per year |
| 3. See their public contracts | Romanian Public Contracts Scraper | supplier CUI / keyword / CPV / authority β tenders, winners + winner CUI, RON values |
| 4. Watch for changes | Romanian Registry Change Monitor | CAEN code β new firms, deregistrations, status changes (daily) |
All of these tools return the company CUI, so results join on that field.
Got the data you needed? A 30-second review on the Apify Store helps other teams find this Actor.