---
title: "Search licensed firms in a place"
method: GET
path: "/api/v1/licensees/firms"
tags: ["Search"]
---

# Search licensed firms in a place

`GET /api/v1/licensees/firms`

## Request

- Base URL: `https://propraven.com`
- URL: `https://propraven.com/api/v1/licensees/firms`
- Auth: HTTP bearer

Firms licensed by the issuing state boards (FL DBPR and DFS, CA DRE and the Board of Accountancy, NY DOS, CT DCP, VA DPOR, AZ ADRE, OH Division of Real Estate, OR Real Estate Agency, NJ Division of Consumer Affairs, WV Real Estate Commission) in one city or zip, grouped by name and by the issuer's parent-license link, with their distinct street locations. `min_locations=3` finds firms with at least three licensed locations there. Requires an account; a person-shaped firm is people data and each response serving one is logged. 503 `licensee_layer_unavailable` until the layer is loaded.

## Query parameters

- `state` 'FL' | 'CA' | 'NY' | 'CT' | 'VA' | 'AZ' | 'OH' | 'OR' | 'NJ' | 'WV', required
- `profession` 'real_estate' | 'insurance' | 'cpa' | 'cam'
- `city` string
- `zip` string
- `status` 'active' | 'inactive' | 'delinquent' | 'void' | 'expired' | 'other' | 'any'
- `min_locations` integer
- `limit` integer

## Response `200`

Firms returned.

- object
  - `query` object, required
  - `firm_count` integer, required
  - `firm_total` integer, required
  - `truncated` boolean, required
  - `firms` object[], required
    - `firm_key` string
    - `name` string, nullable
    - `profession` string
    - `location_count` integer
    - `license_count` integer
    - `issuers` string[]
    - `locations` object[]
      - `license_uid` string
      - `source_id` string
      - `issuer_name` string
      - `license_class` string
      - `license_number` string
      - `status` 'active' | 'inactive' | 'delinquent' | 'void' | 'expired' | 'other'
      - `status_raw` string
      - `party_type` 'firm' | 'branch' | 'person'
      - `person_shaped` boolean
      - `dba` string, nullable
      - `addr_type` 'business' | 'mailing' | 'address_of_record'
      - `address_line` string, nullable
      - `unit` string, nullable
      - `city` string, nullable
      - `state` string, nullable
      - `zip5` string, nullable
      - `email` string, nullable
      - `phone` string, nullable
      - `match_confidence` number, nullable
      - `as_of` string, nullable
      - `name` string, nullable
      - `parcel_id` string, nullable: Canonical parcel id the address matched, when it matched.
      - `operates_here` boolean
    - `locations_truncated` boolean
  - `note` string, required
  - `people_fields` object: Present when person-shaped licensee fields were withheld from this caller (null values, keys kept).

## Other responses

- `400`: A query or body parameter is invalid. Nothing was read or charged.
- `401`: Missing, malformed or invalid credential.
- `405`: The endpoint exists but does not support this method. `Allow` lists the methods it does.
- `429`: Rate limit exceeded.
- `500`: Unexpected server error. The body never carries database or driver text.
- `503`: The data behind this endpoint is temporarily unavailable. Honour `Retry-After` when present.

---

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