Skip to main content
Glama

Find companies by activity

lookup_by_category
Read-onlyIdempotent

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; filter by revenue, headcount, VAT, main activity, registration date (registered_since/registered_until). active_only (default) drops dead and ANAF-inactive companies.

Input Schema

NameRequiredDescriptionDefault
sortNoOrder of the results: 'newest' registrations first (default), 'revenue' (latest filing's turnover, biggest first) or 'employees' (headcount, biggest first); companies without a filing come last.newest
topicYesWhat the companies 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).
countyNoOptional 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 companies.
fieldsNoOptional: 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.
compactNoOptional: 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_payerNoOptional: true keeps VAT-registered companies only, false only non-VAT payers (ANAF data). Omit for both.
legal_formNoOptional legal form(s) to keep, comma-separated, case-insensitive: 'SRL', 'SA', 'PFA', 'II', or 'SRL,SA' (companies, no sole traders). Default: any form.
active_onlyNoDefault true: drop companies that are not a lead (struck off, dissolving, in liquidation, insolvent or bankrupt, activity suspended, or ANAF fiscally inactive). false returns every company.
has_websiteNotrue keeps only companies with a website on file in the registry (default false).
max_resultsNoMaximum number of companies to return (1-100, default 10).
max_revenueNoOptional maximum net turnover in RON on the latest filing.
min_revenueNoOptional minimum net turnover in RON on the latest filing (FY2025, else FY2024). Companies without a filing never match a band.
max_employeesNoOptional maximum average headcount on the latest filing.
min_employeesNoOptional minimum average headcount on the latest filing.
registered_sinceNoOptional ISO date 'YYYY-MM-DD': keep only companies registered on or after that day, inclusive, on the registry date (firme.data_inmatriculare).
registered_untilNoOptional ISO date 'YYYY-MM-DD': keep only companies registered on or before that day, inclusive. With registered_since, a window.
main_activity_onlyNoDefault false: a company matches when the code is ANY of its authorised activities (ONRC lists a dozen per company, most never practised). true keeps only companies whose DECLARED main activity is one of the codes (ANAF main CAEN, else the CAEN on the latest filing): fewer, more relevant companies. The Leadgen app's lists use true by default.

Output Schema

NameRequiredDescriptionDefault
asOfNoWhat to cite: registry (ONRC snapshot date), financialYear (fiscal year of the figures), anaf (day of the ANAF data), snapshot, published, source.
sortNoThe order of results: newest, revenue or employees.
errorNoSet only when there is no answer (empty_query, invalid_cui, data_unavailable, plan_required ...); such a call is not counted.
labelNoHuman label of what was matched.
queryNoThe topic as given.
topicNoThe curated topic matched, if any.
totalNoRows 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. The same as returned; the size of the whole list is matchTotal.
appUrlNoThe 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).
countyNoThe county filter, if any.
fieldsNoThe company fields kept when fields or compact trimmed the rows.
sourceNoData source: onrc (registry) or mfp (Ministry of Finance filings).
filtersNoThe filters applied (legalForm, activeOnly, revenue and headcount bands, vatPayer, mainActivityOnly ...).
matchedNoHow plain words were read: by, niche or class title, codes.
messageNoA sentence for the caller.
resultsNoThe company records, best first.
returnedNoRows in results. Every list answer carries it with this one meaning.
warningsNoNotes on how the request was read (a clamped limit, a widened CAEN code, an ignored field).
caenCodesNoThe CAEN codes searched, when given or derived as codes.
caenNamesNoThe CAEN codes as asked, named: [{code, title (Romanian), titleEn}].
truncatedNotrue when max_results was cut to the list cap (and the list is full).
candidatesNoWhen the words fit several activities (ambiguous_topic): the ones to choose from.
codesAddedNoCAEN Rev.2/Rev.3 counterparts added to the search.
matchTotalNoHow many companies the whole list holds with every filter (active_only on; null when off): exact, or estimated when matchTotalApproximate is true.
attributionNoThe credit line to keep when redistributing the data (CC BY 4.0).
warningDetailsNoThe warnings that have a machine-readable form (the CAEN Rev.2/Rev.3 notes): [{code, params, message}], message the same English line as in warnings; null when none.
availableTopicsNoThe curated topic ids, when the topic is unknown or ambiguous.
matchTotalMarginNoThe 99% margin of an estimated matchTotal.
availableTopicNamesNoEach curated topic id with its name, e.g. {"agriculture": "Agriculture & Food"}, next to availableTopics.
inactiveFilteredOutNoCompanies removed by active_only (null when off).
matchTotalApproximateNotrue when matchTotal is estimated (matchTotalMargin: its 99% margin).
inactiveFilteredOutApproximateNotrue when that count is estimated.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / registered_since
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Optional ISO date 'YYYY-MM-DD': keep only companies registered on or after that day, inclusive, on the registry date (firme.data_inmatriculare).",
      +  "title": "Registered Since"
      +}
    • addedInput schema / properties / registered_until
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Optional ISO date 'YYYY-MM-DD': keep only companies registered on or before that day, inclusive. With registered_since, a window.",
      +  "title": "Registered Until"
      +}
  2. Changed12 schema fields changed
    • changedInput schema / properties / active_only / description
      Previous value: -"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."New value: +"Default true: drop companies that are not a lead (struck off, dissolving, in liquidation, insolvent or bankrupt, activity suspended, or ANAF fiscally inactive). false returns every company."
    • changedInput schema / properties / county / description
      Previous value: -"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."New value: +"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 companies."
    • changedInput schema / properties / has_website / description
      Previous value: -"true keeps only firms with a website on file in the registry (default false)."New value: +"true keeps only companies with a website on file in the registry (default false)."
    • changedInput schema / properties / main_activity_only / description
      Previous value: -"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."New value: +"Default false: a company matches when the code is ANY of its authorised activities (ONRC lists a dozen per company, most never practised). true keeps only companies whose DECLARED main activity is one of the codes (ANAF main CAEN, else the CAEN on the latest filing): fewer, more relevant companies. The Leadgen app's lists use true by default."
    • changedInput schema / properties / min_revenue / description
      Previous value: -"Optional minimum net turnover in RON on the latest filing (FY2025, else FY2024). Firms without a filing never match a band."New value: +"Optional minimum net turnover in RON on the latest filing (FY2025, else FY2024). Companies without a filing never match a band."
    • changedInput schema / properties / sort / description
      Previous value: -"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."New value: +"Order of the results: 'newest' registrations first (default), 'revenue' (latest filing's turnover, biggest first) or 'employees' (headcount, biggest first); companies without a filing come last."
    • changedInput schema / properties / topic / description
      Previous value: -"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)."New value: +"What the companies 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)."
    • changedInput schema / properties / vat_payer / description
      Previous value: -"Optional: true keeps VAT-registered firms only, false only non-VAT payers (ANAF data). Omit for both."New value: +"Optional: true keeps VAT-registered companies only, false only non-VAT payers (ANAF data). Omit for both."
    • changedOutput schema / description
      Previous value: -"A lead list: firms in an activity, newest registration first (or by turnover / headcount: sort)."New value: +"A lead list: companies in an activity, newest registration first (or by turnover / headcount: sort)."
    • changedOutput schema / properties / inactiveFilteredOut / description
      Previous value: -"Firms removed by active_only (null when off)."New value: +"Companies removed by active_only (null when off)."
    • changedOutput schema / properties / matchTotal / description
      Previous value: -"How many firms the whole list holds with every filter (active_only on; null when off): exact, or estimated when matchTotalApproximate is true."New value: +"How many companies the whole list holds with every filter (active_only on; null when off): exact, or estimated when matchTotalApproximate is true."
    • changedOutput schema / properties / results / items / description
      Previous value: -"A company record: companyName, cui, registrationCode, registrationDate (DD/MM/YYYY), legalForm, euid, address (a sole trader's PFA/II/IF locality only in an answer listing several firms, with addressScope: locality), county, city, website, phone (+ phoneSource: ANAF, declared by the taxpayer), caenActivities [{code, activity (RO), activityEn}], directors, representatives [{name, role}], status [{code, name}], latestFinancials {year, revenue, netResult, employees; RON}, anaf {mainCaen, vatPayer, eFactura, inactive}, risk {level, label, reasons, isLead}, source, asOf, url (the firm's public record page to share with the user; null for sole traders and other natural persons), and score/match on name searches. With fields or compact, only the requested keys (compact keeps url)."New value: +"A company record: companyName, cui, registrationCode, registrationDate (DD/MM/YYYY), legalForm, euid, address (a sole trader's PFA/II/IF locality only in an answer listing several companies, with addressScope: locality), county, city, website, phone as declared (+ phoneSource: ANAF, declared by the taxpayer; phoneStatus: valid, corrected with phoneSuggestion, or unverified: check before calling), caenActivities [{code, activity (RO), activityEn}], directors, representatives [{name, role}], status [{code, name}], latestFinancials {year, revenue, netResult, employees; RON}, anaf {mainCaen, vatPayer, eFactura, inactive}, risk {level, label, reasons, isLead}, source, asOf, url (the company's public record page to share with the user; null for sole traders and other natural persons), and score/match on name searches. With fields or compact, only the requested keys (compact keeps url)."
  3. Changed1 schema field changed
    • addedOutput schema / properties / warningDetails
      Added value: +{
      +  "description": "The warnings that have a machine-readable form (the CAEN Rev.2/Rev.3 notes): [{code, params, message}], message the same English line as in warnings; null when none.",
      +  "items": {
      +    "type": "object"
      +  },
      +  "type": [
      +    "array",
      +    "null"
      +  ]
      +}
  4. Changed1 schema field changed
    • changedOutput schema / properties / results / items / description
      Previous value: -"A company record: companyName, cui, registrationCode, registrationDate (DD/MM/YYYY), legalForm, euid, address, county, city, website, phone, caenActivities [{code, activity (RO), activityEn}], directors, representatives [{name, role}], status [{code, name}], latestFinancials {year, revenue, netResult, employees; RON}, anaf {mainCaen, vatPayer, eFactura, inactive}, risk {level, label, reasons, isLead}, source, asOf, url (the firm's public record page to share with the user; null for sole traders and other natural persons), and score/match on name searches. With fields or compact, only the requested keys (compact keeps url)."New value: +"A company record: companyName, cui, registrationCode, registrationDate (DD/MM/YYYY), legalForm, euid, address (a sole trader's PFA/II/IF locality only in an answer listing several firms, with addressScope: locality), county, city, website, phone (+ phoneSource: ANAF, declared by the taxpayer), caenActivities [{code, activity (RO), activityEn}], directors, representatives [{name, role}], status [{code, name}], latestFinancials {year, revenue, netResult, employees; RON}, anaf {mainCaen, vatPayer, eFactura, inactive}, risk {level, label, reasons, isLead}, source, asOf, url (the firm's public record page to share with the user; null for sole traders and other natural persons), and score/match on name searches. With fields or compact, only the requested keys (compact keeps url)."
  5. Changed2 schema fields changed
    • addedOutput schema / properties / returned
      Added value: +{
      +  "description": "Rows in results. Every list answer carries it with this one meaning.",
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / total / description
      Previous value: -"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."New value: +"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. The same as returned; the size of the whole list is matchTotal."
  6. Changed9 schema fields changed
    • changedInput schema / properties / main_activity_only / description
      Previous value: -"true keeps firms whose declared main activity (ANAF main CAEN, else the CAEN on the latest filing) is one of the codes, instead of any authorised activity (default false)."New value: +"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."
    • addedInput schema / properties / sort
      Added value: +{
      +  "default": "newest",
      +  "description": "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.",
      +  "enum": [
      +    "newest",
      +    "revenue",
      +    "employees"
      +  ],
      +  "title": "Sort",
      +  "type": "string"
      +}
    • changedOutput schema / description
      Previous value: -"A lead list: firms in an activity, newest registration first."New value: +"A lead list: firms in an activity, newest registration first (or by turnover / headcount: sort)."
    • addedOutput schema / properties / caenNames
      Added value: +{
      +  "description": "The CAEN codes as asked, named: [{code, title (Romanian), titleEn}].",
      +  "type": [
      +    "array",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / matchTotal
      Added value: +{
      +  "description": "How many firms the whole list holds with every filter (active_only on; null when off): exact, or estimated when matchTotalApproximate is true.",
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / matchTotalApproximate
      Added value: +{
      +  "description": "true when matchTotal is estimated (matchTotalMargin: its 99% margin).",
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / matchTotalMargin
      Added value: +{
      +  "description": "The 99% margin of an estimated matchTotal.",
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / results / items / description
      Previous value: -"A company record: companyName, cui, registrationCode, registrationDate (DD/MM/YYYY), legalForm, euid, address, county, city, website, phone, caenActivities [{code, activity}], directors, status [{code, name}], latestFinancials {year, revenue, netResult, employees; RON}, anaf {mainCaen, vatPayer, eFactura, inactive}, risk {level, label, reasons, isLead}, source, asOf, url (the firm's public record page to share with the user; null for sole traders and other natural persons), and score/match on name searches. With fields or compact, only the requested keys (compact keeps url)."New value: +"A company record: companyName, cui, registrationCode, registrationDate (DD/MM/YYYY), legalForm, euid, address, county, city, website, phone, caenActivities [{code, activity (RO), activityEn}], directors, representatives [{name, role}], status [{code, name}], latestFinancials {year, revenue, netResult, employees; RON}, anaf {mainCaen, vatPayer, eFactura, inactive}, risk {level, label, reasons, isLead}, source, asOf, url (the firm's public record page to share with the user; null for sole traders and other natural persons), and score/match on name searches. With fields or compact, only the requested keys (compact keeps url)."
    • addedOutput schema / properties / sort
      Added value: +{
      +  "description": "The order of results: newest, revenue or employees.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  7. Changed6 schema fields changed
    • changedInput schema / properties / compact / description
      Previous value: -"Optional: true keeps a short preset per row (name, CUI, county, city, legal form, risk level, phone, website, latest revenue and headcount, record url)."New value: +"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)."
    • changedInput schema / properties / county / description
      Previous value: -"Optional county name to narrow to (diacritic-insensitive: 'bucuresti', 'cluj'); omit for nationwide."New value: +"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."
    • addedOutput schema / properties / availableTopicNames
      Added value: +{
      +  "description": "Each curated topic id with its name, e.g. {\"agriculture\": \"Agriculture & Food\"}, next to availableTopics.",
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / availableTopics / description
      Previous value: -"The curated topics, when the topic is unknown."New value: +"The curated topic ids, when the topic is unknown or ambiguous."
    • changedOutput schema / properties / total / description
      Previous value: -"Number of companies returned."New value: +"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."
    • changedOutput schema / properties / truncated / description
      Previous value: -"true when more firms match than were returned."New value: +"true when max_results was cut to the list cap (and the list is full)."
  8. Changed3 schema fields changed
    • changedInput schema / properties / compact / description
      Previous value: -"Optional: true keeps a short preset per row (name, CUI, county, city, legal form, risk level, phone, website, latest revenue and headcount)."New value: +"Optional: true keeps a short preset per row (name, CUI, county, city, legal form, risk level, phone, website, latest revenue and headcount, record url)."
    • addedOutput schema / properties / appUrl
      Added value: +{
      +  "description": "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).",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / results / items / description
      Previous value: -"A company record: companyName, cui, registrationCode, registrationDate (DD/MM/YYYY), legalForm, euid, address, county, city, website, phone, caenActivities [{code, activity}], directors, status [{code, name}], latestFinancials {year, revenue, netResult, employees; RON}, anaf {mainCaen, vatPayer, eFactura, inactive}, risk {level, label, reasons, isLead}, source, asOf, and score/match on name searches. With fields or compact, only the requested keys."New value: +"A company record: companyName, cui, registrationCode, registrationDate (DD/MM/YYYY), legalForm, euid, address, county, city, website, phone, caenActivities [{code, activity}], directors, status [{code, name}], latestFinancials {year, revenue, netResult, employees; RON}, anaf {mainCaen, vatPayer, eFactura, inactive}, risk {level, label, reasons, isLead}, source, asOf, url (the firm's public record page to share with the user; null for sole traders and other natural persons), and score/match on name searches. With fields or compact, only the requested keys (compact keeps url)."
  9. Changed13 schema fields changed
    • addedInput schema / properties / active_only / description
      Added value: +"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."
    • addedInput schema / properties / county / description
      Added value: +"Optional county name to narrow to (diacritic-insensitive: 'bucuresti', 'cluj'); omit for nationwide."
    • addedInput schema / properties / has_website / description
      Added value: +"true keeps only firms with a website on file in the registry (default false)."
    • addedInput schema / properties / legal_form / description
      Added value: +"Optional legal form(s) to keep, comma-separated, case-insensitive: 'SRL', 'SA', 'PFA', 'II', or 'SRL,SA' (companies, no sole traders). Default: any form."
    • addedInput schema / properties / main_activity_only / description
      Added value: +"true keeps firms whose declared main activity (ANAF main CAEN, else the CAEN on the latest filing) is one of the codes, instead of any authorised activity (default false)."
    • addedInput schema / properties / max_employees / description
      Added value: +"Optional maximum average headcount on the latest filing."
    • addedInput schema / properties / max_results / description
      Added value: +"Maximum number of companies to return (1-100, default 10)."
    • addedInput schema / properties / max_revenue / description
      Added value: +"Optional maximum net turnover in RON on the latest filing."
    • addedInput schema / properties / min_employees / description
      Added value: +"Optional minimum average headcount on the latest filing."
    • addedInput schema / properties / min_revenue / description
      Added value: +"Optional minimum net turnover in RON on the latest filing (FY2025, else FY2024). Firms without a filing never match a band."
    • addedInput schema / properties / topic / description
      Added value: +"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)."
    • addedInput schema / properties / vat_payer / description
      Added value: +"Optional: true keeps VAT-registered firms only, false only non-VAT payers (ANAF data). Omit for both."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "description": "A lead list: firms in an activity, newest registration first.",
      +  "properties": {
      +    "asOf": {
      +      "description": "What to cite: registry (ONRC snapshot date), financialYear (fiscal year of the figures), anaf (day of the ANAF data), snapshot, published, source.",
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "attribution": {
      +      "description": "The credit line to keep when redistributing the data (CC BY 4.0).",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "availableTopics": {
      +      "description": "The curated topics, when the topic is unknown.",
      +      "type": [
      +        "array",
      +        "null"
      +      ]
      +    },
      +    "caenCodes": {
      +      "description": "The CAEN codes searched, when given or derived as codes.",
      +      "type": [
      +        "array",
      +        "null"
      +      ]
      +    },
      +    "candidates": {
      +      "description": "When the words fit several activities (ambiguous_topic): the ones to choose from.",
      +      "type": [
      +        "array",
      +        "null"
      +      ]
      +    },
      +    "codesAdded": {
      +      "description": "CAEN Rev.2/Rev.3 counterparts added to the search.",
      +      "type": [
      +        "array",
      +        "null"
      +      ]
      +    },
      +    "county": {
      +      "description": "The county filter, if any.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "error": {
      +      "description": "Set only when there is no answer (empty_query, invalid_cui, data_unavailable, plan_required ...); such a call is not counted.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "fields": {
      +      "description": "The company fields kept when fields or compact trimmed the rows.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": [
      +        "array",
      +        "null"
      +      ]
      +    },
      +    "filters": {
      +      "description": "The filters applied (legalForm, activeOnly, revenue and headcount bands, vatPayer, mainActivityOnly ...).",
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "inactiveFilteredOut": {
      +      "description": "Firms removed by active_only (null when off).",
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    },
      +    "inactiveFilteredOutApproximate": {
      +      "description": "true when that count is estimated.",
      +      "type": [
      +        "boolean",
      +        "null"
      +      ]
      +    },
      +    "label": {
      +      "description": "Human label of what was matched.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "matched": {
      +      "description": "How plain words were read: by, niche or class title, codes.",
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "message": {
      +      "description": "A sentence for the caller.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "query": {
      +      "description": "The topic as given.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "results": {
      +      "description": "The company records, best first.",
      +      "items": {
      +        "additionalProperties": true,
      +        "description": "A company record: companyName, cui, registrationCode, registrationDate (DD/MM/YYYY), legalForm, euid, address, county, city, website, phone, caenActivities [{code, activity}], directors, status [{code, name}], latestFinancials {year, revenue, netResult, employees; RON}, anaf {mainCaen, vatPayer, eFactura, inactive}, risk {level, label, reasons, isLead}, source, asOf, and score/match on name searches. With fields or compact, only the requested keys.",
      +        "type": "object"
      +      },
      +      "type": [
      +        "array",
      +        "null"
      +      ]
      +    },
      +    "source": {
      +      "description": "Data source: onrc (registry) or mfp (Ministry of Finance filings).",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "topic": {
      +      "description": "The curated topic matched, if any.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "total": {
      +      "description": "Number of companies returned.",
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    },
      +    "truncated": {
      +      "description": "true when more firms match than were returned.",
      +      "type": [
      +        "boolean",
      +        "null"
      +      ]
      +    },
      +    "warnings": {
      +      "description": "Notes on how the request was read (a clamped limit, a widened CAEN code, an ignored field).",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": [
      +        "array",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": "object"
      +}
  10. Changed2 schema fields changed
    • addedInput schema / properties / compact
      Added value: +{
      +  "default": false,
      +  "description": "Optional: true keeps a short preset per row (name, CUI, county, city, legal form, risk level, phone, website, latest revenue and headcount).",
      +  "title": "Compact",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / fields
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "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.",
      +  "title": "Fields"
      +}
  11. Changed6 schema fields changed
    • addedInput schema / properties / main_activity_only
      Added value: +{
      +  "default": false,
      +  "title": "Main Activity Only",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / max_employees
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Max Employees"
      +}
    • addedInput schema / properties / max_revenue
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Max Revenue"
      +}
    • addedInput schema / properties / min_employees
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Min Employees"
      +}
    • addedInput schema / properties / min_revenue
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Min Revenue"
      +}
    • addedInput schema / properties / vat_payer
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Vat Payer"
      +}
  12. Changed3 schema fields changed
    • addedInput schema / properties / active_only
      Added value: +{
      +  "default": true,
      +  "title": "Active Only",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / has_website
      Added value: +{
      +  "default": false,
      +  "title": "Has Website",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / legal_form
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Legal Form"
      +}
  13. Added

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish a safe read-only, idempotent, closed-world query, so the description correctly focuses on what the annotations don't say: active_only drops dead and ANAF-inactive companies, CAEN cross-revision matching (6201 also finds Rev.3 6210), and the '-r3'/'-r2' suffix convention. It adds real behavioral context without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single dense paragraph front-loads the key distinction ('not by name'), then packs the topic formats and filter surface efficiently. It is information-dense and wastes little, though a slightly clearer sentence boundary around filters would improve scanability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 17-parameter read-only search with a full output schema, the description covers the critical behavioral defaults and topic syntax an agent needs to call it correctly. It omits sort behavior, but that is fully documented in the schema and less central to correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the description largely restates the same facts already documented per-parameter (topic forms, county behavior, active_only semantics). With the schema doing the heavy lifting, the description adds no parameter meaning beyond what is already structured.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb+resource+scope: 'Find companies by what they do, not by name'. That immediately distinguishes it from name/CUI-based siblings like lookup_companies and lookup_business, so an agent can route correctly without reading schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly states the context of use (activity/topic-based search) and enumerates the narrowing options (county, revenue, headcount, VAT, main activity, registration dates, active_only). It does not explicitly name sibling alternatives or say when to prefer them, which keeps it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources