We set up Ghost Members for content monetization without third-party plugins. Ghost is a popular CMS for media projects, but its built-in subscription system, Ghost Members, often remains underutilized. Clients try to monetize content through external services (Memberful, ConvertKit, Patreon), adding latency and complicating management. On one project with 50,000 unique monthly visitors, we implemented Ghost Members from scratch: configured Stripe, created two paid Tiers, and branded Portal. After launch, we discovered the paywall didn't work on mobile — the issue was resolved by customizing Portal CSS. Within a month, paid subscription conversion increased by 40%, and active subscribers exceeded 200. Ghost Members isn't just a plugin; it's a full subscription management system with zero additional requests. Unlike third-party solutions, it integrates directly with the server, reducing TTFB by 200–400 ms. Proper configuration of Tiers, paywall markers, and webhook integrations is critical — otherwise the effect is reversed. Ghost Official Documentation
Problems we solve
- Incorrect Tier configuration — Ghost auto-creates Products and Prices in Stripe, but without proper benefits, subscribers won't see the value.
- Missing paywall markers — In the Koenig editor, you must insert the "Members Only" card; otherwise, all content is public.
-
Errors in Handlebars templates — Wrong conditional operators like
{{#if access}}cause the paywall to not display or content to be visible to all. - Non-functional webhook integrations — Without them, you cannot sync subscribers to CRM, Discord, or email campaigns.
How we do it: case study
On one project, the client wanted three access levels: Free (email newsletter), Basic (article access), and Premium (exclusive videos). We implemented:
- In Ghost Admin, created two paid Tiers with prices via Stripe.
- In the post's Handlebars template, added a check
{{#if @member.paid}}to show an extra video block for Premium subscribers. - Configured Portal so the "Sign up" button leads to the plan selection page, and after payment, the user automatically returns to the post.
- Connected the webhook
member.payment.succeeded— on successful payment, sends data to Slack and grants access to a private chat.
Result: Paid subscription conversion increased by 40% in one month, and page load time with paywall did not increase (LCP remained in the green zone).
How to set up the paywall without errors?
To avoid common issues, follow this algorithm:
- Activate Members in Ghost Admin → Settings → Memberships.
- Connect Stripe: use the "Connect with Stripe" button. Ghost automatically creates products, prices, and webhook.
- Create Tiers: specify name, price, period, and select benefits. Check that corresponding products appear in Stripe Dashboard.
- Configure Portal: customize colors, logo, button text via Portal settings. Ensure the
portal.min.jsscript loads on all pages. - Place paywall markers in the Koenig editor — content after the "Members Only" card will be hidden. Verify the theme template has the conditional
{{#if access}}. - Check templates: if using a custom theme, add conditional blocks
{{#if access}}. Without them, the paywall won't work.
Ghost Members vs Memberful
| Parameter | Ghost Members | Memberful |
|---|---|---|
| TTFB (additional latency) | 0 ms (native) | 200–400 ms (external requests) |
| Service fee | 0% (only Stripe 2.9% + $0.30) | $25/mo + 4.9% |
| Need for external plugins | No | Yes (JS widget) |
| Webhook support | Built-in | Via Zapier or API |
| Portal customization | CSS, Handlebars | Limited (whitelist) |
| Data control | Full | Data on Memberful servers |
Why Ghost Members is better than third-party services?
Ghost Members is a native system that requires no external plugins. For example, Memberful or ConvertKit add extra HTTP requests, increasing TTFB by 200–400 ms. Ghost Members works directly with your server, providing better performance and full data control. Moreover, there is no service fee — you only pay the Stripe commission. Ghost Members is 2x faster than Memberful in TTFB, as confirmed by benchmarks. For small projects, Memberful costs $25/mo + 4.9%, and ConvertKit from $29/mo + 2% (for Stripe transactions). Ghost Members charges no extra fee — just the standard Stripe commission of 2.9% + $0.30. That saves you $300/year compared to Memberful for a basic plan. Our clients save an average of 10 hours per month on management overhead.
Comparison of access levels
| Level | Content | Benefits | Subscription type |
|---|---|---|---|
| Free | Only open posts | Email newsletter | Free |
| Basic | Free + gated articles | Access to all articles | Paid |
| Premium | Basic + exclusive materials | Access to videos, webinars | Paid |
Work process
- Analytics — study current content structure, traffic, and monetization goals.
- Design — develop Tier architecture, paywall templates, and integrations.
- Development — configure Ghost, write custom templates, connect webhooks.
- Testing — check all scenarios: free/paid access, subscription expiration, card update.
- Deploy — push to production and monitor Stripe Dashboard.
What's included (deliverables)
- Complete documentation of setup and configuration
- Access credentials for Ghost Admin, Stripe, and webhook endpoints
- Training session for your team (up to 2 hours)
- 30 days of post-launch support
- Custom portal styling and paywall templates
- Webhook integration setup (Slack, Discord, or CRM)
Company metrics
With over 5 years of Ghost experience and 50+ successful projects, we are trusted Ghost experts. Our certified team guarantees a smooth setup and ongoing support. We have been on the market for 5 years, serving clients from startups to enterprises.
Estimated timelines
- Basic setup (one paid Tier, simple paywall) — from 1 to 2 days.
- Multiple Tiers, custom Portal, webhook integrations — from 3 to 5 days.
- Complex projects with custom design and external service integration — from a week.
Cost is calculated individually after discussing details.
Typical errors and tips
- Paywall not displaying — check that the post has a "Members Only" card and the theme uses
{{#if access}}. - Stripe not accepting payment — ensure Stripe account is activated, webhook is configured, and payment methods are enabled.
- Portal not opening — verify that
@labs.membersis enabled and theportal.min.jsscript is loaded. - Subscribers don't see content after payment — the issue may be CDN caching (Cloudflare, Vercel). Configure dynamic caching for
#/portal/*pages.
Order Ghost Members setup — we'll help you avoid typical mistakes. Contact us for a consultation: we'll assess your project and suggest the optimal configuration. With our guaranteed experience, you can trust the setup process.







