← All case studies Ghost → Substack

Leaving Ghost Pro for Substack merged every list into one inbox

Candost left Ghost Pro for Substack so he could stop designing the site. Substack subscribed every address to every section, and his essay does not walk the importer.

Candost moved his writing from Ghost Pro to Substack. The essay does not print a date. He does say he had been on Ghost Pro since December 2021.

The path before Ghost was already a migration. Mektup started on Substack. After the first issue he moved it to ConvertKit for 36 issues. Then he put the newsletter and the blog on Ghost so they lived in one place.

Ghost handled infrastructure, email, security, and spam. Templates let him design the site. He now calls that freedom a burden. He kept working on the homepage, the footer, and the font when he wanted to write. He also felt new Ghost features were aimed at creators with big audiences, and that he did not fit that audience.

Substack’s audience, in his words, is independent writers and podcasters. He renamed the site to Mediations with Candost. Mektup keeps its name, and so does the podcast Software World with Candost. Book notes became their own section.

Everyone got every list

On Ghost, a reader could be on Mektup, or the podcast, or the blog posts, without getting the rest. Substack did not let him recreate those splits.

After the move, every address receives every post until that person unsubscribes. He tells readers to use the unsubscribe link and pick the lists they still want. He says he expects two emails a week at most, and usually one.

The four lists are:

  1. Mediations with Candost, which is the posts except Mektup and book notes.
  2. Mektup, the letter every second Tuesday on engineering leadership and life.
  3. Book Notes, which was new at the move.
  4. Software World with Candost, the podcast.

He asks readers to report broken links. The essay stops there. It does not describe a CSV export, a post import, paid members, or DNS.

The official importer is a different page

Substack’s help article, updated 2 January 2025, is the click path. It is Substack’s documentation, not Candost’s log.

You export Ghost members as a CSV and content as JSON. On Substack you upload the CSV under import email addresses. Those people land as free subscribers. Post import asks for the Ghost URL. If payments are on, you can mark imported posts as paid. Ghost’s subscribe block often comes along at the bottom, and you delete it by hand.

Paid members are a Stripe reconnect. You sign into the same Stripe account Ghost used, let Substack scan it (they say this can take up to 30 minutes), then revoke Ghost’s access on Stripe before the import. That revoke is how they avoid charging someone twice. The Ghost → Substack playbook calls out the same double-charge, plus images that still live on Ghost and old URLs that 404 after DNS.

The help article imports one member file. It does not describe a way to place each Ghost label onto a different Substack section. That gap is the one Candost hit.

What I would copy

Export the Ghost member list with the labels still on it, and count who is on which publication, before you upload anything. If Substack can only subscribe the whole file, tell people that in the same email that announces the move. Candost did. Give them the unsubscribe path in that note.

If you have paid Ghost members, disconnect Ghost from Stripe before Substack imports them. Do that from the help article’s order, not from memory.

Keep the Ghost site up until you have clicked the imported posts and checked images and links. His only post-move request is that readers report broken links, which means he expected some.