Find companies by activity
lookup_by_categoryFind companies by what they do, not by name: search Romanian firms by topic or CAEN code, then narrow by county, revenue, headcount, and VAT status.
Instructions
Find companies by what they do, not by name: a curated topic ('software', 'retail'), plain words ('dentists', a CAEN class title; see matched) or CAEN codes ('4321,4322'; 6201 also finds Rev.3 6210). Narrow by county; qualify by revenue, headcount, VAT, main activity. active_only (default) drops dead and ANAF-inactive firms.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Order of the results: 'newest' registrations first (default), 'revenue' (latest filing's turnover, biggest first) or 'employees' (headcount, biggest first); firms without a filing come last. | newest |
| topic | Yes | What the firms do: a curated topic ('software', 'retail'), plain words for a trade ('dentists', 'stomatologie'), a CAEN class title in Romanian or English, or CAEN codes ('6201' or '4321,4322'). Case-, space- and diacritic-insensitive. A number that names another activity in each revision takes a suffix: '4781r3' (Rev.3) or '4781r2' (Rev.2). | |
| county | No | Optional county to narrow to (diacritic-insensitive: 'bucuresti', 'cluj'; a county town such as 'Cluj-Napoca' or a Bucharest sector is read as its county); omit for nationwide. An unknown county is an error (unknown_county) with suggestions, not 0 firms. | |
| fields | No | Optional: keep only these company fields in each row, comma-separated (companyName,cui,county,risk; dotted paths such as risk.level work). Without it the full record is returned. | |
| compact | No | Optional: true keeps a short preset per row (name, CUI, county, city, legal form, risk level and what it did not check, phone, website, latest revenue and headcount, record url). | |
| vat_payer | No | Optional: true keeps VAT-registered firms only, false only non-VAT payers (ANAF data). Omit for both. | |
| legal_form | No | Optional legal form(s) to keep, comma-separated, case-insensitive: 'SRL', 'SA', 'PFA', 'II', or 'SRL,SA' (companies, no sole traders). Default: any form. | |
| active_only | No | Default true: drop firms that are not a lead (struck off, dissolving, in liquidation, insolvent or bankrupt, activity suspended, or ANAF fiscally inactive). false returns every firm. | |
| has_website | No | true keeps only firms with a website on file in the registry (default false). | |
| max_results | No | Maximum number of companies to return (1-100, default 10). | |
| max_revenue | No | Optional maximum net turnover in RON on the latest filing. | |
| min_revenue | No | Optional minimum net turnover in RON on the latest filing (FY2025, else FY2024). Firms without a filing never match a band. | |
| max_employees | No | Optional maximum average headcount on the latest filing. | |
| min_employees | No | Optional minimum average headcount on the latest filing. | |
| main_activity_only | No | Default false: a firm matches when the code is ANY of its authorised activities (ONRC lists a dozen per firm, most never practised). true keeps only firms whose DECLARED main activity is one of the codes (ANAF main CAEN, else the CAEN on the latest filing): fewer, more relevant firms. The Leadgen app's lists use true by default. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| asOf | No | What to cite: registry (ONRC snapshot date), financialYear (fiscal year of the figures), anaf (day of the ANAF data), snapshot, published, source. | |
| sort | No | The order of results: newest, revenue or employees. | |
| error | No | Set only when there is no answer (empty_query, invalid_cui, data_unavailable, plan_required ...); such a call is not counted. | |
| label | No | Human label of what was matched. | |
| query | No | The topic as given. | |
| topic | No | The curated topic matched, if any. | |
| total | No | Rows returned in this answer (at most max_results), not the size of the match set: a full page (total == max_results) may have more; narrow the filters or raise max_results. | |
| appUrl | No | The same list opened in the Leadgen app (CAEN codes, county, legal form, active and main-activity filters), to share with the user; null when the app cannot open it (more than 10 codes, a legal form it does not offer). | |
| county | No | The county filter, if any. | |
| fields | No | The company fields kept when fields or compact trimmed the rows. | |
| source | No | Data source: onrc (registry) or mfp (Ministry of Finance filings). | |
| filters | No | The filters applied (legalForm, activeOnly, revenue and headcount bands, vatPayer, mainActivityOnly ...). | |
| matched | No | How plain words were read: by, niche or class title, codes. | |
| message | No | A sentence for the caller. | |
| results | No | The company records, best first. | |
| warnings | No | Notes on how the request was read (a clamped limit, a widened CAEN code, an ignored field). | |
| caenCodes | No | The CAEN codes searched, when given or derived as codes. | |
| caenNames | No | The CAEN codes as asked, named: [{code, title (Romanian), titleEn}]. | |
| truncated | No | true when max_results was cut to the list cap (and the list is full). | |
| candidates | No | When the words fit several activities (ambiguous_topic): the ones to choose from. | |
| codesAdded | No | CAEN Rev.2/Rev.3 counterparts added to the search. | |
| matchTotal | No | How many firms the whole list holds with every filter (active_only on; null when off): exact, or estimated when matchTotalApproximate is true. | |
| attribution | No | The credit line to keep when redistributing the data (CC BY 4.0). | |
| availableTopics | No | The curated topic ids, when the topic is unknown or ambiguous. | |
| matchTotalMargin | No | The 99% margin of an estimated matchTotal. | |
| availableTopicNames | No | Each curated topic id with its name, e.g. {"agriculture": "Agriculture & Food"}, next to availableTopics. | |
| inactiveFilteredOut | No | Firms removed by active_only (null when off). | |
| matchTotalApproximate | No | true when matchTotal is estimated (matchTotalMargin: its 99% margin). | |
| inactiveFilteredOutApproximate | No | true when that count is estimated. |