Skip to content

Verify your Loops contacts before you send

Integration Sending and campaigns

Loops email verification in three steps: export your audience, verify the file in PricklyMails, then unsubscribe the addresses that cannot receive mail.

There is no native Loops connector: you export the list, PricklyMails verifies it, and you bring the result back into Loops. New addresses can go through the API before they ever reach Loops.

Verify for free

Step by step

Clean your list in three steps

  1. In Loops

    Export your audience from Loops

    1. Go to the Audience page.
    2. Click the ••• menu icon in the top right of the filter box, then Download.

    Tip

    To verify part of your audience only, such as the contacts still subscribed, set a filter first: the file then holds the contacts it shows. It has a column for every contact property, so keep the email column alone in a spreadsheet before moving on.

    SourceLoops's official help center
  2. In PricklyMails

    Verify the file in PricklyMails

    1. In the dashboard, open Batches and click New batch.
    2. Drop the file you exported from Loops: a .csv or .txt with one address per line, no header row and no quotes. A header row would count as an address in the estimate, though it is never billed, and a quoted address would not be verified: the report lists both as malformed. You can also paste the list.
    3. The dashboard counts the addresses and shows the estimated cost in tokens before anything is sent, then you click Submit batch. A batch holds at least 20 addresses, and your plan sets the largest list it can hold.
    4. The list is verified in the background. Once the batch is done, open it and click Download report: you get a CSV with a row for each address of your file, giving its verdict, its reason, its score and its recommendation, with the dashboard's labels.

    Note

    Download the report from the browser that sent the list: that browser is what keeps the addresses, for the 16 most recent batches at most. Our servers, in Germany, only keep a one-way fingerprint of each one.
    What the report says

    Every address gets a recommendation: the action to take. The report writes it with the dashboard's label; the API returns a short form of it.

    Send
    The address is valid, or hosted by a large provider that accepts every address without confirming any. Send as usual.
    Review
    A domain that accepts any address (catch-all), a generic address such as contact@, a full mailbox, or a server that never answered, or refused to. Take a look before you send.
    Remove
    The address does not exist, its domain cannot receive mail, or it is disposable, mistyped or malformed. Take it out.

    Note

    A malformed address is never verified: the batch counts it under "Malformed addresses", and the report still lists it, with the verdict "Invalid", the reason "Malformed address" and the recommendation "Remove", so you take it out of Loops with the others. A duplicate, counted under "Duplicates removed", appears only once.

    Behind each recommendation sit a verdict (Valid, Risky, Invalid or Not verifiable), a reason and a score from 0 to 100, each in its own column of the report. When a server never answers, the address comes back "Not verifiable" and the checks that got no answer are refunded.

  3. In Loops

    Bring the result back into Loops

    Open the report in a spreadsheet and filter the Recommendation column.

    Remove

    They get unsubscribed: Loops stops sending them your campaigns and workflow emails, and no longer counts them toward your plan.

    A CSV upload updates each contact it matches by email address, and a Subscribed column holding false marks it unsubscribed.

    1. In a spreadsheet, put the addresses to remove in a column headed Email.
    2. Add a column headed Subscribed, write false on every row, and save the file as CSV.
    3. In Loops, select Import in the top right of the Audience page.
    4. Hover on CSV, click Upload CSV, and upload the file.
    5. Review the duplicates or missing information Loops points out, then finish the upload.
    Review

    They deserve a look before your next campaign. To find them in Loops, upload them the same way with a column such as emailCheck holding review instead of Subscribed: Loops stores it as a custom contact property, which a filter on the Audience page can select.

    Send

    They stay subscribed: nothing to do.

    Note

    An unsubscribed contact still receives your transactional emails: unsubscribing only stops campaigns and workflow emails.

    Warning

    Set Subscribed to false only for the addresses to remove: Loops cannot re-subscribe a contact through a CSV upload or from the Audience page, only through its API.

    SourceLoops's official help center

Verify each address before it reaches Loops

Does your signup form or backend add contacts to Loops through its API, with the Create a contact (opens in a new tab) call? Ask PricklyMails first. If the recommendation is remove, don't create the contact.

One call starts the verification and already flags a likely typo, a second one reads the verdict. Depending on your plan, a signed webhook can also send it to you as soon as it's ready.

Request
curl -s https://api.pricklymails.com/api/verify \
  -H "Authorization: Bearer pm_live_9f3a..." \
  -H "Content-Type: application/json" \
  -d '{ "email": "ana.silva@gmail.con" }' \
  | jq '{job_uuid, suggestion}'
Response
{
  "job_uuid": "8f1c2a9e-4b7d-4e2a-9c61-3d5f0b7a2e18",
  "suggestion": "ana.silva@gmail.com"
}
Request
curl -s https://api.pricklymails.com/api/verify/$JOB_UUID \
  -H "Authorization: Bearer pm_live_9f3a..." \
  | jq '.verifications[0] | {status, reason, score, recommendation}'
Response
{
  "status": "invalid",
  "reason": "no_mx_records",
  "score": 0,
  "recommendation": "remove"
}
Read the API docs

Frequently asked questions

Loops advises against list-cleaning services: why verify anyway?

Loops' guide to bounce rates does not recommend running your audience through external verification services: it says they flag valid mailboxes as invalid, can generate probe traffic that hurts your sender reputation, and leave the usual cause, signup hygiene or sending to disengaged contacts, untouched. PricklyMails recommends remove only when the domain or mailbox does not exist, or the address is disposable or mistyped; one it cannot confirm gets review. It checks from its own servers and domain and sends no email, so your sender reputation is not involved. And its API checks each address at signup, before it reaches Loops, where that guide puts the fix.

SourceLoops's official help center

Loops already suppresses bounced addresses, so why verify first?

Loops suppresses an address after a hard bounce or a complaint: by then the email has gone out and the bounce has counted. Its guide calls a bounce rate under 2% healthy and deliverability at risk above 5%. It traces bounces on a mailbox that does not exist to stale addresses, often from old imported lists, and those on a domain not found to typos. Those are the addresses verification finds before you send.

Should I unsubscribe or delete the contacts to remove?

Unsubscribe them. Loops' help suggests keeping unsubscribed contacts in your audience: deleted and added back later, they may end up subscribed again. An unsubscribed contact does not count toward your plan and gets no campaigns or workflow emails, but still receives your transactional emails. If one of those bounces, Loops suppresses the address, which blocks every send to it.

Does PricklyMails connect to Loops directly?

No, there is no native connector: you go through a file export, as above. You can also call the PricklyMails API from your own code before an address reaches Loops.

These trademarks belong to their respective owners. Naming them implies no partnership.

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.