Loading...
Loading...
Draft and run Mailchimp email campaigns with AI-generated content, subject line A/B testing, and optimal send timing. Agent drafts the email + subject variants, owner approves in Telegram, agent creates the campaign in Mailchimp. Turns a dormant contact list into an active marketing channel.
npx skill4agent add hewi333/mom-n-pop-skills marketing-campaign-buildermailchimp-integration"Send a summer special to all partners — mention our partner pricing and that we do free estimates."
📧 Campaign Draft — Summer Partner Special
Subject line options:
A) "Summer Listings? Don't Let Odors Kill the Sale"
B) "Free Estimates for Your Summer Listings"
C) "Partner Special: Summer Service Discount"
Preview text: "[BUSINESS_NAME] — professional service for your
listings. Free estimates, partner pricing."
Body: [shows first few lines or summary]
Which subject line do you prefer? (A, B, or C — or type your own)"Make it 'Protect Your Summer Listings from Odors'"
source ~/.hermes/.env
# Create campaign
CAMPAIGN=$(curl -s -X POST "https://$MAILCHIMP_SERVER_PREFIX.api.mailchimp.com/3.0/campaigns" \
--user "anystring:$MAILCHIMP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "regular",
"recipients": {
"list_id": "'"$MAILCHIMP_AUDIENCE_ID"'",
"segment_opts": {
"saved_segment_id": SEGMENT_ID
}
},
"settings": {
"subject_line": "Summer Listings? Don'"'"'t Let Odors Kill the Sale",
"preview_text": "[BUSINESS_NAME] — professional service for your listings.",
"title": "Summer Partner Special - June 2026",
"from_name": "[BUSINESS_NAME]",
"reply_to": "owner@yourdomain.com",
"to_name": "*|FNAME|*"
},
"tracking": {
"opens": true,
"html_clicks": true
}
}')
CAMPAIGN_ID=$(echo "$CAMPAIGN" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")# Create A/B test campaign testing two subject lines
CAMPAIGN=$(curl -s -X POST "https://$MAILCHIMP_SERVER_PREFIX.api.mailchimp.com/3.0/campaigns" \
--user "anystring:$MAILCHIMP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "variate",
"recipients": {
"list_id": "'"$MAILCHIMP_AUDIENCE_ID"'"
},
"variate_settings": {
"winning_combination": "opens",
"wait_time": 6,
"test_size": 50,
"test_segments": [
{"segment_text": "Subject A"},
{"segment_text": "Subject B"}
],
"subject_lines": [
"Summer Listings? Don'"'"'t Let Odors Kill the Sale",
"Protect Your Summer Listings from Odors"
]
},
"settings": {
"title": "Summer Partner Special A/B - June 2026",
"from_name": "[BUSINESS_NAME]",
"reply_to": "owner@yourdomain.com",
"to_name": "*|FNAME|*"
}
}')curl -s -X PUT "https://$MAILCHIMP_SERVER_PREFIX.api.mailchimp.com/3.0/campaigns/$CAMPAIGN_ID/content" \
--user "anystring:$MAILCHIMP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"html": "<html><body>...campaign HTML...</body></html>",
"plain_text": " plain text version..."
}'curl -s -X POST "https://$MAILCHIMP_SERVER_PREFIX.api.mailchimp.com/3.0/campaigns/$CAMPAIGN_ID/actions/test" \
--user "anystring:$MAILCHIMP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"test_emails": ["owner@yourdomain.com"],
"send_type": "html"
}'curl -s -X POST "https://$MAILCHIMP_SERVER_PREFIX.api.mailchimp.com/3.0/campaigns/$CAMPAIGN_ID/actions/send" \
--user "anystring:$MAILCHIMP_API_KEY"# Schedule for Tuesday 10am ET (best open rate for B2B per industry data)
curl -s -X PATCH "https://$MAILCHIMP_SERVER_PREFIX.api.mailchimp.com/3.0/campaigns/$CAMPAIGN_ID" \
--user "anystring:$MAILCHIMP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"schedule": {
"schedule_time": "2026-07-07T14:00:00+00:00"
}
}'<html>
<body style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto; padding: 20px;">
<!-- Header with logo -->
<img src="LOGO_URL" alt="[BUSINESS_NAME]" style="max-width: 200px; margin-bottom: 20px;">
<!-- Headline -->
<h1 style="color: #0C71C3; font-size: 24px;">HEADLINE HERE</h1>
<!-- Body copy -->
<p style="font-size: 16px; line-height: 1.6; color: #1A1A1A;">
BODY COPY HERE — 2-3 short paragraphs
</p>
<!-- CTA button -->
<a href="CTA_URL" style="display: inline-block; background: #0C71C3; color: white;
padding: 12px 30px; text-decoration: none; border-radius: 5px; font-size: 16px;
margin: 20px 0;">Get Your Free Estimate</a>
<!-- Footer -->
<hr style="border: none; border-top: 1px solid #ddd; margin: 30px 0;">
<p style="font-size: 12px; color: #888;">
[BUSINESS_NAME] | [SERVICE_DESCRIPTION] | [PHONE]<br>
Serving [SERVICE_AREA]<br>
<a href="*|UNSUB|*">Unsubscribe</a> | <a href="*|UPDATE_PROFILE|*">Update Preferences</a>
</p>
</body>
</html>| Day | Time (ET) | Why |
|---|---|---|
| Tuesday | 10:00am | Best overall open rate for B2B |
| Wednesday | 10:00am | Second best, avoids Monday noise |
| Thursday | 2:00pm | Good for consumer-focused campaigns |
| Avoid | Monday/Friday | Buried in weekend cleanup or pre-weekend rush |
| Avoid | Weekends | B2B recipients don't check |
# List existing segments
curl -s --user "anystring:$MAILCHIMP_API_KEY" \
"https://$MAILCHIMP_SERVER_PREFIX.api.mailchimp.com/3.0/lists/$MAILCHIMP_AUDIENCE_ID/segments"curl -s --user "anystring:$MAILCHIMP_API_KEY" \
"https://$MAILCHIMP_SERVER_PREFIX.api.mailchimp.com/3.0/reports/$CAMPAIGN_ID" | python3 -m json.tool📊 Campaign Report — "Summer Partner Special"
Sent to: 1,500 contacts
Opens: 542 (30%) — above industry avg (21%)
Clicks: 28 (1.5%)
Unsubscribes: 3
Best segment: Standard Region (42% open rate)*|UNSUB|**|FNAME|*# Owner says: "Send a seasonal prevention tip to all contacts for summer"
# Agent drafts 3 short tips + CTA → creates campaign → test → owner approves → send# Agent identifies contacts with no opens in 180 days
# Creates segment "Cold - 180 days"
# Drafts "We miss you" campaign with special offer
# Owner approves → send → track re-engagement → update CRM# Agent pulls: new leads, jobs booked, revenue this month
# Drafts "[BUSINESS_NAME] Monthly" newsletter with stats + customer spotlight
# Owner approves → send → track engagement
# Schedule as monthly cron job