Substack cost vs self-hosted Ghost

Substack takes a share of paid subscription revenue, while self-hosted Ghost trades that share for infrastructure, email delivery, maintenance and staff time. The break-even point depends on your revenue, member count and internal skills, so build the model with your own numbers.

On this page

Does self-hosting Ghost cost less than Substack's revenue share?

Self-hosting Ghost removes the platform share but replaces it with recurring infrastructure, email and maintenance costs, plus one-time migration work, so the answer depends on your revenue level. Substack takes a percentage of paid subscription revenue, and the rate is the first number to confirm against Substack's current terms, since the 10% figure is only used here if you supply it. Ghost takes no transaction fee on paid subscriptions, but Stripe processing fees apply on both platforms, so those fees cancel out in the comparison and should be left out of the difference. The recurring costs on the self-hosted side are a server that meets Ghost's requirements, MySQL 8.0 or 8.4, NGINX, a supported Node.js version and at least 1 GB of RAM on a supported Ubuntu release, plus a transactional email provider for member mail. Ghost is MIT licensed, so there is no license fee, and the install runs through Ghost-CLI. The hosted alternative, Ghost(Pro), lists Starter at $18 per month, Publisher at $29 per month and Business at $199 per month, billed yearly, so compare your self-hosted total against those prices as well as against Substack's share.

The one-time and staffing costs usually decide the result. Migration work covers the Substack export, member and post import, and redirects, and the Ghost WordPress migration docs note that some content does not carry over, so budget time for manual review. Ongoing maintenance covers Ghost version upgrades, OS patching, backups and monitoring. Ask any implementation partner for a fixed-scope written quote that separates migration, hosting setup, email configuration and a recurring support line, so you can see which costs are one-time and which recur each month. As an illustrative check, a publication with modest paid revenue may find that a platform share is smaller than the combined cost of a server, email volume and part-time maintenance, while a larger publication may find the reverse. Run your own numbers: list monthly paid revenue, the platform share, Stripe fees, your hosting and email quotes, and the hours you expect to spend on upgrades each year, then find the revenue level where self-hosting breaks even.

Which cost components move on each side

This table lists each cost component of a paid Substack publication next to the same component when Ghost runs on your own servers. Read the commercial column for what the platform takes, and the self-hosted column for what you pay people and providers to run it, then check whether each item is one-time or recurring. Hosting, email delivery and card processing prices are for you to obtain from your providers.

Cost componentSubstack (hosted)Self-hosted GhostOne-time or recurring
Platform share of subscriptionsSubstack takes a share of paid subscription revenue, as set in its current termsNo platform share; Ghost is MIT-licensed and takes no transaction fee on paid subscriptionsRecurring on Substack; none on Ghost
Card and Stripe processing feesCard processing applies on top of the platform shareStripe processing fees still apply, billed by Stripe to the same accountRecurring on both sides
Server hostingIncluded in the platformVirtual server or VM that meets Ubuntu 22.04, 24.04 or 26.04 and at least 1 GB RAM; price from your providerRecurring
MySQL databaseIncluded in the platformMySQL 8.0 or 8.4 for Ghost, with backups you configure and testRecurring for hosting and backups; setup is one-time
NGINX, systemd and server operationsNot applicableNGINX 1.9.5 or later with systemd, installed through Ghost-CLI; patching and monitoring are ongoingSetup one-time; operations recurring
Transactional email deliveryIncluded in the platformSeparate email sending provider for newsletters and member mail; price from your providerRecurring, scales with send volume
MigrationExport from Substack, then importSubstack export, Ghost migration tooling and redirect setup; effort depends on post count and custom elementsOne-time; ask for a fixed scope in writing
Upgrades and maintenanceHandled by the vendorGhost releases ship frequently, so each upgrade, test and rollback is your team's or partner's workRecurring
Support and internal skillsVendor support channelStaff or a partner who can run Node.js, MySQL and NGINX and respond to incidentsRecurring; often the largest line item

What moves the break-even point

Self-hosting Ghost only pays off when the fixed costs of running it are smaller than the revenue share you would otherwise pay Substack. Six drivers decide where that line falls for your publication, and most of them are measurable before you commit to a move.

Paid members and average price

Substack's share is a percentage of each paid subscription, so the total fee grows with paid member count and average subscription price. Pull a twelve-month export of paid subscriptions and compute the gross monthly revenue, then apply Substack's current share and card processing fees. Ghost itself takes no transaction fee on paid subscriptions, but Stripe processing fees still apply on both sides, so compare those fees on identical revenue.

Total list size and email volume

Ghost sends newsletters through a mail provider you configure, so email delivery is a separate recurring cost that grows with list size and send frequency. Free subscribers still generate sends, and a large free list can cost more to mail than a small paid one. Ask your email provider for pricing at your actual monthly send volume and include bounce handling and deliverability monitoring in the estimate.

Staff who need admin access

Ghost(Pro) plans are priced by staff users, so the number of editors, designers and finance users who need Ghost Admin access is a direct input to hosted cost. Self-hosting removes that per-seat line but leaves you to manage accounts, roles and offboarding in your own environment. List every person who will publish, moderate comments or view member data, then decide which roles they need before you compare hosted and self-hosted totals.

Availability and backup standards

A paid newsletter that customers rely on needs a documented uptime target, tested backups of the MySQL database and content files, and a restore procedure. Those standards turn a single small server into a redundant setup with monitoring, off-site backups and maintenance windows, and each step adds hosting and labor cost. Set the target first, then price the infrastructure needed to meet it, rather than assuming a single VM is enough.

Analytics and tooling requirements

The Ghost-CLI install does not support Ghost's web analytics, and the documented route for self-hosting web analytics is a separate Docker Compose install. If your team needs first-party analytics on the same stack, plan for the Docker Compose path, which changes the server footprint and the upgrade routine. Confirm which analytics and ActivityPub features you need before you pick an install method, because that choice affects both hosting cost and maintenance effort.

In-house Linux, Node.js and database skills

Ghost runs on Node.js, uses MySQL, sits behind NGINX and is managed with systemd and Ghost-CLI. Someone on staff, or a contracted partner, must handle OS patching, Node.js version support, database backups and reverse proxy certificates. If nobody on the team has those skills, the labor line can erase the revenue share savings, so either budget for ongoing administration or price a managed support retainer into the comparison.

Where the revenue level that pays for self-hosting comes from

The break-even point is a calculation you run on your own numbers, and it starts from one rule: self-hosting pays off once the share you save exceeds your fixed monthly cost of running Ghost. Take your fixed recurring costs (server or cloud instance, backups, email delivery volume you expect to pay for, monitoring, and the share of your engineer's time you can actually allocate to upkeep) and divide them by the effective share you save. The effective share is Substack's platform share minus nothing, because card processing and Stripe fees apply in both cases and cancel out of the comparison. What remains is the platform cut that Ghost does not take on paid subscriptions, expressed as a percentage of gross subscription revenue. Ghost's pricing page lists its hosted plans for comparison, and the Ghost(Pro) figures there are a useful reference point for what managed hosting costs before you decide to run it yourself.

Keep the one-time costs separate from the recurring ones. Migration work, such as exporting from Substack, moving members and reconnecting the Stripe account, and setting up redirects, is a single outlay. Spread it over the number of months you expect to stay on Ghost, then add that monthly amount to your recurring costs before dividing. A publication that expects to leave the platform within a year carries a much heavier monthly burden than one planning a multi-year run. Be honest about the time horizon, because the same migration can look cheap or expensive depending on it. Ask any implementation partner for the migration and maintenance effort as a written scope with deliverables, rather than estimating it from the cost of hosting alone.

Test the result against your own forecast, not a current snapshot. Model subscription revenue at the level you expect in twelve to twenty-four months, and check how sensitive the answer is to member churn and to plan mix. If the monthly revenue at which self-hosting equals the platform share sits well above what you realistically earn, the hosted option is probably the better fit. If it sits comfortably below, confirm the operational risks, including backups, upgrades across Ghost's frequent minor releases, and who responds when email delivery or payments fail, before committing. Those risks are the part of the calculation that a spreadsheet tends to leave out.

How to build the comparison with your own numbers

This sequence turns the Substack and Ghost comparison into a set of dated figures for your own publication, so you can see the monthly cost at several revenue levels and the point where self-hosting starts to cost less than Substack's revenue share.

  1. Export current revenue, fees and member counts

    The publication owner pulls twelve months of paid subscription revenue, Substack's share, and member counts from the Substack dashboard, then pulls the matching gross charges, payout and processing fee lines from the connected Stripe account. Keep free and paid members separate, and note any annual plans, discounts or refunds. The step is done when you have one table with monthly gross revenue, Substack's deducted share, Stripe fees and paid member count, and each figure traces to an export file you can show an auditor or finance lead.

  2. Confirm the Ghost hosting plan you are pricing

    Decide whether you will run Ghost yourself on your own servers or buy Ghost(Pro) from the vendor, because the two options carry different cost lines. Check the current plans and the staff user and member limits on Ghost's pricing page, and record the date you read them, since plans change. The step is done when you have a written note of which option you are costing and the plan limits that apply to your member count.

  3. List every self-hosted component and request quotes

    Write down each component a self-hosted Ghost publication needs: the server or cloud compute, Ghost itself with its Node.js runtime, a MySQL 8.0 or 8.4 database, the NGINX reverse proxy, backups, transactional email delivery for newsletters, Stripe processing fees, and the monitoring you will run. Ask a hosting provider, a DNS and email provider, and an implementation partner for written, dated quotes against that list. The step is done when every line has a named provider, a quote reference and a date, and nothing is left as a rough guess.

  4. Price the one-time migration and setup as a fixed scope

    Separate one-time costs from recurring ones. The one-time items include the Substack export and migration of posts and members, redirects for your existing URLs, reconnecting Stripe so paid subscribers keep paying, theme work and go-live testing. Ask the provider for a fixed-scope quote with a written list of deliverables, because the Ghost WordPress documentation notes that some content does not migrate, so the scope depends on what your archive contains. The step is done when the setup cost sits in a single written quote that lists what is included and excluded.

  5. Add the recurring upkeep for upgrades and security

    Estimate recurring work for keeping Ghost current. Ghost ships frequent minor releases, for example 6.71.0 on October 15, 2026, so plan for regular patch windows, dependency updates for Node.js and MySQL, and operating system updates. Decide who does this work, whether your team or a retained provider, and ask the provider to state the recurring fee and what a single upgrade cycle includes in writing. The step is done when you have one monthly upkeep figure with a named owner for each upgrade task.

  6. Project monthly totals at three revenue levels

    Build a sheet with three columns, for a low, current and high paid revenue scenario, using the figures from your export. For each column, calculate the Substack revenue share plus card fees, then the Ghost total of hosting, database, email delivery, Stripe fees, upkeep and amortized setup. Label the scenarios as illustrative if you use assumed growth, and keep the figures you took from real exports separate from the ones you assumed. The step is done when each scenario shows two monthly totals side by side and the assumptions behind each are written next to them.

  7. Find the revenue level where the lines cross

    Plot the Substack total and the self-hosted total against monthly paid revenue, then read off the point where the self-hosted line falls below the Substack line. Check the result against your quotes, since a higher setup or upkeep figure moves that point up. Have a finance lead and your technical owner review the sheet together, and ask the provider to confirm each quoted number in writing. The step is done when you can state the crossover revenue, the assumptions behind it, and the quotes that support each input.

Costs teams forget on each side

Subscription prices and platform fees are only part of the comparison. The items below are the recurring tasks, one-time migration work and risks that often go unbudgeted on either side, and each one should be priced into a written scope before you decide.

Email deliverability setup and upkeep

Substack handles sending reputation for you. With self-hosted Ghost, you configure a transactional or bulk email provider and own the sender authentication records: SPF, DKIM and DMARC for your domain. Bounce and complaint handling, list hygiene and monitoring of inbox placement then become your tasks. Ask any provider for its sending limits, suppression handling and the fees that scale with your send volume, and confirm who owns the sending domain.

Tested backup and restore

A self-hosted publication holds posts, member records, subscription state and media in your own database and file store. A backup you have never restored is not a backup. Schedule database and content backups, then rehearse a full restore on a separate server at least on a set cadence. Ask your hosting team who performs the restore, how long it is expected to take and where the copies are kept.

Patching the server and Node.js runtime

Ghost runs on a Node.js runtime, a MySQL database, NGINX and the operating system, and each layer receives security updates. On Substack, none of this falls to you. Plan a patch calendar that covers the operating system, Node.js, MySQL and Ghost releases, which ship frequently, and check the supported Node.js version for each Ghost release before upgrading. Budget for the staging test that precedes each production change.

Redirects and search ranking during domain moves

If your Substack publication lives at a substack.com address and you move to your own domain, every post URL changes. Without a redirect map from each old URL to its new one, readers hit dead links and search rankings fall. Build the redirect map before cutover, keep it in version control, and monitor crawl errors for several weeks after launch. Ask your migration partner who owns the redirect rules and how they are tested.

Member re-consent and payment re-authorization

Moving paid members is not only a data copy. Subscription billing is tied to the Stripe account and payment methods that Substack created, so paid subscribers may need to re-authorize payment or re-confirm their subscription, and some will not. Ask whether the Stripe account can be reconnected to the new site, how member consent records are carried over and what churn you should plan for during the switch.

Content that does not migrate

Migration tooling carries over standard posts and metadata, but some content does not survive the move. Ghost's WordPress migration docs say custom post types, most uncommon shortcodes and content-restriction plugins do not migrate, so the same caution applies to any custom embeds or paywall logic you built on Substack. Inventory the publication's special formats and test each one on a staging site before you retire the original.

What the cost comparison does not capture

The cost comparison leaves out what Substack gives a writer for free, and that value is real. Substack's built-in discovery, including its recommendation network and in-app browsing, can bring readers to a publication without the writer doing anything. Self-hosted Ghost has no equivalent: a publication on your own domain is found through search, your own promotion, referrals from other writers and social channels, and each of those takes time and attention that a cost table does not show. Before you count the 10% share as the price of Substack, estimate how many new paid subscribers came from discovery in the last year. Your Substack dashboard and its referral data are the place to check that figure.

A second item with no line item is the hosted archive. Substack posts stay publicly reachable on its platform, and readers and search engines find them there regardless of what you do. When you move to Ghost, the archive lives on your domain, so you own the URLs but you also carry the SEO work of redirects and re-indexing. Ask your SEO adviser or check your search console data for how much traffic arrives at older posts, and plan redirects from the Substack URLs before the cutover. The migration guide for moving posts and members is covered in the sibling migration topic.

Finally, simplicity has value that is hard to price. Substack needs no server, no database, no mail configuration and no upgrade calendar. A solo writer who publishes weekly may not want to answer for uptime, Node.js updates or a failed Ghost-CLI upgrade, and that time is a cost even if no invoice shows it. Weigh the decision against your own hours, and if you move, consider whether a managed Ghost(Pro) plan or a partner-run install suits you better. For a feature-by-feature view of what Ghost does and does not match, read the sibling topic on Substack versus Ghost before deciding.

Questions buyers ask before comparing costs

How much effort does self-hosting Ghost actually take?

Self-hosting Ghost is a continuing workload, not a one-time install. The initial setup involves a supported Ubuntu release, 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, installed through Ghost-CLI according to Ghost's Ubuntu install guide. Effort then grows with what you add: email delivery through an SMTP provider, Stripe configuration for paid subscriptions, backups, TLS certificates, and upgrades. Ghost ships frequent minor releases, with 6.71.0 published on October 15, 2026, so someone must schedule and test updates. Ask any implementation partner for a written scope that lists each of these items separately.

Can one internal engineer run a self-hosted Ghost site alone?

A single engineer can often run a small publication, but the risk sits in coverage, not in the install. The engineer needs working knowledge of Linux administration, a database, reverse proxying, DNS, email deliverability and payment webhooks. Ghost-CLI installs also do not support Ghost's web analytics, and Ghost documents a separate Docker Compose install for analytics or the ActivityPub service, so any analytics requirement adds a second deployment path. Check who covers the site during holidays, incidents and upgrade windows. If that cover is missing, a retainer for ongoing support is one option to price against an internal hire.

How long does a migration from Substack to Ghost take?

No duration figure has been published for this migration, so ask for a written scope with a timeline before you plan around one. The main drivers are the number of posts and members, how many custom domains and redirects must be preserved, whether paid subscribers must keep their existing Stripe billing, and how much content depends on features that do not carry over. Ghost's own migration documentation for WordPress notes that custom post types, most uncommon shortcodes and content-restriction plugins do not migrate, which is a useful checklist for scoping any content move. Fixed-scope engagements have deliverables and timelines agreed in writing before work starts.

What recurring work does a self-hosted Ghost platform need?

Recurring work falls into four groups. Hosting and database operations cover servers, MySQL maintenance, storage growth and monitoring. Software maintenance covers Ghost releases, Node.js and operating system patches, and NGINX updates. Email and payments cover SMTP provider fees, bounce handling, Stripe fee changes and webhook checks. Security and continuity cover backups, restore tests, certificate renewal and vulnerability reviews. Each item recurs monthly or with each release, so budget for it as an operating expense. Ask the implementer whether backups are tested by restoring them, not only by taking them.

Is Ghost(Pro) a cheaper middle path than self-hosting?

Ghost(Pro) is a hosted option that removes server and upgrade work, and its published monthly prices are a useful reference point. Ghost's pricing page lists Starter at $18 per month with 1 staff user and 1,000 members, Publisher at $29 per month with 3 staff users, and Business at $199 per month with 15 staff users, billed yearly, plus custom plans. Compare those figures with your own cost of hosting, staff time and maintenance, and remember that Stripe processing fees apply in both cases. Ghost takes no transaction fee on paid subscriptions, so the main trade-off is who runs the platform and how much control you keep over infrastructure and data residency.

Which costs stay the same when moving from Substack to self-hosted Ghost?

Payment processing and email delivery costs usually persist, because they are charged by third parties regardless of where the site runs. Stripe processing fees still apply to paid subscriptions on Ghost, and an SMTP or email delivery provider still bills by volume. What changes is the platform fee: Substack takes a share of subscription revenue, while self-hosted Ghost, which is MIT-licensed, has no platform transaction fee. Hosting, database, backup, migration and maintenance become new costs that you must add. Ask any quote to show these as separate lines so you can compare them directly against your current Substack statements.

What should I ask for in a written quote for this work?

Ask for a fixed-scope proposal that lists each component separately. It should name the Ghost version and supported operating system, the database and reverse proxy, the email and Stripe integration, the migration steps for posts, members and redirects, the backup and restore test plan, and the handover documentation. It should also state what is excluded, such as analytics or ActivityPub, and what ongoing support or upgrades cost after launch. DeployOpen does not publish a price list, and a quote follows from the written scope, so a clearly defined scope is the best basis for comparing offers.

What a move from Substack to Ghost involves in effort

The one-time work of moving from Substack to self-hosted Ghost falls into five parts: exporting the Substack content and subscriber data, importing it into Ghost, reconnecting payments, pointing your domain and redirects at the new site, and testing before readers see the change. Most of the cost sits in the people doing the work and in the planning time around the cutover, not in software licences. Ghost itself is MIT-licensed, so the migration does not add a licence fee. Ask any implementation partner to price these five parts separately so you can see which ones your team could absorb and which ones need specialist hands. The sibling migration topic walks through the export, the migrator and the Stripe steps in more detail.

The most sensitive part is payments. Paid subscribers keep paying only if the same Stripe account is connected to the new Ghost site, so the decision to make early is whether the existing Stripe account stays as the system of record. Confirm with your finance lead how Substack's payouts currently reach your bank, how refunds and failed payments are handled, and who holds the Stripe administrator role. Ghost takes no transaction fee on paid subscriptions, but Stripe processing fees still apply, so the payment connection is also where the cost comparison becomes concrete. Plan a window in which subscribers are not charged twice or dropped, and test it with a small group of members first. Domain work and testing are where readers notice problems. Ghost imports posts and members through its migrator, but the Ghost WordPress documentation shows that some content types do not carry across, and you should expect the same kind of gap with Substack-specific embeds, so review a sample of posts by hand. Set up redirects from the old Substack URLs to the new Ghost URLs, confirm that email links and archive links still resolve, and verify the sending domain and email authentication records before the first live send. Ask your implementer to write these checks into the statement of work, with a written acceptance step, so that the cost of rework is visible before the work starts.

How DeployOpen scopes a fixed-price Ghost implementation

DeployOpen plans, implements, hardens, backs up and documents self-hosted open-source platforms inside your own infrastructure. For a Substack move to Ghost, we start from a written scope that names the cost components, the migration boundaries and the handover deliverables before any work begins.

How we scope

  • We confirm your current Substack revenue, subscriber counts and Stripe setup before estimating any work
  • The written scope lists hosting, MySQL, email delivery and migration as separate deliverables
  • Engagements are fixed-scope, with scope, deliverables and timelines agreed in writing first
  • We identify which Substack features, such as discovery and custom plugins, fall outside the agreed scope

How we build

  • We install Ghost on Ubuntu with Ghost-CLI, MySQL, NGINX and systemd in your own cloud account or data center
  • We run the Substack export and Ghost migration in a staging copy and check posts, members and tags
  • We reconnect Stripe for paid subscriptions and test checkout, renewal and cancellation flows
  • We configure your custom domain, redirects from old Substack URLs and backups before cutover

How we hand over

  • You receive documentation covering the install, configuration, backup and restore procedures
  • We walk your team through member management, newsletter sending and paid subscription administration
  • Test results, cutover records and a list of unmigrated items are delivered as part of the handover
  • Access and credentials are transferred to your team, with ownership of the data kept in your environment

How we support

  • Ongoing support, upgrades and continuous testing are available as a retainer after handover
  • We can apply Ghost minor releases in a staging environment before updating production
  • Confirm with us during scoping how Ghost version upgrades, backups and monitoring will be handled
  • Ask for the retainer scope in writing so response expectations and upgrade cadence are clear

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.