> Discover all available pages from the documentation index: https://mastra.ai/llms.txt

# dataset.finalizeExperiment()

**Added in:** `@mastra/core@1.61.0`

Finalizes a caller-driven experiment created with [`createExperiment()`](https://mastra.ai/reference/datasets/createExperiment), with or without a target. Mastra computes the final counts server-side from the persisted result rows and marks the experiment `'completed'`, so the caller never tracks completion bookkeeping.

Counts are per item, so `succeededCount + failedCount + skippedCount === totalItems` even when items have multiple attempts:

- `succeededCount`: items where at least one attempt completed without an error
- `failedCount`: items that were submitted but where every attempt errored
- `skippedCount`: dataset items that were never submitted (any attempt)

Attempt-level detail remains available through [`listExperimentResults()`](https://mastra.ai/reference/datasets/listExperimentResults).

Finalization is idempotent: calling it on an already-finalized experiment returns the stored record without recomputing.

## Usage example

```typescript
const experiment = await dataset.finalizeExperiment({ experimentId })

console.log(experiment.status) // 'completed'
console.log(experiment.succeededCount)
console.log(experiment.failedCount)
console.log(experiment.skippedCount)
```

## Parameters

**experimentId** (`string`): ID of the experiment to finalize.

## Returns

Returns a `Promise<Experiment>`, the updated experiment record with final status, counts, and `completedAt` timestamp.

## Related

- [dataset.createExperiment()](https://mastra.ai/reference/datasets/createExperiment)
- [dataset.runExperimentItem()](https://mastra.ai/reference/datasets/runExperimentItem)
- [dataset.submitExperimentResult()](https://mastra.ai/reference/datasets/submitExperimentResult)
- [Running experiments](https://mastra.ai/docs/datasets/running-experiments)