# Samples

> Preview up to 25 masked records for free, with why each one matches and where each field came from. The same audience always returns the same rows.

Source: https://emailmovers.com/mydatahub/docs/samples
Updated: 4 October 2026

A sample costs 0 credits and shows up to 25 masked records before you spend anything: 10 rows in the app and up to 25 through `POST /v1/previews` or `preview_records`. Each row says why it matches and where each field came from, which is the evidence the ICO asks buyers of broker data to check. Contact details stay masked until you order.

> **Not yet live.** MyDataHub v2 is built and tested locally and is not yet live. This page describes the contract the API is tested against, and the launch date is to confirm.

## Request a sample

Send exactly one of `audience` or `count_id`.

```json
{ "count_id": "cnt_7K2PQ4MAXN3R6TBY5WDZ", "limit": 10 }
```

| Member | Meaning |
| --- | --- |
| `audience` or `count_id` | The audience to sample, inline or by `aud_` id, or a count you already ran. Exactly one |
| `limit` | Rows to return, 1 to 25. Default 10 |
| `shuffle` | Draw a new seed. Default false, so a repeat returns the same rows |

Rows come from a seed fixed per audience, so repeating a request returns the same rows. A shuffle draws a new seed, counts against your rate budget and is logged. See [Rate limits](https://emailmovers.com/mydatahub/docs/rate-limits.md).

## What a row holds

| Member | What it shows |
| --- | --- |
| `id` | A session-scoped `prv_` id. It means nothing outside the session |
| `title`, `job_level`, `job_function` | The role |
| `company`, `site` | Company name, Companies House number and status, employee band, SIC codes, town, postcode district and region |
| `email_masked`, `phone_masked` | The first character of the local part and the top-level domain, such as `j••••@••••.co.uk`, and a phone with its middle digits hidden, such as `0113 ••• •••1` |
| `badges` | Verified with a date, Re-checking, Unverified, or Suppressed when the row matches one of your lists |
| `why_it_matches` | Each filter the record satisfies, with a JSON pointer, the field, the actual value and a sentence |
| `provenance` | The source of each field, when it was first seen and last verified, the verification method, the Article 14 notice status, the TPS and CTPS screen date (none when not screened) and the lawful basis |
| `compliance` | The full compliance object that every record carries |

A "why it matches" entry reads like "Marketing Director matched marketing manager through expansion" or "Employees 120, inside 50 or more". Masking runs on the server, so an unmasked value never leaves it.

## Rules that protect people

- **No sample under 25.** When the count is under 25 the response is a 200 with no rows and a `withheld` reason, because looking is free and a small count must not identify anyone.
- **Rare titles are withheld.** A row whose title is held by fewer than 10 people is left out.
- **Sample files are watermarked.** A sample downloaded as CSV carries your account id.
- **Verified always has a date.** A badge never says verified without one.

## Why samples exist

A count says how many. A sample says whether they are the right people, with the evidence to judge lawful use. The next step is a [machine quote](https://emailmovers.com/mydatahub/docs/quotes-and-orders.md), which prices the count and tells you what an order would remove as duplicates or suppressions.

## Next steps

- Read what each count measures in [Counts and breakdowns](https://emailmovers.com/mydatahub/docs/counts.md).
- See every member in [REST reference: Preview sample records](https://emailmovers.com/mydatahub/docs/reference/rest/create-preview.md).
- Check records you already hold with [Suppressions and objections](https://emailmovers.com/mydatahub/docs/suppressions.md).
