[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)

# Unsubscribe unengaged Ghost members from email

> Find Ghost members who stopped opening your emails and unsubscribe them from the newsletter after you approve the list. Hosted, nothing to maintain.

Source: https://cotlet.dev/integrations/ghost-api-mcp-server/unsubscribe-unengaged-members

Part of the free list has not opened an issue in months. Ghost recommends trimming it for deliverability, but finding those members means building a filter and a bulk action again each time.

Cotlet does it in your own Ghost account with list\_members, get\_member and unsubscribe\_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 Admin filters members by open rate and sent emails and unsubscribes the selection in one bulk action (checked 17 Oct 2026). The Admin API changes the newsletters of a member one request at a time. Ghost recommends keeping the free list tidy by removing inactive subscribers. Nothing runs that cleanup for you or checks each profile before it acts.

## How you do it in Ghost today

1. In Ghost Admin the owner opens Members and clicks Add filter, then picks Emails sent (all time) and Open rate (all time) to find members who received emails and opened few or none.
2. Adding the Member status filter keeps paying members out of the list, and Last seen shows who still visits the site.
3. Each match can be opened to read the member profile: email stats, an activity feed with the most recent actions and the Subscribed to newsletter toggle.
4. The "..." icon in the top right of the filtered list opens the bulk actions, and Unsubscribe from email applies to all selected members.
5. The filter has to be rebuilt by hand each time, and nothing reminds the owner to do it.

## How to unsubscribe unengaged Ghost members from email

Prompt

```
Find free Ghost members who got at least 10 emails and opened none of them. Show me the list first. After I say yes, unsubscribe them from email.
```

1. 01  
### Build the filter  
list\_members runs with status free, min\_emails\_sent set to 10 and max\_open\_rate set to 0\. Members whose open rate is null are left out of the list, because Ghost has not sent them enough emails to calculate one.
2. 02  
### Look at the activity  
get\_member reads the profile of each match. A member who was seen on the site recently is moved to a "check by hand" group, because last\_seen\_at shows visits that email opens do not.
3. 03  
### Show the list first  
The agent reports the count and a sample of addresses and stops. Nobody is unsubscribed before you answer.
4. 04  
### Unsubscribe  
unsubscribe\_members turns off email for the approved IDs. It asks for your OK even after you said yes in the chat, because it changes what real people receive. The member stays on the site and can subscribe again in their account.
5. 05  
### Report  
The agent returns how many members were unsubscribed and how many were skipped with the reason, so the list can be reviewed later.

### What you get back

Example data

```
Free members with 10+ emails and no opens: 126
Recently seen on the site, left for you: 9
Unsubscribed from email: 117
Still subscribed, not matching: the rest of the list
```

### Other ways to ask

- Show me paid members who opened under 10% of emails in the last year, and unsubscribe nobody.
- Every first Monday, list free members with zero opens and send me the count only.
- Add the label "Cold" to the members you would unsubscribe, and do not change their subscription.
- Unsubscribe members whose email is marked as disabled by Ghost.

## What Ghost allows, and what to know first

- The Admin API reports email\_open\_rate as a whole number from 0 to 100, or null when too few emails have been sent.
- Ghost marks an address as email disabled when it is unreachable or when messages were marked as spam.
- The filter "Unsubscribed from all" means the member has turned off every newsletter, and "Subscribed to at least one" means the member can receive at least one.
- Every newsletter email has an unsubscribe link that sets the member to unsubscribed, which is the same state this job sets.
- In the member profile, the Subscribed to newsletter toggle lets you subscribe a person again by hand.

unsubscribe\_members asks for your OK by default. To run it weekly without you, switch confirmation off for that tool in your dashboard.

Sources: [Ghost Help: Member management](https://ghost.org/help/member-management/) · [Ghost Help: How do I improve my email deliverability?](https://ghost.org/help/email-deliverability/) · [Ghost Help: Disabled emails](https://ghost.org/help/disabled-emails/) · [Ghost Developer Docs: Members](https://docs.ghost.org/admin-api/members/overview)

## Call unsubscribe\_members from a script

curl

```
curl -X POST https://cotlet.dev/api/v1/ghost/members/unsubscribe \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"member_ids":["6710c3e5b1c2d400a1b2c4f1","6710c3e5b1c2d400a1b2c4f2","6710c3e5b1c2d400a1b2c4f3"]}'
```

Example response

```
{
"unsubscribed": 3,
"skipped": 0,
"failed": []
}
```

MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is ghost\_write → unsubscribe\_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 unsubscribe unengaged Ghost members from email__
| Tool | Parameters |
| -------------------- | ---------------------------------------------------------------------------------------------- |
| list\_members | status, label, signed\_up\_on, created\_after, min\_emails\_sent, max\_open\_rate, page, limit |
| get\_member | member\_id |
| unsubscribe\_members | 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)
- [Label Ghost members by where they signed up](https://cotlet.dev/integrations/ghost-api-mcp-server/label-members-by-signup-source.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.
