---
title: "Search for Companies"
method: POST
path: "/search_companies"
tags: ["Search"]
---

# Search for Companies

`POST /search_companies`

## Request

- Base URL: `https://api.moltsets.com/api/v1/tools`
- URL: `https://api.moltsets.com/api/v1/tools/search_companies`
- Auth: HTTP bearer

The Company Search API lets you search MoltSets' company database by name, domain, industry, employee count, or annual revenue, so you can find and qualify target accounts.

Use `query` for free text company name search, `domain` for an exact lookup by website domain, and the filters (`industry`, `employee_range`, `revenue_range`) to narrow your results. Combining `query` with filters gives the most precise matches. Every result comes back ranked, with a higher `_score` meaning a stronger match.

Every positive filter accepts either a single value or a list of values. A list is OR within its field and AND across fields, so `industry: ["Information Technology", "Finance and Banking"]` with `country: ["United States", "Canada"]` means (Information Technology or Finance and Banking) in (United States or Canada) — one search instead of one per value, with every match ranked together.

The `exclude_*` parameters (`exclude_domain`, `exclude_industry`, `exclude_employee_range`, `exclude_revenue_range`) work the other way round: each one also takes a list, but removes matches rather than selecting them. `exclude_domain` is how you suppress accounts you already have. Exclusions narrow a search but cannot be the whole search — you still need at least one positive input.

**Use this endpoint to:**
- Build prospect lists for account-based marketing
- Qualify target accounts before outreach
- Enrich CRM records with firmographic data

**Fair Use Policy:**
This API is subject to our <a href="https://moltsets.com/fair-use-policy-search/" target="_blank" rel="noopener">Fair Use Policy for Search</a>.

**Outcomes:**
A lookup that finds nothing is not an error. It returns HTTP `200` with `status: "not_found"`, empty or null `results`, and the usual `metadata` — and costs no tokens, though it still counts as one request against your Fair Use requests limit. Read `status`, not the HTTP code, to tell a hit from a miss. The API's only `404` is an unknown or retired tool name.

## Headers

- `User-Agent` string, required

## Request body

- object
  - `query` string: Full-text search across company name only. Do not put domain, industry, employee size, or revenue here — use the dedicated filter params for those.
  - `domain` union: Exact company domain filter. Full URLs are normalised automatically ("https://www.acme.com/about" → "acme.com"), so there is no need to strip the protocol or path yourself. Prefer this over `query` when you know the domain, since it is a precise match rather than a text search. Accepts a single value or a list — a list matches any of its values (OR), so `domain: ["acme.com", "stripe.com"]` returns records matching either.
    - string
    - string[]
  - `industry` union: Exact industry filter. These 22 buckets are the only supported values, and must match exactly, including capitalisation and punctuation (note the ampersand in "Marketing & Advertising"). For a niche the buckets cannot express — insurance carriers, aerospace, mining — use `linkedin_industry` instead. Accepts a single value or a list — a list matches any of its values (OR), so `industry: ["Information Technology", "Finance and Banking"]` returns records matching either.
    - 'Professional and Business Services' | 'Information Technology' | 'Manufacturing' | 'Retail' | 'Health and Pharmaceuticals' | 'Creative Arts and Entertainment' | 'Construction' | 'Marketing & Advertising' | 'Finance and Banking' | 'Tourism and Hospitality' | 'Non-Profit and Social Services' | 'Food and Beverage' | 'Real Estate' | 'Education' | 'Transportation and Logistics' | 'Media and Publishing' | 'Energy' | 'Government and Public Administration' | 'Automotive' | 'Telecommunications' | 'Agriculture' | 'Utilities'
    - string[]
  - `employee_range` union: Exact employee count range filter. These eight numeric bands are the only supported values — "1-10" holds the most records by a wide margin, "5001+" the fewest. Accepts a single value or a list — a list matches any of its values (OR), so `employee_range: ["51-200", "201-500"]` returns records matching either.
    - '1-10' | '11-20' | '21-50' | '51-200' | '201-500' | '501-1000' | '1001-5000' | '5001+'
    - string[]
  - `revenue_range` union: Exact annual revenue range filter. These seven bands are the only supported values — "$500k - $1M" is the most common. "Above $50M" is a flat catch-all for all revenue over $50M; there is no finer band above it, so use it for any large-enterprise revenue target. Accepts a single value or a list — a list matches any of its values (OR), so `revenue_range: ["$10M - $20M", "$20M - $50M"]` returns records matching either.
    - 'Below $500k' | '$500k - $1M' | '$1M - $5M' | '$5M - $10M' | '$10M - $20M' | '$20M - $50M' | 'Above $50M'
    - string[]
  - `naics_code` union: Exact NAICS industry code filter (~50% filled). Works at any level of the hierarchy, from the 2-digit sector ("23" = Construction, "54" = Professional Services) through to the 6-digit national industry ("541120" = Offices of Notaries, "511210" = Software Publishers). Use a short code for broad industry targeting and a longer code for precision — the most standardised industry filter available. Accepts a single value or a list — a list matches any of its values (OR), so `naics_code: ["5112", "5415"]` returns records matching either.
    - string
    - string[]
  - `linkedin_industry` union: Exact LinkedIn industry label filter (~85% filled). Uses LinkedIn's own industry vocabulary, which is far finer-grained than the 22 buckets in `industry`. Must match the stored label exactly, with standard capitalisation — for example "Software Development", "Hospitality", "Legal Services", "Staffing and Recruiting", "Wellness and Fitness Services". Accepts a single value or a list — a list matches any of its values (OR), so `linkedin_industry: ["Software Development", "IT Services and IT Consulting"]` returns records matching either.
    - string
    - string[]
  - `country` union: Exact country name filter on the company's location. Use the full English country name. Note that company location is derived from where the company's team is based: this is accurate for the small companies that dominate the index, but large multinationals are attributed to a single one of their offices — combine it with other filters rather than relying on location alone when targeting global companies. Accepts a single value or a list — a list matches any of its values (OR), so `country: ["United States", "Canada"]` returns records matching either.
    - string
    - string[]
  - `state` union: Exact state or region name filter on the company's location. Accepts the full name with standard capitalisation or its abbreviation — "Texas" and "TX" both work. Canadian provinces match by their two-letter code too — "Ontario" or "ON", "British Columbia" or "BC", "Quebec" or "QC". Combine with `country` for precision. Location is team-derived in the same way as `country`, so it is most accurate for smaller companies. Accepts a single value or a list — a list matches any of its values (OR), so `state: ["Texas", "Florida"]` returns records matching either.
    - string
    - string[]
  - `exclude_domain` string[]: Company domains to exclude. Any company on this list is dropped from the results — this is the suppression list, so pass the accounts you already have (existing customers, current vendors, your own company) and they never come back. Full URLs are normalised automatically, exactly as with `domain`. Excluded records cost you nothing: they consume no tokens and no fair use records, so excluding here is always cheaper than filtering the results yourself.
  - `exclude_industry` string[]: Industries to exclude. Companies in any listed industry are dropped. Accepts the same values as `industry`. Exclusion only removes companies that positively carry one of these values, so companies with no industry on record still appear in your results.
  - `exclude_employee_range` string[]: Employee count bands to exclude. Companies in any listed band are dropped. Accepts the same values as `employee_range` — for example ["1-10", "11-20"] to skip the very smallest companies, or ["5001+"] to skip enterprises.
  - `exclude_revenue_range` string[]: Revenue bands to exclude. Companies in any listed band are dropped. Accepts the same values as `revenue_range` — for example ["Below $500k"] to skip the smallest companies, or ["Above $50M"] to skip large enterprises.
  - `limit` integer: Number of results to return (default: 10, max: 25).
  - `offset` integer: Number of results to skip for pagination (default: 0). Use with limit to page through results — e.g. offset: 10 to get the second page of 10 results.

## Response `200`

Success

## Other responses

- `401`: Unauthorized
- `402`: Payment Required — insufficient tokens
- `403`: Forbidden — missing `User-Agent` header, tool not on the plan, or account inactive
- `422`: Invalid Input — malformed body, or a parameter is missing, malformed, or outside its allowed values
- `429`: Too Many Requests — rate limit, Fair Use window exhausted, or too many concurrent searches
- `500`: Internal Server Error — the call could not complete. Usually the endpoint is temporarily unavailable, but an oversized request can also cause it. Retry with a smaller request first; the MoltSets team is alerted automatically.

---

[API](https://skmtc.dev/moltsets/apis/moltsets-api.md) - [All operations](https://skmtc.dev/moltsets/apis/moltsets-api/llms.txt) - [OpenAPI document](https://skmtc.dev/moltsets/apis/moltsets-api/revisions/b116df68bd90?raw)
