How to set up Ghost.org for the EU: GDPR, VAT & Invoicing Guide

Learn how to set up Ghost.org for EU businesses: GDPR-safe hosting, VAT handling, legal invoicing, and cookie compliance – all in one guide.
How to set up Ghost.org for the EU: GDPR, VAT & Invoicing Guide

On this page

A couple of weeks ago, I migrated to Ghost.org and now use it as my all-in-one tool for my blog, membership content, and newsletters. I completely fell in love with it. It's incredibly easy to use and quick to set up... well... if only I didn't live in Europe...

Because, like most amazing tools and software out there, it's usually not made in the EU. They're either from Silicon Valley or made specifically to serve the US market's needs. This means customers from the EU lack features they desperately need to comply with GDPR (which is very important), to calculate VAT correctly (especially if you're selling digital products or subscriptions), or simply to issue legally compliant invoices (at least where I'm from in Austria).

Even though the "Ghost Foundation," the company behind the software, is from Singapore, and the tool is open-source and values privacy more than any US business, they still do not have a 100% compliant solution for EU customers like me.

So I wrote this little "guide" on setting up a Ghost.org website for EU businesses. Since it's really difficult to find good advice on this topic, and the only source I found was in German or loosely scattered info in the Ghost forum, I'll walk you through the setup step by step to ensure you're compliant if you're operating from anywhere in Europe.

I'm just sharing my personal experiences, what I learned, what worked for me, and what's my personal opinion. This is not legal advice. Always check with your own legal advisor to make sure your website is set up in compliance with the laws and regulations in your country.

Hosting

Let's start with one of the most important questions: Where do you host your Ghost website to stay compliant with GDPR?

Much like WordPress.org offers its own managed hosting service through WordPress.com, Ghost.org has Ghost Pro. So obviously, if you're not familiar and want to start using Ghost, you'd go there for hosting.

Ghost Pro - Pricing | August 2025

The problem is that the servers for Ghost Pro and most other Ghost hosting providers are using Digital Ocean and Cloudflare as CDNs (both US companies with servers in the US).

While I'm not familiar with the current law, last time I checked, hosting outside of European servers wasn't compliant with GDPR (or at least very concerning). So you need a Ghost hosting provider with servers in the EU (recommended) or host it yourself on a server you set up (not recommended, unless you're a developer and know what you're doing).

MagicPages

I researched a bit for GDPR-compliant Ghost hosting service providers in the EU, and MagicPages.co* is the one that is almost omnipresent in every forum and recommended anywhere someone asks.

It's run by just one guy from Austria, Jannis, and damn, it made all the setup so incredibly easy. It was done in about 3 minutes, and with Jannis' configuration, you don't need to worry about GDPR, server, hosting, or any technical stuff.

If you want the legal mambo jumbo on why MagicPages.co is 100% GDPR compliant, go to this info page for further details:
https://www.magicpages.co/datacenters/

The pricing is cheaper than Ghost Pro, but you get more service, and you get almost instant 1:1 support from Jannis himself, with whatever problem you face. This guy is almost 24/7 available... just incredibly dedicated to providing an amazing service. There is even a lifetime plan available, so you get the hosting forever. Nonetheless, I chose the monthly plan, as I'd rather stay flexible.

I usually don't promote external services this bluntly, but this is really worth the money.

MagicPages.co - Plans | August 2025

If you prefer to host it yourself, I can't give you any real advice, as I'm not familiar with the technical details. You need to do your own research.

Theme

The next challenge is the right theme for your Ghost.org website. Depending on your theme, there are a couple of customization possibilities. You can change all colors, texts, and layouts on the customization page of your theme.

The better the theme and the documentation, the better the customization (but also the higher the price). While there are a couple of free themes available, a premium theme usually does a much better job. I bought my theme on Themeforest for about 80 bucks.

GDPR critical theme settings

Google Fonts
Most themes come with a variety of Google fonts pre-installed to fine-tune the design of your website to your liking. However, loading external Google font scripts is not GDPR compliant, and you need to make sure you're using the system fonts from Ghost itself. You can do this in Settings > Design > Theme (see screenshot below).

Don't use Google fonts here

Gravatar
Ghost comes out of the box with Gravatar enabled. If members use an email address registered with Gravatar when signing up, they will see their image as a profile picture once they have logged in. As this happens without consent from the user, it's not compliant with GDPR.

Simple solution to fix this: If you're with MagicPages, you can simply turn off the Gravatar toggle. If you're self-hosting, you need to change Ghost configuration in the privacy files.

Turning off Gravatar at Ghost.org with MagicPages.co

Even though the newest Ghost 6 version, which just launched this week, has native analytics built in, Ghost uses no cookies at all. Don't ask me how this works, but they rely on their partner Tinybird to do this. This tool is 100% GDPR compliant, too.

So, technically, if you don't insert any additional tracking pixels or marketing scripts on your website and don't have a paid subscription, you don't even need to set up a cookie banner. Nonetheless, I'd recommend one anyway (just so people don't complain about it missing...)

To handle paid memberships, Ghost uses a Stripe integration. If you're like me and decide to go all-in on memberships and turn on paid subscriptions, you'll need to install a cookie banner, because Stripe needs essential cookies to work.

I went with the CookieYes cookie banner*, which is free for up to 5,000 pageviews per month. All you need to do is copy some JavaScript code into your Ghost settings at "Settings > Code injections" in the header. CookieYes will then scan your site and set up the cookie banner for you.

If you want to add tracking pixels or marketing scripts, insert them in "Code injection" too, and re-scan your website using the cookie plugin. To make sure you don't load any script without consent.

Of course, there are a ton of other cookie plugins out there, but CookieYes is recommended by Ghost.org itself, and I found the installation to be incredibly easy. You can even customize the banner to your liking - all for free in the starter plan.

VAT & Invoicing

The setup out of the box is, again, incredibly simple. You just need to connect your Stripe account with Ghost. That takes about 1 minute, and you're ready to go. Ghost syncs all your Stripe transactions with accounts in your membership and handles access to gated content. Your subscribers can manage their subscription themselves, and you don't have to fumble around with automations in Zapier to make it all work smoothly.

How to charge VAT/sales tax for digital products with your Ghost website

However, the Stripe integration with Ghost is missing two very crucial things for EU business owners.

First of all, it's not charging VAT/sales tax for your subscription. If you have an EU business and sell to EU customers, you must charge the local VAT/sales tax in the customer's country and offer EU B2B buyers the opportunity to purchase as a business, utilizing the reverse charge system (0% VAT).

This is EXTREMELY important for any European creator/solopreneur selling digital products. If you're not charging VAT/sales tax and haven't registered for EU-OSS and pay the charged taxes to the local tax authorities, you are committing tax fraud. If you're not familiar with this, look it up ASAP (I wrote my diploma about tax evasion, so you'd better trust me on this one 😆)

Ghost, however, doesn't charge any VAT/sales tax at all. They have, however, a beta integration with Stripe Tax, which you can enable to charge VAT automatically. You can read all about it here. If you're hosting with MagicPages.co, just hit up Jannis, and he'll enable Stripe Tax in your Ghost account.

Stripe Tax fees are a bit higher than the usual Stripe fees, and you need to enter your tax registration details in your Stripe account to make it work. The setup guide is pretty self-explanatory. Simply go through the process, enter your address, VAT-ID, registration status, and you're all set. Once you're done, it should look like that in Tax > Registrations:

Stripe Tax - Registrations Overview

After completing all the necessary steps and enabling the automatic collection of VAT/sales taxes, you'd expect it to work in Ghost, but unfortunately, this is not the case.

Yes, at checkout, VAT is charged. But the Ghost Stripe integration is not collecting the billing address at checkout. Meaning you're not able to send out a legally compliant invoice (at least not in Austria or Germany, and I'd expect not in most other European countries either. Especially not if you're charging VAT on your products and sell internationally, but check your local legislation on invoicing to make sure.)

How to set up correct invoicing for European businesses

When you start a paid membership in Ghost, you set up pricing tiers in your Ghost account. In the background, Ghost is creating products in Stripe, however. Unfortunately, we can't change what information is collected at the native Ghost Stripe checkout.

So, correct invoicing for EU businesses with a Ghost website is only possible with a little workaround. We need to go to Stripe products and create separate Stripe payment links for our pricing tiers.

To do this, you need to navigate to your Stripe products. You should see your Ghost pricing tiers here. Usually, there is a monthly and a yearly price option:

Ghost price tiers in your Stripe account

Now click on your products, go to the three dots and create for each a new payment link (see screenshot):

Now go to options and check "Collect customers' addresses" and "Allow business customers to provide tax IDs":

Next, click on the "create link" button in the top right corner and check out your link. Enter your email address and try to buy your subscription. You should see two things now.

  1. VAT is charged on your price (usually the tax is included in the price)
  2. Your customers can enter their whole address and have an option to buy as a business.

(The screenshot is in German, I couldn't figure out how to show it in English, sorry:)

If you see these two blocks, you have set up everything correctly. The only thing left to do now is to change the payment links in your Ghost "subscribe" buttons.

Further Stripe invoice settings
I'm assuming you've set up your Stripe account correctly to comply with your country's regulations. Nonetheless, here are some settings I've used that might be useful for you, too, if you're new to Stripe:

A) I changed the price to "add taxes at checkout" (I thought I had primarily B2B buyers and they want to see net prices. In fact, I hadn't, and turned this setting back to "include taxes at checkout" again.)

B) My invoices are automatically sent to my customers.

C) My VAT-ID is shown on invoices.

You can do this all in your invoice settings:
https://dashboard.stripe.com/settings/billing/invoice

Now that our invoicing is bulletproof, the only thing left to do is integrate the payment link(s) we created in Stripe to our Ghost subscription button.

In your Ghost theme settings, you usually have an option to use portal links or your own links. Toggle portal links off and create your own membership/signup page.

For most themes, you just have to create a page in Ghost and call it "Membership". Check with your theme documentation to make sure it works.

Then you can create your own page and create your own pricing table. I've asked ChatGPT to create a nice table, which I've included on my page. Here is the code:

<section class="pricing-table">
  <div class="pricing-cards" style="display: flex; gap: 2rem; justify-content: center; flex-wrap: wrap;">

    <!-- Free Plan -->
    <div class="pricing-card" style="border: 1px solid #ccc; border-radius: 8px; padding: 2rem; width: 325px; text-align: center;">
      <h3 style="color: #00d18b;">Free</h3>
      <p style="font-size: 2rem; font-weight: bold;">€0</p>
      <p style="color: #D4D4D4;">✅ Access to all free content<br>
                                 ✅ Personal Business Essays<br>
                                 ✅ Newsletters<br>
                                 ✅ Free Creator Tools<br>
                                 ✅ Online Business Tips<br>
                                 ❌ Access to all paid content<br>
                                 ❌ Business Breakdowns<br>
                                 ❌ Creator Workshops<br>
                                 ❌ Premium Creator Tools<br>
                                 ❌ Online Courses<br>                          </p>
      <a href="https://www.stefanzangerle.com/#/portal/signup/free" style="display: inline-block; margin-top: 1rem; padding: 0.75rem 1.5rem; background: #00d18b; color: white; text-decoration: none; border-radius: 5px;">Sign up for free</a>
    </div>

    <!-- Monthly Plan -->
    <div class="pricing-card" style="border: 1px solid #ccc; border-radius: 8px; padding: 2rem; width: 325px; text-align: center;">
      <h3 style="color: #00d18b;">Premium</h3>
      <p style="font-size: 2rem; font-weight: bold;">€30 monthly</p>
      <p style="color: #D4D4D4;">✅ Access to all free content<br>
                                 ✅ Personal Business Essays<br>
                                 ✅ Newsletters<br>
                                 ✅ Free Creator Tools<br>
                                 ✅ Online Business Tips<br>
                                 ✅ Access to all paid content<br>
                                 ✅ Business Breakdowns<br>
                                 ✅ Creator Workshops<br>
                                 ✅ Premium Creator Tools<br>
                                 ✅ Online Courses<br> 
      </p>
      <a href="https://buy.stripe.com/cNifZh8AN5E986I15557W01" style="display: inline-block; margin-top: 1rem; padding: 0.75rem 1.5rem; background: #00d18b; color: white; text-decoration: none; border-radius: 5px;">Subscribe</a><br>
<span style="font-size: 0.75rem;">Cancel anytime</span>
    </div>

  </div>

  <p style="text-align: center; margin-top: 2rem;">
    Already a member? <a href="https://www.stefanzangerle.com/#/portal/signin" style="color: #00D084;">Sign in</a>
  </p>
</section>

The free signup link will work for you, too. The paid subscription link, you need to change to your payment link:

Copy this as an HTML block in your page and you're all set. Make sure to test it properly to see whether it's working correctly on your website.

This solution worked super smoothly for me. And even though the setup is a bit tricky at first, once it's done, you don't have to waste another thought on invoicing, VAT, and all the technical stuff in Ghost.

One small detail kept bothering me, though, a little break in the otherwise so smooth processes with Ghost...and I couldn't find any solution anywhere, so I came up with my own.

It was the email "upgrade" link. You see, in Ghost, you can gate your content for paid members, but include a preview link for the public and free. Up until the preview link, everyone can read the post. Once you reach the preview link, you'll find a button to become a paid member and continue reading.

On the website, this worked just fine. Linked to my membership page. Done.

In the email newsletter, however, this is still linked to the old portal links (the ones we've disabled) and to the checkout without billing addresses. Apparently, this is impossible to change.

But if you know me, you know that I never give up when a problem arises. If fed ChatGPT the whole Ghost developer documentation. ChatGPT confirmed that you can't do anything about it; you can't change the link.

So I thought "Ok, so if we can't change the link, maybe we can redirect this exact upgrade link from the email "upgrade" button.". Took ChatGPT and me about 30 minutes to work out the right code for this.

Here it is, just copy it inside in your Site's header via Code injection and every time someone clicks on that upgrade button in your emails, they land on your custom membership page:

<script>
(function () {
  function reroute() {
    var h = (window.location.hash || '').toLowerCase();
    if (h && (h === '#/portal/signup' || h.indexOf('#/portal/signup?') === 0)) {
      window.location.replace('/membership');
    }
  }
  reroute();
  window.addEventListener('hashchange', reroute, false);
})();
</script>

Beware, though. I'm no developer; I just figured out that this code works for this specific use case, but I'm not sure why it works or what it actually does.

Final Thoughts

This blog post turned out so much longer than I originally thought. I really wanted to include everything I learned and needed to research myself. With this guide, every European Ghost user should be able to set up Ghost to comply with GDPR and all invoicing laws. If there is anything missing, let me know in the comments below.

I specifically decided to NOT gate this content, even though it's incredibly valuable. If you're creating a membership for your business, I highly encourage you to sign up as a premium member and access every content piece on this website. You'll find much more useful stuff like this behind the paywall 😉

Become a paid member now and get access to all premium content!

Learn more
This post uses affiliate links. Links marked with an asterisk (*) are affiliate links. I earn a small commission if you sign up using my link. I only recommend tools I use myself and that I would recommend without doubt to anyone else, too.

Join my free membership for quiet creators!

I share the tools, freebies, and thoughts I wish I had when I started. Just honest insights on building an online business as an introvert. 600+ introverted creators are already inside.
Great! Check your inbox and click the link to confirm your subscription.
Error! Please enter a valid email address!