EmailOctopus automation
Resend an EmailOctopus campaign to non-openers
Your newsletter went out on Wednesday and a good share of the list never opened it. To resend it you build a segment, duplicate the campaign, point it at the segment and schedule it, all in the Dashboard.
Cotlet does it in your own EmailOctopus account with get_campaign_report, create_segment, duplicate_campaign, update_campaign, set_campaign_recipients and schedule_campaign, called by your AI agent, an n8n workflow or a script.
Hosted · nothing to install or maintain
Can EmailOctopus do this on its own?
EmailOctopus has no API to create, duplicate, schedule or send a campaign, and its help says emails must be created in the Dashboard (checked 20 Oct 2026). The API can read a report for the status not-opened, but segments are not in the API. The Dashboard does the resend by hand in the steps above; nothing resends by a rule or on a schedule.
How you do it in EmailOctopus today
- Open the Reports tab and click View report next to the campaign to see how many contacts opened and clicked.
- Go to Contacts, open the Segments tab, click Create a segment, name it and choose Campaign activity with the condition "did not open" for that campaign.
- Add a second filter, "was sent", and match all conditions. Without it the segment also holds contacts who never received the first email.
- On the Campaigns tab, open the drop-down next to the campaign, choose Duplicate and go through the set-up page again with a new subject.
- In the "Sending to" field, open the Segment tab, pick your segment, then click Schedule with a date, a time and a timezone.
- The segment is evaluated again at sending time, and Apple Mail pre-fetches the tracking pixel, so some contacts count as openers although they never read the email.
How to resend an EmailOctopus campaign to non-openers
In my EmailOctopus list Newsletter, check how the "Autumn offer" campaign did. Make a segment of everyone who was sent it and did not open it, duplicate the campaign with the subject "Last chance: Autumn offer", send it to that segment and schedule it for Thursday 9:00 London time. - 01
Read the first send
get_campaign_report returns what was sent, opened and clicked. If the campaign is still being sent or its report is not ready, the agent stops and says so, because a segment built too early would hold contacts who simply have not had the email yet.
- 02
Build the segment with both filters
create_segment gets match "all" with the conditions "did not open" and "was sent" for that campaign. The agent adds "was sent" every time, so contacts who were outside the first recipients stay out.
- 03
Copy the campaign and change what must differ
duplicate_campaign makes a draft from the sent campaign. update_campaign sets the new subject and, if you ask, the preview text. The agent leaves the design alone, so the resend looks like the original.
- 04
Aim the draft at the segment
set_campaign_recipients sets the audience type to segment on the same list as the first send, because a campaign goes to one list at a time. Nothing is sent yet.
- 05
Schedule it with your OK
schedule_campaign takes the date, time and timezone from your prompt. It reaches your contacts, so it asks for your OK by default, and you can switch that off once you trust the rule.
What you get back
Autumn offer (sent Oct 14): sent 1,840, opened 702 (38.2%), clicked 96 (5.2%)
Segment "Did not open: Autumn offer" created (did not open + was sent)
Draft "Autumn offer, last chance" created from the original, subject "Last chance: Autumn offer"
Recipients: segment "Did not open: Autumn offer" on list Newsletter
Scheduled for Thu Oct 22, 09:00 Europe/London, waiting for your OK Other ways to ask
- Resend the "Weekly newsletter" of Monday to everyone who did not click, with the subject "Did you see this?".
- Do the same for every campaign I sent in the last 7 days that has an open rate under 30%, but only create the drafts and do not schedule anything.
- Make the segment "Did not open: Autumn offer" and tell me how it is built, nothing else.
- Every Friday, look at the newsletter sent on Wednesday and queue a resend to non-openers for Monday 8:00.
What EmailOctopus allows, and what to know first
- Segments on Campaign activity count only regular campaigns, not automated emails, and offer any of the last 5 campaigns, all of the last 5, any campaign within 7, 30 or 90 days, or one particular campaign.
- The conditions "didn't open" and "didn't click" can also list contacts who were not sent the campaign, which is why the filter "was sent" belongs in the segment.
- A campaign can be sent to only one list at a time; to reach another list, duplicate the campaign and send the copy there.
- When a scheduled campaign goes to a segment, the recipients are decided at sending time: contacts who join the segment after scheduling are included, and contacts who no longer match are left out.
- Since the Apple iOS 15 update the tracking pixel in Apple Mail is pre-fetched, so EmailOctopus itself calls the open rate not always reliable.
schedule_campaign asks for your OK by default. To run it on a schedule without you, switch confirmation off for that tool in your dashboard.
Sources: EmailOctopus Help: How to send a second campaign to those who didn't open your initial email · EmailOctopus Help: How to segment contacts based on their engagement · EmailOctopus Help: How to send a campaign to a segment · EmailOctopus Help: Duplicate a campaign or automation · EmailOctopus Help: Is it possible to send a campaign to multiple lists? · EmailOctopus Help: Scheduling a campaign
Call create_segment from a script
curl -X POST https://cotlet.dev/api/v1/emailoctopus/lists/4d1c8e5a-7f2b-4c1e-9a63-0b5d2e8f1a37/segments \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Did not open: Autumn offer","match":"all","conditions":[{"type":"campaign_activity","operator":"did not open","value":"Autumn offer"},{"type":"campaign_activity","operator":"was sent","value":"Autumn offer"}]}' {
"segment": "Did not open: Autumn offer",
"list_id": "4d1c8e5a-7f2b-4c1e-9a63-0b5d2e8f1a37",
"match": "all",
"conditions": [
"Campaign activity: did not open, Autumn offer",
"Campaign activity: was sent, Autumn offer"
],
"created": true
} MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is emailoctopus_write → create_segment. Example data.
Schedule it in n8n, Make, Zapier or cronEmailOctopus tools this automation uses
| Tool | Parameters |
|---|---|
| get_campaign_report | campaign_id |
| create_segment | list_id, name, match, conditions |
| duplicate_campaign | campaign_id |
| update_campaign | campaign_id, name, subject, preview_text, from_name, from_email |
| set_campaign_recipients | campaign_id, audience, list_id, segment, tag |
| schedule_campaign | campaign_id, date, time, timezone |
Frequently asked questions
Is a "did not open" segment a safe list to resend to?
It is a good first guess, not a clean list. Apple Mail pre-fetches the tracking pixel, so some people count as openers although they never read the email, and EmailOctopus says the open rate may not be reliable. Pick a different subject for the resend, and consider "did not click" for a first test.
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.
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.