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
- Open Ghost Admin → Settings → Memberships
- Switch “Enable memberships” to ON
- Click “Connect with Stripe” and complete the one-click setup
- 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.
- Add an HTML card (type
/htmland hit enter). - 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", anddata-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
- Email your list first
- Publish a public announcement post linking to /join
- Enable the Portal button in your header (Labs → Portal → Show signup button)
- 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.