Skip to content

Verify your Ghost member list before you send

Integration Sending and campaigns

Ghost email verification in three steps: export your members, verify the file in PricklyMails, then unsubscribe the addresses to remove from your newsletters.

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

Verify for free

Step by step

Clean your list in three steps

  1. In Ghost

    Export your members from Ghost

    Before you start

    Only the site owner or an administrator can export data from Ghost Admin.

    1. In Ghost Admin, go to Settings then Advanced then Import/Export.
    2. Open the Export tab and click All data.
    3. Choose to include Members alone.
    4. Click Export.
    5. On Ghost(Pro), download the zip file from the link Ghost emails you, valid for 7 days. On a self-hosted site, it downloads in your browser straight away.
    6. Unzip the file and open the members CSV.

    Tip

    To verify only the members your newsletters reach, filter Members on All newsletters set to Subscribed to at least one, then export them from the "..." icon at the top right.

    Tip

    The file also holds each member's labels and subscription status, among other columns: keep the email column alone in a spreadsheet before moving on.

  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 Ghost: 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 Ghost 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 Ghost

    Bring the result back into Ghost

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

    Remove

    They get unsubscribed from all your newsletters, and labeled so you can find them again.

    Ghost unsubscribes an existing member from all newsletters when an import sets subscribed_to_emails to false, so one import of the addresses to remove is enough.

    1. Copy them into a new CSV file, under an email header.
    2. Add a subscribed_to_emails column set to false on every row.
    3. Add a labels column set to a new label, such as to-remove, on every row.
    4. In Ghost Admin, go to Members.
    5. Click the Settings icon at the top right, then Import members.
    6. Upload your CSV file, then click Import members.
    Review

    They deserve a look before your next newsletter.

    Send

    They stay subscribed: nothing to do.

    Warning

    Import only addresses from your report: an address that is not a member yet would be added as a new member, unsubscribed from every newsletter.

    SourceGhost's official help center

Verify each address before it reaches Ghost

Does your own signup form or sync script create members through Ghost's Admin API, with the Creating a member (opens in a new tab) call? Ask PricklyMails first. If the recommendation is remove, don't create the member.

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

Ghost already disables unreachable addresses, so why verify first?

Ghost's help center says it disables email for a member when newsletters sent to them consistently fail, or are marked as spam: by then several newsletters have gone out to that address. It also suggests keeping your free subscriber list tidy, by periodically removing inactive subscribers, to help your deliverability. Verifying first takes the unreachable addresses out before your next newsletter.

Should I unsubscribe or delete the members to remove?

Unsubscribe them first: the member stays on your site and gets no more newsletters. Deleting removes the member, but Ghost's help center notes that bulk deletions have no effect on active paid subscriptions, so a paid member deleted that way stays subscribed and keeps being billed. To delete them anyway, filter Members by their label and open the bulk delete menu from the "..." icon at the top right: Ghost downloads a backup of them to your device first.

SourceGhost's official help center

My site has several newsletters: what does the import change?

For an existing member, subscribed_to_emails set to false unsubscribes them from all your newsletters at once. Set to true, it leaves their preferences alone, except for a member who had unsubscribed from all of them: keep it at false for the addresses to remove. For an address that is not a member yet, false creates the member already unsubscribed from every newsletter.

SourceGhost's official help center

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

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.