Adding a 'Terms of service' to Ghost Membership site

Is it possible to add a ‘Terms of Service’ to the sign-up process on my Ghost platform that new members would agree to before signing up to a monthly or yearly plan?

Has anyone else worked this out already?

Theme: Dawn by iveel


Seconding this!

In my opinion, it should probably be built-in Ghost Members.

Actually, under French law you cannot sell anything (including a digital subscription) unless the customer explicitly agreed on terms. At the moment, paid Ghost Members are virtually unusable by any French person or business as it is not compliant with this legal requirement.

1 Like

It would be reasonably easy to write some JS and HTML to insert into a theme.
For example: a checkbox that needs to be checked before the Subscribe form/button is enabled. Is that all that you need, or would you need this consent stored somewhere for proof?


This is a good question. I’m not sure you need to store the consent (I’ll research that), but I assume implementation would be much more difficult if it has to be stored?

Also, just to clarify: by saying “it should be built-in”, I had Portal in mind (which is a great feature).

I did this by customizing signup.hbs in lyra theme, added a small blurb and a link to Terms (poor man’s way) :slight_smile:
Yes, adding a separate step to acknowledge (button/check/continue) would be more explicit
Also yes, the same flow would be needed for Portal

After some consideration, as you suggested I decided to hard-code this check on the theme instead of relying on portal (that doesn’t have the feature anyway).

Going this route also helped me to translate the whole subscription workflow because my websites are in French, and French people are really allergic to foreign langages :slightly_smiling_face:

1 Like

Good evening, I would also like to integrate this feature and translate the cms into French. Would it be possible in discussing together?

I used the documentation and it was quite good.

Just be aware that the translation helper needs to be formatted like this {{t "Text to translate"}} in order to display the associated string in fr.json. I also need to restart Ghost every time I make a change in the fr.json file in order for the change to be visible in the theme. And {{t}} is case, space and punctuation sensitive.

Good luck!

Hi, what do you mean you “hard-coded” it into the theme? I downloaded it yesterday and unfortunately cannot see any Terms of Service in the sign-up process. Also, as the members-related hbs files are missing, it is not possible to translate words such as “monthly” to a different language. Will you kindly make this possible again? Thank you.

Yes curious to see what you have implemented. :wink:
Checkbox + terms (stored in a db) or “like below” (Substack)


I built my own theme (with Halfmoon) and instead of relying on Portal for the payments/subscribe process, users will go through a dedicated webpage – where it is not possible to go to the payment page unless users accept the Terms of sales.

The Substack implementation is actually not compliant with French laws. You cannot assume acceptance, people have to explicitly opt-in.

In my case, when you click on “Subscribe” on the pricing table, instead of going right into the payment page, it displays a modal with the Terms of sales. And then users will need to click on a “I accept” button before seeing the payment page (there is also a “I refuse” button).

Acceptance is not stored in a db. Maybe I will implement that in a future version, but at the moment it seems my current implementation is good enough. I’m also not sure if law requires for it to be stored.

Once the theme will be used in production (in the upcoming weeks), I will post a link here for everyone to see how I implemented this.


Thank you :wink:

I want to do it like this too.
I created a service on the Stripe side. I created a payment link for the service.
Can I sell a few of my services on a ghost?