Reactivate Suppressed Klaviyo Profiles Automatically When They Come Back
If you run a sunset flow, you have a blind spot: the people you suppressed who come back.
It happens more than you'd think. Someone ignores your emails for nine months, gets suppressed, then three months later they're back on your site adding things to a cart. Maybe they got a new job and your product is relevant again. Maybe a friend mentioned you. Doesn't matter why. What matters is that Klaviyo will never email them again, because suppression is permanent until someone reverses it. And nobody is watching for that.
Here's what that looks like on a real profile, reading bottom to top: suppressed in April, back adding to cart in August, a $55 order, and un-suppressed by the flow the same afternoon.

This post covers the flow that watches for it. It's one segment and a one-step flow, and it makes aggressive list cleaning safe: suppress hard, knowing anyone who comes back gets let back in automatically.
Why This Works
Two Klaviyo behaviors make this possible.
First: suppressed profiles still get tracked. Suppression stops email sends, not data collection. Site visits, product views, carts, and orders all keep flowing into the profile. So you can build a segment that catches suppressed people showing signs of life.
Second: flow emails never send to suppressed profiles, but flow webhook actions still fire for them. That asymmetry is the whole trick. A flow can catch a suppressed profile entering a segment and call Klaviyo's own API to remove the suppression. No human involved.
Step 1: Create a Narrow API Key
In Klaviyo, go to Settings, then API keys, then Create Private API Key. Choose Custom access. Set Subscriptions to Full and leave everything else at No access.
Klaviyo shows you the key exactly once, on the page right after you create it. Copy it before you leave, or you'll be deleting and recreating it.
Step 2: The Re-Engaging Segment
The fastest path is our free Audience Builder. Select "Suppressed - Re-Engaging (30d)" and it creates the segment in your account with your account's own metric IDs resolved automatically.
Building it by hand instead? Five conditions, all ANDed:
- Manually Suppressed from Email Marketing at least once over all time. They were suppressed at some point.
- Manually Suppressed zero times in the last 30 days. A cooldown, so someone your sunset flow suppressed last week doesn't get instantly un-suppressed. Without this, the two flows ping-pong profiles back and forth.
- Person can NOT receive email marketing. They're currently suppressed. Without this condition the segment would match people who already got reactivated.
- Placed Order, Added to Cart, Started Checkout, or Viewed Product at least once in the last 30 days. These are ORed together. This is the "signs of life" group.
- Unsubscribed zero times over all time. An unsubscribe is a consent choice, not a suppression. This flow never touches those people, and neither should you.
Step 3: The Flow (One Webhook, Nothing Else)
Create a new flow triggered by the segment from step 2. Set the flow to allow re-entry. Someone can get suppressed, come back, get reactivated, go quiet, and get suppressed again a year later. There's no harm in letting them through the flow twice, and anyone who unsubscribes can never enter it at all. Then add a single Webhook action.
Destination URL:
https://a.klaviyo.com/api/profile-suppression-bulk-delete-jobsHeaders:
- Authorization →
Klaviyo-API-Key pk_……(the key from step 1) - Content-Type →
application/json - revision →
2026-01-15
JSON Body:
{
"data": {
"type": "profile-suppression-bulk-delete-job",
"attributes": {
"profiles": {
"data": [
{
"type": "profile",
"attributes": {
"email": "{{ person.email }}"
}
}
]
}
}
}
}If you built the sunset flow from our list hygiene guide, this should look familiar. It's the same webhook with two changes: the URL ends in bulk-delete-jobs instead of bulk-create-jobs, and the type says delete-job instead of create-job. Both are POST requests. Klaviyo treats "remove these suppressions" as its own job type rather than a different HTTP method, which is convenient here because flow webhooks can only POST.
Set the flow live. That's the whole build.
Step 4: Test It
- Manually suppress a test email address you control (Settings, Suppressed profiles, Add).
- Use the webhook's preview and test option with that profile selected. The test fires the real request, even on a draft flow.
- Open the profile. You should see a "Manually Unsuppressed from Email Marketing" event in the activity feed, and the suppressed banner gone.
In production you won't need to force anything. Profiles enter through the segment on their own, and the 30-day cooldown means anyone suppressed today won't qualify until 30 days pass. That's by design.
The Fine Print
- This only reverses manual and API suppressions. Hard bounces and spam complaints stay suppressed, and they should. The delete endpoint can't touch them anyway.
- Nobody gets resubscribed. The segment excludes anyone who ever unsubscribed, and un-suppression doesn't change consent state. This flow only restores people you silenced who are now showing buying intent.
- It needs the sunset flow to matter. If you're not suppressing unengaged profiles yet, start with the sunset flow. This is the second half of that system, and it's what makes suppressing 30,000+ profiles feel safe instead of scary.
Want the whole loop built for you, sunset and reactivation both? Reach out. Or grab the segment free from the Audience Builder and build the flow yourself in five minutes.