Use case: email list cleaning

# Verify every address on your list before you send

Upload your list as a CSV. PingValid checks each address and returns a verdict, a risk score from 0 to 100, and the result of each check. You download the addresses that passed and decide what to do with the rest.

## When a list needs cleaning

- **You have not emailed it in a long time.** Inboxes get abandoned and domains lapse.
- **You imported it.** An event list, a lead-magnet export, a list from another tool. You have no send history with these addresses.
- **It came from an open signup form.** People mistype domains or enter a throwaway address.

If none of these apply and you email the list regularly, your email platform's own bounce handling is probably doing most of the work already.

## How it works

**1. Export the list from your email platform as a CSV.** Name the column with the addresses `email`, or put the addresses in the first column. Keep the column your platform uses to identify a contact, so you can match results back later.

**2. Upload the CSV in the PingValid dashboard.** You see the credit cost before anything runs. The final charge can be lower: duplicates are removed, and cached repeats on Quick and Standard and `unknown` verdicts cost nothing.

**3. Choose a tier.**

| Tier | What it checks | Credits per address |
|---|---|---|
| Quick | Syntax, domain, MX records, disposable domains, role accounts | 1 |
| Standard | Everything in Quick, plus a check with the receiving mail server | 1 |
| Deep (needs a paid plan or a top-up) | Everything in Standard, plus catch-all detection | 2 |

The mail-server check asks the receiving server whether it would accept mail for that mailbox. No message is sent.

**4. Confirm you have a lawful basis for the list, then run the job.** Before a job starts, you confirm that you have a legitimate reason to process every address in it, such as an existing customer relationship or an opt-in. PingValid does not check how a list was collected.

**5. Read the results.** The job page shows how many addresses came back valid, risky, invalid and unknown. You can filter the rows by verdict.

**6. Download.** "Valid list (CSV)" gives you the addresses that passed. "All (CSV)" gives you every row with its verdict, and there is an NDJSON export if you want the evidence for each check.

**7. Put the cleaned list back.** Suppress or archive the invalid addresses in your email platform, and keep them out of future imports. The steps differ by platform: see the [Klaviyo guide](/blog/clean-email-list-before-klaviyo-send) and the [Mailchimp guide](/blog/remove-invalid-emails-mailchimp-list). PingValid does not connect to your email platform. You export a file and import a file.

## What each verdict tells you to do

| Verdict | What it means | What to do |
|---|---|---|
| `valid` | The address passed the checks. | Keep it. |
| `invalid` | A blocking check failed (bad syntax, no domain, no MX, mailbox rejected), the address is on a disposable domain, or the risk signals add up to more than 70 (on Deep, a role account on a catch-all domain scores 75). | Remove or suppress it. |
| `risky` | The mailbox may exist, but a check raised the risk score: a role account, or a catch-all domain on the Deep tier. | Decide using the evidence. |
| `unknown` | A check could not finish, for example because the receiving server asked to retry later. | Check again later. You are not charged. |

## What real results look like

Four rows from a test set we ran on 2 October 2026. It is a constructed set, built to show one case per row. It is not a customer list, and it says nothing about how a typical list breaks down.

| Address tested | Verdict | Risk | What the evidence said |
|---|---|---|---|
| A made-up mailbox at `gmail.com` | `invalid` | 100 | The server rejected it: "550 5.1.1 The email account that you tried to reach does not exist." |
| `test@mailinator.com` | `invalid` | 75 | Disposable domain. The mail server accepted the mailbox. |
| `postmaster@cloudflare.com` | `risky` | 40 | Role account. The mail server accepted the mailbox. |
| A made-up mailbox at `pingvalid.com` | `valid` on Standard, `risky` on Deep | 0 / 35 | Our own domain accepts mail for any address. Only the Deep tier tests for that. |

Two things to take from it. A mail server saying yes is not the same as safe to send: the disposable address and the role account were both accepted. And on a catch-all domain, the Standard tier cannot tell a real mailbox from a missing one. Deep costs 2 credits per address instead of 1 and is the only tier that detects it. It needs a paid plan or a top-up.

The full table and a seven-step process are in the [email list cleaning checklist](/blog/email-list-cleaning-checklist).

> Only the Deep tier detects a catch-all domain. It needs a paid plan or a top-up. [See the plans](#what-it-costs)

## What it costs

Pricing is flat and published. One validation uses 1 credit on Quick or Standard and 2 on Deep.

| Addresses you validate in a month | Tier | Credits | Plan that covers it |
|---|---|---|---|
| 100 addresses | Quick or Standard | 100 | Free: 100 validations a month, no card |
| 5,000 addresses | Standard | 5,000 | Starter: $19 a month |
| 50,000 addresses | Standard | 50,000 | Growth: $79 a month |
| 25,000 addresses | Deep | 50,000 | Growth: $79 a month |

A large list may need more than one job.

- `unknown` verdicts are not charged.
- A repeat check served from cache is free on Quick and Standard, and 1 credit on Deep.
- Credits do not expire. On a paid plan, each renewal adds the plan's credits to what you have left. On the Free plan the balance is topped back up to 100 once a month; it does not add up.
- There are no overage charges. When credits run out, new checks stop until you top up or upgrade.
- No annual lock-in.

The full table is on the [pricing page](/pricing).

## If a valid address still bounces

If we return a `valid` verdict and you produce verified bounce evidence within 7 days of the validation, we refund 1 credit per bounce, capped at 5% of your monthly validation volume. The refund is per bounce, not a whole-list threshold, and it applies on every plan.

## What cleaning does not do

- **It does not control inbox placement.** Validation tells you whether an address can receive mail at the time of the check. Where your campaign lands also depends on your sending domain, your content, and how recipients respond.
- **It does not make a list lawful to email.** PingValid checks whether an address can receive mail. It does not check whether you have permission to email it.

## Other ways to run the same checks

- **Inside Claude.** Add PingValid as a connector and ask Claude to validate a list of up to 1,000 addresses per job. See [how to clean a list inside Claude](/use-cases/email-list-cleaning-in-claude).
- **At signup.** Check each new address through the API before it reaches your list. See [how to check addresses at signup](/use-cases/signup-email-validation).

## Questions

**Can I try it before paying?**
Yes. The Free plan gives you 100 validations a month and needs no card. Run a sample of your list on the Standard tier and read the results before you decide.

**Which tier should I use?**
Standard for most lists: it includes the check with the receiving mail server. Use Deep, which needs a paid plan or a top-up, when you need catch-all detection: a domain that accepts mail for any address returns `valid` on Standard for a mailbox that does not exist, and only Deep detects that.

**Does PingValid work with Klaviyo or Mailchimp?**
It works with any platform that can export and import a CSV. There is no direct connection: you export the list, upload it to PingValid, and import the cleaned file.

**Do I pay for addresses that come back unknown?**
No. `unknown` verdicts are not charged.

**Does cleaning a list guarantee no bounces?**
No. A check describes the address at the time of the check. If a `valid` address hard-bounces and you produce verified bounce evidence within 7 days of the validation, we refund 1 credit per bounce, capped at 5% of your monthly validation volume.
