Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Building Salesforce Marketing Cloud (SFMC) email campaigns, journeys, and automation — Journey Builder welcome/nurture flows, Automation Studio batch pipelines, Content Builder, AMPscript personalization, data extensions and SQL Data Views, Triggered/Single/User-Initiated sends, deliverability (SPF/DKIM/DMARC, IP warming, bounce handling), Marketing Cloud Connect to CRM, and inbox analytics. Use when designing or reviewing SFMC email, journeys, segmentation, or deliverability. This is SFMC (Stud
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 449% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 264% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 331% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 361% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 969% | 0% |
The Salesforce Certified Marketing Cloud Email Specialist (exam code MC-202) validates proven knowledge, skills, and hands-on experience in email marketing best practices within the Salesforce Marketing Cloud (SFMC) platform. The six exam domains are: Email Marketing Best Practices, Email Message Design, Content Creation & Delivery, Marketing Automation, Subscriber & Data Management, and Tracking & Reporting (see domain weights in references/study-resources.md) [volatile — verify live].
This is the primary entry-level certification in the Marketing Cloud track. It is a prerequisite for advanced credentials such as Marketing Cloud Consultant, Marketing Cloud Developer, and Marketing Cloud Account Engagement Specialist. Salesforce recommends 6–12 months of hands-on Marketing Cloud experience before attempting.
When to reach for Marketing Cloud: SFMC is the platform for marketing sends — campaigns, program updates, recruitment, lifecycle messaging — with engagement tracking, unsubscribe management, and journey automation. Transactional 1:1 mail (submit confirmations, password resets, magic-link delivery) is often better served by a cheaper transactional email service (e.g. Amazon SES) unless a Triggered Send is already justified by the broader MC adoption. The rules below let an agent make the transactional-vs-marketing call, design a compliant journey, and avoid the deliverability and data-model traps that bite teams integrating MC with a CRM.
This file is an operational playbook, not an exam outline. Each section states the actual rules an agent must apply, the concrete limits, the decision criteria for picking a tool, and the anti-patterns to catch in review.
> Load this skill when… designing or reviewing Salesforce Marketing Cloud email campaigns, Journey Builder flows, or Automation Studio pipelines; configuring deliverability (SPF/DKIM/DMARC, IP warming, bounce handling); working with data extensions, AMPscript personalization, or Marketing Cloud Connect; or diagnosing send failures, subscriber status issues, or inbox analytics. > Not this skill: this is SFMC (Studio/Builder stack) — not core CRM email alerts or Pardot/Account Engagement; for CRM email activity tied to Sales or Service Cloud objects, see salesforce-sales-cloud-consultant or salesforce-service-cloud-consultant.
> Deeper context: Study resources (official Salesforce + community) live in references/study-resources.md (loaded on demand). For org-specific applications of these rules, keep a per-org appendix in your own project, referenced from a CLAUDE.md. For NPSP/nonprofit-specific guidance, see salesforce-nonprofit-cloud-consultant.
> Verify steps assume nothing about your tooling — use your project's Salesforce MCP connection, the Salesforce CLI (sf), or the Salesforce setup UI, in that order of preference.
Credential logistics and study path: see references/study-resources.md.
[volatile — verify live] or [opinion — house style]. If you act on an untagged fact and the live system disagrees, file feedback — do not silently trust this file over the live org.unsubscribe. CAN-SPAM requires this; omitting it is a per-message violation (up to ~$53,088 per email in U.S. penalties [volatile — verify live]). In SFMC this lives in the email footer / Delivery Profile, not the body — set it at the Delivery Profile so it can't be forgotten per-send.
re-add an unsubscribed address via a fresh import — that re-subscribes them and is a violation.
| Audience / law | Required consent | Action | |---|---|---| | U.S. marketing (CAN-SPAM) | Implied OK; opt-out must work | Single opt-in acceptable; footer unsubscribe mandatory | | Canada (CASL) | Express opt-in required | Capture explicit consent + date/source; no purchased lists | | EU/UK (GDPR) | Lawful basis (usually consent) | Double opt-in; honor right-to-erasure; store consent proof | | New / risky list, deliverability-sensitive | — | Use double opt-in (DOI) regardless of law |
hits spam traps, and violates CASL/GDPR. Build lists with Web Collect / Smart Capture / DOI only.
most common cause of Gmail/Yahoo bulk-sender rejection (both enforce SPF+DKIM+DMARC for senders >5,000/day [volatile — verify live]). Verify DNS before the first send, not after bounces appear.
every few days). Blasting full volume on a cold IP gets you throttled or blocklisted.
| Bounce type | Cause | SFMC subscriber status result | |---|---|---| | Hard bounce | Permanent — invalid/nonexistent address | → Bounced (auto-suppressed) | | Soft bounce | Temporary — full mailbox, server timeout, message too large | retried; repeated soft → Held | | Spam complaint | Recipient hit "report spam" | → Unsubscribed |
threshold [volatile — verify live]. Use List Detective to screen imports for role addresses (info@, sales@) and known spam-trap patterns before they enter a send.
re-permission step → high bounce + complaint risk. Re-engage or suppress stale addresses first.
Email design rules (mobile-first, subject/preheader, A/B test discipline): references/coverage-additions.md.
This is a standalone blueprint domain (13% of the exam [volatile — verify live]) covering the design, testing, and approval of email messages before send.
Core rules to hold inline:
Full email design rules (mobile-first, responsive layout, preheader best practices): references/coverage-additions.md — the "Email design rules" and "Content Builder: slot-based templates" sections.
modern cross-channel CMS (blocks, templates, shared folders). Classic is legacy — only touch it for existing assets you must maintain.
brand consistency. A template change propagates; copy-pasted HTML does not — prefer templates.
| Need | Use | Notes | |---|---|---| | Simple field merge (First Name) | Personalization String %%FirstName%% | Pulls from subscriber attribute / DE field | | Conditional content, cross-DE lookups | AMPscript | Lookup(), IF/THEN, runs at send time | | Repeatable row/loop content (e.g. donation list) | GTL (Guide Template Language) | Cleaner than AMPscript loops | | Heavy integration / API calls in-email | SSJS | Last resort; slower, harder to debug | | AI optimization | Einstein | See decision table below |
Dear %%FirstName%%, with a nullfield renders Dear ,. Use IIF(empty(@FirstName), "Friend", @FirstName) style fallbacks.
| Goal | Feature | |---|---| | Send each contact at their best individual time | Einstein Send Time Optimization (ESTO) | | Score who's likely to open/click/unsubscribe | Einstein Engagement Scoring | | Get subject-line copy suggestions | Einstein Copy Insights |
| Send type | Trigger | Use when | |---|---|---| | User-Initiated Send | Manual / scheduled by a user | One-off or scheduled batch campaign (annual appeal) | | Triggered Send | Real-time API/event call | Transactional 1:1 (confirmation, password reset, magic-link/upload email) | | Automated Send | Automation Studio step | Recurring batch on a schedule (weekly digest) |
private domain, IP assignment. Send Classification = the binding of a Sender + Delivery Profile to a CAN-SPAM publication list. Configure the Send Classification once; reuse it so every send inherits the compliant footer and correct IP.
record) + a rendering check (Litmus/Validate). Catch broken personalization and mobile breakage here.
bounced addresses. Confirm publication + suppression lists are both wired in the send pipeline.
republishing is required after editing the email. RED FLAG: "the confirmation email stopped going out" → first check the TSD is in Active, not Paused, and was republished after the last edit.
| Criterion | Journey Builder | Automation Studio | |---|---|---| | Pattern | 1:1, contact-centric, real-time orchestration | Batch, data-centric, scheduled processing | | Best for | Welcome series, nurture sequences, event drip | Nightly data import, SQL segmentation, file transfer/extract | | Multi-step waits & branching | Yes (Decision/Engagement/Random splits, Wait) | Limited (sequential steps) | | Entry | Entry Source (DE, Salesforce Data, API, CloudPage…) | Schedule (cron-like) or File Drop (SFTP) | | Decision rule | "react to each contact as they qualify" → JB | "process a batch on a cadence" → AS |
| Mode | Behavior | |---|---| | No Re-entry | Contact can be in the journey only once, ever | | Re-entry Any Time | Contact can be in multiple instances simultaneously | | Re-entry Only After Exiting | Must finish/exit before qualifying again |
Welcome series → usually No Re-entry (don't welcome a contact twice). Recurring reminder → Re-entry Only After Exiting.
a prior journey email. Use Engagement Split to send a follow-up only to non-openers.
Criteria to pull contacts out when they no longer qualify (e.g. donor unsubscribed).
on the old version until they exit. Stopping a journey ejects in-flight contacts. RED FLAG: "I changed the email but contacts still get the old one" → they're on the prior published version.
Import File (SFTP CSV → DE), Data Extract (export tracking → SFTP file), File Transfer (move/decrypt SFTP files), Filter (Data Filter → Filtered DE), Send Email, Wait.
sequentially. So put dependent work (Import → SQL → Send) in separate steps in order, never side-by-side. RED FLAG: an Import and the SQL that reads it sitting in the same step → race condition; the SQL may run against stale data.
often preceded by Import File (load fresh CRM/SFTP data) and an opening Wait for timing.
model; DEs are relational, column-defined, scalable, and required for sendable segmentation and SQL. Use a List only for simple publication/subscription grouping.
| Type | What it is | Use when | |---|---|---| | Standard | Manually defined schema | Most cases — your own data structure | | Filtered | Subset of a parent DE via a Data Filter | Reusable segment that auto-refreshes from parent | | Random | Random sample of a parent DE | A/B holdouts, statistical sampling |
EmailAddress, Phone, Locale), set a Primary Key (prevents duplicate rows on Add/Update), and mark nullable fields. A Sendable DE must have a field relating it to the Subscriber Key.
(often the CRM Contact ID via MCC) and never change it — it's the spine of all tracking.
size the DE column to match the source field length so imports don't silently truncate.
bounces), Unsubscribed.
| Scope | Effect | |---|---| | List Unsubscribe | Off one specific list/publication only | | Global Unsubscribe | Off all lists in the business unit | | Master Unsubscribe | Off everything across the entire MC account (all BUs) |
RED FLAG: processing a one-list opt-out as a Master Unsubscribe → you silently kill that contact's eligibility for every future send org-wide.
Profile Attributes vs. Preference Attributes, Subscription Center configuration, Web Collect vs. Smart Capture, and Double Opt-In setup: references/coverage-additions.md.
| Mode | Effect | Use when | |---|---|---| | Add/Update | Insert new, update existing (matched on PK) | Default for ongoing syncs | | Add Only | Insert new, skip existing | Append-only feeds | | Update Only | Update existing, skip new | Enriching known records | | Overwrite | Truncate the DE, then load | Full nightly snapshot replacement — destructive | | Delete | Remove matching rows | Targeted removal |
every run. Overwrite is for full-snapshot DEs only.
with no _Click in 90 days"). SQL writes to a target DE; it cannot send directly.
_Sent, _Open, _Click, _Bounce,_Unsubscribe, _Complaint, _Job, _Subscriber, _ListSubscribers. Data Views retain ~6 months of data by default [volatile — verify live] — for longer history, extract to a DE on a schedule.
MCC deep-dive (Synchronized Data Sources vs. Salesforce Send, integration user FLS verification, custom object exposure): references/coverage-additions.md.
Core rule to hold inline: verify the CRM objects you intend to segment on are actually synced AND that the MCC integration user has FLS Read on every field before building a journey — a synced field with no FLS returns blank, not an error.
Key metric definitions (Delivered, Open Rate, CTOR, Click Rate, Bounce Rate, Unsubscribe Rate, Spam Complaint Rate), the report-selection table (Account Send Summary, Campaign Email Tracking, Email Performance by Domain, Bounce Summary, etc.), and guidance on Tracking Extracts and Data View SQL for re-engagement suppression: references/analytics-reports.md — load when building dashboards, diagnosing deliverability trends, or writing engagement-suppression queries.
Core rule to hold inline: lean on clicks/CTOR, not opens — open tracking is pixel-based and unreliable since Apple Mail Privacy Protection pre-fetches pixels.
Delivery Profile / Send Classification, not per-send).
orchestration, Automation Studio for scheduled batch.
Dear ,).before building journeys on them.
why nothing sends.
> For org-specific applications of these rules, see a per-org appendix you maintain in your own project, referenced from a CLAUDE.md.
Extended rules for Content Builder slot-based templates, Automation Studio File Drop / Run Once, AMPscript Lookup() empty-return, Marketing Cloud Intelligence (Datorama), and publication vs. suppression list wiring: references/coverage-additions.md.
SELECT COUNT(*) FROM <DE> returns rows after a test import.IIF(empty(@FirstName), "Friend", @FirstName)). Test Send to a seed address. → gate: seed receives the email; personalization renders; no blank fields.include: entry for SFMC, DKIM CNAME pointing to SFMC, DMARC p=quarantine (or reject once stable). Use a DNS-lookup tool (e.g. MXToolbox). → gate: all three pass with no lookup errors.[volatile — verify live] → gate: SAP shows the domain and DKIM signing is active.SELECT * FROM _Bounce WHERE EventDate > DATEADD(day,-1,GETDATE()). Confirm hard-bounce addresses are suppressed (status = Bounced), soft-bounce addresses show retry logic. → gate: hard-bounce rate < 2% on warm lists; any spike triggers a list-hygiene review before the next send.Situation: A nightly automation imports a fresh CSV from SFTP into a Contacts DE, then runs a SQL query that joins that DE with _Click to build today's re-engagement audience. A developer places both activities side-by-side in Step 1 to "save time."
Competent move: Separate the Import and the SQL into sequential steps — Import in Step 1, SQL in Step 2. Activities in the same step run in parallel, so the SQL executes concurrently with the import and reads stale or partially loaded data. Moving them to separate steps guarantees the import commits before the SQL starts.
Tempting-but-wrong: Assuming SFMC runs activities left-to-right within a step. It does not; same- step activities are parallel by design. Adding a Wait activity inside the same step does not fix it — Wait is a step-level construct, not an intra-step sequencer.
Verify: In Automation Studio, open the automation and confirm the Import activity and SQL Query activity are in different numbered steps, with the Import step preceding the SQL step. Check the Activity History after a run — both activities show a start timestamp; if they match to the second, they ran concurrently.
Situation: A subscriber replies "remove me from your volunteer list." A support agent opens SFMC and clicks the subscriber record's global "Unsubscribe" button to process the request quickly.
Competent move: Use a List Unsubscribe scoped to the volunteer publication list only, not the global action. The global unsubscribe removes the contact from every send in the entire business unit — they will also stop receiving donation receipts, event confirmations, and any other publication. Instead, navigate to the subscriber's list subscriptions, find the volunteer list, and change their status on that list to Unsubscribed.
Tempting-but-wrong: Using the "Unsubscribe" button on the subscriber profile page, which applies a Global Unsubscribe at the BU level. It looks like the right action — it's prominently placed and the label says "Unsubscribe" — but it silently kills delivery eligibility across all programs.
Verify: After processing, check the subscriber's Subscription Summary: they should show Unsubscribed on the volunteer list and Active on all other publication lists. If they appear globally unsubscribed, reverse by setting their All Subscribers status back to Active and reprocessing as a list-scoped opt-out.
Situation: An organization sends a recurring "membership renewal reminder" journey. Contacts who renewed last year should re-enter the journey again when their next renewal window opens.
Competent move: Set re-entry mode to Re-entry Only After Exiting. This lets a contact re-enter after they have fully exited the journey (renewal cycle completed), while preventing them from being in two concurrent instances of the same journey. Configure an Exit Criteria tied to "membership renewed = true" so contacts leave as soon as they act, not after sitting through all wait steps.
Tempting-but-wrong: Setting Re-entry Any Time, which allows a contact to be in multiple simultaneous instances. In a renewal journey, that means a contact who qualifies for two consecutive cycles could receive two parallel sequences of renewal emails — duplicate messaging that damages trust. Alternatively, leaving it as No Re-entry means a contact who renewed last year never receives another renewal journey, which defeats the recurring purpose.
Verify: In Journey Builder, open the Journey Settings panel and confirm the re-entry mode. After a contact exits and re-qualifies, check Journey History to confirm a new entry record was created for that contact (distinct journey entry ID) in the new cycle.
Scenarios 4–5 (TSD left paused after email edit; AMPscript Lookup() blank return without error): references/scenarios.md — load for Triggered Send and AMPscript debugging gotchas.
Study resources and recommended study plan: references/study-resources.md. For NPSP/nonprofit-specific guidance, see salesforce-nonprofit-cloud-consultant.
Using this skill and hit a wall? If you find a claim contradicted by the live system or official docs, a missing rule that cost you a wrong attempt, or a decision this skill gave no criteria for — append an entry in the moment to .skill-feedback/salesforce-marketing-cloud-email-specialist.md at the project root (create it if absent):
date | skill last-reviewed | claim or gap | what you observed instead | evidence (error text / doc URL / query output) | suggested fix
These are harvested back into the skill via the learning loop. When the live system and this file disagree, trust the live system.
[volatile — verify live] tag in study-resources.md. (2) Domain weights updated to official six-domain blueprint: Best Practices 15%, Email Message Design 13%, Content Creation & Delivery 18%, Marketing Automation 19%, Subscriber & Data Management 28%, Tracking & Reporting 7% — all marked [volatile — verify live]; study-resources.md domain table, study-plan, and Trailhead module list all updated. (3) New §1b "Email Message Design" added (inline A/B testing rules, Approvals workflow, template vs. free-form guidance, rendering validation); pointer to existing coverage-additions.md for full rules. (4) §5 renamed from "Insights & Analytics" to "Tracking & Reporting" throughout SKILL.md, analytics-reports.md, and study-resources.md; Overview updated to list all six current exam domains. last-reviewed updated to 2026-06-10. Eval probes 13–14 added.[volatile — verify live] marks, executable workflows, tool-agnostic verify steps, and the feedback protocol above. Exam logistics relocated to references/study-resources.md; last-reviewed set to 2026-06-09. Section 5 (Insights & Analytics detail) moved to references/analytics-reports.md to keep body within word budget.Independent educational content to upskill AI agents. Not affiliated with or endorsed by Salesforce; all trademarks belong to their respective owners. Guidance only — verify against official documentation and live orgs before acting. No certification outcome is implied or guaranteed.
Other measured skills in the registry, with their headline benchmark lift.