Substack vs Ghost

Substack suits writers who want built-in discovery and accept a revenue share. Ghost suits publishers who want their own domain, member data and Stripe account, and who can run or contract the hosting.

On this page

Substack or Ghost: which fits a paid newsletter business

Substack fits writers who depend on its discovery network and want the simplest path to paid subscriptions, while Ghost fits owners who want control over their domain, design, members and payment relationship. If your paid newsletter on Substack is costing you a revenue share, limiting your branding, or leaving you unable to see and own your member list the way you want, the decision is about control rather than audience size. Three questions settle it: who runs the hosting, how much you value discovery inside Substack, and whether Stripe and member data must stay in your name. On cost, Ghost takes no transaction fee on paid subscriptions, according to Ghost's comparison page, but Stripe processing fees still apply on both platforms, so the saving is the platform share, not the whole payment bill. Ghost also offers a middle path: Ghost(Pro) is the hosted version, with plans listed on Ghost's pricing page at $18 per month for Starter (1 staff user, 1,000 members), $29 per month for Publisher (3 staff users) and $199 per month for Business (15 staff users), billed yearly, plus custom plans. Confirm current pricing and member limits directly with Ghost before you compare them with your own subscriber count. Self-hosting Ghost moves hosting, upgrades and backups to you or a partner. Ghost's Ubuntu install guide lists supported Ubuntu releases, MySQL 8.0 or 8.4, NGINX 1.9.5 or later, systemd and at least 1 GB of RAM, installed through Ghost-CLI, and it notes that Ghost-CLI installs do not support web analytics. Before committing, ask whether you can keep the Stripe account in your own name, export your member list, and keep discovery traffic from Substack, because that last loss is the one that is hardest to recover.

Which platform fits which publication

This table matches common publication profiles to the platform that fits best and the condition that makes that choice hold. Read each row against your own audience strategy, staffing and data requirements. The main takeaway is that discovery and convenience favor Substack, while ownership of domain, design and member records favors Ghost.

Publication profileBetter fitReason and condition
Writer relying on Substack's network for new subscribersStay on SubstackSubstack's built-in discovery and recommendations bring in readers you would not reach on your own domain. This holds only while new subscriber growth through the network matters more than owning the list and design.
Brand publisher wanting its own domain and designGhost(Pro) or self-hosted GhostGhost lets you run the newsletter under your own domain with your own theme and templates. Ghost(Pro) suits this if you want the platform without running servers.
Team with an engineer who can run GhostSelf-hosted GhostGhost's Ubuntu install uses Ghost-CLI, MySQL, NGINX and systemd, so someone must patch, back up and monitor it. Confirm the engineer has time for ongoing upgrades, since Ghost ships frequent releases.
Team without operations staffGhost(Pro)A managed Ghost plan removes server, database and upgrade work from your team. Self-hosting without an operator tends to leave security patches and backups unattended.
Publication that must keep member records in its own databaseSelf-hosted GhostSelf-hosting keeps member, subscription and content data in your own MySQL database and infrastructure. Ask whether your Stripe account and email provider also meet your data residency requirements.
Publication with paid subscriptions and migrating existing membersGhost, with a reconnected Stripe accountGhost takes no transaction fee on paid subscriptions, though Stripe processing fees still apply. Plan the member import and Stripe reconnection before leaving Substack, and test on a copy first.

What you gain and lose when you leave Substack's network

Ghost is MIT-licensed and can run on your own server or on Ghost(Pro), and the comparison page lists memberships, paid subscriptions and newsletters as built in without extra plugins. The gains matter most when your paid revenue is large enough that a percentage share becomes a meaningful line item, when you need your own domain and design, or when you want the member relationship and billing records under your control.

  • No transaction fee on subscriptions: Ghost's comparison page says it takes no transaction fee on paid subscriptions, though Stripe processing fees still apply. This matters most when subscription revenue is high enough that a revenue share outweighs hosting costs.
  • Own domain and design: You control the theme, URL structure and site layout. This matters if your publication is part of a wider brand or must follow an internal style or accessibility standard.
  • Member and Stripe ownership: Your member list and subscription records sit in your Ghost instance, and payments run through your own Stripe account. This matters if you may change platforms later or need direct access to billing data.
  • Independent organisation: Ghost describes itself as an independent non-profit that reinvests its revenue into the product. This matters if vendor direction and pricing stability affect your planning.
  • Open-source code: Ghost's MIT license lets you inspect and modify the software. This matters if you have engineers who need to extend the platform.

Before you commit, confirm current Stripe fees for your country and card mix, and ask Ghost(Pro) or your hosting provider for the exact plan limits that apply to your member count.

How Substack and Ghost compare on capabilities

This table compares Substack and Ghost on the capabilities that shape a paid newsletter's economics and control: memberships, fees, domain, member data, payments, APIs, licensing and analytics. Ghost cells reflect its published documentation, while Substack cells list what to confirm with Substack before you decide. The main takeaway is that Ghost charges no platform transaction fee and keeps the site, member records and integrations under your control, but you take on hosting, email and analytics setup.

CapabilitySubstackGhost (self-hosted or Ghost(Pro))
Memberships and paid subscriptionsOffered on the hosted platform; confirm the current feature set with SubstackBuilt in without extra plugins, per Ghost's comparison page
NewslettersHosted sending and archive; confirm sending limits and terms with SubstackBuilt in without extra plugins; confirm the email delivery setup your install needs
Transaction feesPlatform fee terms apply to paid subscriptions; confirm the current rate with SubstackNo transaction fee on paid subscriptions; Stripe processing fees still apply
Custom domain and designConfirm which domain and design controls Substack allows on your planYour own domain and theme; confirm theme options for your Ghost version
Member data exportConfirm with Substack which member fields and formats can be exportedMember data sits in your MySQL database on self-hosted installs; confirm export options for your version
Stripe account ownershipConfirm how Substack connects payouts and whether the Stripe account is yoursPayments run through Stripe, with Stripe fees still applying; confirm how your Stripe account is connected
Content APIConfirm whether Substack offers a read API for your published contentRead-only JSON Content API; keys are created through a Custom Integration in Ghost Admin
LicensingHosted service, not open source; confirm data export and terms in writingLicensed under the MIT license
Web analyticsHosted analytics included; confirm which reports your plan providesGhost-CLI installs do not support web analytics; use the documented Docker Compose install for self-hosted analytics

Where your members, content and payments live

Moving from Substack to Ghost changes where subscriber records, published content and payment relationships are held. Each card below covers one of those locations or the controls around it, so you can decide what must stay under your own administration.

Where member and content data sits

On Substack, subscriber lists, post archives and engagement data live on Substack's platform, and you export them rather than host them. With self-hosted Ghost, the database (MySQL 8.0 or 8.4 in the Ubuntu install path) and the content files sit on servers you choose, or on Ghost(Pro) if you prefer a managed host. Confirm which country and cloud region your data will reside in, and whether backups follow the same boundary.

Who holds the Stripe relationship

Substack collects paid subscriptions through its own payment flow, so subscriber payment records are tied to the Substack account. Ghost takes no transaction fee on paid subscriptions, but Stripe processing fees still apply, and the Stripe account is yours to connect. Before migrating, confirm that the same Stripe account will be reconnected so existing paid subscribers keep their billing, and check who is named as the account owner and payout recipient.

Staff identity and access

Ghost(Pro) Starter, Publisher and Business plans set limits on staff users (1, 3 and 15 respectively), so the number of people who can change content or member settings is partly a plan decision. In self-hosted Ghost, access depends on the Ghost Admin accounts you create and on your server access controls. Define who can export members, edit payment settings and manage the Content API keys issued through a Custom Integration.

Ghost's governance and maintenance

Ghost is licensed under the MIT license and is maintained by an independent non-profit organisation that, according to its comparison page, reinvests its revenue into the product. This matters when you weigh vendor continuity against a hosted service. It does not remove your own obligation to patch the server, the operating system and the Node.js runtime, which becomes your responsibility under a self-hosted model.

Data processing terms and record retention

Substack's data processing terms and retention periods apply to your subscriber data while it stays on its platform, and you should read them against your own privacy notices. Self-hosting moves those obligations to you: you become the party that sets retention for member records, deletion requests and access logs, and you must document your processor relationships, including Stripe and your email delivery provider. Ask counsel to confirm the controller and processor roles for your jurisdiction.

What DeployOpen prepares and what auditors decide

DeployOpen plans, hardens and documents a self-hosted Ghost environment, and prepares the controls and evidence that a compliance assessment will examine, such as access reviews, backup records and change logs. DeployOpen does not issue audit reports, attestations or certifications. Independent auditors and certification bodies make those determinations, so ask any assessor early which evidence they will accept.

What running Ghost yourself involves day to day

Running Ghost yourself means owning a small but continuous operations stack. The Ubuntu install guide documents an installation through Ghost-CLI on Ubuntu 22.04, 24.04 or 26.04, with a supported Node.js version (the example uses Node 22), MySQL 8.0 or 8.4, NGINX 1.9.5 or later, systemd and at least 1 GB of RAM. Ghost-CLI wires these components together, but each one is still yours to patch, monitor and restore. Before you commit, confirm the current supported Ubuntu, Node.js and MySQL versions in the install guide, because those lists change over time.

The recurring work is mostly upgrades. Ghost 6.0.0 was published on August 4, 2025, and the project ships frequent minor releases after that, with 6.71.0 published on October 15, 2026, according to the TryGhost/Ghost GitHub releases page. Plan a standing routine for reviewing release notes, testing the update on a staging copy of the site and applying it in a maintenance window, with a tested rollback. Alongside upgrades, you own database and content backups, the TLS certificate renewal on NGINX, the outbound email configuration that delivers your newsletters and login emails, and uptime monitoring that tells you when subscribers cannot reach the site. Each of these needs a named owner and a documented restore test, not just a schedule.

Web analytics and ActivityPub are not covered by the Ghost-CLI install. The Ubuntu guide says a separate Docker Compose install is documented for self-hosting web analytics or the ActivityPub service, so decide early whether you need either. If you do, that is a second deployment path to maintain alongside the core install. Ask whoever will run the stack to confirm which Docker Compose setup they will use, how it is upgraded and whether it runs on the same host. Put these decisions in writing before you cut over DNS, because changing the install method later adds migration work of its own.

What a move from Substack to Ghost involves at a high level

The sequence moves your posts, members and paid subscriptions to Ghost without breaking billing or your reader's links, and ends with a cutover you can verify. Each step has a clear check, so you know when to move on.

  1. Confirm the team and access up front

    Before any export, confirm who owns the Stripe account that processes your paid subscriptions, who controls DNS for your domain, and who on your side will review the subscriber list. The Stripe account owner must be available to reconnect billing later, and DNS access is needed for the custom domain and redirects. This step is done when those three people are named in writing and have confirmed access, so the later steps do not stall waiting for permissions.

  2. Export publication content and subscriber data

    Create the export from Substack and keep the files in a location you control, because they are your copy of the archive and member records. Check that the post count, the paid and free member counts, and a sample of posts match what you see in Substack. This step is done when you have a complete export you can open and have reviewed, with any gaps noted before you begin the import.

  3. Set up the Ghost instance and tiers

    Install Ghost on your own infrastructure through Ghost-CLI, or open a Ghost(Pro) account, and set up the publication name, design, staff users and membership tiers so they mirror your Substack plans. Ghost's Ubuntu guide lists the supported OS, Node.js, MySQL and NGINX versions, which your operator should confirm against the current release before installation. This step is done when a staging instance loads over HTTPS and the tiers are defined in Ghost Admin.

  4. Run the Substack migration for posts and members

    Use Ghost's Substack migrator to import posts and members into the staging instance. Ghost's WordPress limits do not apply to this path, but you should still review the import for missing images, embeds and custom formatting, and compare member counts against the export. Plan a second pass for anything that did not import cleanly. This step is done when posts and member records in staging match the export, and the exceptions are logged.

  5. Reconnect the same Stripe account

    Connect Ghost to the Stripe account that already processes your payments so existing paid subscribers keep their billing relationship, with the Stripe account owner approving each change. Confirm with Stripe and in Ghost that the price IDs and tiers map to the right plans, and test a subscription on a non-production member record. Ghost takes no transaction fee on paid subscriptions, but Stripe processing fees still apply. This step is done when a test charge and a test renewal both complete and the paid member status reads correctly in Ghost.

  6. Configure the custom domain and redirects

    Point your domain at the Ghost instance through DNS, issue the TLS certificate, and map old Substack post URLs to their Ghost equivalents with redirects so search results and shared links still resolve. Keep the Substack page live until redirects are verified. Ask your operator to confirm how the redirect rules are applied in your NGINX or hosting setup. This step is done when a sample of old URLs returns the correct new page and the certificate is valid across the domain.

  7. Test email delivery before cutover

    Configure your email sending service for Ghost, send test newsletters to internal addresses and a small set of seed accounts across major mail providers, and check inbox placement, sender authentication records and unsubscribe handling. Confirm that member sign-up and paid sign-up confirmation emails arrive. This step is done when test sends reach the inbox, authentication passes and the unsubscribe link works end to end.

  8. Cut over and monitor the first sends

    Freeze new Substack publishing, run a final incremental sync if your process supports one, point the live domain at Ghost, and send the first newsletter from Ghost. Watch bounces, billing events and the member count for the first days after launch, and keep a rollback plan agreed with the team. This step is done when the first live send is delivered, billing events appear correctly in Ghost, and the team signs off the cutover in writing.

Questions buyers ask before switching from Substack

What does running Ghost cost compared with Substack's revenue share?

Substack takes a share of paid subscription revenue, and Ghost takes no transaction fee on paid subscriptions, so the comparison comes down to what you pay for the platform and its operation. On Ghost(Pro), the Starter plan is listed at $18 per month (1 staff user, 1,000 members), Publisher at $29 per month (3 staff users) and Business at $199 per month (15 staff users), billed yearly, with custom plans available. Self-hosting shifts costs to a server, a MySQL database, email delivery, and the staff time to patch and back up Ghost. Stripe processing fees apply on both platforms, so they do not decide the comparison. Model your own subscriber count and revenue, then request a written quote that separates one-time setup from recurring hosting and support.

How long does a migration from Substack to Ghost take?

Duration depends on the size and shape of your archive and member list, and the work is not a fixed number of days. The main drivers are how many posts and members you have, how much custom design and embedded content needs rebuilding, whether you need custom domains and redirects from old Substack URLs, and how much testing the Stripe reconnection needs before you cut over. Ghost's WordPress import docs cap a single XML import at 2,500 posts and 100 MB, which shows that larger archives need planning. Ask any provider for a written timeline that lists each migration step and the checks you will sign off on.

Can a non-engineer run a self-hosted Ghost site?

A non-engineer can write, publish and manage members in Ghost Admin, but running a self-hosted install needs systems skills. Ghost's Ubuntu guide installs through Ghost-CLI and requires a supported Node.js version, MySQL 8.0 or 8.4, NGINX 1.9.5 or later, systemd and at least 1 GB of RAM. Someone must handle OS updates, Ghost upgrades (the project publishes frequent minor releases), TLS certificates, database backups and email deliverability settings. Ghost-CLI installs do not support Ghost's web analytics, so analytics needs a separate Docker Compose setup. Most publishers either assign an engineer part time or buy managed hosting, such as Ghost(Pro), for this work.

Is Ghost(Pro) an option if we do not want to self-host?

Yes, Ghost(Pro) is Ghost's hosted offering, and it removes the server, database and upgrade work from your team. It is priced by plan, with Starter, Publisher and Business listed on Ghost's pricing page and custom plans for larger publications. You keep the same Ghost features and your own domain, and you can later move to a self-hosted install if your requirements change. Confirm with Ghost what is included in each plan, including staff user limits, member limits and migration help, before you commit.

Will paid subscribers keep paying after we move from Substack to Ghost?

Paid subscribers keep paying only if the billing connection is handled carefully, and the outcome depends on the Stripe account and the migration path. Ghost's documentation and migrator tools cover posts and members, but the migration plan must confirm how paid subscriptions are reconnected to the same Stripe account so existing subscribers are not charged twice or lost. Ask for a written test plan that covers a sample of paid members, the cutover date, and how you will tell subscribers what to do. Stripe fees apply to payments on both platforms, so Stripe itself is not a reason to change processors.

What happens to Substack discovery if we leave?

You lose the recommendation and discovery features that Substack provides inside its own network, so readers who found you there will no longer see you in that feed. Ghost gives you your own domain, design, archive, SEO settings and member data, so growth must come from your site, search, social channels, referrals and your email list. Plan for an audience transition period, a clear announcement to subscribers, and redirects from old Substack URLs so existing links keep working. Expect fewer discovery-driven sign-ups, and measure the change against your own analytics rather than assumptions.

What should we ask for in a written scope from DeployOpen?

A written scope should name the platform choice (self-hosted Ghost or Ghost(Pro) integration support), the environment and where it runs, and the exact migration items, including posts, members, paid subscriptions, custom domains and redirects. Ask which deliverables are included, such as installation, hardening, backups, documentation and cutover testing, and which are excluded, such as design work or ongoing support. Ask how the Stripe reconnection will be tested, who signs off each step, and what the handover includes. DeployOpen plans, implements, hardens, backs up, upgrades and documents self-hosted platforms in your own infrastructure, and most engagements are fixed-scope with agreed deliverables and timelines. Ongoing support and upgrades are available as retainers. DeployOpen does not publish a price list, so a quote follows from the written scope.

How the cost of each option is built

The main cost difference is where the money goes. Substack takes a share of paid subscription revenue, and card processing fees sit on top, so its cost rises with every paying member and every dollar collected. Confirm the current revenue share and card fee terms on Substack's own pricing pages before you build a model, because these recur on every transaction. Ghost takes no transaction fee on paid subscriptions, but Stripe processing fees still apply, so card costs remain under either path. On Ghost(Pro), the recurring line is a subscription: Starter at $18 per month (1 staff user, 1,000 members), Publisher at $29 per month (3 staff users) and Business at $199 per month (15 staff users), billed yearly, with custom plans above that. Check the Ghost pricing page for current terms.

Self-hosting replaces that subscription with infrastructure you pay for and staff time you assign. The recurring items are a server or cloud instance sized for Ghost, a MySQL database, offsite backups, transactional email delivery for newsletters, monitoring, and Stripe fees. Ghost's Ubuntu guide sets a floor of at least 1 GB of RAM, but real sizing depends on traffic and mailing volume, so ask your hosting team to size it against your own load. The one-time items are the migration, domain and redirect work, design customization and initial hardening. The largest variable is ongoing maintenance: applying Ghost's frequent minor releases, patching the operating system and keeping database backups tested. Staff hours are the cost most often left out of comparisons.

Whether self-hosting pays off depends on your own numbers, so model it separately instead of relying on a general figure. Put Substack's revenue share and card fees against Ghost(Pro) or your self-hosted infrastructure, email delivery, Stripe fees, migration, and internal maintenance hours, using your current paid member count, average subscription price and expected growth. Keep one-time costs on their own line so you can spread them over a period you state in advance. When requesting a quote, ask for a written scope, hours for migration and each recurring maintenance task, who is responsible for security patches, and how hosting and email costs change as your member count grows. Include time spent on deliverability and subscriber support, which publishers often underestimate.

Ghost(Pro) or self-hosted Ghost: choosing the operating model

A writer or small publisher without operations staff usually gets the most from Ghost(Pro), the hosted version run by the Ghost team. Ghost(Pro) is priced by staff users and member count on the published pricing page, so the monthly cost is predictable and the hosting, upgrades and backups are handled by the vendor. Self-hosting shifts those tasks to the publisher, who would also need to keep a Node.js runtime, MySQL, NGINX and email delivery current.

  • Operating effort: Ghost(Pro) requires no server work. A self-hosted install needs regular upgrades, backups and monitoring, which one person may not have time for during a launch.
  • What you control: Design, domain, content, members and Stripe connection are yours in both models. Server access, hosting region and upgrade timing are only yours when you self-host.
  • Plan tiers: Ghost(Pro) limits staff users and members by plan, so growth can move you to a higher tier. Check the current limits on the pricing page before you choose.
  • Analytics: Ghost's Ubuntu install guide says Ghost-CLI installs do not support web analytics, so a self-hosted site that needs analytics requires a separate Docker Compose setup.
  • Confirm with the vendor: Ask where Ghost(Pro) hosts data, how backups and exports work, and what support response terms apply on your plan.

Before you choose hosted, confirm the export path you would need if you leave, because the migration works in both directions only if your content and member data can be exported.

How DeployOpen helps you evaluate, implement or migrate Ghost

DeployOpen is a Chainscore Labs company that plans, implements, hardens, backs up and documents self-hosted open-source platforms inside your own cloud accounts, data centers or air-gapped networks. For a publication weighing Substack against Ghost, we start by agreeing on what you need to keep, from members and paid subscriptions to your domain and design, before any build work begins.

How we scope

  • Written scope listing which Substack features you need to replace, such as paid subscriptions, newsletters and archive pages
  • Agreed decisions on Ghost(Pro) versus a self-hosted Ghost install on your own infrastructure
  • Inventory of member data, Stripe account ownership, custom domains and redirects that must carry over

How we build

  • Ghost installation, configuration and email delivery set up in your environment, with database and web server choices documented
  • Stripe connection and membership tiers configured and tested against a staging publication before go-live
  • Migration rehearsal of posts, tags and members, with a written record of any content that does not transfer

How we hand over

  • Runbooks covering installation, upgrades, backups, restores and the steps for checking member and payment data
  • Documented redirect map and DNS changes so existing links and search rankings have a clear path
  • Handover session with your editors and technical owners, with the written scope used as the acceptance checklist

How we support

  • Fixed-scope engagements, with scope, deliverables and timelines agreed in writing before work starts
  • Ongoing support, Ghost upgrades and continuous testing available as a retainer after handover
  • Quotes follow from the written scope, so ask for line items covering hosting, migration, testing and support

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.