Romanian Business Directory Scraper avatar

Romanian Business Directory Scraper

Pricing

from $10.00 / 1,000 result extracteds

Go to Apify Store
Romanian Business Directory Scraper

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

Oaida Adrian

Maintained by Community

Actor stats

0

Bookmarked

8

Total users

4

Monthly active users

2 days ago

Last modified

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.

CompanyCUIVAT payerTrade registerCAEN / activityCountyWebsiteFounded
DANTE INTERNATIONAL SA14399840yesJ20020003724044754 - Retail sale of electrical household appliancesBucurestiemag.ro2002-01-23
BULL SOFTWARE SRL37378251yesJ20170008782216210 - Computer programming activitiesIasibull-software.ro2017-04-12
AROBS TRANSILVANIA SOFTWARE SA11291045not statedJ19980018451226210 - Computer programming activitiesClujarobs.com1998-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
}
FieldTypeDefaultDescription
cuistring or arraynoneOne 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.
searchTermsarray["restaurant"]Keywords to search: industries, company names, activities (e.g. design, transport, panificatie)
maxResultsinteger100Maximum companies across all search terms (also caps the number of CUIs resolved)
extractDetailsbooleantrueVisit 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"
}
FieldMeaning
cuiCUI/CIF, digits only ("37378251")
cuiRawThe CUI cell exactly as the directory shows it, e.g. "RO 37378251 VAT payer (invoice accounting)"
vatPayertrue / 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
categoryPredominant CAEN code and activity, e.g. "6210 - Computer programming activities"
caenCodePredominant CAEN code as published (4 digits)
caenRawCAEN cell including the revision, e.g. "6210 Rev. 3 (equivalent to 6201 Rev. 2)"
inputCuiCUI-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 cui and 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 ApifyClient
client = 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:

EventPrice
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 removed marker. 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-statements does 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, city and caenCode fields instead.
  • VAT status is only what the directory states. vatPayer is null when the page shows neither the RO/"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.
StepToolInput β†’ output
2. Check the numbersRomanian Financial Statements by CUICUI β†’ turnover, net profit, assets, employees per year
3. See their public contractsRomanian Public Contracts Scrapersupplier CUI / keyword / CPV / authority β†’ tenders, winners + winner CUI, RON values
4. Watch for changesRomanian Registry Change MonitorCAEN 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.