Issue Summary
- Explain roughly what’s wrong
Webhooks in Ghost CMS only trigger member update events when a subscription is initially created or the plan changes. They do not trigger on subsequent (continuous) monthly subscription payments, meaning member status is not refreshed and connected automations (such as in n8n or other integration platforms) cannot respond to ongoing payments.
This makes it impossible for me to rely on Ghost as a platform, since members pass their judgment of the platform not working onto me
- What did you expect to happen?
Whenever a recurring subscription payment is processed (such as the second month onward for an active subscription), the webhook for member update should be triggered. This would enable external systems to keep member status and automations up-to-date in Ghost CMS.
Steps to Reproduce
-
Create a paid subscription for a member in Ghost CMS using Stripe as the payment gateway.
-
Observe that the “member.updated” webhook is triggered at subscription creation.
-
Wait for the next (second/third…) recurring monthly subscription payment to process via Stripe.
-
Observe that no new webhook event related to “member.updated” is triggered by Ghost following these recurring payments.
-
Check external automation (e.g., n8n, Zapier) connected to Ghost webhooks—no trigger on the recurring payment event.
Setup information
Ghost Version
Version 6, but also happened on 5
Node.js Version
The one that comes with Ghost docker image
How did you install Ghost?
Self hosting using Coolify, this is the docker compose
services:
ghost:
image: 'ghost:6-alpine'
volumes:
- 'ghost-content-data:/var/lib/ghost/content'
-
type: bind
source: ./config.production.json
target: /var/lib/ghost/config.production.json
environment:
- url=$SERVICE_FQDN_GHOST_2368
- database__client=mysql
- database__connection__host=mysql
- database__connection__user=$SERVICE_USER_MYSQL
- database__connection__password=$SERVICE_PASSWORD_MYSQL
- 'database__connection__database=${MYSQL_DATABASE-ghost}'
- mail__transport=SMTP
- 'mail__from=${MAIL_FROM}'
- 'mail__options__service=${MAIL_OPTIONS_SERVICE:-SES}'
- 'mail__options__host=${MAIL_OPTIONS_HOST}'
- 'mail__options__port=${MAIL_OPTIONS_PORT:-587}'
- 'mail__options__auth__pass=${MAIL_OPTIONS_AUTH_PASS}'
- 'mail__options__auth__user=${MAIL_OPTIONS_AUTH_USER}'
- 'mail__options__secure=${MAIL_OPTIONS_SECURE:-false}'
depends_on:
mysql:
condition: service_healthy
mysql:
image: 'mysql:8'
volumes:
- 'ghost-mysql-data:/var/lib/mysql'
environment:
- 'MYSQL_USER=${SERVICE_USER_MYSQL}'
- 'MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL}'
- 'MYSQL_DATABASE=${MYSQL_DATABASE}'
- 'MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT}'
healthcheck:
test:
- CMD
- mysqladmin
- ping
- '-h'
- 127.0.0.1
Provide details of your host & operating system
Hetzner, x86 Ubuntu
Database type
MySQL 8