Loading tutorials…
Loading tutorials…
SendGrid Marketing Campaigns is structurally different from Mailchimp or Klaviyo — it's a marketing layer bolted onto a developer-first sending platform. The UI feels like 'they tried.' For dev teams already on SendGrid for transactional, it's the path of least resistance. For marketing-first teams, Klaviyo or Brevo usually wins. Here's how to make it work.
Who this is forDev-led teams already using SendGrid for transactional who want to add marketing without standing up a second tool. Or teams whose volume + segmentation needs are simple enough that Marketing Campaigns is sufficient (under 50K contacts, 2-4 active automations).
What you'll need
Step 1
SendGrid → Marketing → click the gear icon to choose the plan. Marketing Campaigns is billed separately from the Email API plan.
SendGrid → Marketing (left nav). First-time setup prompts you to choose a Marketing Campaigns plan.
Plans (2026): Free = 2K contacts + 6K sends/mo. Basic = $15/mo, 5K contacts. Advanced = $60/mo, 10K contacts + automations + dedicated IP eligibility. Higher tiers scale by contact count.
Critical: the Email API plan and Marketing Campaigns plan are SEPARATE. You can be on Email API Essentials ($19.95/mo) AND Marketing Campaigns Basic ($15/mo) — they don't share quota or contact lists with each other automatically.
Pick by contact count: <2K = Free, 2K-5K = Basic, 5K-10K + need automations = Advanced. Above 10K, get a custom Pro quote.
Confirm CAN-SPAM footer (Tutorial 1, Step 5) is set — Marketing Campaigns will refuse to send Single Sends without a compliant footer.
Step 2
Marketing → Contacts → Custom Fields. Define fields once. Renaming or merging later is painful.
Marketing → Contacts → Custom Fields.
Plan the schema: what data do you need to segment on? Common: First Name, Last Name (built-in), plus custom: Plan Tier, Last Purchase Date, Signup Source, LTV, Industry.
Field types: Text, Number, Date. Choose types carefully — once a field has data, changing type means losing data.
Naming: use snake_case or kebab-case consistently. SendGrid does case-insensitive matching on import column headers, so `Last Purchase Date` and `last_purchase_date` map to the same field — but consistency aids debugging.
Cap at 12-15 custom fields. More than that and your CSV import + segmentation get unwieldy. If you need >15, you probably need a CDP (Segment, Rudderstack) feeding SendGrid, not custom fields directly.
Step 3
Marketing → Contacts → Add Contacts → Upload CSV File. Map columns carefully. Mark consent honestly.
Marketing → Contacts → Add Contacts → Upload CSV File.
Prepare CSV: Email (required, header exactly `email`), First Name, Last Name, custom fields. Headers in row 1.
Upload. SendGrid parses + shows column-to-field mapping. Map each CSV column to a Marketing Campaigns field (or create new fields inline).
Consent: SendGrid asks "Did these contacts opt in to marketing emails from you?" Answer honestly. If unsure on any: separate the CSV, import only confirmed opt-ins.
Click Import. For lists over 5K contacts, SendGrid processes in background (5-30 minutes). You get an email when complete.
Verify: Contacts → All Contacts → count should match CSV row count minus duplicates (SendGrid de-dupes by email automatically). Typical drop: 2-5%. If 20%+ are missing, the CSV had formatting issues or many duplicates.
Step 4
Marketing → Contacts → Segments → Create New Segment. Build conditions using AND/OR logic.
Marketing → Contacts → Segments → Create New Segment.
Name segments by USE: "Engaged 30d," "VIP customers," "Inactive 90d," "Free trial signups."
Conditions: combine contact fields (Plan Tier = "Free Trial") with engagement (Last opened in last 30 days). Use AND for narrower, OR for broader.
Engagement conditions available: Last opened, Last clicked, Last delivered, Days since signup. NOT available: opened a specific email, clicked a specific link (this is a real Klaviyo/Mailchimp gap).
Save the segment. Segments are dynamic — they recompute each time you target them in a Single Send or Automation.
Common segments to build day-1: Engaged 30d (opened or clicked in 30 days), Engaged 90d, Inactive 180d (suppress from regular sends), New 7d (still-fresh signups for welcome reinforcement).
Step 5
Marketing → Single Sends → Create Single Send. Build the email in the Design Editor or paste HTML.
Marketing → Single Sends → Create Single Send.
Name (internal): "Newsletter 2026-05-26 - Spring Sale." Subject: write a real subject line — avoid "Newsletter" or "Update," lead with value.
From: pick a verified Sender Identity or domain-authenticated address (hello@em.yourbrand.com).
Recipients: pick a segment OR specific lists. Avoid sending to "All Contacts" except for the rare full-list campaign — engaged segments outperform 2-3x.
Design: use Design Editor (drag-and-drop), Code Editor (paste HTML), or Visual Editor. Start with a SendGrid template, customize from there.
Settings: confirm Tracking → Open + Click both ON. Click Settings → Footer → confirm physical address + unsubscribe link.
Preview & Test: Send Test To → enter 2-3 test addresses. Open each on desktop AND mobile. Verify rendering, links, unsubscribe.
Schedule or Send Now. Start with sends under 5K recipients while sender reputation is fresh.
Step 6
Marketing → Automations → Create Automation. Advanced plan required for multi-email automations.
Marketing → Automations → Create Automation. (Note: Automations require Advanced plan; Basic plan only gets single-step automations.)
Choose template: "Welcome a new contact" → Build From Scratch for full control.
Trigger: "Contact is added to a list" → choose your Newsletter list.
Email 1 (Day 0): build the welcome email. From, subject, body. Save.
Add delay block: 2 days. Then Email 2: value-add content. Add delay: 3 days. Then Email 3: social proof.
Filters: critically, add "Contact has not opened any of the previous emails in this automation" branch to send a re-engagement email to non-openers. SendGrid's branching is more limited than Klaviyo's but covers most welcome-flow needs.
Activate. The automation enrolls NEW contacts added to the trigger list. It does NOT retroactively enroll existing contacts unless you check 'Apply to existing contacts.'
Step 7
Marketing → Signup Forms → Create New Form. Embed on your site or use the hosted URL.
Marketing → Signup Forms → Create New Form.
Choose the list new signups join (typically Newsletter).
Customize fields: Email (required), First Name optional. Keep it 1-2 fields max for conversion.
Confirmation flow: choose Single Opt-in (US-only audiences) or Double Opt-in (EU/UK/Canada compliance + cleaner list).
Customize confirmation email + landing page for Double Opt-in. Brand to match your site.
Publish: get the embed snippet (paste in your website footer or signup page) OR the hosted URL (share anywhere).
Test: submit your own email via the form. Verify the contact arrives in your list within 60 seconds (and triggers the welcome automation if active).
Common mistakes
Sending to "All Contacts" every campaign
What goes wrong: Engagement-blind sending burns reputation on inactives. After 90 days of all-list sending, open rate drops from 25% to 14%. Recovery requires 60+ days of engaged-only sending. Lost revenue on a 10K list: ~$2-5K over the recovery window.
How to avoid: Always send to a segment, not "All Contacts." Default: send to "Engaged 90d" for regular campaigns. Save All Contacts for rare critical announcements (e.g., a real product launch).
Importing with consent unmarked or fudged
What goes wrong: SendGrid Trust + Safety detects spam-trap hits and complaint spikes within 30-60 days. Account review → temporary suspension → permanent flagging if patterns repeat. Domain reputation damage spills into transactional sending too.
How to avoid: Mark consent honestly. Separate CSVs into "confirmed opt-in" and "uncertain"; only import confirmed. Send re-permission emails to uncertain contacts; suppress non-responders.
No segment for engagement-based sending
What goes wrong: Without an Engaged 30d / 90d segment, you can't run engagement-only campaigns. You're stuck with All Contacts every time, baking in the reputation damage.
How to avoid: Day 1 of Marketing Campaigns setup: build "Engaged 30d" (opened or clicked in 30 days) and "Engaged 90d" segments. Use them as the default for all regular campaigns.
No physical address in the footer
What goes wrong: CAN-SPAM requires a physical mailing address on every commercial email. SendGrid will block Single Sends from being scheduled without one. If you somehow ship without it, complaint rate climbs and Trust + Safety review follows.
How to avoid: Settings → Mail Settings → Footer → set a real address. Confirm it renders in every test send. PO boxes are acceptable.
Sending Marketing Campaigns from the same authenticated domain as transactional
What goes wrong: A bad marketing campaign (high complaint rate) damages reputation for transactional emails on the same domain. Order confirmations start landing in spam alongside the promo.
How to avoid: Separate sending subdomains: marketing on em.yourbrand.com, transactional on t.yourbrand.com or root. Both authenticated separately in SendGrid. Tutorial 2 covers the setup.
Building automations without a re-engagement branch
What goes wrong: Non-openers of Email 1 still receive Email 2, 3, 4 — same trajectory, same low engagement. You're training them to ignore your sender name. After 6 months, the cohort opens nothing.
How to avoid: In every automation, branch on "Contact has not opened any previous emails in this automation" → send a re-engagement email with a different subject angle. Single highest-leverage automation tweak.
Recap
Done — what's next
How to build SendGrid Dynamic Templates with Handlebars and send them via API
Read the next tutorial
Hand it off
SendGrid Marketing Campaigns rewards correct setup with reasonable performance for dev-led teams. For marketing-first companies (>30% of revenue from email), the gap to Klaviyo/Brevo widens fast — and so does the cost of leaving SendGrid Marketing Campaigns mis-configured. A specialist can either set this up right OR help you decide whether to migrate. Typical engagement is $400-800 at $14-16/hr.
See specialist rates
Yes — separate product, separate billing, separate contact database. You can be on Email API Essentials AND Marketing Campaigns Basic at the same time, paying for both. Transactional sends via the API don't add contacts to Marketing Campaigns automatically.
For ecommerce, Klaviyo wins on Shopify/WooCommerce integration depth. Mailchimp is reasonable for sub-$50K/mo stores. SendGrid Marketing Campaigns lags on e-commerce features — no native abandoned-cart triggers from Shopify product data, weaker product recommendations. Use Marketing Campaigns when you're already on SendGrid for transactional and marketing volume is light.
Yes — Dynamic Templates created under Email API (Tutorial 5) are available in Single Sends and Automations. This is one of the genuine benefits of consolidating on SendGrid: write a template once, use it for transactional + marketing.
Marketing Campaigns batches large sends across SendGrid's marketing IP pool with throttling to protect reputation — a 50K send may spread over 30-90 minutes. Email API single sends go out within seconds. This is intentional for sender reputation health.
Use the Marketing API: `PUT /v3/marketing/contacts` with email + custom fields. Idempotent — re-sending updates fields. For high-volume syncs, batch in groups of 1000. For real-time event-driven syncs, use a CDP (Segment, Rudderstack) with a SendGrid destination — it's cleaner than direct integration.
Yes — Marketing → Single Sends → enable A/B Test in the send setup. Test up to 4 subject line variants OR 4 content variants on a sample (typically 10-25% of list), then auto-send the winner to the remaining list. Plan a 4-24 hour test window for meaningful winner selection.
SendGrid
Dynamic Templates are SendGrid's best-kept feature: template lives in SendGrid, your app sends a small JSON payload, marketing edits the design without touching code. But the Handlebars syntax, versioning, and dynamic_template_data shape have sharp edges that cost an afternoon to learn the hard way.
SendGrid
Suppressions are the dull, unglamorous part of email that decides whether your account survives the year. Gmail and Yahoo's 2024 bulk sender rules made one-click unsubscribe mandatory at scale, and SendGrid's suppression groups are how you respect that without losing transactional sends. Here's the full setup.
SendGrid
Gmail and Yahoo's 2024 bulk sender rules made domain authentication non-negotiable above 5K sends/day — and strongly recommended below it. SendGrid hides the link-branding step that most accounts skip, leaving every click flagged 'via sendgrid.net' in Gmail's clip warning. Here's the full auth stack.
Mailchimp
Customer Journeys replaced Mailchimp's Classic Automations in 2021. They're more capable — branching, conditional logic, multiple triggers — but the builder hides decisions that determine whether the journey actually converts. Here's the build that works.
SendGrid
DIY SendGrid is the right call until it isn't. The signal isn't 'sending more emails' — it's that the cost-of-mistakes finally outweighs the cost-of-hiring. Here's the honest framework for when that line is crossed.