Ghost logo Ghost automation · runs weekly

Label Ghost members by where they signed up

A launch post brings in a few hundred new members, and the only way to email them as a group later is a label that someone adds by hand after filtering the members list.

Cotlet does it in your own Ghost account with list_labels, list_members and label_members, called by your AI agent, an n8n workflow or a script.

Hosted · nothing to install or maintain

Can Ghost do this on its own?

Ghost applies a label automatically when a member signs up through an embeddable signup form, the signup form of your theme or the Zapier integration (checked 17 Oct 2026). For members already on the list, the Members filter and the bulk action Apply labels do it by hand, one filtered list at a time. Nothing re-runs the filter on a schedule.

How you do it in Ghost today

  1. In Ghost Admin the owner opens Members and clicks Add filter to narrow the list. Signed up on post/page, Created and Membership tier are among the filters.
  2. Members can also be filtered by Label, Member status, Open rate (all time) and Last seen, and any number of filters can be combined.
  3. Save view names the filtered list and keeps it under Members in the sidebar.
  4. The "..." icon in the top right of the filtered list opens the bulk actions: export, apply labels, remove labels and unsubscribe from email.
  5. The filter has to be redone and the label applied again every time new members arrive, because a label added in bulk does not follow later signups.

How to label Ghost members by where they signed up

Prompt

List the Ghost members who signed up on the post "launch-week" in the last 7 days and add the label "Launch signup" to them. Tell me how many you labelled and how many already had it.
  1. 01

    Check the label exists

    list_labels returns every label with its name. The agent uses the exact spelling of "Launch signup" if it exists, so a label with a typo does not split the segment in two.

  2. 02

    Find the members

    list_members runs with signed_up_on set to the post slug and created_after set to seven days back. It pages through the results until the list ends, so a busy launch week is one batch.

  3. 03

    Skip who is done

    Each member already carries a labels list. Members who have the label are counted as already labelled and left out of the next call.

  4. 04

    Apply the label

    label_members adds the label to the remaining member IDs in one call and returns how many were updated. A label changes only the internal segment and reaches no member, so the call needs no OK.

  5. 05

    Report and offer the next step

    The agent reports the counts and offers a follow-up, such as exporting the segment or drafting a post for it, without sending anything.

What you get back

Example data

Members who signed up on launch-week in the last 7 days: 38
Label "Launch signup" added to 35
Already had the label: 3
Nothing sent to any member.

Other ways to ask

  • Label every paid member who has not opened an email in the last 60 days as "At risk".
  • Every Monday, label members who joined last week by the post they signed up on, using the post slug as the label name.
  • Remove the label "Trial" from members whose status is paid.
  • Show me how many members each signup post brought in this month and label nothing.

What Ghost allows, and what to know first

  • Labels are internal segments, such as VIP, that members never see.
  • The Members filters include Signed up on post/page, Subscription started on post/page, Membership tier, Member status, Billing period and Open rate (all time).
  • The Admin API returns signup attribution only from the single-member read, so a list by signup post depends on the filter in Ghost Admin.
  • Ghost fills the member status as free, paid, comped or gift, which lets one filter separate paying readers from the rest.
  • A saved view keeps a filtered Members list in the sidebar, but it does not apply a label to anyone who matches it later.

label_members changes only your own Ghost data and reach no one else, so it runs without asking first.

Sources: Ghost Help: Member management · Ghost Help: Member sources · Ghost Developer Docs: Members · Ghost Developer Docs: Labels

Call label_members from a script

curl

curl -X POST https://cotlet.dev/api/v1/ghost/members/label \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"action":"add","label":"Launch signup","member_ids":["6710b2d4a1b2c300a1b2c3e1","6710b2d4a1b2c300a1b2c3e2","6710b2d4a1b2c300a1b2c3e3"]}'

Example response

{
  "label": "Launch signup",
  "action": "add",
  "updated": 3,
  "skipped": 0,
  "failed": []
}

MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is ghost_write → label_members. Example data.

Schedule it in n8n, Make, Zapier or cron

Ghost tools this automation uses

Cotlet Ghost tools used to label Ghost members by where they signed up
Tool Parameters
list_labels none
list_members status, label, signed_up_on, created_after, min_emails_sent, max_open_rate, page, limit
label_members action, label, member_ids
All 14 Ghost tools with descriptions

Frequently asked questions

Is it safe to connect Ghost to Cotlet?

Yes. You sign in to Ghost yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get Ghost once you enable it, every background request is listed, and the browser profile is stored encrypted with AES-256-GCM, the cipher 1Password uses for its vaults. The AI model never sees a login, posts and messages wait for your OK, and Disable for agents cuts access in one click. Independent scanners grade cotlet.dev A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory; live results are on https://cotlet.dev/security.

Give your agent access to Ghost.

Free 7-day trial with 2,000 credits, no card needed. Cotlet is independent and not affiliated with Ghost.