Hillwinds API
API Reference

Brokers

Analyze broker relationships, commission data, and carrier networks across 200,000+ benefits brokers.

List Brokers

GET/v1/brokers1.00 / 2.00 per row

Returns a paginated list of brokers (parent firms). To query the local office locations underneath a broker, use the Broker Offices endpoint with broker_ids.

Book composition is office-grained
Parent brokers support book-size filters such as total_clients, total_premiums, and total_commissions. Composition filters such as top_industries, top_carriers, and employee_coverage belong to broker offices; query /v1/broker-offices for those dimensions.

Pagination & format

Common to all endpoints — see Pagination and Response Modes.

ParameterTypeDescription
pageintegerPage number (0-indexed)
page_sizeintegerResults per page (max 500). Over-max → 400.
sort_bystringColumn to sort by — allowlist: broker_name (default), total_clients, total_offices, total_commissions
sort_dirasc | descSort direction
modebasic | fullResponse verbosity. Advanced-only fields require advanced access.
fieldsstringComma-separated field list (id always included)
formatjson | flatResponse format (flat for Clay/spreadsheets)
count_onlybooleanReturn only total count, no data rows (0 credits)
include_countbooleanInclude total_count in meta (default true; false skips per-page COUNT)
dry_runbooleanValidate query and return estimated rows + credits (0 credits)

Basic response fields

FieldTypeDescription
lead_sourceobjectAttribution stamp: { source: "hillwinds", retrieved_at: ISO-8601 UTC }. retrieved_at is when this row was assembled for the response, not the same as last_updated_at, which is when the row was last refreshed upstream.

Filters

ParameterTypeDescription
searchstringFuzzy name search on broker_name
statesstringHeadquarters state codes (comma-separated)
dmasstringHeadquarters DMA names (comma-separated)
geo_modestate | dmaGeographic filter mode (default state)
brokerage_classstringnational player, regional player, local broker
client_count_bandsstringOne Client, Two to Five Clients, … Fifty Plus Clients
filing_yearstringFiling year or 'latest' (default 'latest')
long_tailbooleanInclude long-tail brokers
signalsstringActive signals (advanced tier only)
signal_matchany | allMatch semantics when multiple signals= are passed (default any)
tagsstringTag names (AND logic)
crm_statusstringin_hubspot | in_salesforce | in_both | not_in_crm
cf[column]stringColumn filter — supports gte:/lte: for numeric columns
eb[column]booleanExclude blanks for column; only true is supported (false returns 400)
bash
curl -H "Authorization: Bearer ss_live_..." \
  "https://api.hillwinds.ai/v1/brokers?brokerage_class=regional+player&states=CA,NY&page_size=10"

Example response

{
  "ok": true,
  "data": [
    {
      "id": "brk_a1b2c3d4e5f6",
      "broker_name": "MARSH & MCLENNAN COMPANIES",
      "brokerage_class": "national player",
      "headquarters_city": "New York",
      "headquarters_state": "NY",
      "broker_dma": "NEW YORK",
      "total_clients": 8420,
      "total_offices": 87,
      "website": "marshmclennan.com",
      "crm_status": ["hubspot", "salesforce"],
      "lead_source": {
        "source": "hillwinds",
        "retrieved_at": "2026-06-24T14:16:00Z"
      }
    }
  ],
  "meta": {
    "total_count": 89,
    "page": 0,
    "page_size": 1,
    "returned": 1,
    "has_more": true,
    "response_tier": "basic",
    "key_tier": "advanced",
    "credits_charged": 1.00
  }
}

Get Broker

GET/v1/brokers/:id1.00 / 2.00 per row

Returns a single broker by ID. The OpenAPI spec lists only id as a parameter — mode / fields / format don't apply here. For tier control, use GET /v1/brokers/lookup?name=… instead.

bash
curl -H "Authorization: Bearer ss_live_..." \
  "https://api.hillwinds.ai/v1/brokers/brk_a1b2c3"

Lookup Broker

GET/v1/brokers/lookup1.00 / 2.00 per match

Exact-match lookup by broker name. Returns a single broker, 404 if no match, or 400 with suggestions if multiple match.

ParameterDescription
nameMatch by exact broker name (required)
modebasic | full — field verbosity, same semantics as the list endpoint
fieldsComma-separated field allowlist
formatjson | flat

mode, fields, and format are optional and behave the same as on the list endpoint.

bash
curl -H "Authorization: Bearer ss_live_..." \
  "https://api.hillwinds.ai/v1/brokers/lookup?name=Marsh+%26+McLennan"

Export Brokers

GET/v1/brokers/export.csvPer-row
bash
curl -H "Authorization: Bearer ss_live_..." \
  -o brokers.csv \
  "https://api.hillwinds.ai/v1/brokers/export.csv?states=CA"

Autocomplete

GET/v1/brokers/autocomplete0 credits

Typeahead suggestions. Full cross-resource reference + per-resource matrix on the Autocomplete reference. Brokers-specific notes:

  • column= allowlist: broker_name (default) only. Other values return 400.
  • query requires ≥ 2 characters; missing or 1-char → 400. Alias: search.
  • id is returned as "" today. For broker name → ID, prefer GET /v1/brokers/lookup?name=... — exact-match, returns 404 on miss or 400 with suggestions on ambiguous.
bash
curl -H "Authorization: Bearer ss_live_..." \
  "https://api.hillwinds.ai/v1/brokers/autocomplete?search=marsh&limit=5"
json
{
  "ok": true,
  "data": [
    {
      "id": "",
      "label": "MARSH & MCLENNAN COMPANIES",
      "resource": "brokers",
      "value": "MARSH & MCLENNAN COMPANIES"
    }
  ],
  "meta": { "credits_charged": 0, "returned": 1 }
}
Need a key?

Keys are issued by our team, not a signup form. Book a 25-minute walkthrough and you'll leave with sandbox and live credentials.