> For the complete documentation index, see [llms.txt](https://developer.parvenu.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.parvenu.io/enrichments/company-profile/list-lookup.md).

# List Lookup

Fetch a LinkedIn company profile for every company in a Parvenu list. Asynchronous, writes results back into the list.

<mark style="color:green;">`POST`</mark> `/company_profile_enrichment_list`

{% hint style="info" %}
This is an **asynchronous** endpoint. It returns a job acknowledgement, not data. Poll `/check_list_status` until the list reports `done`, then fetch the rows with `/download_list`. Costs **0.1 credit** per company. A company already checked on this list recently is not charged again.
{% endhint %}

The bulk counterpart of [Individual Lookup](/enrichments/company-profile/individual-lookup.md): it enriches company records from the LinkedIn company URL on each row of a list, rather than looping one company at a time.

Each unique company is looked up, and billed, once, however many rows share it. The run fills company name, website, company LinkedIn URL, industry, headcount (the exact employee count), company size (its range, one of `1-10` … `10001+`), company description and keywords (the LinkedIn "Specialties" line).

**Running it again.** A company already checked and charged on this list recently is not looked up or charged again, whether the list was run from the app, the API or the connector. Its stored details are reused for 0 credits on the rows that need them, for example contacts added since, and each of those rows gets a log line saying `checked MM-DD-YY, not charged again`. `credits_estimated` leaves those companies out. A company that was not checked recently is looked up, and charged, as usual. Only the same list counts: the same company on a different list is charged there.

The headcount from the LinkedIn company page is the most trusted one Parvenu has. When two sources disagree, the more trusted one is kept, so other enrichments never replace it. The company size is always the range the exact headcount falls in, not the size band the company picked for itself on LinkedIn.

{% hint style="warning" %}
Rows without a company LinkedIn URL are skipped. To enrich those from their web domain instead, use [Enrich Company From Domain](/enrichments/enrich-company-from-domain.md).
{% endhint %}

{% hint style="info" %}
`/company_profile_list` is the previous version of this endpoint. It still works and is unchanged, but it does not fill the keywords column. New integrations should use `/company_profile_enrichment_list`.
{% endhint %}

**Headers**

| Name         | Value              |
| ------------ | ------------------ |
| Content-Type | `application/json` |

**Body**

| Name         | Type   | Description                                                                                                                                                                 |
| ------------ | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `api_key`    | string | Your API Key.                                                                                                                                                               |
| `listname`   | string | Name of the existing Parvenu list to enrich.                                                                                                                                |
| `view`       | string | Optional. Which rows of the list to process. `all` (default) processes every contact in the list; `verified` restricts the run to contacts whose email address is verified. |
| `saved_view` | string | Optional. Name of a saved view on this list. Runs only on the contacts in that view. Don't combine with `view`, `filter_stack` or `search`.                                 |

**Saved views.** To run only on the contacts in a saved view, send its name as `saved_view`. See [List Saved Views](/manage-lists/list-saved-views.md).

{% hint style="info" %}
The legacy `state` parameter is not accepted. Passing it returns a 422 (`Extra inputs are not permitted`). Use `view` instead.
{% endhint %}

**Response**

The acknowledgement reports the job's `status`, which is one of `queued`, `processing`, `done`, `not_found`, `cancelled` or `error`. `done` means the job has finished. See [Response Format](/getting-started/response-format.md) for the fields every endpoint returns.

| Field               | Description                                                                                                         |
| ------------------- | ------------------------------------------------------------------------------------------------------------------- |
| `status`            | Job status at the moment of the acknowledgement.                                                                    |
| `job_id`            | Handle for the run, when the job queue assigned one.                                                                |
| `view`              | Which rows were selected, `all` or `verified`.                                                                      |
| `list_name`         | The list being enriched.                                                                                            |
| `rows_selected`     | Rows the view filter selected.                                                                                      |
| `rows_fetched`      | Rows read from the list.                                                                                            |
| `credits_estimated` | Expected cost of the run, based on the unique companies found, leaving out companies checked on this list recently. |
| `truncated`         | `true` when the list was larger than the per-call row cap.                                                          |
| `credits_used`      | Credits charged by the acknowledgement itself, always 0 here.                                                       |

**Example**

{% tabs %}
{% tab title="Input" %}

```json
{
  "api_key": "your_api_key",
  "listname": "Roofing Owners in California",
  "view": "all"
}
```

{% endtab %}

{% tab title="Output" %}

```json
{
  "success": true,
  "job_id": null,
  "status": "queued",
  "list_name": "Roofing Owners in California",
  "rows_selected": 50,
  "rows_fetched": 50,
  "message": "Enriching 47 unique companies across 50 rows for Roofing Owners in California (0.1 credits per company).",
  "truncated": false,
  "credits_estimated": 4.7,
  "view": "all",
  "credits_used": 0
}
```

{% endtab %}

{% tab title="Error" %}

```json
{
  "status": "error",
  "error": {
    "code": "validation_error",
    "message": "state: Extra inputs are not permitted"
  },
  "success": false
}
```

{% endtab %}
{% endtabs %}

**Retrieving results**

* [Check List Status](/get-enrichment-results/check-list-status.md)
* [Download List Data](/get-enrichment-results/download-list-data.md)
