Deliverability can be a real diva in the email marketing world: sometimes the spotlight is on the glittering top-line metrics, while the real meltdown happens off-stage. One domain at a time.
Today, I’m unveiling the updated Deliverability Early Warning System (DEWS) v2.0 for Salesforce Marketing Cloud (SFMC). This solution shines a spotlight on underperforming recipient domains so you’re never blindsided by a sudden act of inbox sabotage.
Unlike the previous version, which relied on you checking a Data Extension, this version proactively notifies you via email when specific ISPs are choking on your campaigns.
Attention: The Real Danger Lurking in Domain-Level Deliverability
Picture this: you send out a campaign that looks perfect at first glance. Opens are decent, clicks are passable, and the bounce rate isn’t anything to write home about. Everything looks peachy, right?
But here’s the twist: sometimes a single domain is quietly dragging down your entire deliverability. Whether it’s an ISP like Hotmail or Gmail enforcing stricter filtering criteria, or a domain where recipients rarely open emails, these micro-problems can snowball into a full-blown crisis if left undetected.
Interest: Diving into DEWS’s 7-Step Automation Masterplan
1. Data Aggregation & ISP Normalization
We start by building a daily, domain-level performance database. We count sends, opens, and bounces from the last 7 days.
New in v2.0: We now use a Domain Mapping Data Extension. This ensures that gmail.com, googlemail.com, etc., are all grouped under a single “ISP” label (e.g., “Gmail”). This prevents diluted data.
SELECT sent.jobid, COALESCE(dm.isp, sent.domain) AS ISP, COUNT(*) AS sends, COUNT(o.subscriberid) AS opens, COUNT(b.subscriberid) AS bounces, MAX(sent.eventdate) AS lastSend, CAST(COUNT(o.subscriberid) * 100.0 / COUNT(*) AS INT) AS openRate, CAST(COUNT(b.subscriberid) * 100.0 / COUNT(*) AS INT) AS bounceRate FROM _sent AS sent LEFT JOIN [DEWS_Domain_Mapping] AS dm ON sent.domain = dm.domain LEFT JOIN _open AS o ON o.jobid = sent.jobid AND o.subscriberid = sent.subscriberid AND o.isunique = 'True' AND o.eventdate > DATEADD(day, -7, GETDATE()) LEFT JOIN _bounce AS b ON b.jobid = sent.jobid AND b.subscriberid = sent.subscriberid AND b.isunique = 'True' AND b.eventdate > DATEADD(day, -7, GETDATE()) WHERE sent.eventdate > DATEADD(day, -7, GETDATE()) GROUP BY sent.jobid, COALESCE(dm.isp, sent.domain) HAVING COUNT(*) > 50
Why domain-level analysis? Because one slippery ISP can hide in the shadow of your overall stats – until it’s too late to fix without major damage control.
2. Calculating Average Performance
Next, we calculate the “average” open and bounce rates per job. This baseline acts as our yardstick for spotting anomalies.
SELECT
s.jobid,
s.sends,
COALESCE(o.opens, 0) AS opens,
COALESCE(b.bounces, 0) AS bounces,
CAST(o.opens * 100.0 / s.sends AS INT) AS openRate,
CAST(b.bounces * 100.0 / s.sends AS INT) AS bounceRate,
s.lastSend,
'average' AS ISP
FROM
(
SELECT
jobid,
COUNT(subscriberid) AS sends,
MAX(eventdate) AS lastSend
FROM _sent
WHERE eventdate >= DATEADD(day, -14, GETDATE())
GROUP BY jobid
) AS s
LEFT JOIN (
SELECT jobid, COUNT(subscriberid) AS opens
FROM _open
WHERE isunique = 'True'
AND eventdate >= DATEADD(day, -14, GETDATE())
GROUP BY jobid
) AS o
ON s.jobid = o.jobid
LEFT JOIN (
SELECT jobid, COUNT(subscriberid) AS bounces
FROM _bounce
WHERE isunique = 'True'
AND eventdate >= DATEADD(day, -14, GETDATE())
GROUP BY jobid
) AS b
ON s.jobid = b.jobid
3. Enriching Your Data
We merge the performance records with SFMC’s _job data view to bring in the EmailName and EmailSubject. This context is crucial—you need to know which email caused the issue.
SELECT
dews.jobid,
dews.ISP,
_job.emailname,
_job.emailsubject
FROM [DEWS_MBP_Stats] dews
JOIN _job ON _job.jobid = dews.jobid
4. Flagging Underperforming Domains
This query compares specific ISP performance against the campaign average. We flag an ISP if:
- Bounce rate is more than double the average.
- Open rate is less than 60% of the average.
SELECT
d.ISP,
d.jobid,
d.sends,
d.opens,
d.bounces,
d.openrate,
d.bouncerate,
d.clickrate,
a.clickrate AS avgClickrate,
a.openrate AS avgOpenrate,
a.bouncerate AS avgBouncerate,
d.lastsend,
d.emailname,
d.emailsubject
FROM [DEWS_MBP_Stats] d
INNER JOIN [DEWS_MBP_Stats] a
ON d.jobid = a.jobid
AND a.ISP = 'average'
WHERE d.ISP <> 'average'
AND (
d.openrate < (a.openrate * 0.6)
OR (d.bouncerate > (a.bouncerate * 2) and (a.bouncerate > 0) and (d.bouncerate > 0))
)
In plain English, if a domain’s open rate nosedives below 60% of average, or if its bounce rate skyrockets to more than double, we label it a trouble spot. Those flagged domains are saved in a special “alert” data extension: your signal to spring into action with ISP-specific remedies.
5. Prioritizing Recent Issues (New!)
Instead of just sending you a raw list of every glitch, we summarize the data to find persistent offenders. This query identifies how many times an ISP has been flagged recently.
SELECT
jobid, ISP, sends, opens, bounces, openrate, avgOpenrate,
bouncerate, avgBouncerate, clickrate, avgclickrate, clicks,
lastSend, emailName, emailSubject,
COUNT(*) OVER (PARTITION BY ISP) AS occurences
FROM [DEWS_Alerts_Staging]
WHERE sends > 50
AND lastsend > dateadd(d,-7,getdate())
6. The Safety Valve (Verification Activity)
We don’t want to spam your inbox with empty alerts. A Verification Activity checks the final Data Extension. If the count of problematic rows is 0, the automation stops here. You only hear from DEWS when there is actual bad news.
7. The Alert (Notification Email)
Finally, if issues are found, the system deploys an email to a predefined list of recipients. The email uses AMPscript to generate a dynamic table of the specific ISPs causing trouble and the campaigns involved.
The AMPscript Logic:
%%[
/* Look up problematic rows */
SET @deliverabilityIssues = LookupOrderedRows("DEWS_recent_issues", 0, "occurences desc", "problematic", "true")
set @rowCount = rowcount(@deliverabilityIssues)
set @mostProblematicDomain = Field(row(@deliverabilityIssues, 1),"ISP")
]%%
Hi %%=AttributeValue("name")=%%, we have some deliverability issues on below mailbox providers:<br><br>
%%[
if @rowCount > 0 then
set @domainsSeen = ""
for @j = 1 to @rowCount do
set @row = row(@deliverabilityIssues, @j)
set @domain = field(@row,"ISP")
set @occurences = field(@row,"occurences")
/* Deduplicate visuals */
IF IndexOf(@domainsSeen, @domain) == 0 THEN
SET @domainsSeen = Concat(@domainsSeen,"|",@domain)
]%%
<b>MBP: %%=v(@domain)=%%</b> with %%=v(@occurences)=%% occurences<br>
%%[
ENDIF
next @j
endif
]%%
Desire: Proactive Defense for Your Sender Score
With DEWS v2.0, you move from “Post-Mortem” analysis to “Early Warning.”
- Automated Monitoring: No more logging in to check query results manually.
- Contextual Alerts: The email tells you exactly which ISP is mad at which Campaign.
- Smart Filtering: The 7-day lookback and occurrence counting ensure you focus on trends, not one-off blips.
Action: Download the Solution
Ready to upgrade? The SFMC Package Manager makes setup a snap.
- Download the updated package.
- Import via Package Manager.
- Populate the
domainMappingData Extension: This is the secret sauce. To ensure thatgmail.comandgooglemail.comare treated as the same entity (Google), you need a robust list of domains mapped to their providers. - I highly recommend using Al Iverson’s “MAGY Domains List” (Microsoft, Apple, Google, Yahoo) as your source. It is the industry standard for this type of data.
- Source: MAGY Domains List – 2025 Update
- Instructions: Download the list, format it to match the
domainMappingDE (Fields:domain,isp), and import it into Marketing Cloud. - Populate Recipients: Add the email addresses of the team members who should receive alerts to the
DEWS - NotificationsData Extension. - Schedule: Set the Automation to run daily (e.g., 6 AM).
Once you have identified the problematic ISP, you should immediately get into more details on their perception of you as a sender. This depends highly on which ISP we are talking, but here are some suggestions:
Google – Postmaster Tools and Gmail Bulk Sender Escalation Form. You need to ensure full compliance, before reaching out to them, otherwise you will be denied any remediation. They have recently launched a really nice compliance dashboard here.
Microsoft – SNDS and Bulk Sender Support Request Form. Microsoft are notorious for claiming it is not their fault, and they can’t see anything wrong on their side. If you are seeing deliverability issues with only them, and you are fully compliant with SPF, DMARC and whatnot – then keep pushing them. 4-5 escalations down the line, they will finally adjust their filtering and allow your emails to reach the inboxes.
Pro tip: Swing by other articles on deliverability here on Digital Marketing on Cloud for more how-tos and insights on wielding SFMC like a pro. Don’t let hidden deliverability woes overshadow your email marketing masterpiece – take charge, arm yourself with DEWS, and give your campaigns the VIP treatment they deserve. Even more curious on deliverability? Go through the vast goldmine of articles by Al Iverson (few people know more than him) on the topic, here on SpamResource.
So, there you have it: a cunning system that digs beneath the glossy facade of overall stats to catch troublemaking ISPs one domain at a time. With DEWS, you’ll never again be blindsided by a sneaky underperformer. Because in email marketing, as in showbiz, the better prepared you are backstage, the grander your performance on center stage!
