A data view in Salesforce Marketing Cloud Engagement is a Salesforce-managed system table that stores subscriber, send, journey, and engagement events for SQL querying. You use it when the built-in Tracking screens are not enough and you need row-level data for segmentation, reporting, QA, or export automation.
What is a data view in Marketing Cloud Engagement?
A data view is not a normal data extension that you create, browse, or edit. It is a read-only system source that Marketing Cloud Engagement exposes to SQL Query Activities in Automation Studio. Salesforce Trailhead describes system data views as Salesforce-created queries used to find subscriber information, and notes that you can query them but not change them.
In practice, the pattern is simple: write SQL against a system table such as _Sent, _Open, _Click, _Bounce, or _Subscribers; choose a target data extension; then run the activity manually or on a schedule. The result rows land in your target data extension, where marketers and admins can review, segment, export, or join them with customer data.
Salesforce documents Marketing Cloud Engagement data views as Automation Studio query sources for subscriber and journey information, with most engagement data available for up to six months in these views. Salesforce also documents a broader Marketing Cloud Engagement retention policy for raw send and engagement data changing to 730 days beginning June 16, 2025, but that policy does not mean every data view gives two years of SQL-accessible rows. Treat the official data view page as the source for the SQL view retention window.
How do data views marketing cloud work in Automation Studio?
Use a data view when you need Marketing Cloud Engagement event data in a structure you control. Automation Studio SQL Query Activities read from data extensions and system data views, then write results to a target data extension. Trailhead explains that a SQL Query Activity can run immediately or on a schedule and can insert the query result into a new data extension.
The usual implementation flow is:
- Create a target data extension with field names, data types, lengths, and primary keys that match your result set.
- Open Automation Studio and create a SQL Query Activity.
- Write the query using system view names such as
_Sentor_Subscribers. - Validate syntax before saving.
- Select the target data extension and choose Append, Update, or Overwrite.
- Add the activity to an automation if it must run on a schedule.
For most reporting snapshots, Overwrite is easier to support because each run refreshes the result. For event logging, use Append only when your target key design prevents duplicates or when the downstream process expects repeated event rows. Salesforce Help notes that Append adds rows without updating existing rows, while Update updates matching rows and appends new rows. Salesforce optimization guidance also notes that Overwrite is often the best performing choice for many query use cases.
Data views marketing cloud access pattern
The phrase data views marketing cloud usually refers to the Marketing Cloud Engagement system views available to SQL Query Activities. They use an underscore prefix, which helps separate them from your own data extensions. Examples include _Sent, _Open, _Click, _Bounce, _Journey, and _JourneyActivity.
In enterprise orgs, teams often create a small set of controlled reporting data extensions instead of allowing every marketer to write ad hoc SQL. That design reduces duplicate automations, gives analysts stable fields, and makes retention easier to enforce.
Which Marketing Cloud data views should admins know first?
Start with the views that answer operational questions: was the email sent, did it bounce, did the subscriber open or click, and what is the subscriber status? The following table lists common marketing cloud data views and the usual reason to query each one.
| System view | Typical use | Fields commonly used | Implementation note |
|---|---|---|---|
_Sent |
Confirm send events by subscriber, job, list, and batch. | SubscriberKey, SubscriberID, JobID, ListID, BatchID, EventDate |
Use it as the base table for send-to-engagement joins. |
_Open |
Find email open events. | SubscriberKey, JobID, EventDate, IsUnique |
Use IsUnique = 1 when the report needs one open per subscriber and send. |
_Click |
Find link-level click events. | SubscriberKey, URL, LinkName, EventDate, IsUnique |
Group by link fields before writing to a summary data extension. |
_Bounce |
Review failed email delivery events. | BounceCategory, BounceType, SMTPBounceReason, EventDate |
Keep bounce reason length large enough in the target data extension. |
_Subscribers |
Check subscriber status and email address. | SubscriberID, SubscriberKey, EmailAddress, Status |
Subscriber profile and preference attributes are not returned by this view. |
_Job |
Add email job metadata such as email name and subject. | JobID, EmailName, EmailSubject, DeliveredTime |
Join it to event views by JobID. |
_Journey and _JourneyActivity |
Map Journey Builder sends to journey and activity names. | JourneyName, VersionID, ActivityName, JourneyActivityObjectID |
Use them when business users ask for journey-level reporting. |
Marketing cloud data views for sends, opens, clicks, and bounces
The most common marketing cloud data views form an event chain. _Sent records the outbound send event. _Open, _Click, _Bounce, _Complaint, and _Unsubscribe record later subscriber actions or delivery outcomes. Join them with the same key set where possible: JobID, ListID, BatchID, and SubscriberID.
Do not join only on SubscriberKey. A subscriber can receive multiple sends, and one subscriber can appear across many jobs. Joining only on the person key can multiply rows and produce wrong engagement counts.
Subscriber data view fields to start with
The subscriber data view is usually _Subscribers. Query it when you need the subscriber key, subscriber ID, email address, or status from All Subscribers. Salesforce Help notes that subscriber attributes are not available in this view, so use profile attributes or separate data extensions when your use case needs custom subscriber properties.
A common support pattern is to compare a send audience data extension with the subscriber data view before launch. That query can catch subscribers that exist in the audience but have an unsubscribed or held status in All Subscribers.
How to query a data view with SQL Query Activity
Before you write SQL, design the target data extension. Marketing Cloud Engagement writes query output into that target, so field types and lengths matter. If your SQL returns a date, the target field must be a Date field. If your SQL returns a long bounce reason, do not use a short text field.
Example 1: find subscribers sent an email but not opened in 30 days
This query uses _Sent as the base data view, joins _Job for email metadata, and left joins _Open to find subscribers without a unique open event for the same send.
SELECT
s.SubscriberKey,
s.SubscriberID,
s.JobID,
j.EmailName,
s.EventDate AS SentDate
FROM _Sent s
INNER JOIN _Job j
ON s.JobID = j.JobID
LEFT JOIN _Open o
ON s.JobID = o.JobID
AND s.ListID = o.ListID
AND s.BatchID = o.BatchID
AND s.SubscriberID = o.SubscriberID
AND o.IsUnique = 1
WHERE s.EventDate >= DATEADD(day, -30, GETDATE())
AND o.SubscriberID IS NULL
Suggested target data extension fields:
| Field | Type | Length | Primary key |
|---|---|---|---|
SubscriberKey |
Text | 254 | No |
SubscriberID |
Number | No | |
JobID |
Number | No | |
EmailName |
Text | 200 | No |
SentDate |
Date | No |
Use this result for analysis, not as the only suppression rule. Open events can be affected by image loading behavior and privacy controls. In a production lifecycle program, combine opens with clicks, conversions, preferences, and consent rules before suppressing subscribers.
Example 2: query subscriber data view status
This subscriber data view query returns contacts whose All Subscribers status is not Active. Use it for QA before a send or for a daily exception report.
SELECT
SubscriberKey,
SubscriberID,
EmailAddress,
Status,
DateUnsubscribed
FROM _Subscribers
WHERE Status IN ('Unsubscribed', 'Held', 'Bounced')
For a target data extension, set SubscriberKey to Text 254, EmailAddress to EmailAddress or Text 254, Status to Text 50, and DateUnsubscribed to Date. Use Overwrite for a daily exception list unless you intentionally need a history table.
Example 3: report bounces by Journey Builder activity
This query joins send, bounce, and journey activity data. It helps operations teams identify which journey email is generating delivery failures.
SELECT
s.SubscriberKey,
s.JobID,
j.JourneyName,
ja.ActivityName,
b.EventDate AS BounceDate,
b.BounceCategory,
b.BounceType,
b.SMTPBounceReason
FROM _Bounce b
INNER JOIN _Sent s
ON b.JobID = s.JobID
AND b.ListID = s.ListID
AND b.BatchID = s.BatchID
AND b.SubscriberID = s.SubscriberID
LEFT JOIN _JourneyActivity ja
ON s.TriggererSendDefinitionObjectID = ja.JourneyActivityObjectID
LEFT JOIN _Journey j
ON ja.VersionID = j.VersionID
WHERE b.EventDate >= DATEADD(day, -7, GETDATE())
Keep SMTPBounceReason as a long Text field in the target data extension. Bounce responses can contain diagnostic text from the receiving mail server.
Example 4: summarize unique clicks by URL
This query uses _Click to create a small report table for custom dashboards.
SELECT
URL,
LinkName,
COUNT(*) AS UniqueClickCount,
MAX(EventDate) AS LastClickDate
FROM _Click
WHERE IsUnique = 1
AND EventDate >= DATEADD(day, -14, GETDATE())
GROUP BY
URL,
LinkName
Use this as a summary table instead of pushing raw click rows into every dashboard. It reduces query volume and gives analysts a stable table for custom visualizations.
Best practices for data view query performance
A data view query can fail, timeout, or write duplicate rows when it scans too much data or uses a weak key. Salesforce Help advises narrowing SQL scope, segmenting large queries, and limiting requests to the supported data window. Use these patterns in production:
- Filter by EventDate. Add a rolling date window such as
EventDate >= DATEADD(day, -7, GETDATE())unless you truly need the full available range. - Select only required fields. Avoid
SELECT *. Target data extensions should contain fields that downstream users need. - Join on the event key set. Use
JobID,ListID,BatchID, andSubscriberIDwhen joining send, open, click, bounce, and unsubscribe views. - Use summaries for dashboards. Aggregate clicks, opens, and sends before handing data to a reporting layer.
- Choose the right data action. Use Overwrite for snapshots, Update for keyed current-state tables, and Append for event history with dedupe controls.
- Split large workloads. Break a year-end reporting request into smaller jobs by date, business unit, job, or journey instead of building one large query.
Marketing Cloud Engagement SQL Query Activities are not Salesforce Core SOQL and do not use Apex governor limits. The relevant constraints are Marketing Cloud query limits, SQL activity processing limits, target data extension design, and data retention. No Salesforce Core API version applies to these SQL examples.
Common errors with data view SQL
Most failures come from field mismatches, unsupported assumptions, or weak joins. Check these issues before opening a support case.
| Error or symptom | Likely cause | How to fix it |
|---|---|---|
| “Object does not exist” or validation fails | The view or data extension name is misspelled, or the user cannot access it in the business unit. | Confirm the underscore-prefixed view name and validate from the same business unit where the automation runs. |
| Primary key violation | The query returns multiple rows for the same target primary key. | Group the result, add a composite key strategy, or switch to Overwrite when history is not needed. |
| More rows than expected | The join uses only SubscriberKey or JobID. |
Join event views using JobID, ListID, BatchID, and SubscriberID. |
| No rows for older campaigns | The requested events are outside the data view retention window. | Export engagement data on a schedule if the business requires longer history. |
| Query runs too long | The query scans too much data, joins too many large sources, or writes too many rows. | Add date filters, write summary rows, and split the workload into smaller automations. |
How to use data view results for reporting and segmentation
A data view should rarely be the final reporting layer. Query it into a controlled data extension first, then build segmentation, exports, or dashboards from that curated table. This makes the process repeatable and gives admins a place to apply naming, retention, and access rules.
Common production patterns include:
- Deliverability exception list: Daily query of bounces, complaints, and held subscribers for the operations team.
- Journey QA report: Hourly query of recent sends by journey activity to confirm the expected email activity fired.
- Engagement rollup: Daily summary by email, journey, URL, or campaign for analytics.
- Inactive subscriber review: Monthly audience table combining send, click, open, preference, and purchase signals.
- Compliance export: Scheduled export of row-level engagement data to an approved external repository when policy requires longer history than the SQL view provides.
For visual dashboards, avoid connecting reports directly to raw event output when the send volume is high. Build a summary data extension first. Then connect the reporting tool to the summary. That design usually gives better refresh behavior and reduces query maintenance.
Marketing cloud data analysis capabilities custom visualizations query options
The query marketing cloud data analysis capabilities custom visualizations query options points to a common requirement: teams want more than the built-in Tracking screens. Marketing Cloud Engagement gives several options. SQL Query Activities can prepare clean reporting tables from a data view. Automation Studio exports can move files to external storage. Data Cloud and analytics tools can support longer analysis flows when the organization has licensed and implemented them. Choose the option based on retention, row volume, privacy requirements, and who owns the dashboard.
Security and governance for Marketing Cloud data views
System data views can expose subscriber-level behavior. Treat the resulting data extensions as governed datasets, not temporary scratch tables. At minimum:
- Store only the fields needed for the use case.
- Set a data retention policy on target data extensions when the result does not need to live forever.
- Limit who can create, edit, and run SQL Query Activities in Automation Studio.
- Avoid placing raw engagement exports in shared folders without a business owner.
- Document the source views, filters, target data extension, and data action for every scheduled automation.
In enterprise orgs, governance matters because a reporting automation can become a shadow data pipeline. Assign an owner, review query output after release changes, and monitor failures. Marketing Cloud Engagement SQL is generally available functionality, not a Beta or Pilot feature, but org configuration and permissions can still change the implementation details.
Data view implementation checklist
Use this checklist before moving a data view query into production:
- Confirm the official Salesforce Help page for each system view and field used.
- Define the business question in one sentence.
- Create the target data extension with correct field types and lengths.
- Add a date filter unless the use case requires all available rows.
- Use full event join keys for engagement data.
- Validate SQL syntax in Automation Studio.
- Run the query in a test folder or non-critical target first.
- Compare row counts with Tracking or a known send job.
- Choose Overwrite, Update, or Append intentionally.
- Document retention and access rules for the target data extension.
Official Salesforce documentation for data view work
Use these Salesforce sources when building or reviewing a data view implementation:
- Salesforce Help: Data Views
- Trailhead: Query Data with SQL
- Trailhead: Run SQL Queries in Automation Studio
- Salesforce Help: Build a SQL Query Activity
- Salesforce Help: SQL Reference
Related SalesforceTutorial resources: Salesforce Marketing Cloud guide, Salesforce Data Cloud overview, Salesforce reports and dashboards, and Salesforce Data Loader tutorial.
Frequently Asked Questions
What is a data view in Salesforce Marketing Cloud?
A data view is a Salesforce-managed system table in Marketing Cloud Engagement that you query with SQL in Automation Studio. It stores system and engagement data such as sends, opens, clicks, bounces, journeys, and subscriber status, depending on the specific view.
Can I edit a Marketing Cloud data view?
No. A Marketing Cloud data view is read-only. You query it and write the result into a target data extension. If you need to change data, change the appropriate subscriber record, data extension, or source system instead of trying to update the system view.
How long does Marketing Cloud keep data view records?
Salesforce Help describes Marketing Cloud Engagement data views as query sources for up to six months of subscriber and journey information. Separate Marketing Cloud Engagement retention policies can apply to reports, tracking, APIs, or exports, so confirm the specific Salesforce Help page for your source before designing an archive process.
What is the subscriber data view used for?
The subscriber data view, _Subscribers, is used to query subscriber ID, subscriber key, email address, and subscriber status. Use it for QA reports, unsubscribe checks, held subscriber reviews, and joins where you need All Subscribers status.
Why does my data view query return duplicate rows?
Duplicate rows usually appear because the SQL join is not specific enough or because the target data extension primary key does not match the result grain. For send, open, click, bounce, and unsubscribe joins, use the event keys JobID, ListID, BatchID, and SubscriberID where those fields are available.
Are Marketing Cloud data views the same as data extensions?
No. Data extensions are user-managed tables that store your business data or query results. Marketing Cloud data views are Salesforce-managed system sources that expose tracking, subscriber, automation, and journey data for SQL querying.