# 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.

- Workflow type: agent
- Services: Amazon SES, HubSpot, Slack Bot
- Categories: Sales, Marketing
- Published: 2026-08-10

## What it does

- 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 you'll need

- 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.

## Prompt

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.

## How to customize

- 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.

## FAQ

### Will this delete any of my HubSpot contacts?

No. Contacts are never deleted, merged, or archived. The agent only updates fields on the contact record, so the person, their history, notes, and any linked deals all stay exactly where they are. If you later confirm an address was suppressed by mistake, nothing has been lost.

### Why treat a bounce differently from a spam complaint?

They are different problems. A complaint is someone explicitly saying stop emailing me, so the right response is to opt them out of marketing email. A hard bounce means the address does not exist or cannot receive mail, which is an address problem rather than a preference. That gets flagged on the email field, and the person's subscription settings are left alone.

### Will this work on HubSpot Free?

The core cleanup does. Free accounts can store and edit contact properties, which is where the bounced address flag goes. The marketing opt out treatment depends on HubSpot's marketing email settings, so if you do not use HubSpot to send marketing email, the agent can record the complaint on a contact property instead.

### What happens to a suppressed address that is not in HubSpot at all?

It gets listed by name in the Slack recap rather than quietly dropped. Those are usually the most useful entries, because an address that bounced but was never a contact normally points back to a purchased or imported list, and the recap gives you the thread to pull on.

### Why does this matter for my sending account?

Amazon watches your bounce and complaint rates and expects bounces under 5 percent and complaints under 0.1 percent. Sending again to addresses you already know are bad pushes those numbers the wrong way and can eventually get sending paused. Clearing them out of the CRM is what stops the same addresses being emailed next campaign.

Use this prompt in General Input: https://www.generalinput.com/prompts/clean-up-hubspot-contacts-from-your-amazon-ses-suppression-list