Skip to content

Verify the email addresses of your Clerk users

Integration Signups and authentication

Clerk email verification in three steps: export your users, verify the file in PricklyMails, then delete the accounts whose address cannot receive mail.

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

Verify for free

Step by step

Clean your list in three steps

  1. In Clerk

    Export your users from Clerk

    Before you start

    Exporting users is limited to the admins of your Clerk workspace, or to a personal workspace.

    1. In the Clerk Dashboard, open the instance that holds your users, then go to its Settings.
    2. In the User exports section, select Export users.
    3. Once the new entry appears in the export history, select Download to save the CSV file.
    4. Open the file in a spreadsheet and delete every column but the email addresses.
    5. Save the result as a new CSV file, then delete the export you downloaded.

    Warning

    Clerk's export holds every user's hashed password. Upload only the new file to PricklyMails, never the export itself, and delete the export once the email column is saved.

    SourceClerk'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 Clerk: 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 Clerk 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 Clerk

    Bring the result back into Clerk

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

    Remove

    Their users are deleted, one at a time from the Users page: Clerk has no bulk deletion.

    Clerk's suppression list cannot take them: Clerk adds an address to it after a bounce or a spam report, and the Dashboard offers no way to add one yourself.

    1. In the Clerk Dashboard, go to Users.
    2. Select the user whose address is to remove, to open their profile.
    3. Open the Actions dropdown, then select Delete user.
    4. Repeat for each address to remove.
    Review

    They deserve a look before you email your users. In Clerk, filter Email logs by each address: a bounced event means the recipient's server has already bounced one of Clerk's emails, and Clerk may have stopped sending to it. The user's profile shows their other identifiers, such as a phone number or a connected account.

    Send

    Their users stay as they are: nothing to do.

    Tip

    To skip the profile, select the menu icon on the right of the user's row in Users, then Delete user.

Verify each address before it reaches Clerk

Does your backend create users through Clerk's Backend API, with the createUser() (opens in a new tab) call, to import them or to add them yourself? Ask PricklyMails first: Clerk marks the addresses created this way as verified by default. If the recommendation is remove, don't create the user.

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

Clerk verifies addresses at sign-up, so why verify my users?

By default, Clerk requires a user to verify their address before the sign-up completes. Users created through the Backend API skip that step: Clerk marks their addresses verified by default, and Clerk's migration tool, like most imports from another system, creates users through that same API. An address that worked at sign-up can also stop receiving mail later. Once it bounces, Clerk can put it on its suppression list, and then sends it nothing more, verification emails included, until you remove it. Verifying your users finds those addresses before the bounce.

Should I delete or ban a Clerk user whose address cannot receive mail?

Deleting removes the user from your instance. Banning, from the user's profile, keeps them in your instance, marked as banned: Clerk revokes all their sessions and does not let them sign in again. Either way, Clerk handles one user at a time: its docs say bulk deletion cannot currently be done from the Dashboard or programmatically, and send you to Clerk support for it.

SourceClerk's official help center

Clerk can block disposable addresses: does that replace verifying?

The two complement each other. On the Protections page, Block sign-ups that use disposable email addresses stops every address known to be disposable from signing up or being added to an account: turn it on. It acts on new addresses, at sign-up or when one is added. Verifying your users covers the rest: the users who were in your instance before you turned it on, and the addresses that have stopped receiving mail since their sign-up.

SourceClerk's official help center

Does PricklyMails connect to Clerk 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 Clerk.

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.