Send announcements to your Mailgun lists without touching code
Browse every mailing list, clean new subscribers before they land, and send with a test first and the recipient count right in front of you.
I want an app my team opens to manage our Mailgun mailing lists and send announcements and updates to them, without touching code and without trusting a raw CSV import. It should cover four surfaces: a list overview, a member browser, an import panel backed by address validation, and a compose and send screen with a post-send monitor.
The landing view lists every mailing list on the account using Mailgun List Mailing Lists, showing each list's name, address, description, access level and member count. Clicking a list opens it. A Create Mailing List button on this view creates a new list from a name, address, description and access level using Create Mailing List. Use Get Mailing List to refresh a single list's header after members change so the member count on screen stays honest.
Opening a list shows a member browser backed by List Mailing List Members by Page, paginated rather than loading everything at once, with a search box that filters by address or name. Members can be managed inline: add a single person with Add Mailing List Member, edit a member's name, subscribed state or custom variables with Update Mailing List Member, and remove someone with Delete Mailing List Member behind a confirmation. Show the subscribed and unsubscribed state clearly, because an unsubscribed member still sits in the list.
An import panel pulls candidate subscribers out of a Google Sheets tab. The user gives a spreadsheet, a tab and a range, and the app reads it with Google Sheets Get Values, treats the first row as headers and lets the user map an email column plus an optional name column. Each address then runs through Mailgun Validate Single Address, and the results land in a preview table split into three buckets: deliverable, risky and undeliverable, using the validation result and risk fields, with the specific reason shown per row such as an unknown mailbox, a disposable domain or a role address. Every row has a checkbox with bucket level select all. Deliverable rows are ticked by default and undeliverable rows are not.
Only the approved rows get pushed into the list, using Add Multiple Mailing List Members (JSON) in batches of up to 1000 members. After the push, write the validation verdict and the date it was checked back to the source spreadsheet with Google Sheets Update Values, into a validation column alongside each source row, so the sheet stays clean and nobody re-imports the same bad addresses next month. Finish the import with a summary of how many were added, skipped and rejected.
A compose screen lets the user pick a list and write a subject and body, with both a plain text and an HTML body and a configurable from name and address. The user must send a test to themselves first using Mailgun Send Message, and only after that test has gone out does the real send to the list address unlock, also using Send Message. If the subject or body changes materially after the test, require a fresh test before the send unlocks again. The confirm step always names the list and shows the current recipient count for it, and needs an explicit confirmation, because sending to the wrong list is the one mistake that cannot be undone. Persist each draft's subject, body, selected list, test send timestamp and the returned message id so a send can be reopened later.
After the real send, a post-send panel polls Mailgun List Events for the sending domain, scoped to that send's message id and the window since it went out, and tallies delivered, opened, failed and bounced or complained counts so the user can watch them climb without leaving the app. Refresh it on a short interval with a manual refresh button too, and show the individual events in a table underneath. Keep past sends browsable so someone can reopen last week's announcement and see how it performed.
Add a Draft this announcement button in the composer that kicks off a background agent. The agent takes a short brief typed by the user plus the selected list, pulls that list's recent send history with List Events to see what subjects went out recently and how they were received, then drafts several subject line options and body copy in our voice and writes them back into the composer as an editable draft. The agent must never send: its job ends at filling the composer, and the human still runs the test send and clicks send.
Two things to bake in. Mailgun is keyed by sending domain, so let the user pick or configure which sending domain is used for Send Message and List Events. And Mailgun templates are out of scope here, so compose is a free-form subject and body written in the app rather than a stored template picker.
What does this prompt do?
- Shows every mailing list you have with its member count, and opens any one of them into a searchable member browser where you can add, edit and remove people inline, or start a brand new list.
- Pulls candidate subscribers from a Google Sheets tab, checks each address, and shows a preview split into deliverable, risky and undeliverable so only the addresses you approve get added, then writes each verdict back to the spreadsheet so your source stays clean.
- Lets you write a subject and body, send yourself a test first, then send to the list, with a confirm step that always names the list and how many people will receive it.
- Adds a Draft this announcement button that writes subject line options and body copy into the composer using your short brief and the list's recent send history, and never sends anything on its own.
What do I need to use this?
- A Mailgun account with at least one verified sending domain and your mailing lists set up there
- A Google account with access to the spreadsheet holding the subscribers you want to import
- An email address you want test sends delivered to before the real send goes out
How can I customize it?
- Choose which spreadsheet tab and columns the import panel reads from, and which column the validation verdicts get written back into.
- Set who receives test sends, and whether editing the subject or body after a test forces a fresh test before the real send unlocks.
- Decide how the import preview treats risky addresses, either pre-approved with the rest or left unticked until someone opts them in.
FAQs
Can this send to the wrong list by accident?
Do I have to clean up my spreadsheet before importing subscribers?
Does the drafting assistant ever send email on its own?
Can I use saved email templates?
How do I know whether the announcement actually landed?
Related templates
Every weekday at 10am, an AI voice agent phones your most overdue Xero accounts, logs what each customer promised, and reports back to finance in Slack.
See every Google Maps listing you manage on one screen, ranked worst first, with an audit button that writes the fix list for you.
Your team picks a template, finds the customer, checks they are safe to email, then sends it, with every send logged where the whole team can see it.
Every night at 2am, pull the contacts on your open and won deals and block them from your cold outreach before the next send goes out.
Build every text campaign in one screen: check who is actually reachable, see a realistic send plan, then watch delivery land row by row.
See every LinkedIn ad account's spend against the budget you committed to, catch overspend early, and rebalance without rebuilding a spreadsheet.
Never send an announcement to the wrong list again.
One screen for managing your mailing lists, cleaning every import, and sending with a test send and a recipient count standing in the way of a mistake.