Skip to main content
POST /company-search finds companies using structured filters. Combine website text, LinkedIn description, services, industry, employee range, revenue range, country, city, company name, and URL. Returned company rows use company_name, company_url, linkedin_url, and employee_count so they can be chained into other company and contact endpoints. Use this when you need many accounts — not a narrative research brief.

Search companies

Response shape: Each company row uses canonical Huntr company fields: company_name, company_url, linkedin_url, email_domain, final_email_domain, home_page_email, phone, city, region_code, country_code, industry, employee_count, revenue, services, service_count, home_page_text, home_page_text_snippet, and bio_li_snippet when available. home_page_text contains the full extracted website text, not raw HTML. Use company_url directly with /person-email, /person-phone, and company enrichment endpoints.

Pagination

Huntr returns one page per request. pagination.size is configurable: min 1, default 10, max 100. To walk a large list:
  1. Call with your query and pagination.size
  2. Read pagination.has_more and pagination.token from the response
  3. If has_more is true, call again with the same query and pagination: { "size": 10, "token": "..." }
Do not change the query between pages. Tokens may expire; restart from the first page if one is rejected. You can send semantic_query instead of query when you want Huntr to translate a plain-English ICP into structured filters.
filters are optional hard constraints for semantic search only. They use the same fields and shapes as query, and explicit filter fields override generated fields. Semantic responses include resolved_query. For page 2 and later, send that object as query with the returned pagination.token; do not send semantic_query with a token.

Count companies

Use POST /company-search-count when you only need the number of matching companies. It accepts the same query or semantic_query plus optional filters as /company-search, but it does not accept pagination and it does not return company rows.
Count responses contain total, price: 0, and credits_remaining.

Filter rules

  • At least one filter is required
  • Fields are AND’d together
  • include values within a field are OR’d
  • services, industry, country_code, number_of_employees, and revenue must be exact lookup labels. Invalid values return 422 with accepted_values
  • company_url is a single string, not an include/exclude object
Supported filters: home_page_text, bio_li, services, industry, number_of_employees, revenue, country_code, city, company_name, company_url. When you know stripe.com, use company_url.

Employee and revenue ranges

Use exact range labels:

Typical workflow

  1. Search → paginate companies
  2. For each target account: use person search with company_name
  3. Enrich contacts you want to reach

Billing

Search is charged per company returned, using the API key’s active pricing plan. Empty pages are not billable. Company search count is free but still requires an API key. See GET /pricing for the current plan matrix.

Next step