Ko-fi is the least work of any provider in this set. One credential, no webhook registration, no API keys to rotate. If your income is mostly tips and small memberships, you can be running in five minutes.
It also has a gap that matters more than the convenience, and this guide leads with it rather than burying it in a troubleshooting section.
The limitation, first
Ko-fi never tells anyone when a membership ends.
Its webhook API reports that a membership started or that a payment came in. There is no event for a cancellation, a lapse or an expiry. Nothing arrives, so nothing can react.
The practical consequence: when a supporter cancels their Ko-fi membership, their Ghost access stays until you revoke it manually. That is not a bug in the integration, it is the shape of Ko-fi’s API. Ko-fi has said it plans to expand its webhook events, and until it does, this is what you get.
Whether that matters depends entirely on what you sell:
- Tips and one-off support: irrelevant. There is nothing to cancel.
- Shop items granting permanent access: irrelevant for the same reason.
- A recurring membership gating your archive: this is a real problem. You will need a habit of checking Ko-fi’s member list against Ghost, or you will slowly accumulate people reading for free.
If the third case is you, Polar or Lemon Squeezy handle cancellations properly and are worth the extra ten minutes of setup.
Still here? The rest is genuinely easy.
What you need
- A Ko-fi account
- A Ghost site you administer
That is the whole list.
Connect Ghost first
In Ghost: Settings, then Integrations, then Add custom integration. Name it PayGlue, copy the Admin API key and your site URL.
Connect Ko-fi
In Ko-fi, go to Settings, then Webhooks, under the API section.
Copy the Webhook URL from your Ko-fi connection page in PayGlue and paste it into Ko-fi’s Webhook URL field. Save.
Ko-fi shows a Verification Token on the same page. Copy it into PayGlue and click Save credentials.
That is it. One field. There is no webhook to register event by event, because Ko-fi sends everything to one URL and lets the receiver decide what to do.
How the verification works, and why the token matters
Ko-fi does not sign its webhooks cryptographically. Instead, every payload carries the verification token you configured, and PayGlue checks it against the token stored for your account before doing anything.
That is a weaker mechanism than a signature, and it has a direct consequence: anyone holding that token can send PayGlue convincing fake Ko-fi events for your account. Keep it private, the same way you would an API key. If it ever leaks, regenerate it in Ko-fi and update it in PayGlue.
Run a health check, and know what it proves
Click Run health check. Green means your token is saved.
It does not mean Ko-fi is delivering anything. Ko-fi has no API endpoint for PayGlue to call, so there is nothing to test from this side. The health check confirms configuration, not delivery.
For a real check, use Ko-fi’s Send Test button on the Webhooks settings page, then look at Analytics, then Webhook Events.
Mapping, which works differently here
Every other provider gives you a product dropdown. Ko-fi does not, because there is no API to read your tiers or shop items from. So the Buy Button, Paywall and Pricing Table editors use a text field.
Three cases, three different values:
A membership tier. Type the tier name exactly as it appears on your Ko-fi page, for example Gold Tier. Exactly, including capitalisation.
A Shop item. Paste the item’s share link, from Share, then Copy link in Ko-fi. It looks like https://ko-fi.com/s/c0e30e5fcf. PayGlue pulls the product code out of it for you.
This one has a reason worth knowing: a Shop Order webhook never includes the item’s name, only an opaque code. The share link is the only reliable way to identify a specific item, which is why the field wants a URL rather than a title.
Plain tips. Use kofi-support.
Then choose the Ghost newsletter and welcome email, and save.
What Ko-fi sends and what happens
Ko-fi’s API is webhook-only and event-driven. Every payment type it reports represents money that actually arrived, so all of them map to the same outcome.
| Ko-fi event | What happens in Ghost |
|---|---|
Tip (also sent as Donation by the test button) |
Member created |
Subscription, a membership payment |
Member created or confirmed active |
Shop Order |
Member created |
Commission |
Member created |
No revoke row in that table, for the reason at the top of this article.
One useful detail: a single Shop Order can contain several items, and each one grants its own entitlement independently. Somebody buying three things gets access mapped from all three.
When something does not work
Still shows “not connected” after saving. Re-copy the token. A partial copy or a trailing space is the usual cause, and there is no other credential that could be wrong.
Health check passes but nothing arrives. Expected, see above. Use Send Test.
The test webhook fails. Read the actual error in the event log. Ko-fi’s test button sends the legacy type Donation instead of Tip, and PayGlue accepts both, so the type is rarely the real problem.
A payment arrived but no member appeared. Almost always a missing mapping. The event is received and verified, and then there is no instruction for what to do with it.
A cancelled supporter still has access. Expected, and not fixable from here. Revoke it in Ghost Admin.
Where Ko-fi genuinely wins
For a writer with a tip jar and a small supporter tier, Ko-fi is the right answer and the others are overkill. The setup is one field, the audience already knows the brand, and the cancellation gap does not apply to money that was never recurring.
The moment your income is mostly recurring memberships gating real content, the gap starts costing you. That is the line to watch, and it is worth moving before you cross it rather than after.