# /california/companies/search

`POST /api/california/companies/search`

Price: 5 credits

Search California business entities in the Secretary of State bizfile registry by name keywords or entity number, with optional filters for entity type, registry status and initial filing date range, plus the publicly traded disclosure index (director/officer name, auditor, compensation range, board composition and disclosure flags). Returns entity number, name, entity type, status, standing, jurisdiction of formation, initial filing date and registered agent.

## How to use it

Search California business entities by name keywords or entity number. Set search_type to publicly_traded_disclosure to search the publicly traded disclosure index by officer name, auditor, compensation range, board composition or disclosure flags instead of by entity attributes — those criteria are rejected with 422 unless search_type is publicly_traded_disclosure. initial_filing_date_from and initial_filing_date_to are inclusive bounds in YYYY-MM-DD; the registry does not accept a bound earlier than 1753-01-01, so an earlier one is rejected with 422 (omit the bound to leave that side of the range open). Returns a list of items with file_number, internal_id, name, entity_subtype, status, standing, formed_in, initial_filing_date (YYYY-MM-DD), registered_agent_name, can_file_statement_of_info and can_reinstate. Pass a file_number to california/companies for full details. The registry returns at most 500 closest matches per query — narrow with entity_type, status or a filing date range to reach entities beyond that.

## Parameters

- `access-token` (string, required)

## Request body

- `timeout` (integer) — Max scrapping execution timeout (in seconds) (default: 300; min: 20; max: 1500)
- `query` (string) — Business name keywords or entity number to search for. May be left empty only when search_type is publicly_traded_disclosure and at least one disclosure criterion is given (default: ""; examples: "APPLE INC", "0806592")
- `count` (integer, required) — Max number of results to return (min: 1; max: 500)
- `starts_with` (boolean) — Match names starting with the query instead of containing it (default: false)
- `search_type` (string) — Which registry index to search (default: "entity_information"; one of: "entity_information", "publicly_traded_disclosure")
- `entity_type` (string, nullable) — Restrict to one entity type or grouping (one of: "agricultural_cooperative", "all_corporations_including_cooperatives", "all_limited_liability_companies", "all_limited_partnerships", "cannabis_cooperative_association", "corporation_sole", "foreign_name_registration", "general_cooperative", "limited_liability_company_ca", "limited_liability_company_out_of_state", "limited_partnership_ca", "limited_partnership_out_of_state", "name_reservation", "nonprofit_corporation_ca_mutual_benefit", "nonprofit_corporation_ca_mutual_benefit_common_interest_development", "nonprofit_corporation_ca_mutual_benefit_credit_union", "nonprofit_corporation_ca_public_benefit", "nonprofit_corporation_ca_public_benefit_common_interest_development", "nonprofit_corporation_ca_religious", "nonprofit_corporation_out_of_state", "non_registered_entity", "out_of_state_association", "statutory_corporation", "stock_corporation_ca_benefit", "stock_corporation_ca_close", "stock_corporation_ca_general", "stock_corporation_ca_insurer", "stock_corporation_ca_professional", "stock_corporation_ca_social_purpose", "stock_corporation_out_of_state_insurer", "stock_corporation_out_of_state_professional", "stock_corporation_out_of_state_stock", "unincorporated_association", "unincorporated_common_interest_development", "unincorporated_nonprofit_association")
- `status` (string, nullable) — Restrict to one registry status (one of: "active", "active_pending_future_effective_date", "active_pending_future_file_date", "active_pending_merger", "active_pending_termination", "consolidated_out", "converted_out", "forfeited_ftb", "forfeited_ftb_sos", "forfeited_ftb_sos_vcfcf", "forfeited_sos", "forfeited_vcfcf", "inactive", "merged_out", "suspended_ftb", "suspended_ftb_sos", "suspended_ftb_sos_vcfcf", "suspended_sos", "suspended_vcfcf", "terminated", "terminated_court_order", "terminated_ftb_admin", "terminated_sos_admin", "terminated_term_expired")
- `initial_filing_date_from` (string, nullable) — Earliest initial filing date to include, YYYY-MM-DD, no earlier than 1753-01-01 (examples: "2020-01-01")
- `initial_filing_date_to` (string, nullable) — Latest initial filing date to include, YYYY-MM-DD, no earlier than 1753-01-01 (examples: "2020-12-31")
- `officer_first_name` (string, nullable) — Director or executive officer first name (publicly traded disclosure search)
- `officer_middle_name` (string, nullable) — Director or executive officer middle name (publicly traded disclosure search)
- `officer_last_name` (string, nullable) — Director or executive officer last name (publicly traded disclosure search)
- `auditor_name` (string, nullable) — Independent auditor name (publicly traded disclosure search)
- `compensation_from` (integer, nullable) — Minimum officer compensation in whole dollars (publicly traded disclosure) (min: 0)
- `compensation_to` (integer, nullable) — Maximum officer compensation in whole dollars (publicly traded disclosure) (min: 0)
- `female_director_count` (string, nullable) — Number of female directors on the board (publicly traded disclosure search) (one of: "0", "1", "2", "3_or_more")
- `underrepresented_director_count` (string, nullable) — Number of underrepresented directors on the board (publicly traded disclosure search) (one of: "0", "1", "2", "3_or_more")
- `corporation_bankruptcy` (boolean) — Only corporations disclosing bankruptcy (publicly traded disclosure search) (default: false)
- `corporation_legal_proceedings` (boolean) — Only corporations disclosing legal proceedings (publicly traded disclosure search) (default: false)
- `shares` (boolean) — Only corporations disclosing officer shares (publicly traded disclosure search) (default: false)
- `options` (boolean) — Only corporations disclosing officer options (publicly traded disclosure search) (default: false)
- `bankruptcy` (boolean) — Only corporations disclosing officer bankruptcy (publicly traded disclosure search) (default: false)
- `fraud` (boolean) — Only corporations disclosing officer fraud (publicly traded disclosure search) (default: false)
- `loans` (boolean) — Only corporations disclosing loans to directors (publicly traded disclosure search) (default: false)

## Response

### 200 — Successful Response

- `@type` (string) (default: "CaliforniaCompanySearchItem")
- `file_number` (string, required)
- `internal_id` (integer, required)
- `name` (string, nullable)
- `entity_subtype` (string, nullable)
- `status` (string, nullable)
- `standing` (string, nullable)
- `formed_in` (string, nullable)
- `initial_filing_date` (string, nullable)
- `registered_agent_name` (string, nullable)
- `can_file_statement_of_info` (boolean) (default: false)
- `can_reinstate` (boolean) (default: false)

## Errors

### 422 — Validation Error

The request body did not validate

What to do: Check the fields against this schema. A URN with the wrong prefix is the most common cause.

- `detail` (array)
  - `loc` (array, required)
  - `msg` (string, required)
  - `type` (string, required)
  - `input` (any)
  - `ctx` (object)

### 408

The request ran past its time limit

What to do: Raise `timeout` in the request body, up to the maximum this endpoint documents. Lowering `count` or turning off the `with_*` flags also helps, because less work finishes sooner.

### 412

The entity was not found, or a precondition failed

What to do: Retrying will not help: either the entity does not exist, or the input points at a different one.

### 429

Too many requests: a rate limit or a usage window is exhausted

What to do: When the response carries an X-Retry-After header, wait that many seconds and retry: the same number is in the body as `detail.retry_after`, and the limit clears once that window passes. The message in the body names the limit that was hit.

### 500

Something broke on our side

What to do: Retrying will not help. If it keeps happening, send us the X-Request-ID from the response headers.

### 529

Rate limit reached, or the endpoint is overloaded

What to do: Wait at least 30 seconds, then retry.

## Response envelope

Success: Array of objects (may be empty if no results)

Error: Error may coexist with partial results if it occurs mid-execution. Check X-Error header and status code.

Every response carries these headers:

- `X-Error` — Error message text (present only on error)
- `X-Request-ID` — Unique request identifier
- `X-Execution-Time` — Execution time in seconds
- `X-Result-Count` — How many records the body carries. 0 means an empty result, which is a normal answer and not by itself an error. A non-zero count can come back together with X-Error when the failure happened partway through — read this header and X-Error independently.
- `X-Total-Available-Results` — How many records exist for this query, when the endpoint can say. On a `dry_run` request this is the answer and the body is empty. It saturates: the endpoint's documented maximum means 'at least that many', any smaller number is exact.
- `X-Warning` — Present when the request body carried keys this endpoint does not document. They were ignored, so any filter you meant to apply through them did not apply. Check the spelling against this schema and retry.
- `X-Retry-After` — Seconds to wait before retrying. Present only on 429.

