# Compare Datasets

Compare two lists by a key, row by row.

## Do things in Compare Datasets

Add a **Compare Datasets** step. Choose the row to see all its fields.

- [Compare Datasets](https://docs.gorunner.io/apps/compare-datasets#fields-f-compare): Compare input A (old) with input B (new) by a key field.

Later steps read a step’s output by its name: see [Use data from earlier steps](https://docs.gorunner.io/build/use-data-from-earlier-steps).

**What changed in version 2?**

New steps use version 2.0.0. A step made before keeps 1.0.0 and works as it always has. The step’s panel shows its version at the top right. On an older step it reads **v1.0.0 · 2.0.0 available**: press it to choose the version.

In 2.0.0: **Ignore Type Differences** is on by default, so `30` and `"30"` count as the same value. In version 1.0.0 it is off, and types must match exactly.

Not in your list? See [When an app isn’t here](https://docs.gorunner.io/apps/when-an-app-isnt-here#q-not-in-list).

## For developers

In the API, which calls apps pieces, Compare Datasets is `pieceId: "compare"` with `actionId: "compare"`. [Get an app](https://docs.gorunner.io/api/apps/get-app) returns every field.

It computes from its inputs only (`pure`). See [How versions and side effects work](https://docs.gorunner.io/apps#q-versions).

### Compare Datasets › Compare Datasets

Compare input A (old) with input B (new) by a key field.

- **Input A (old) · Required**: The baseline array, such as {{steps.previous.rows}}.
- **Input B (new) · Required**: The new array to compare against A.
- **Key Field(s) · Required**: Field(s) that identify a row, present in both arrays. For a composite key, list several comma-separated (such as orderId,lineId), and all must match. Dot-notation nested paths are supported.
- **Fields to Skip Comparing · Optional**: Comma-separated fields to ignore when deciding whether two matched rows differ (such as updatedAt, lastSeen). They still appear in the output rows.
- **Ignore Type Differences · Optional**: Treat a number and the same number written as text (30 and "30"), or true and "true", as equal. Rows read from a CSV or a Sheet hold text. On by default.

Source: https://docs.gorunner.io/apps/compare-datasets
