[Cotlet](https://cotlet.dev/index.md) · [Integrations](https://cotlet.dev/integrations.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Use cases](https://cotlet.dev/use-cases.md) · [Security](https://cotlet.dev/security.md) · [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md) · [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [Contact](https://cotlet.dev/contact.md) · [Pricing](https://cotlet.dev/pricing.md) · [Sign up](https://cotlet.dev/signup)

# Label Ghost members by where they signed up

> Add a Ghost label to every member who signed up on a given post, so you can email only them later. Runs weekly, nothing to maintain.

Source: https://cotlet.dev/integrations/ghost-api-mcp-server/label-members-by-signup-source

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.

[Sign up free](https://cotlet.dev/app/signup?app=ghost) [All Ghost tools](https://cotlet.dev/integrations/ghost-api-mcp-server.md)

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](https://ghost.org/help/member-management/) · [Ghost Help: Member sources](https://ghost.org/help/member-sources/) · [Ghost Developer Docs: Members](https://docs.ghost.org/admin-api/members/overview) · [Ghost Developer Docs: Labels](https://docs.ghost.org/admin-api/labels/overview)

## 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](https://cotlet.dev/integrations/ghost-api-mcp-server.md#automations)

## 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](https://cotlet.dev/integrations/ghost-api-mcp-server.md#tools)

## 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.

## More Ghost automations

- [Schedule Ghost posts and send them as a newsletter](https://cotlet.dev/integrations/ghost-api-mcp-server/schedule-newsletter-posts.md)
- [Unsubscribe unengaged Ghost members from email](https://cotlet.dev/integrations/ghost-api-mcp-server/unsubscribe-unengaged-members.md)
- [Ghost API and MCP server: every tool](https://cotlet.dev/integrations/ghost-api-mcp-server.md)
- [All use cases](https://cotlet.dev/use-cases.md)

## 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.

[Sign up free](https://cotlet.dev/app/signup?app=ghost)

---

Give your AI agents your signed-in browser.

**Product:** [Integrations](https://cotlet.dev/integrations.md) · [Use cases](https://cotlet.dev/use-cases.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Pricing](https://cotlet.dev/pricing.md) · [Security](https://cotlet.dev/security.md)

**Resources:** [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [GitHub](https://github.com/cotletdev/cotlet)

**Solutions:** [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md)

**Company:** [About](https://cotlet.dev/about.md) · [AI info: company facts](https://cotlet.dev/ai-info.md) · [Contact](https://cotlet.dev/contact.md)

**Legal:** [Terms of service](https://cotlet.dev/terms) · [Privacy policy](https://cotlet.dev/privacy) · [Refund policy](https://cotlet.dev/refunds) · [Acceptable use](https://cotlet.dev/acceptable-use) · [Cookie policy](https://cotlet.dev/cookies) · [DPA](https://cotlet.dev/dpa) · [Subprocessors](https://cotlet.dev/subprocessors)

**Elsewhere:** [Status page](https://status.cotlet.dev) · [Cotlet on GitHub](https://github.com/cotletdev) · [Cotlet on X](https://x.com/cotletdev) · [Cotlet on LinkedIn](https://www.linkedin.com/company/cotletdev) · [Cotlet on Product Hunt](https://www.producthunt.com/products/cotlet) · [Cotlet on Crunchbase](https://www.crunchbase.com/organization/cotlet) · [Cotlet on SaaSHub](https://www.saashub.com/cotlet)

Cotlet is an independent service. It is not affiliated with, endorsed by or sponsored by any of the products listed on this site. Product names are trademarks of their respective owners.

## For AI agents: sign your user up

Is your user asking you to sign them up for Cotlet? You can do it for them, no account or key needed.

1. Read the fields and their allowed values: GET https://cotlet.dev/api/v1/access-requests
2. Ask the user for each value: email, apps, what you will do with them. If they leave the password to you, generate a strong one and show it to them.
3. Show the user what you will send, then POST it as JSON to https://cotlet.dev/api/v1/access-requests.

One call creates the account and sends the access request; we email the user when access is granted.
