Skip to content

How to clean an email list

A practical method for cleaning an email list before a send: gather it, drop what you already know, verify every address, sort by recommendation, decide on the doubtful ones, and send in stages.

Email lists decay on their own. People change jobs, close mailboxes, and let domains expire. Nothing warns you: you find out on send day, in your bounce rate.

Before a campaign, especially one going to a list you have not used in months, a cleanup saves you from paying for contacts who will never read a word, and it protects your domain's reputation. Here is a six-step method that works with any sending tool.

  1. Gather a single list

    Export your contacts from wherever they live: your CRM, your email marketing tool, your online store. If they are spread across several tools, merge them into one file.

    Verification only needs the email column. Keep the full export aside so you can bring the results back next to your other columns afterward.

    PricklyMails accepts a .csv or .txt file with one address per line, or addresses separated by commas. You can also paste the list straight into the dashboard.

  2. Drop what you already know

    Some addresses do not need verifying to be removed.

    • Unsubscribes and complaints. Someone who unsubscribed should not get your campaigns again, even if their address works fine.
    • Known hard bounces. Your sending tool keeps them in its history or a suppression list: do not import them back.
    • Obvious test addresses such as test@test.com or aaa@aaa.com.

    Duplicates within one request are removed and not billed; if you send a long list in several chunks, deduplicate it first.

  3. Verify every address

    Drop the file into the dashboard, or send the list through the API if cleanup is part of an automated workflow. A batch holds at least 20 addresses, and how large it can be depends on your plan: up to 100 addresses on Free, 1,000 on Starter, 10,000 on Pro, 100,000 on Business, and 1,000,000 on Enterprise. The list is processed in the background: follow its progress in the dashboard, or poll the batch through the API. Once it finishes, the Notifications page of the dashboard tells you how many addresses to send, review and remove. Here list.json holds { "name": "Customer win-back", "emails": [...] }, the addresses of your list.

    Request
    curl -X POST https://api.pricklymails.com/api/batches \
      -H "Authorization: Bearer pm_live_your_key" \
      -H "Content-Type: application/json" \
      -d @list.json
    

    You pick which checks to run, and you pay for each check run on each address, not a flat price per address. For a cleanup, the essentials are the address format, the domain and its mail servers, the mailbox itself, and disposable addresses. Catch-all detection is available from the Pro plan up; without it, an address on a domain that accepts everything comes back valid with a "send" recommendation.

    An address verified recently, by you or by another customer, is served again for free. That verification cache is shared across customers and holds no address in clear, only fingerprints and results.

  4. Sort by recommendation

    Every address comes back with a recommendation, a plain-language reason, and a score from 0 to 100. Sort on the recommendation first. The report you download from a dashboard batch has a row for each address of your file, with these labels: a malformed address is in it too, marked Remove.

    • Send The mailbox is confirmed, or the address sits at a mainstream provider (Google, Microsoft, Yahoo) that does not reliably answer: it comes back valid with a capped score and the reason shown.
    • Remove Mailbox not found, a domain with no mail server or a parked one, a disposable or malformed address, a typo in the domain.
    • Review A generic address (info@, sales@), a catch-all domain, or a server that did not answer or kept asking to try again later.

    For a typo, the result comes with a suggestion: jane@gmial.com suggests jane@gmail.com.

    Warning

    Do not swap the address in without checking: the suggestion tells you what the person probably meant to type, not what they typed.

    The score is there for your own rules, for example to sort more strictly before a cold outreach campaign.

  5. Decide on the addresses to review

    "Review" does not mean "bad". It means a human decision beats an automatic rule here, and the reason shown points you in the right direction.

    The reasons behind a review recommendation, and a sensible call for each
    ReasonWhat is going onA sensible call
    Generic addressA shared mailbox, read by a team or by nobodyKeep it if the company knows you, drop it for cold outreach
    Catch-all domainThe domain accepts every address, so the mailbox cannot be confirmedSend to a small group first and watch the bounces
    Not verifiableThe server did not answer in time, or refused toVerify again later; the tests that got no answer were refunded

    Catch-all domains have a guide of their own: Catch-all domains: why the mail server cannot confirm the mailbox.

  6. Send in stages and watch

    Even after a cleanup, an old list deserves a gradual send.

    1. Start with your most recent or most engaged contacts.
    2. Look at the bounce rate of that first send before mailing the rest.
    3. Remove every new hard bounce right away.

    For reference, Amazon SES recommends keeping bounces below 2% and places an account under review from 5%. The details are in Why emails bounce.

How often to clean

There is no universal schedule; it depends on how the list lives. Three moments almost always call for a pass:

  • Before mailing a list that has been dormant for several months.
  • After importing a new source: a trade show, a partnership, an old file someone found.
  • When your bounce rate creeps up, even slightly, from one campaign to the next.

Between those moments, verifying at the door does most of the work.

Keeping the list clean afterward

The best cleanup is the one you never have to repeat.

  • Verify at the door. One API call at signup stops typos and disposable addresses before they ever reach your list.
  • Confirm signups by email: a click on the confirmation link proves the mailbox exists.
  • Re-verify before a big send if the list has not been used in months.
  • Remove bounces after every campaign, without waiting for the next cleanup.

To see what verification gives you, create an account: the free tokens you get on signup let you try it on a few addresses, no credit card required. For a whole list, pick the plan that fits its size.

  • Why emails bounce, and what it costs

    Hard bounces, soft bounces, what each one costs your sender reputation and your sending account, and the habits that keep your bounce rate low.

  • Catch-all domains: what they are

    What a catch-all domain is, why the mail server's answer cannot confirm a mailbox behind one, what PricklyMails returns instead, and what to do with those addresses.

  • ZeroBounce alternative: comparison

    PricklyMails and ZeroBounce compared on verifiable points: pricing model, price per 1,000 addresses, free tier, credit expiry, unknown results, catch-all handling, data retention and hosting, API, and MCP.

  • What dead email addresses really cost

    Most email tools stop billing an address once it bounces. The real cost is elsewhere: a suspended account, a tier paid until renewal, and your sender reputation.

Check your list before your next send.

1,000 tokens free when you sign up, no credit card. After that, you only pay for answers.