> 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/search/job-search/list-lookup.md).

# List Lookup

Run a LinkedIn jobs search and save the results into a Parvenu list.

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

{% hint style="info" %}
Costs **0.1 credit per job**. `credits_used` is the amount deducted, and it is the number of billed jobs multiplied by `credits_per_row`. Rows dropped by `exclude_staffing_company` are not billed, and with `unique_jobs` (on by default) you are billed only for the postings actually inserted, not for duplicates that were skipped.

Unlike most other list-scoped endpoints this one responds **synchronously** with the search result — there is no job acknowledgement and nothing to poll `/check_list_status` for. Retrieve saved postings any time afterwards with [Download Jobs List](/get-enrichment-results/download-jobs-list.md).
{% endhint %}

{% hint style="warning" %}
`max_results` has a minimum of **10**. The job search provider will not run a smaller batch, so anything below it is rejected. Ten jobs is 1 credit, which is the cheapest possible test run.
{% endhint %}

Same search filters as [Individual Lookup](/search/job-search/individual-lookup.md), plus `listname` to save the results and `unique_jobs` to skip postings already saved for that list.

{% hint style="info" %}
**LinkedIn's job search matches the employer name, not the posting text.** Searching `ZoomInfo` returns ZoomInfo's own job ads, not jobs that mention ZoomInfo as a required tool, and quoting a phrase does not change that. To find postings that *mention* something, save a broad title-filtered set and search the `description_text` field of the downloaded rows.
{% endhint %}

**Headers**

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

**Body**

| Name                       | Type             | Description                                                                                                                                                               |
| -------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `api_key`                  | string           | Your API Key.                                                                                                                                                             |
| `listname`                 | string           | Name of the list to save the jobs found to.                                                                                                                               |
| `unique_jobs`              | boolean          | Optional, defaults to `true`. Skips jobs already saved on this list and bills only the ones inserted. Set `false` to save and bill every job returned, including repeats. |
| `url`                      | string           | Optional. Pre-built LinkedIn jobs search URL. If provided, the structured filters below are ignored.                                                                      |
| `keywords`                 | string           | Optional. Keyword query string for the jobs search. Matched against the employer name — see the note above.                                                               |
| `location_geo_id`          | string           | Optional. LinkedIn geoId for the location filter, e.g. `"103644278"` for United States.                                                                                   |
| `time_posted`              | string           | Optional. One of `Any Time`, `Past 24 Hours`, `Past Week`, `Past Month`.                                                                                                  |
| `job_types`                | array of strings | Optional. Subset of `Full-time`, `Part-time`, `Contract`, `Temporary`, `Volunteer`, `Internship`.                                                                         |
| `experience_levels`        | array of strings | Optional. Subset of `Internship`, `Entry level`, `Associate`, `Mid-Senior level`, `Director`, `Executive`.                                                                |
| `salary_min`               | string           | Optional. One of `Any`, `$40,000+`, `$60,000+`, `$80,000+`, `$100,000+`, `$120,000+`, `$140,000+`, `$160,000+`, `$180,000+`, `$200,000+`.                                 |
| `max_results`              | integer          | Optional. Maximum jobs to find. Defaults to 100, minimum 10.                                                                                                              |
| `exclude_staffing_company` | boolean          | Optional, defaults to `false`. Drop jobs posted by staffing, recruiting and RPO firms. See below.                                                                         |

**Excluding staffing companies**

LinkedIn has no filter for this, so it is applied to the jobs found after the search, by matching each hiring company's description against a staffing keyword list. Excluded rows are not saved and not billed, and the response reports `rows_excluded`. The match is deliberately broad — a product company whose description talks about hiring or talent may be dropped too.

**Response**

The job postings found are under `data`, in the same shape as [Individual Lookup](/search/job-search/individual-lookup.md). See [Response Format](/getting-started/response-format.md) for the fields every endpoint returns.

| Field             | Description                           |
| ----------------- | ------------------------------------- |
| `total`           | Jobs returned by the run.             |
| `rows_fetched`    | Jobs found before filtering.          |
| `rows_saved`      | Jobs written to the list.             |
| `rows_excluded`   | Jobs dropped as staffing companies.   |
| `credits_per_row` | Credit cost of one billed job.        |
| `list_name`       | The list the jobs were saved to.      |
| `search_url`      | The LinkedIn search URL the run used. |

**Example**

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

```json
{
  "api_key": "your_api_key",
  "keywords": "Sales Operations",
  "time_posted": "Past Week",
  "max_results": 10,
  "listname": "my_jobs_list",
  "exclude_staffing_company": true
}
```

{% endtab %}

{% tab title="Output" %}

```json
{
  "status": "success",
  "data": [
    {
      "job_id": "4438294673",
      "job_title": "Director, Sales Operations",
      "organization_name": "Angi",
      "job_location": "Denver, CO",
      "job_url": "https://www.linkedin.com/jobs/view/director-sales-operations-at-angi-4438294673",
      "posted_at": "2026-09-10",
      "employment_type": "Full-time",
      "seniority": "Director"
    }
  ],
  "credits_used": 0.6,
  "credits_remaining": 4822.4,
  "total": 6,
  "rows_fetched": 10,
  "rows_saved": 6,
  "rows_excluded": 4,
  "credits_per_row": 0.1,
  "list_name": "my_jobs_list",
  "search_url": "https://www.linkedin.com/jobs/search/?keywords=Sales+Operations&f_TPR=r604800",
  "message": "Job search completed",
  "success": true
}
```

{% endtab %}

{% tab title="Error" %}

```json
{
  "status": "error",
  "error": {
    "code": "validation_error",
    "message": "max_results: Input should be greater than or equal to 10"
  },
  "success": false
}
```

{% endtab %}
{% endtabs %}

**Retrieving results**

* [Download Jobs List](/get-enrichment-results/download-jobs-list.md)
