Skip to content

Verify the email addresses of your Paddle customers

Integration E-commerce and payments

Paddle email verification in three steps: export your customers through a report, verify the file in PricklyMails, then fix or archive the addresses to remove.

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

Verify for free

Step by step

Clean your list in three steps

  1. In Paddle

    Export your customers' addresses from Paddle

    1. Go to Paddle then Reports.
    2. Under the Build reports tab, find Subscriptions, then click Build report.
    3. Use the filter options to pick the subscriptions to include, such as by status.
    4. Click Generate report.
    5. Look out for the email from Paddle, then click Download report in it.

    Tip

    Sell one-time products too? Build the Transactions report the same way: it has one row per transaction, with the same customer_email column. PricklyMails only needs the addresses: keep the report as it is, since its customer_id column brings the result back, and copy the customer_email column alone into a new file for the batch.

    Note

    This page covers Paddle Billing. Data on reports may be delayed by up to 24 hours, so a customer created in the last day can be missing from the file. A report stays available to download for 14 days.

    SourcePaddle'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 Paddle: 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 Paddle 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 Paddle

    Bring the result back into Paddle

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

    Remove

    Paddle has no delete: give each customer you still bill a working address, and archive the customers you no longer need.

    Paddle sends receipts, billing reminders and payment-failed notices to the customer's address. Its docs describe changing that address, or archiving a customer, through the API, with the customer's ID.

    1. Go to Paddle then My account then Settings then Authentication, then click the API keys tab.
    2. Click New API key, enter a name, then give the key the customer.write permission, which Update a customer requires.
    3. Set an expiry date, click Save, then copy the key: Paddle shows it only once.
    4. In the report you exported, find the customer_id of each address to remove.
    5. For a customer you still bill, ask them for a working address.
    6. Send the Update a customer request, PATCH /customers/{customer_id}, with the new address in email.
    7. For a customer you no longer need, send the same request with status set to archived instead.
    Review

    They deserve a look before their next renewal. To see one in Paddle, go to Paddle then Customers, click the three-dot button next to the customer, then choose View customer. If the address looks mistyped, ask the customer for the right one and update it the same way as an address to remove.

    Send

    They keep their address: nothing to do.

    Note

    A new address updates the customer, not its past transactions: billed and completed transactions are financial records, and keep the details they were billed with.

    Tip

    Lost the customer_id column? The List customers request takes up to 100 addresses at once, separated by commas in its email parameter, and returns the customer of each one with its id.

    SourcePaddle's official help center

Verify each address before it reaches Paddle

Does your app or backend create customers in Paddle through its API, with the Create a customer (opens in a new tab) call, for example to bill them by invoice? Ask PricklyMails first. If the recommendation is remove, ask for another address before you create the customer.

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

Why verify the addresses of customers who already paid?

Because Paddle writes to them for you. By default it emails each customer their transaction receipt. Customers may also get a notice when a subscription payment fails, the trial end reminder that card scheme rules require and, only where the law requires it, a reminder before a subscription of 6 months or longer renews. Customers sign in to the customer portal through a link Paddle emails them, too. An address that cannot receive mail misses all of these.

Which Paddle report holds all my customers?

None on its own: Paddle has no customers report. A Subscriptions report has one row per subscription, in its current state, and, unfiltered, covers every subscription ever created. A Transactions report has one row per transaction and filters on the date each one was last updated, so it also reaches customers who bought once. Both hold the address in customer_email. Through the API, the List customers request returns your active customers, up to 200 per page.

SourcePaddle's official help center

Can I delete a customer in Paddle?

No. Paddle is a merchant of record: customers describe who transactions are for, and transactions are financial records, so they have to be retained, and the API has no delete operation for customers. Archive the customer instead, by setting its status to archived: it can't be used in Paddle anymore and drops out of the dashboard's default views, but stays linked to its transactions and subscriptions. Setting status back to active unarchives it.

SourcePaddle's official help center

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

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.