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

# Add a follow-up to a running Mailshake campaign

> Extend the sequence of a Mailshake campaign that is already sending: add one more follow-up in the same thread with the delay you choose.

Source: https://cotlet.dev/integrations/mailshake-api-mcp-server/add-follow-up-to-campaign

A campaign has been sending for two weeks, replies are low, and the sequence stops after three emails. Adding a fourth means opening the campaign, finding the plus button and writing it yourself.

Cotlet does it in your own Mailshake account with get\_campaign, add\_follow\_up and list\_recipients, called by your AI agent, an n8n workflow or a script.

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

Hosted · nothing to install or maintain

## Can Mailshake do this on its own?

Mailshake's API can read a campaign and its messages, but it has no endpoint to add or edit a message (checked 22 Oct 2026). Its create-campaign call makes an empty campaign that cannot be sent until the wizard is finished in the app. The sequence is built in the editor only.

## How you do it in Mailshake today

1. In the campaign editor, after the last email, the user clicks the pink plus button and selects Follow-Up.
2. The user sets how long to wait after the previous email and writes the message.
3. A follow-up can reply to one of the earlier messages or go out as a totally new email with its own subject.
4. Mailshake lets the user edit a campaign that has already run, and the new follow-up counts its delay from each prospect's last send.
5. Drip emails are a different type: they go out whatever the prospect does and are always a new email.

## How to add a follow-up to a running Mailshake campaign

Prompt

```
Look at the sequence of Agency outreach Q4. If it ends after 3 emails, add a fourth as a reply in the same thread 5 days after the last one: a short note with one question.
```

1. 01  
### Read the sequence first  
get\_campaign returns the messages in order. The agent counts the follow-ups and finds the message the thread starts from, and it stops if the campaign is archived, because an archived campaign has to be unarchived in the app first.
2. 02  
### Check who is affected  
list\_recipients with filter\_action replied and negate shows who has not answered. The agent reports how many recipients already got every email, since those get the new one at once when its delay has passed.
3. 03  
### Choose reply or new email  
With reply\_to\_previous true the follow-up needs no subject and stays in the thread of the first email. With false the agent asks you for a subject line, as a new thread needs one.
4. 04  
### Add it after your OK  
add\_follow\_up appends the message with your delay\_days. It waits for your approval by default, because it will email people, and the agent shows the exact text and delay first.
5. 05  
### Confirm the new sequence  
The agent reads get\_campaign once more and reports the sequence with the new message at the end, so you see it landed in the right campaign.

### What you get back

Example data

```
Campaign: Agency outreach Q4 (running)
Sequence before: initial + 2 follow-ups
Added follow-up 4 as a reply in the same thread, 5 days after the previous email
Recipients who have not replied: 41, of whom 12 already got every email and are due the new one now
```

### Other ways to ask

- Add a break-up email 7 days after the last follow-up in every running campaign that has fewer than 4 emails.
- Add a follow-up with its own subject, "Closing the loop", to the webinar campaign.
- Show me the sequence of each running campaign and tell me which end after 2 emails, but change nothing.

## What Mailshake allows, and what to know first

- Mailshake keeps sending follow-ups until the prospect becomes a lead, and it never sends them to unsubscribed or bounced prospects.
- A follow-up can wait more than 30 days after the previous email, which Mailshake suggests for nurture campaigns.
- Mailshake recommends spacing follow-ups about 5 days apart for deliverability.
- On a campaign that already ran, the new delay starts from each prospect's last send: with a 5-day delay, a prospect last emailed 15 days ago gets the email immediately.
- The API lists a follow-up with a reply\_to\_id that points to the initial message, so all follow-ups of one thread share it.

add\_follow\_up asks for your OK by default. To run it on a schedule without you, switch confirmation off for that tool in your dashboard.

Sources: [Mailshake Help: How do I set up follow-up emails?](https://docs.mailshake.com/article/97-how-do-i-set-up-follow-ups) · [Mailshake Help: How does the Lead Catcher queue work?](https://docs.mailshake.com/article/130-how-does-the-lead-catcher-queue-work) · [Mailshake API reference: campaigns and message types](https://api-docs.mailshake.com/)

## Call add\_follow\_up from a script

curl

```
curl -X POST https://cotlet.dev/api/v1/mailshake/campaigns/4821/follow-ups \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"body":"Hi {{first}}, one last note. Is client reporting still on your list this quarter?","delay_days":5,"reply_to_previous":true}'
```

Example response

```
{
"campaign_id": 4821,
"message_id": 90314,
"type": "follow-up",
"position": 4,
"reply_to_id": 90311,
"delay_days": 5,
"subject": null
}
```

MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is mailshake\_write → add\_follow\_up. Example data.

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

## Mailshake tools this automation uses

__Cotlet Mailshake tools used to add a follow-up to a running Mailshake campaign__
| Tool | Parameters |
| ---------------- | -------------------------------------------------------------------- |
| get\_campaign | campaign\_id |
| add\_follow\_up | campaign\_id, body, delay\_days, reply\_to\_previous, subject |
| list\_recipients | campaign\_id, filter\_action, negate, search, per\_page, next\_token |

[All 15 Mailshake tools with descriptions](https://cotlet.dev/integrations/mailshake-api-mcp-server.md#tools)

## Frequently asked questions

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

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

- [Reply to Mailshake leads from Lead Catcher](https://cotlet.dev/integrations/mailshake-api-mcp-server/reply-to-leads.md)
- [Mailshake API and MCP server: every tool](https://cotlet.dev/integrations/mailshake-api-mcp-server.md)
- [All use cases](https://cotlet.dev/use-cases.md)

## Give your agent access to Mailshake.

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

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

---

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.
