Hillwinds API
API Reference

Broker Offices

Query 200,000 benefits broker office locations. Each office is a local team servicing real client books — most prospecting workflows target broker offices rather than parent firms.

search= is single-token, not multi-token fuzzy
search= is a substring match against the office and broker names. Multi-token strings like MERCER SAN FRANCISCO return []. Use one token (the most distinctive), then filter the response by broker_city / broker_state client-side, or combine with states=.
Company rows can include broker_office_id
Company rows expose broker_office_id when the primary broker office can be resolved. If the value is missing on an older or incomplete row, query /v1/broker-offices?search=MERCER&states=CA and match on broker_city. See Recipe library for the fallback pattern.

List Broker Offices

GET/v1/broker-offices1.00 / 2.00 per row

Returns a paginated list of broker offices matching your filters.

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: office_name (default), client_count, total_commissions, total_premiums
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
office_namestringOffice name. Also returned as broker_office_name (alias) — both hold the same value.
broker_office_namestringAlias of office_name (same value).
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 across broker_name and office_name
statesstringComma-separated state codes (e.g. CA,NY,TX)
dmasstringComma-separated DMA names
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
commission_tiersstringLow / Small / Medium / Large / Extra Large / Jumbo Commissions
carrier_searchstringSubstring match on carrier name
broker_idsstringComma-separated parent broker IDs (drill from broker → its offices)
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
filing_yearstringFiling year or 'latest' (default 'latest')
long_tailbooleanLong-tail broker office flag
cf[column]stringColumn filter — supports gte:/lte: for numeric columns
eb[column]booleanExclude blanks for column; only true is supported (false returns 400)

Numeric column filters

cf[client_count], cf[total_commissions], cf[total_premiums], and cf[number_of_offices] support numeric range syntax: gte:, lte:, or both.

bash
curl -H "Authorization: Bearer ss_live_..." \
  "https://api.hillwinds.ai/v1/broker-offices?states=CA,NY&brokerage_class=regional+player&client_count_bands=Twenty+to+Fifty+Clients,Fifty+Plus+Clients&page_size=25"

Example response

{
  "ok": true,
  "data": [
    {
      "id": "bo_8f3a2b1c",
      "broker_name": "Marsh & McLennan Companies",
      "office_name": "Marsh McLennan Agency — San Francisco",
      "broker_office_name": "Marsh McLennan Agency — San Francisco",
      "broker_office_id": "bo_8f3a2b1c",
      "broker_id": "brk_a1b2c3",
      "broker_city": "SAN FRANCISCO",
      "broker_state": "CA",
      "broker_dma": "SAN FRANCISCO",
      "brokerage_class": "national player",
      "address": "525 Market St",
      "website": "marshmma.com",
      "crm_status": ["hubspot"],
      "lead_source": {
        "source": "hillwinds",
        "retrieved_at": "2026-06-24T14:16:00Z"
      }
    }
  ],
  "meta": {
    "total_count": 218,
    "page": 0,
    "page_size": 1,
    "returned": 1,
    "has_more": true,
    "response_tier": "basic",
    "key_tier": "advanced",
    "credits_charged": 1.00
  }
}

Get Broker Office

GET/v1/broker-offices/:id1.00 / 2.00 per row

Retrieve a single broker office by ID. The OpenAPI spec lists only id as a parameter — returns the full record available to your key's field tier. If you need to scope the response or pin format=flat, query the list endpoint with ?cf[id]=<id> instead.

bash
curl -H "Authorization: Bearer ss_live_..." \
  "https://api.hillwinds.ai/v1/broker-offices/bo_8f3a2b1c?mode=full"

Export Broker Offices

GET/v1/broker-offices/export.csvPer-row (matches list cost)

Streams CSV with the same filters as the list endpoint. Charged per row at the same rate as a paginated query. Sync exports cap at 2,000 rows; Enterprise plans can request async exports up to 10,000.

bash
curl -H "Authorization: Bearer ss_live_..." \
  -o broker-offices.csv \
  "https://api.hillwinds.ai/v1/broker-offices/export.csv?states=CA&client_count_bands=Twenty+to+Fifty+Clients&format=flat"

Autocomplete

GET/v1/broker-offices/autocomplete0 credits

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

  • column= allowlist: office_name (default) only. Other values return 400.
  • query requires ≥ 2 characters; missing or 1-char → 400. Alias: search.
  • id is populated — this is the only autocomplete endpoint suitable for direct name → ID resolution today.
bash
curl -H "Authorization: Bearer ss_live_..." \
  "https://api.hillwinds.ai/v1/broker-offices/autocomplete?search=lockton&limit=5"
json
{
  "ok": true,
  "data": [
    {
      "id": "a804f56c-329f-4c1b-9e8e-839a5c98d4a3",
      "label": "Lockton Affinity, LLC - Lockton Affinity, LLC",
      "resource": "broker-offices",
      "value": "Lockton Affinity, LLC"
    },
    {
      "id": "5fed8ee3-85c1-4ac6-b869-49a993d9d841",
      "label": "Lockton Companies - Lockton Companies",
      "resource": "broker-offices",
      "value": "Lockton Companies"
    }
  ],
  "meta": { "credits_charged": 0, "returned": 2 }
}
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.