SFMC's built-in tracking is useful but incomplete. The system _Open, _Click, _Sent, _Bounce data views cover email events with SubscriberKey, timestamp, and basic identifiers. For most analysis, they're enough.
The gaps show up when you need business context: which campaign this was part of, which DE it came from, what subject line was used, which product ID was personalized into the email. The defaults don't store that.
Send Log DE is how you capture it.
What Send Log does
Send Log DE is a custom Data Extension that SFMC populates on every send, in addition to the default tracking. You define what fields to capture, and AMPscript inside the email writes the values into Send Log for each recipient at send time.
It's additive - you're not replacing the default tracking, just adding a parallel log with richer metadata.
Setup: create the Send Log DE
Create a new DE from the TriggeredSendDataExtension template (for Triggered Sends) or from scratch for other use cases. Typical fields:
The built-in fields (SendID, SubscriberKey, SendDate) populate automatically when Send Log is wired up. The custom fields are up to you.
Wiring Send Log into the email
In the email body, add AMPscript that writes to Send Log:
Runs once per recipient at send time. Produces one row per subscriber per send.
Send Log extends default retention
The default _SendLog system data view retains records for 10 days. A custom Send Log DE retains as long as your retention policy allows - 90 days, 1 year, or indefinitely.
For an audit or long-term reporting requirement ("show me all sends to this customer over the last 12 months"), a custom Send Log DE is how you satisfy it.
Archiving pattern
Pair Send Log with a nightly archive automation:
This handles the system _SendLog retention problem. Separately, the custom Send Log DE captures your additional fields at send time.
Things that don't go into Send Log
Send Log writes at send time, which means you have access to:
- Subscriber attributes (AMPscript can read the DE)
- Static per-send values (subject, campaign ID)
- Personalization values used in the email
It does not have access to:
- Subsequent engagement (opens, clicks happen after the send, covered by default _Open / _Click)
- Bounce information (comes later, in _Bounce)
- Unsubscribe events (covered by _Subscribers status changes)
For joined analysis ("did the customer open the email that had ProductID X?"), join Send Log with _Open on SendID + SubscriberKey using SQL Query.
One gotcha: Test Send doesn't write to Send Log
Test Sends skip the Send Log write. If you're testing and expecting the custom Send Log to populate, it won't. Only production sends write.
Helps when testing - you don't pollute the log with test data. Confuses when you're trying to debug Send Log wiring, because Test Send success doesn't confirm Send Log works.
Takeaway
Send Log DE is the bridge between SFMC's send infrastructure and your analytics or audit needs. The default tracking views answer "who opened, who clicked." Send Log answers "which campaign, which subject, which product was in the email." Five minutes of AMPscript at the top of the email template, and the analytics team gets data they can actually work with.
Setting up custom SFMC tracking or audit logs? Our Salesforce team designs Send Log strategies and reporting pipelines on production engagements. Get in touch ->
See our full platform services for the stack we cover.