Ghost includes everything you need to run a membership site with multiple tiers. No plugins, no third-party services, no extra fees beyond Stripe. This guide walks through every step using only native Ghost features.

Step 1: Turn On Memberships

  1. Open Ghost Admin → Settings → Memberships
  2. Switch “Enable memberships” to ON
  3. Click “Connect with Stripe” and complete the one-click setup
  4. Save

Your site now supports paid subscriptions.

Step 2: Create Your Tiers

Ghost lets you create unlimited tiers. Go to Memberships → Tiers → Add tier.

Here are four common tiers that work well:

Free

  • Price: $0
  • Name: Free
  • Description: Access to public posts + newsletter

Basic

  • Monthly: $7
  • Yearly: $70 (shows “Save 16%”)
  • Name: Basic
  • Description: Full archive + members-only posts

Pro

  • Monthly: $15
  • Yearly: $150
  • Name: Pro
  • Description: Weekly exclusive posts + community access

Lifetime

  • One-time: $399
  • Name: Lifetime
  • Description: Permanent Pro access + listed on supporters page

Ghost automatically handles annual discounts, invoices, and tax collection.

Step 3: Control Who Sees Each Post

While editing any post, open the post settings panel (top-right gear icon).

Under “Access” choose:

  • Public – everyone
  • Members – any logged-in member
  • Paid-members only – any paid tier
  • Specific tier – select one tier (e.g., Pro or Lifetime)

Recommended split:

  • 70% Public (SEO)
  • 20% Free + Basic
  • 10% Pro + Lifetime

Step 4: Build a Clean Join Page

Create a new page at /join.

  1. Add an HTML card (type /html and hit enter).
  2. Paste the exact code below exactly as-is (Ghost will render it perfectly):
<script src="https://js.stripe.com/v3/"></script>
<div style="display:grid; grid-template-columns:repeat(auto-fit,minmax(280px,1fr)); gap:2rem; margin:4rem 0; font-family:system-ui,-apple-system,sans-serif;">
  <div style="border:2px solid #e5e7eb; border-radius:16px; padding:2.5rem 2rem; text-align:center; background:#fff;">
    <h3 style="margin:0 0 1rem;">Free</h3>
    <p style="font-size:3rem; font-weight:800; margin:0; color:#1f2937;">$0</p>
    <ul style="text-align:left; margin:1.5rem 0; padding-left:1.2rem; color:#4b5563;">
      <li>Public posts</li>
      <li>Weekly newsletter</li>
      <li>Comment access</li>
    </ul>
    <button data-portal="free" style="background:#000; color:#fff; padding:1rem 2.5rem; border:none; border-radius:12px; font-size:1.1rem; cursor:pointer; width:100%;">Join Free</button>
  </div>

  <div style="border:2px solid #10b981; border-radius:16px; padding:2.5rem 2rem; text-align:center; background:#f0fdf4; position:relative;">
    <div style="position:absolute; top:-12px; left:50%; transform:translateX(-50%); background:#10b981; color:white; padding:4px 16px; border-radius:999px; font-size:0.8rem; font-weight:600;">MOST POPULAR</div>
    <h3 style="margin:0 0 1rem;">Basic</h3>
    <p style="font-size:2.2rem; font-weight:800; margin:0; color:#1f2937;"><sup style="font-size:1rem;">$</sup>7<span style="font-size:1.5rem;">/mo</span></p>
    <p style="margin:0.5rem 0; color:#059669;"><strong>$70/year</strong> (save 16%)</p>
    <ul style="text-align:left; margin:1.5rem 0; padding-left:1.2rem; color:#4b5563;">
      <li>Everything in Free</li>
      <li>Full archive access</li>
      <li>Members-only posts</li>
      <li>No ads ever</li>
    </ul>
    <button data-portal="monthly" style="background:#10b981; color:#fff; padding:1rem 2.5rem; border:none; border-radius:12px; font-size:1.1rem; cursor:pointer; width:100%;">Start Basic</button>
  </div>

  <div style="border:2px solid #8b5cf6; border-radius:16px; padding:2.5rem 2rem; text-align:center; background:#f5f0ff;">
    <h3 style="margin:0 0 1rem;">Pro</h3>
    <p style="font-size:2.2rem; font-weight:800; margin:0; color:#1f2937;"><sup style="font-size:1rem;">$</sup>15<span style="font-size:1.5rem;">/mo</span></p>
    <p style="margin:0.5rem 0; color:#7c3aed;"><strong>$150/year</strong> (2 months free)</p>
    <ul style="text-align:left; margin:1.5rem 0; padding-left:1.2rem; color:#4b5563;">
      <li>Everything in Basic</li>
      <li>Weekly deep-dive posts</li>
      <li>Private Discord</li>
      <li>Bonus podcast feed</li>
    </ul>
    <button data-portal="yearly" style="background:#8b5cf6; color:#fff; padding:1rem 2.5rem; border:none; border-radius:12px; font-size:1.1rem; cursor:pointer; width:100%;">Go Pro</button>
  </div>

  <div style="border:2px solid #fbbf24; border-radius:16px; padding:2.5rem 2rem; text-align:center; background:#fffbeb;">
    <h3 style="margin:0 0 1rem;">Lifetime</h3>
    <p style="font-size:3rem; font-weight:800; margin:0; color:#f59e0b;">$399</p>
    <p style="margin:0.5rem 0; color:#d97706;">One-time · Never pay again</p>
    <ul style="text-align:left; margin:1.5rem 0; padding-left:1.2rem; color:#4b5563;">
      <li>Permanent Pro access</li>
      <li>Name on Hall of Fame</li>
      <li>Future products free</li>
      <li>Early access forever</li>
    </ul>
    <button data-portal="one-time" style="background:#f59e0b; color:#fff; padding:1rem 2.5rem; border:none; border-radius:12px; font-size:1.1rem; cursor:pointer; width:100%;">Buy Lifetime</button>
  </div>
</div>

Important:

  • Replace data-portal="monthly", data-portal="yearly", and data-portal="one-time" with the exact Price IDs from your Stripe dashboard (Ghost shows them in the tier settings).
  • The data-portal="free" button works as-is.

Step 5: Set Up Emails

Settings → Memberships → Email settings

  • Customize the welcome email (add Discord link, bonus PDF, etc.)
  • Enable failed-payment retries
  • Use the new 2025 automation builder for a 5-email onboarding sequence

Step 6: Add Real Member Perks

  • Private RSS feed (Settings → Advanced)
  • Members-only podcast (upload MP3s and link only in paid posts)
  • Discord auto-invite via welcome email
  • Download library in /account

Step 7: Launch

  1. Email your list first
  2. Publish a public announcement post linking to /join
  3. Enable the Portal button in your header (Labs → Portal → Show signup button)
  4. Run a 7-day launch with 20% off annual plans (create temporary tiers, delete after)

Quick Checklist

  • Memberships enabled
  • Stripe connected
  • Four tiers created
  • At least 5 paid-only posts
  • /join page with working HTML card
  • Welcome email customized
  • Portal button in navigation

Your Ghost site is now a complete membership platform with tiered access and automated billing.

Go to Settings → Memberships and flip the switch. Your first paid member is one click away.