How to Sell Ad Space on a Ghost Site
Where a banner can go in Ghost (HTML cards, Code Injection, theme partials), which options your Ghost(Pro) plan allows, and how to keep paying members ad-free.
On this page
To sell ad space on a Ghost site, paste the banner's HTML into an HTML card where it should appear in a post, or add it to your theme as a partial so it shows on every post, then publish an "Advertise" page that tells sponsors how to book and pay. Code Injection only adds code inside the page's <head> or just before </body>, so use it for the slot's CSS, not for the banner itself. Theme edits need self-hosted Ghost or a Ghost(Pro) plan that allows custom themes (Publisher and up as of October 2026), and both cards and templates can hide ads from paying members.
Key takeaways
- An HTML card puts a banner exactly where you want it in a post, and its visibility settings control web vs. email and which members see it.
- Code Injection outputs code in the
<head>or before</body>on every page: good for CSS, not for placing a visible banner. - For a slot on every post, create a theme partial and include it after
{{content}}inpost.hbs. - Ghost(Pro) Starter runs official themes only, so template edits need self-hosted Ghost or Publisher and up.
- Keep paying members ad-free with card visibility or
{{#unless @member.paid}}, and sell newsletter sponsorships with the Call to action card.
Which options your setup allows
Your hosting decides which options you can use. As of October 2026, Ghost(Pro)'s plan comparison and help docs show:
| Self-hosted Ghost | Ghost(Pro) Starter | Ghost(Pro) Publisher and up | |
|---|---|---|---|
| HTML cards in posts | Yes | Yes | Yes |
| Code Injection | Yes | Not listed as plan-limited | Yes |
| Edited or custom themes | Yes | No, official themes only | Yes |
| Paid memberships | Yes, with Stripe | No | Yes |
| "Ad networks" in the plan comparison | Not applicable | Not included | Included |
The comparison doesn't say exactly what the Starter restriction covers. A direct-sold banner is a linked image rather than a network script, but if you're on Starter, confirm with Ghost support before you sell placements.
Option 1: An HTML card in a post
- In the editor, click + or type
/on a new line, and choose HTML. - Paste the banner code.
- Click the eye icon in the card toolbar to choose where the card shows (on the web, in the newsletter, or both) and to whom: public visitors, free members and paid members.
- Update the post.
A self-contained banner with a label (the URLs are placeholders):
<div style="max-width:300px;margin:32px auto;text-align:center">
<p style="margin:0 0 4px;font-size:12px;opacity:.7">Advertisement</p>
<a href="https://advertiser.example.com/" target="_blank" rel="sponsored noopener"><img src="https://yoursite.example.com/ads/sponsor-300x250.webp" width="300" height="250" alt="Sponsor name: short message" style="max-width:100%;height:auto"></a>
</div>
rel="sponsored" marks the link as paid; our guide to adding a banner ad with plain HTML explains the other attributes.
Ghost added visibility settings to HTML cards in April 2025. By default a card shows everywhere, so a web banner also goes out in your newsletter unless you change it. To reuse the card, highlight it, click the snippet icon in the toolbar and save it as a snippet; in later posts, type / and the snippet's name.
Ghost stores post content as static HTML, so Handlebars such as {{#if}} won't work inside a card; use its visibility settings instead.
Option 2: Code Injection, and its limits
Under Settings → Advanced → Code Injection, Ghost has two site-wide fields: Site Header, output inside <head>, and Site Footer, output just before </body>. Each post also has its own code injection in the post settings sidebar.
That placement is the limit: nothing in <head> is displayed, and visible HTML in the footer field lands at the very end of the page, usually below your theme's footer. Moving it elsewhere takes JavaScript, which brings back the weight a plain banner avoids. Code Injection is the right place for the slot's CSS, though; paste this into Site Header to style the theme slot in Option 3:
<style>
.sponsor-slot { max-width: 300px; margin: 32px auto; text-align: center; }
.sponsor-slot small { display: block; margin-bottom: 4px; font-size: 12px; opacity: .7; }
.sponsor-slot img { display: block; width: 100%; height: auto; }
</style>
Option 3: Add a slot to your theme
For a banner on every post, put it in the theme. You need self-hosted Ghost or a Ghost(Pro) plan that allows custom themes.
- In Settings → Site → Theme, click Change theme, then Installed. The ... menu next to your active theme has Edit Code (added in May 2026) for editing in the browser, and Download if you'd rather edit on your computer.
- Create a file called
partials/sponsor-slot.hbs:
{{#unless @member.paid}}
<aside class="sponsor-slot">
<small>Advertisement</small>
<a href="https://advertiser.example.com/" target="_blank" rel="sponsored noopener"><img src="https://yoursite.example.com/ads/sponsor-300x250.webp" width="300" height="250" alt="Sponsor name: short message" loading="lazy"></a>
</aside>
{{/unless}}
- Open
post.hbsand add{{> "sponsor-slot"}}on the line after{{content}}. - Click Save, then Replace theme to publish. If you edited locally, zip the theme folder and use Upload theme.
For a sidebar, include the partial wherever your theme renders one; many Ghost themes have none, so below the post is the usual spot. Re-apply your edit whenever you update the theme, because a new version replaces your files.
The {{#unless @member.paid}} wrapper hides the slot from paying members. According to Ghost's theme docs, @member.paid is true for subscriptions that are active, trialing, unpaid or past due.
Keep paying members ad-free
An ad-free site is an easy perk to list on your membership page. In posts, open an HTML card's visibility settings and switch off paid members; in templates, the {{#unless @member.paid}} wrapper does the same. Ghost(Pro) Starter doesn't include paid subscriptions, so this applies to self-hosted sites and Publisher and up.
Hiding ads shrinks the audience you sell, so estimate impressions from public visitors and free members only when you set a price.
Newsletter sponsorships
Ghost sends posts as email newsletters, and many sponsors want the inbox. The Call to action card has an optional sponsor label, an image and a button, and like the HTML card it can show in the newsletter, on the website or both, for the member groups you choose. Use it for a per-issue sponsor message.
Keep date-booked web banners out of email. People open newsletters days or weeks later, long after a booking ends, so set those HTML cards to show on the web only. For how sponsorships compare with banners, see sponsorships vs. banner ads vs. affiliate.
Publish an Advertise page and set a price
Create a page called "Advertise," then add it to your menu under Settings → Site → Navigation, because Ghost doesn't add new pages to navigation automatically. List your audience, monthly pageviews and newsletter subscribers, each slot's size, placement and price, what you accept, and how to book. Our Advertise With Us page template has copy you can adapt, and how much to charge for banner ads turns slot impressions into a flat daily rate.
Selling the slot with Spreadiom
Placing the banner is easy; dates, payment and creative swaps are the ongoing work. Spreadiom handles them around one embed:
- Create an ad slot in the size you want. You get a one-line embed code and a public booking page with an availability calendar.
- Paste the embed into an HTML card set to web only, a snippet, or your theme partial in place of the hand-coded link. Until someone books, it shows an "Advertise here" image that links to the booking page.
- Advertisers book as guests. They pick dates, upload a banner that's automatically cropped to the slot size and screened for prohibited content, and pay by card through your own Stripe account or with PayPal straight into your own PayPal account. Spreadiom never holds the money.
- With approval on, a card is only authorized at booking and charged when you approve; PayPal advertisers pay after approval, within 48 hours. Requests you don't review are canceled automatically.
- The booked ad goes live on its start date automatically, so you never re-upload the theme or edit old posts.
Here's the embed for a 300×250 slot:
<a href="https://www.spreadiom.com/ABC-12/link" target="_blank" rel="sponsored noopener"><img src="https://www.spreadiom.com/ABC-12/img" width="300" height="250" alt="Advertisement" style="max-width:100%;height:auto" loading="lazy"></a>
It's plain HTML with no JavaScript and no cookies. You see impressions, clicks and CTR per slot, each advertiser sees them on a private booking page, and crawlers and other bots are filtered out. Stripe test keys let you try the whole flow before taking real money.
Spreadiom is free to start. It charges a 5% platform fee on completed (paid, live) bookings, invoiced once a month and paid by PayPal. The fee is never deducted from the advertiser's payment, and Stripe or PayPal processing fees are separate. Create a free account to set up your first slot, or see the pricing page.
FAQ
Can you put ads on a Ghost blog?
Yes. Paste a banner's HTML into an HTML card in a post, or add it to a theme partial to show it on every post. On Ghost(Pro), theme edits need a plan with custom themes, and the Starter plan's comparison doesn't include ad networks, so check your plan first.
How do I add a banner to a Ghost theme?
Create a partial such as partials/sponsor-slot.hbs with the banner HTML, then include it with {{> "sponsor-slot"}} in a template, usually right after {{content}} in post.hbs. Edit the files with Ghost's Edit Code option or on your computer, then save or upload the theme.
Can I use Code Injection to show an ad in Ghost?
Only partly. Code Injection outputs code inside <head> or just before </body>, so it suits the ad's CSS but can't place a visible banner mid-page. Use an HTML card or a theme partial for the banner itself.
How do I hide ads from paid members in Ghost?
In a post, open the HTML card's visibility settings with the eye icon and turn off paid members. In theme templates, wrap the ad in {{#unless @member.paid}} and {{/unless}}.
Do HTML card ads appear in Ghost newsletters?
Yes, by default, because cards show on the web and in email. Use the card's visibility settings to keep a web banner out of the newsletter, and sell inbox placements separately.
How do I sell sponsorships for a Ghost newsletter?
Add a Call to action card with its sponsor label to each issue and set it to show in the newsletter. List sponsorship options and prices on your Advertise page next to your website slots.
Sell ad space on your site — start free
Give every ad slot its own booking page. Advertisers pick dates, upload a banner and pay by card or PayPal — straight into your own account. No subscription; 5% only on completed bookings.