Clean up HubSpot contacts from your Amazon SES suppression list
Every morning, find the addresses that hard bounced or filed a spam complaint, update the matching HubSpot contacts, and post a short Slack recap.
Every morning at 8am, pull the email addresses Amazon SES added to my account suppression list in the last 24 hours and clean up the matching records in HubSpot, so my team stops emailing people who already hard bounced or filed a spam complaint.
Start with the Amazon SES List Suppressed Destinations operation, scoped to the last 24 hours using its start and end date filters. Page through the results so nothing is missed on a heavy day. For each entry, capture the email address, the reason SES recorded (BOUNCE or COMPLAINT), and the time it was added.
For each suppressed address, locate the person in HubSpot using Search Contacts, matching on the email property. Then apply the treatment that fits the reason using Update Contact.
A COMPLAINT reason means the recipient explicitly reported the mail as spam. Mark that contact as opted out of marketing email so no further campaigns go to them.
A BOUNCE reason means the address is undeliverable rather than unwanted. Flag the email address as invalid on the contact record, using the dedicated contact property set aside for that, and leave subscription and opt out status alone. Do not opt a bounced contact out of marketing email. If no suitable property exists to hold the flag, say so in the Slack summary instead of writing the flag somewhere it does not belong.
Two hard rules. Never delete, merge, or archive a contact. Write changes to contact properties only, so the record and its history, notes, and deal associations stay intact. If a contact already carries the correct flag from an earlier run, leave it alone and do not count it as a new update.
If a suppressed address has no matching HubSpot contact, do not create one. Collect those addresses separately for the summary.
Finish by posting one summary to Slack with Send a Message. Keep it short. This is a receipt of what changed, not a deliverability report. Cover how many addresses were suppressed in the window, which contacts were updated and under which reason, and every suppressed address that had no matching HubSpot contact, so I can trace which imported list it came from. If nothing was suppressed in the last 24 hours, post a single line saying so rather than an empty report.
What does this prompt do?
- Each morning, gathers every email address Amazon SES suppressed in the last 24 hours, along with the reason it was suppressed.
- Finds the matching person in HubSpot and applies the right treatment: a spam complaint marks the contact as opted out of marketing email, while a hard bounce flags the address itself as unusable and leaves subscription status untouched.
- Never deletes a contact. Every change is written to the contact record, so history, notes, and deal associations stay intact.
- Posts one short Slack recap covering how many addresses were suppressed, which contacts were updated under which reason, and any suppressed addresses with no matching contact.
What do I need to use this?
- An Amazon SES account with sending set up. The account suppression list is on by default and fills itself in whenever a message hard bounces or someone reports it as spam.
- A HubSpot login with permission to view and edit contacts.
- A Slack workspace and a channel where the daily recap should land.
- A HubSpot contact property to hold the bad address flag, so bounced contacts can be marked without changing anything else on the record.
How can I customize it?
- Change the timing. Run it later in the morning, or more than once a day if you send at high volume.
- Pick where the recap goes: a shared channel for the whole team, or a direct message to just you.
- Decide how bounces are handled. Flag the address on the contact, add the contact to a cleanup list for review, or do both.
FAQs
Will this delete any of my HubSpot contacts?
Why treat a bounce differently from a spam complaint?
Will this work on HubSpot Free?
What happens to a suppressed address that is not in HubSpot at all?
Why does this matter for my sending account?
Related templates
Every logo, photo, video cut and ad export in one searchable grid, with previews, campaign tags and rights expiry dates at a glance.
Twice a day we spot the people clicking your pricing and demo pages, create a follow-up task for their owner, and post a ranked recap to Slack.
One board showing every dashboard and Look with its folder, owner and favorite count, so you can find dead content and retire it safely.
Watch every live room on one screen, remove disruptive guests, start recordings and end stuck sessions without anyone opening a terminal.
Every Monday we find leads who never bought, research a real reason to reach out, and send a short personal email instead of another check in.
Build every text campaign in one screen: check who is actually reachable, see a realistic send plan, then watch delivery land row by row.
Stop emailing people who already bounced.
Amazon SES already knows which addresses are dead. This puts that knowledge into your CRM every morning, before your team sends the next campaign.