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

# Company Intelligence

> Research and enrich company data with additional information and find associated people.

## Use case

Research and enrich company data with additional firmographic information and find associated people. Use it for sales outreach, CRM enrichment, lead qualification, or investigative diligence.

## Endpoint

```http theme={null}
POST https://api.sixtyfour.ai/company-intelligence
```

<Card title="API Reference" icon="code" href="/api-reference/enrichment/company-intelligence-sync">
  See the full request/response schema and parameters in the API Reference.
</Card>

## Pricing

See [Credits & Pricing Guide](/guides/credits-and-pricing) for credit costs by tier.

## Errors

For error responses (400, 403, 422, etc.), see [Handling Errors](/api-reference/errors).

## Tiers

The `tier` parameter controls research depth and cost.

| Tier            | Description                                                                                                                                                                                                     | Access                                                                                |
| --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
| `micro`         | Lightweight enrichment — returns up to 10 fields. Best for very high-volume lookups where only minimal firmographic data is needed.                                                                             | All orgs                                                                              |
| `low` (default) | Baseline tier — fast and cheap. Good for high-volume firmographic enrichment.                                                                                                                                   | All orgs                                                                              |
| `medium`        | Deeper research — more fields filled, more sources.                                                                                                                                                             | All orgs                                                                              |
| `high`          | **OSINT-grade investigation** — deeply recursive crawling across the open web, dark web, directories, proprietary sources. Designed for high-stakes accounts, sensitive diligence, and investigative workflows. | **Exclusive — access is granted case-by-case by our team. Contact sales to request.** |

<Warning>
  If `tier` is omitted, `low` is used. Requests with `tier: "high"` on an org without high-tier access return **403** — see [Handling Errors](/api-reference/errors#403-forbidden).
</Warning>

## Using the `struct` field

The `struct` field defines exactly what data you want back. Each key becomes a field in `structured_data`, and its value tells the agent what to find.

You can pass either a plain-English description or an object with `description` and `type`:

```json theme={null}
{
  "struct": {
    "instagram_url": "Instagram url for the photography company",
    "num_employees": {"description": "Approximate employee count", "type": "int"}
  }
}
```

The agent uses these descriptions to guide its research. Be specific — `"company's primary Instagram handle"` returns better results than `"social"`.

For supported types, type resolution priority, and casting examples, see [Struct & Type Casting](/guides/struct-and-type-casting).

## Choosing related parameters

### `find_people` vs `full_org_chart`

* **`find_people`** — Finds specific people associated with the company. Pair with `people_focus_prompt` to filter by role or seniority.
* **`full_org_chart`** — Returns a compact view of employees grouped by department (capped per department). It's broad coverage of who works where, not a literal reporting tree or an exhaustive employee dump. When `true`, the response includes a top-level `org_chart` field.

Use `find_people` for targeted lead discovery and `full_org_chart` for department-level visibility.

### `research_plan` vs `people_focus_prompt`

* **`research_plan`** — Methodology. Tells the agent **where to look** (e.g., `"Check the 'About Us' page and LinkedIn Company People tab"`).
* **`people_focus_prompt`** — Criteria. Tells the agent **who to find** (e.g., `"Find the VP of Marketing and the CTO"`).

## Understanding scores

| Field              | Meaning                                                                                                      | Range |
| ------------------ | ------------------------------------------------------------------------------------------------------------ | ----- |
| `confidence_score` | **Global quality score** — overall quality, consistency, and correctness of the returned data.               | 0–10  |
| `score`            | **Relevance score** — likelihood that a returned person matches the prompt or is helpful. Returned per lead. | 0–10  |

<Warning>The `findings` field on the response is deprecated. It currently returns an empty list and will be removed in a future update.</Warning>

## Async pattern

For production workflows, use `/company-intelligence-async` to submit a job and poll for results. This avoids long-lived HTTP connections during deep research runs.

The flow is:

1. **Submit** — `POST /company-intelligence-async` with the same body as the sync endpoint. Response includes a `task_id`.
2. **Poll** — `GET /job-status/{task_id}` until `status` is `completed`, `failed`, or `cancelled`.
3. **Read result** — When `completed`, the full enrichment is in the `result` field.

<Note>The async start endpoint returns uppercase `RUNNING`. Subsequent `/job-status/{task_id}` calls return lowercase statuses. `charge_amount` is returned in cents, not credits.</Note>

### Polling example

<CodeGroup>
  ```python Python theme={null}
  import requests
  import time

  response = requests.post(
      "https://api.sixtyfour.ai/company-intelligence-async",
      headers={"x-api-key": "YOUR_API_KEY", "Content-Type": "application/json"},
      json={
          "target_company": {
              "company_name": "Pacific View Studios",
              "website": "https://pacificview.studio"
          },
          "struct": {
              "instagram_url": "Instagram url for the photography company",
              "num_employees": "How many employees work there"
          },
          "find_people": True
      }
  )
  response.raise_for_status()
  task_id = response.json()["task_id"]

  while True:
      status = requests.get(
          f"https://api.sixtyfour.ai/job-status/{task_id}",
          headers={"x-api-key": "YOUR_API_KEY"}
      ).json()

      if status["status"] == "completed":
          results = status["result"]
          break
      if status["status"] in ("failed", "cancelled"):
          raise RuntimeError(f"Job {status['status']}: {status.get('error', 'Unknown error')}")

      time.sleep(10)
  ```

  ```javascript JavaScript theme={null}
  async function runAsync() {
    const start = await fetch("https://api.sixtyfour.ai/company-intelligence-async", {
      method: "POST",
      headers: { "x-api-key": "YOUR_API_KEY", "Content-Type": "application/json" },
      body: JSON.stringify({
        target_company: {
          company_name: "Pacific View Studios",
          website: "https://pacificview.studio"
        },
        struct: {
          instagram_url: "Instagram url for the photography company",
          num_employees: "How many employees work there"
        },
        find_people: true
      })
    });
    const { task_id } = await start.json();

    while (true) {
      const status = await (await fetch(
        `https://api.sixtyfour.ai/job-status/${task_id}`,
        { headers: { "x-api-key": "YOUR_API_KEY" } }
      )).json();

      if (status.status === "completed") return status.result;
      if (["failed", "cancelled"].includes(status.status)) {
        throw new Error(`Job ${status.status}: ${status.error || "Unknown error"}`);
      }
      await new Promise(r => setTimeout(r, 10000));
    }
  }
  ```
</CodeGroup>
