# job.finished

A job ended, with what it did: counts, duration

Profile: [Logs](https://www.prongs.dev/docs/intents/logs.md) · Written with: [`log()`](https://www.prongs.dev/docs/profiles/logs.md) · Level: `info`

## Example

```ts
log('job.finished', 'Redirects synced', { count: 40, tookMs: 1830 });
```

Writes

```ts
{
  "intent": "job.finished",
  "level": "info",
  "alert": false,
  "message": "Redirects synced",
  "data": {
    "count": 40,
    "tookMs": 1830
  },
  "time": "2026-10-09T12:00:00.000Z"
}
```

## Choosing between neighbours

Find the row that describes your case, and use the intent on the right.

| If it is for… | Use |
|---|---|
| A job ended, with what it did: counts, duration | `job.finished` (this page) |
| A job that stopped on an error | [`incident.failed`](https://www.prongs.dev/docs/intents/incident/failed.md) |
| Anything someone running the app needs to see (rather than [`debug.trace`](https://www.prongs.dev/docs/intents/debug/trace.md)) | `job.finished` (this page) |

## Connections

Declared in the registry, both directions. Where an intent is used in your own code is something check and the gallery see; this site has no app code.

- Built from: [`level.info`](https://www.prongs.dev/docs/intents/logs.md#level-info)

## For registry authors

**Starter intents.** These are the intents `prongs add logs` puts in your registry. Change levels through the [`level.*`](https://www.prongs.dev/docs/intents/logs.md#level) intents, and point [`log()`](https://www.prongs.dev/docs/profiles/logs.md) at your logger.

The entry `prongs add logs` writes into your registry. Change the level through its [`level.*`](https://www.prongs.dev/docs/intents/logs.md#level) ref.

```ts
'job.finished': {
  kind: 'semantic',
  description: 'A job ended, with what it did: counts, duration',
  refs: ['level.info'],
  notFor: [
    {
      context: 'a job that stopped on an error',
      instead: 'incident.failed',
    },
  ],
},
```
