How to Build a Reactivation Audience in SFMC
How to build a reactivation audience in SFMC that holds up: defining the unengaged window, picking join keys, layering exclusions, and wiring the journey.
How to Build a Reactivation Audience in SFMC
Every email program eventually accumulates a slice of subscribers who once engaged and then went quiet.
The instinct is to assume those addresses are gone.
In practice, a well-built reactivation audience can pull a meaningful share of them back into active engagement, and it keeps the rest from quietly damaging your sender reputation.
The audience itself is where most reactivation programs succeed or fail.
If the segmentation is too loose, you ship to addresses that have already left, and you pay for it in deliverability.
If it is too tight, you starve the program of volume and never get a clean signal on whether the content is working.
This post walks through how to build a reactivation audience inside Salesforce Marketing Cloud that holds up in production: how to define the unengaged window, which Data Views to lean on, the joins and exclusions that matter, and how to wire the result into a journey you can actually measure.
What reactivation actually means in SFMC
The difference between dormant and lost
A reactivation audience is not the same as a list of every inactive contact.
Dormant subscribers are addresses still capable of engaging that simply have not done so recently.
Lost subscribers are addresses that have hard bounced, unsubscribed, or aged out of any reasonable engagement window.
Why the distinction matters operationally
Mixing dormant and lost subscribers into the same audience is the most common reason reactivation programs fail.
Mailbox providers treat large sends to long-dormant or unreachable addresses as a signal of poor list hygiene, and the next legitimate send pays for it in inbox placement.
A clean reactivation audience targets only the addresses where a comeback is plausible. Everything else belongs in a sunset workflow or a hard suppression list.
Defining the unengaged window
Picking a default window
The most common starting point is a 90-day window of no opens and no clicks, against a backdrop of at least one delivered send in that same period.
That definition rules out two failure modes at once. It excludes subscribers you have not actually contacted recently, and it excludes anyone who has engaged with anything in the last quarter.
When to widen or tighten the window
Longer purchase cycles or low-frequency programs justify a wider window. A B2B program that sends twice a month might use 180 days. A daily consumer program might use 60.
The real check is whether your typical engaged subscriber engages at least once inside the window. If they do not, the window is too short and you will sweep healthy contacts into the audience.
It is also worth defining the window in a single, documented timezone. GETDATE() returns Central time inside the SFMC SQL engine, so a careless 90-day predicate can drift by several hours at the boundary for teams in Europe or APAC.
Choosing the right Data Views and join keys
The views that do the real work
Three Data Views cover the bulk of the logic. _Sent confirms you actually contacted the subscriber inside the window. _Open and _Click carry the positive engagement signals you want to exclude on.
For a fuller picture, pull in _Subscribers for status and _Unsubscribe so you can exclude anyone who has explicitly opted out, on any list, at any time.
SubscriberKey, every time
The single most important join key is SubscriberKey.
It is the business identifier you control, it stays stable across rebuilds, and it is the key that almost every custom Data Extension in your account is built on.
SubscriberID will work for some queries, but it is platform-generated and can change. Mixing the two across joins is one of the quiet reasons reactivation audiences leak.
Excluding the people you do not want
Hard suppressions first
Before you ever generate the reactivation list, layer in the structural exclusions. Hard bouncers in the last 60 days. Anyone present in _Unsubscribe with no list filter. Anyone flagged in your account's master suppression Data Extension.
These all join cleanly on SubscriberKey, and they prevent the audience from including addresses that should never receive another send under any circumstances.
Soft signals you also want out
A subscriber with three or more soft bounces in the last 30 days is unlikely to engage with a reactivation send, and more likely to damage your reputation than to recover.
Pull in _Bounce filtered to BounceCategory values of Soft bounce, Block bounce, or Technical/Other, group by SubscriberKey, and exclude any address exceeding the threshold.
Subscribers who engaged very recently, say an open or click in the last 14 days, should also be excluded. They may technically fall inside the unengaged window but are clearly on their way back without the campaign.
Wiring the audience into a journey
The Query Activity and the target Data Extension
The output of a reactivation query lands in a Data Extension whose schema matches your SELECT list exactly.
At minimum the target needs SubscriberKey, EmailAddress, and a timestamp recording when the row was added.
Refresh the Data Extension on a schedule that matches the journey's cadence. Daily for high-volume programs, weekly for everything else. Use Overwrite as the write mode unless you have a specific reason to append.
Entry and exit criteria for the journey
A reactivation journey reads from the Data Extension as its entry source, with a re-entry rule that allows a subscriber to come back through only after a defined gap, typically 90 or 180 days.
Exit criteria matter just as much as entry criteria.
Any subscriber who opens, clicks, or converts inside the journey should exit immediately so they do not receive the rest of the win-back sequence. The journey should also exit anyone who unsubscribes or hard bounces mid-flight, and route them to the appropriate suppression Data Extension.
Measuring whether it worked
The two metrics that actually matter
Two numbers tell you whether a reactivation program is working. The reactivation rate, meaning subscribers who engaged again inside the journey window, and the suppression rate, meaning subscribers who finished the sequence without engaging and were moved to a sunset list.
Both are more useful than open or click rates in isolation, because a reactivation audience is by definition a low-engagement cohort and conventional benchmarks do not apply.
Closing the feedback loop
The reactivated cohort should flow back into your active audience pool, with their newly recorded engagement events available to future queries via _Open and _Click.
The unreactivated cohort should flow into a sunset Data Extension that excludes them from future sends, after a final and gentle confirmation message.
A reactivation program without a sunset arm leaves the unengaged subscribers in your active pool, which means your next general send is back to the same deliverability problem you started with.
See QAiry in action
A reactivation audience is exactly the kind of segmentation that benefits from a fast iteration loop and a real count preview before anything ships.
With QAiry you describe the audience in plain language, the platform drafts a plan grounded in your real schema, validates the SQL, and previews the size before any Data Extension is created. You can walk through the loop on real account data at qairy.com/product-demos or try it on your own account at qairy.com/try-it-free.

