> 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/schedule-run-history.md).

# Schedule Run History

What each recent run found - jobs, contacts and usable emails.

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

The recent runs of one schedule, newest first: how many jobs each found and how many were new, how many people it added to the list, and how many of them have a usable email.

{% hint style="info" %}
**Free.** `credits_used` is always `0`.
{% endhint %}

{% hint style="warning" %}
**The newest run keeps counting.** People and emails arrive after the jobs, so the newest run's `contacts_found` and `usable_emails` keep growing until the next run starts. `counts_final` is `false` until then. They are counted from the list, so contacts added to the same list by hand in between count with the run before them. Runs are recorded from 2026-09-29 onward.
{% endhint %}

## Headers

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

## Body

| Name          | Type    | Description                                                                |
| ------------- | ------- | -------------------------------------------------------------------------- |
| `api_key`     | string  | **Required.** Your API key.                                                |
| `schedule_id` | integer | **Required.** From [List Schedules](/search/job-search/list-schedules.md). |
| `limit`       | integer | How many recent runs. Default `10`, most `50`.                             |

## Response

`data.runs` is a list, newest first. Each run has:

| Field                       | Description                                                                                                                                                |
| --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `run_id`                    | The run's id.                                                                                                                                              |
| `trigger`                   | What started it: `scheduled`, `run_now`, `created` (a schedule saved with `run_now`) or `manual` (a one-off search into the same list).                    |
| `status`                    | The jobs part: `processing`, `done`, `not_found` (no jobs) or `error`. A scheduled run skipped for too few credits is `error`, with the reason in `error`. |
| `started_at`, `finished_at` | When the jobs part started and finished.                                                                                                                   |
| `jobs_found`                | Jobs the search returned.                                                                                                                                  |
| `jobs_new`                  | Jobs saved because they were not already on the list. These are the ones charged.                                                                          |
| `job_credits_used`          | Credits for the jobs: `0.1 x jobs_new`.                                                                                                                    |
| `contact_search_status`     | The people search: `not_requested`, `queued`, `processing`, `done` or `error`.                                                                             |
| `contacts_found`            | People added to the list by this run.                                                                                                                      |
| `usable_emails`             | Of those, people with a valid or accept-all email. Same rule as the Lists page's Verified Email Count.                                                     |
| `counts_final`              | `false` while this is the newest run.                                                                                                                      |
| `error`                     | Why a run failed or was skipped, or `null`.                                                                                                                |

## Example

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

```json
{
  "api_key": "your_api_key",
  "schedule_id": 62
}
```

{% endtab %}

{% tab title="Output" %}

```json
{
  "status": "success",
  "credits_used": 0.0,
  "credits_remaining": 6012.5,
  "total": 1,
  "data": {
    "schedule_id": 62,
    "list_name": "Roofing Estimator Jobs TX",
    "runs": [
      {
        "run_id": "1",
        "schedule_id": 62,
        "list_name": "Roofing Estimator Jobs TX",
        "trigger": "created",
        "status": "done",
        "started_at": "2026-09-29T00:43:40.763676+00:00",
        "finished_at": "2026-09-29T00:44:18.051411+00:00",
        "jobs_found": 10,
        "jobs_new": 10,
        "job_credits_used": 1.0,
        "contact_search_status": "done",
        "contacts_found": 2,
        "usable_emails": 1,
        "counts_final": false,
        "error": null
      }
    ]
  }
}
```

{% endtab %}
{% endtabs %}
