> ## Documentation Index
> Fetch the complete documentation index at: https://deepline.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Enformion: Business Search

> Look up a business by name and city/state to get its officers and registered agents, each with a tahoeId to pass to enformion_person_search.

Look up a business by name and city/state to get its officers and registered agents, each with a tahoeId to pass to enformion\_person\_search.

> [!NOTE]
>
> Tool ID: `enformion_business_search`

## Run this action

Use the TypeScript SDK for one call. Use `ctx.tools.execute(...)` inside a Play for durable calls, scheduled calls, or CSV processing.

```ts theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
import { Deepline } from 'deepline';

const deepline = await Deepline.connect();
const result = await deepline.tools.execute(
  'enformion_business_search',
  {
    "name": "Example"
  },
);

console.log(result.toolResponse.raw);
```

### CLI

```bash theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
deepline tools execute enformion_business_search --input '{
  "name": "Example"
}' --json
```

## Example response

The static output schema lacks the details for a reliable example. Use `deepline describe enformion_business_search --json` for the complete live contract.

## Input reference

Enformion Business Search (galaxy-search-type: BusinessV2). Step 1 of the personal-email flow: returns the business plus its officers and registered agents, each with a tahoeId. Feed those tahoeIds into enformion\_person\_search to get each officer's personal contact info. COST: billed per upstream call that returns records, NOT per usable match. One lookup can bill up to 3x when the locality hint falls through the region -> city -> unfiltered walk, so pass the most precise city\_state you have and set max\_attempts: 1 on batch runs. NOTE: Business Search is separately entitled. profiles without it get isError:true ("Access Profile does not permit client to call Business Search") — treat as no-result and fall back to person-search-by-name.

| Name | Type | Required | Default | Details |
| - | - | - | - | - |
| `payload.name` | `string` | Yes | — | Business / entity name (e.g. 'Castaways River Tiki Bar'). Minimum length: 1. |
| `payload.city_state` | `string` | No | — | Locality hint, most precise form first: "City, Region" ("Cutchogue, NY"), a city alone ("Cutchogue"), or a region alone ("NY"). PREFER "City, Region" — it is the cheapest option, not just the most accurate. BusinessV2 filters on ONE locality token and cannot parse the combined form, so Deepline splits the hint and walks region -> city -> unfiltered, stopping at the first attempt that yields a record in the requested region. Each attempt is a separate billed upstream call, so a hint that resolves See the live schema for the complete constraint. |
| `payload.max_attempts` | `integer` | No | `3` | Hard ceiling on billed upstream calls for this lookup (1-3, default 3). The locality walk stops early on a hit, so this only bounds the worst case. Set 1 for high-volume batch enrichment where a miss can fall through to a cheaper step: measured on a 273-row insurance book, the unbounded walk spent \~3.4 calls per resolved officer ($1.68/name against an assumed $0.49). capping at 1 cut that stage roughly 3x for a modest recall loss. Minimum: 1. Maximum: 3. |
| `payload.results_per_page` | `integer` | No | `10` | Records requested per upstream page (1-50, default 10). Does NOT change the price of a call — BusinessV2 bills per call, not per record — but a smaller page returns less noise to filter when you only need the top officer match, and a larger one gives a common business name a deeper candidate pool to find your region in. Minimum: 1. Maximum: 50. |
| `payload.page` | `integer` | No | `1` | Page number, for paging deeper into matches on a common business name (default 1). Each page is a separate billed call. check pagination.totalPages on the response before asking for another. Minimum: 1. |

<details>
  <summary>Show raw input schema</summary>

  ### Input JSON Schema

  ```json theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
  {
    "type": "object",
    "description": "Enformion Business Search (galaxy-search-type: BusinessV2). Step 1 of the personal-email flow: returns the business plus its officers and registered agents, each with a tahoeId. Feed those tahoeIds into enformion_person_search to get each officer's personal contact info. COST: billed per upstream call that returns records, NOT per usable match. One lookup can bill up to 3x when the locality hint falls through the region -> city -> unfiltered walk, so pass the most precise city_state you have and set max_attempts: 1 on batch runs. NOTE: Business Search is separately entitled; profiles without it get isError:true (\"Access Profile does not permit client to call Business Search\") — treat as no-result and fall back to person-search-by-name.",
    "properties": {
      "name": {
        "type": "string",
        "description": "Business / entity name (e.g. 'Castaways River Tiki Bar').",
        "minLength": 1
      },
      "city_state": {
        "type": "string",
        "description": "Locality hint, most precise form first: \"City, Region\" (\"Cutchogue, NY\"), a city alone (\"Cutchogue\"), or a region alone (\"NY\"). PREFER \"City, Region\" — it is the cheapest option, not just the most accurate. BusinessV2 filters on ONE locality token and cannot parse the combined form, so Deepline splits the hint and walks region -> city -> unfiltered, stopping at the first attempt that yields a record in the requested region. Each attempt is a separate billed upstream call, so a hint that resolves immediately costs 1x and one that falls through to unfiltered costs up to 3x. A region-only hint on a common business name is the worst case: it matches nationwide, every record is rejected by the region check, and all 3 attempts are spent for nothing. Set max_attempts: 1 to forbid the walk when cost matters more than recall."
      },
      "max_attempts": {
        "type": "integer",
        "description": "Hard ceiling on billed upstream calls for this lookup (1-3, default 3). The locality walk stops early on a hit, so this only bounds the worst case. Set 1 for high-volume batch enrichment where a miss can fall through to a cheaper step: measured on a 273-row insurance book, the unbounded walk spent ~3.4 calls per resolved officer ($1.68/name against an assumed $0.49); capping at 1 cut that stage roughly 3x for a modest recall loss.",
        "default": 3,
        "minimum": 1,
        "maximum": 3
      },
      "results_per_page": {
        "type": "integer",
        "description": "Records requested per upstream page (1-50, default 10). Does NOT change the price of a call — BusinessV2 bills per call, not per record — but a smaller page returns less noise to filter when you only need the top officer match, and a larger one gives a common business name a deeper candidate pool to find your region in.",
        "default": 10,
        "minimum": 1,
        "maximum": 50
      },
      "page": {
        "type": "integer",
        "description": "Page number, for paging deeper into matches on a common business name (default 1). Each page is a separate billed call; check pagination.totalPages on the response before asking for another.",
        "default": 1,
        "minimum": 1
      }
    },
    "required": [
      "name"
    ],
    "additionalProperties": false
  }
  ```
</details>

## Output reference

| Name | Type | Required | Default | Details |
| - | - | - | - | - |
| `result.businessV2Records` | `array` | Yes | — | — |
| `result.businessV2Records[].poseidonId` | `integer` | Yes | — | — |
| `result.businessV2Records[].uccFilings` | `array` | Yes | — | — |
| `result.businessV2Records[].newBusinessFilings` | `array` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings` | `array` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].poseidonId` | `integer` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].ein` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].name` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].rawName` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].corpFileKey` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].corpStatus` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].corpStatusDate` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].corpType` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].registryNumber` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].stateCode` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].statute` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].stateTaxId` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].term` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].fileData` | `null` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].fileDataDate` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].filingDate` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].incorporationState` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].filingType` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].jurisdiction` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].lastReportedDate` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].expireDate` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].contacts` | `array` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].officers` | `array` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].officers[].fileDate` | `null` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].officers[].name` | `object` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].officers[].name.nameSuffix` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].officers[].name.nameHashReq1` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].officers[].name.nameFirst` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].officers[].name.nameGender` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].officers[].name.nameLast` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].officers[].name.nameMiddle` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].officers[].name.nameRaw` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].officers[].name.nameProblemCodes` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].officers[].name.nameHashOpt5` | `integer` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].officers[].name.namePrefix` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].officers[].name.nameHashOpt4` | `integer` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].officers[].name.nameSuffixNorm` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].officers[].name.tahoeId` | `null` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].officers[].title` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].officers[].startDate` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].officers[].status` | `null` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].officers[].address` | `object` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].officers[].address.city` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].officers[].address.state` | `string` | Yes | — | — |
| `result.businessV2Records[].usCorpFilings[].officers[].address.zip` | `string` | Yes | — | — |

The table shows the first 50 fields. Expand the raw schema below for every field.

> [!NOTE]
>
> This output schema is too large for an inline display. Read the complete live contract with `deepline describe enformion_business_search --json`.

## Deepline cost

* Pricing model: `per_result` (per result).
* Estimated Deepline credits: `2.8` per pricing unit.

## Related documentation

* [Enformion provider guide](https://deepline.com/docs/providers/enformion/guide.md)
* [SDK V2 quickstart](https://deepline.com/docs/sdk-v2/quickstart.md)
* [SDK reference](https://deepline.com/docs/sdk-v2/sdk-reference.md)
* [Run tools across a CSV](https://deepline.com/docs/sdk-v2/batch-csv.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.