[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 inactive EmailOctopus contacts

> Find EmailOctopus contacts who stopped engaging, review them and mark them unsubscribed in one run, so the list stays clean and your plan count drops.

Source: https://cotlet.dev/integrations/emailoctopus-api-mcp-server/unsubscribe-inactive-contacts

Your list keeps growing, but a large part of it stopped opening anything months ago. Cleaning it means a segment, a selection and a bulk action in the Dashboard, and it is easy to put off.

Cotlet does it in your own EmailOctopus account with list\_lists, create\_segment, list\_contacts and unsubscribe\_contacts, called by your AI agent, an n8n workflow or a script.

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

Hosted · nothing to install or maintain

## Can EmailOctopus do this on its own?

EmailOctopus offers the Dashboard flow above and a list-cleaning automation made of three automations that sends a re-engagement email before it unsubscribes anyone (checked 20 Oct 2026). The API can set the status of one contact to unsubscribed, but it cannot read segments, so a script would have to rebuild "inactive" from campaign reports itself. Nothing in EmailOctopus runs the segment and the bulk action for you on a schedule without those emails.

## How you do it in EmailOctopus today

1. Open Contacts, go to the Segments tab and click "Create a segment", then choose Contact activity and a timeframe, for example the last 90 days.
2. Use the match type "none" with the filter "active or added within" so that only contacts who did nothing and are not new stay in the segment.
3. Back on the Contacts page, pick the segment in the Segment field above the list, then use the drop-down next to the Email address header to select all contacts.
4. Click Actions, choose "Mark as unsubscribed" and confirm with "I'm sure". The page shows 50 contacts at a time unless you change it.
5. Repeat for each list: EmailOctopus stores contacts per list, so a contact on two lists is unsubscribed on each separately.
6. Do it again every few months, or build the list-cleaning automation that sends a re-engagement email first.

## How to unsubscribe inactive EmailOctopus contacts

Prompt

```
In my EmailOctopus list Newsletter, find contacts who were not active and were not added in the last 90 days. Show me how many there are and the first 20, then mark them as unsubscribed once I say OK.
```

1. 01  
### Count the list first  
list\_lists returns the subscribed, pending and unsubscribed counts of the list. The agent keeps the subscribed number, so the result can say how much the list shrank.
2. 02  
### Build the inactive segment  
create\_segment uses match "none" with the filter Contact activity "active or added within" and your timeframe. Contact activity looks at campaigns and automated emails together, so a contact who only opens welcome emails still counts as active.
3. 03  
### Show the contacts before anything changes  
list\_contacts with the segment name returns the matching contacts 50 to a page. The agent reports the first page and the total, and asks you to confirm because the next step cannot be undone by re-importing.
4. 04  
### Unsubscribe, not delete  
unsubscribe\_contacts marks the whole segment as unsubscribed. The agent never deletes: EmailOctopus recommends unsubscribing, and a deletion also erases the contact's opens and clicks.
5. 05  
### Report the new count  
A second list\_lists call shows the subscribed number after the run, and the agent reports both numbers and the date range it used.

### What you get back

Example data

```
List Newsletter, segment "Inactive for 90 days"
Contacts matched: 212
First 3: sam@example.com, lena@example.org, omar@example.net
Unsubscribed 212 after your OK
Subscribed on the list: 4,860 before, 4,648 after
```

### Other ways to ask

- Do the same with 180 days and only show me the count, do not unsubscribe anyone.
- Unsubscribe the contacts on my Newsletter list that have the tag cleaning.
- Create the segment "Inactive for 365 days" and stop, I will review it in the Dashboard.
- Every first Monday of the month, unsubscribe contacts inactive for 120 days and send me the count.

## What EmailOctopus allows, and what to know first

- Unsubscribed contacts stay in the list but no longer count towards the subscriber limit of your plan.
- Deleting a contact is permanent and removes its activity such as opens and clicks; EmailOctopus recommends the status Unsubscribed instead, so nobody can be re-subscribed by accident.
- An unsubscribed contact cannot be re-subscribed through an import, so treat the bulk action as one-way.
- Segments on Contact activity look back at most 365 days and count both regular campaigns and automated emails.
- Contacts live at list level, so the same email address on two lists is cleaned once per list.

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

Sources: [EmailOctopus Help: How to clean your list from non-openers](https://help.emailoctopus.com/article/287-how-to-clean-your-list-from-non-openers) · [EmailOctopus Help: How to unsubscribe contacts in bulk](https://help.emailoctopus.com/article/259-how-to-unsubscribe-contacts-in-bulk) · [EmailOctopus Help: Delete or unsubscribe a contact](https://help.emailoctopus.com/article/176-delete-or-unsubscribe-contact) · [EmailOctopus Help: How to segment contacts based on their engagement](https://help.emailoctopus.com/article/220-how-to-segment-contacts-based-on-engagement) · [EmailOctopus Help: How to create a list-cleaning automation](https://help.emailoctopus.com/article/373-how-to-create-a-list-cleaning-automation)

## Call unsubscribe\_contacts from a script

curl

```
curl -X POST https://cotlet.dev/api/v1/emailoctopus/lists/4d1c8e5a-7f2b-4c1e-9a63-0b5d2e8f1a37/contacts/unsubscribe \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"segment":"Inactive for 90 days"}'
```

Example response

```
{
"list_id": "4d1c8e5a-7f2b-4c1e-9a63-0b5d2e8f1a37",
"segment": "Inactive for 90 days",
"unsubscribed": 212
}
```

MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is emailoctopus\_write → unsubscribe\_contacts. Example data.

[Schedule it in n8n, Make, Zapier or cron](https://cotlet.dev/integrations/emailoctopus-api-mcp-server.md#automations)

## EmailOctopus tools this automation uses

__Cotlet EmailOctopus tools used to unsubscribe inactive EmailOctopus contacts__
| Tool | Parameters |
| --------------------- | ---------------------------------------------- |
| list\_lists | none |
| create\_segment | list\_id, name, match, conditions |
| list\_contacts | list\_id, status, tag, segment, search, cursor |
| unsubscribe\_contacts | list\_id, segment, tag, emails |

[All 14 EmailOctopus tools with descriptions](https://cotlet.dev/integrations/emailoctopus-api-mcp-server.md#tools)

## Frequently asked questions

### Why unsubscribe instead of delete?

EmailOctopus recommends it. An unsubscribed contact stays in the list and stops counting towards your plan, and cannot be re-subscribed by accident later. Deleting is permanent and wipes the contact's activity such as opens and clicks.

### Is it safe to connect EmailOctopus to Cotlet?

Yes. You sign in to EmailOctopus yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get EmailOctopus 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 EmailOctopus automations

- [Resend an EmailOctopus campaign to non-openers](https://cotlet.dev/integrations/emailoctopus-api-mcp-server/resend-campaign-to-non-openers.md)
- [EmailOctopus API and MCP server: every tool](https://cotlet.dev/integrations/emailoctopus-api-mcp-server.md)
- [All use cases](https://cotlet.dev/use-cases.md)

## Give your agent access to EmailOctopus.

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

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

---

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.
