Skip to main content
추천 그룹

* Marketing Cloud Engagement *

Welcome! This group is dedicated to your success with Salesforce Marketing Cloud Engagement. Join the conversation here to stay up to date on the product, learn best practices, and everything in between. Use this group to review resources, ask questions, help each other, and share experiences. --------------------------------------- This group is maintained and moderated by Salesforce employees. The content received in this group falls under the official Forward-Looking Statement: http://investor.salesforce.com/about-us/investor/forward-looking-statements/default.aspx

We are sending an email to participants from our recent job hiring fair. In that email, I'd like to include a "forward to a friend" link so participants can share with a friend who they think may be a good fit to work for us.  

 

I'd like to create a journey by sending an email to the friend introducing us and including a link to our job board. Is this possible to do?

답변 1개
  1. 어제 오전 2:58

    It is possible to create a journey for this scenario, but you cannot use the standard Marketing Cloud "Forward to a Friend" native feature to automatically inject the referred friend into a brand-new Journey. Because standard FTAF forwards an email on behalf of the subscriber via an encrypted link without capturing the friend's explicit opt-in data or creating a new contact record in your database, it won't natively trigger a separate automated journey.

     

    To achieve this cleanly, you have two primary options. You can build a CloudPage with a smart web form where participants can enter their friend's name and email address, configuring the form submission to write directly to a Data Extension that acts as the entry source for your new hire-introduction journey. Alternatively, you can use personalized referral links within your initial email containing query parameters, directing the friend to a landing page where they opt in and submit their details.

     

    Verify success by submitting a test record through your form or link and checking that the new contact successfully enters the journey and receives the introduction email.

0/9000

{} MCE SQL Reference doesn't mention JSON at all. @* Marketing Cloud Engagement * SQL reads, changes and builds it anyway. Learn how: https://mateuszdabrowski.pl/docs/salesforce/marketing-cloud-engagement/sql/sql-json-functions/

 

API payloads, CloudPages submissions and product feeds land in your Data Extensions as JSON. Most of us reach for SSJS to read them and fight against performance, but a Query Activity can do much of that work itself, with a few traps along the way: 

 

🔵 It builds JSON, too.

Despite documentation, the silently updated SQL Server behind MCE supports 2022 feature set: JSON_OBJECT, JSON_ARRAY and JSON_PATH_EXISTS. FOR JSON PATH turns each subscriber's abandoned cart into one field your email can loop over. 

 

🟠 Reading has a limit.

JSON_VALUE returns NULL for any value over 4000 characters. 4000 works, 4001 doesn't, and there's no error. OPENJSON would lift the limit, but the MCE syntax validation treats it as a Data Extension name (sic!). 

 

🔴 Broken JSON stops everything.

One truncated payload fails the whole Query Activity, and the Action Log says only "Automation failed due to system error." Wrap your reads in ISJSON, and the broken records return NULL instead. 

 

Every output in the article comes from a live test in my Query Studio replacement - SQL Studio - which just got version 1.2: save results straight to a new Data Extension, share snippets across your Business Unit and add a JOIN to your query in one click.

 

More to come, so keep on querying!

0/9000
답변 2개
  1. 10월 8일 오전 9:01

    Hi @Dawn Albright,

    The one reply so far, joining the _Sent data view with DateDiff > 7, is backwards. That filter keeps anyone who was sent something more than 7 days ago, including people who were also sent something yesterday. You want to exclude anyone with a send in the last 7 days. 

    Suppression query (most common approach) 

     

    Run this in Automation Studio and write the result to a "sendable" Data Extension: 

    SELECT s.SubscriberKey, s.EmailAddressFROM [YourSourceDE] sWHERE NOT EXISTS (    SELECT 1    FROM _Sent snt    WHERE snt.SubscriberKey = s.SubscriberKey      AND snt.EventDate >= DATEADD(day, -7, GETDATE()))

     

    • The send timestamp column in _Sent is EventDate.
    • Send to the output DE, not the original list.
    • For a "no more than one email per 7 days" rule, run this query immediately before each send in the same automation. Otherwise the exclusion goes stale.

    Alternatives

     

    • Journey Builder: use the same query as the entry source DE, or add a Decision Split on a "last sent date" field that you keep updated.
    • Exclusion lists or scripts: these suit a standing "never email these people" rule better than a rolling 7-day window.
    • Different lists on different schedules: build one master suppression DE that every send's query checks, instead of coordinating each list separately.

    Things to verify, since I haven't checked them against your account

     

    • _Sent only reflects sends in the Business Unit where the query runs. If the two lists send from different BUs, you'd need shared data extensions or a query at the parent level.
    • Large _Sent volumes can make this query slow, so keep the date filter in place.
    • Sends from outside Marketing Cloud (for example CRM-triggered emails) won't appear in _Sent.

     I hope you find the above information helpful. If it does, please mark it as Best Answer to help others too.

0/9000

We’re happy to share Winter ‘27 Release resources! 🩵 

 

 

🚨 BONUS: Get ready for FeatureFest at Dreamforce! 🚨 Discover what’s new in the Winter ’27 release, get personalized feature recommendations, connect with experts, earn exclusive swag, and leave ready to get more from Salesforce – all in one exciting Dreamforce experience. Stay tuned – we’ll share more details next week!

 

Release Matrix can be found here: https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000pPZmY0AW

 

Overview deck can be found here: https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000jASjE0AW

댓글 33개
0/9000

📲 Added the most requested article - @* Marketing Cloud Engagement * MobilePush Data Views (and the other sources for Push analytics): https://mateuszdabrowski.pl/docs/salesforce/marketing-cloud-engagement/config/mobile-push-data-views/

 

Inside, you can find everything you can expect based on my Email and SMS Data Views articles (the latter also updated with SMS Send Log details): 

🔵 Undocumented _PushAddress and _PushTag fields, picklists, SQL query and hints 

🟠 Explanation of how Push data differs from Email and SMS data 

🔴 How to get the missing Send and Engagement data (along with hard blockers that only Salesforce can fix) 

 

More MCE Data & SQL fun coming soon :)

댓글 1개
  1. 10월 7일 오전 8:17

    Brilliant addition! MobilePush Data Views are definitely one of the trickier areas in MCE. Thanks for documenting this so clearly! 

0/9000

Hi everyone,

With the ongoing enforcement of strict Multi-Factor Authentication (MFA) and identity verification standards across Salesforce platforms (such as those outlined in Salesforce Help Article 005321561), how should teams properly configure automated service accounts or headless integrations for Salesforce Marketing Cloud Engagement?

 

  1. Given these evolving compliance and security enforcement guidelines, what is currently considered the best practice approach for non-interactive service/integration accounts in SFMC?
  2. Are Server-to-Server (Client Credentials / JWT) flows via Installed Packages completely immune to these UI-based MFA/identity verification restrictions, or are there additional security configurations (like API-only user mappings or specific Connected App OAuth policies) we need to adopt to avoid pipeline disruptions?

Thanks!

답변 1개
  1. 10월 6일 오전 5:45

    Yes, server-to-server Installed Packages are the recommended pattern for headless integrations and they are not subject to the interactive MFA prompts, since they authenticate with OAuth client credentials instead of a username and password. Give each integration its own installed package with only the scopes it needs, and store and rotate the client secrets securely. One thing to watch: keep an eye on the token endpoint responses in your pipelines, because an expired or revoked package shows up as an auth error, not an MFA prompt, and that is what usually breaks pipelines.

0/9000

I'm trying to extract all MobilePush Opt-In contacts from SFMC.

This query works:

 

SQL

SELECT

 _ContactID AS ContactID,

 _DeviceID AS DeviceID,

 _Platform AS Platform,

 _OptInStatusID AS OptInStatusID

FROM _PushAddress

WHERE _OptInStatusID = 2 

 

However, _PushAddress only exposes ContactID.

 

In Contact Builder > All Contacts > Mobile Opt-In I can see both:

ContactKey

DeviceID

 

Using the same DeviceID in _PushAddress, I can retrieve:

ContactID

DeviceID

 

So SFMC clearly knows: ContactKey <-> DeviceID <-> ContactID

 

I've already tried:

SQL

_PushAddress._ContactID = _Subscribers.SubscriberID

``

SQL

_PushAddress -> _MobileAddress -> _SMSSubscriptionLog

and all joins return 0 rows.

 

Is there any SQL-accessible Data View that maps MobilePush ContactID to ContactKey / SubscriberKey? Or has anyone successfully extracted all MobilePush Opt-In ContactKeys via SQL?

답변 2개
  1. 10월 4일 오후 3:18

    Yes — the key point is that there is no supported SQL Data View that directly exposes the MobilePush ContactID → ContactKey mapping.

    _PushAddress is essentially a device-level Data View. It gives you _ContactID, _DeviceID, _APID, opt-in status, etc., but not ContactKey. Salesforce has an IdeaExchange request specifically asking for ContactKey to be added to _PushAddress, which confirms this limitation. 

    Also, _Subscribers is not a reliable solution. It represents the email subscriber population, so Push-only contacts may not exist there. That's why a join such as:

    SELECT ...

    FROM _PushAddress p

    INNER JOIN _Subscribers s

    ON p._ContactID = s.SubscriberID

    WHERE p._OptInStatusID = 2

    can return zero rows even though the Contact exists in Contact Builder. 

    What you can do with SQL

    You can identify the opted-in Push devices:

    SELECT

    _ContactID AS ContactID,

    _DeviceID AS DeviceID,

    _APID AS APID,

    _Platform AS Platform,

    _OptInStatusID AS OptInStatusID

    FROM _PushAddress

    WHERE _OptInStatusID = 2

    AND _Status = 1

    If you have multiple MobilePush applications, I would also filter by _APID, because opt-in status is application/device specific. _PushAddress contains device-level records rather than one row per person. 

    How to get ContactKey

    If you absolutely need:

    ContactID → ContactKey

    then SQL against the standard Data Views isn't the right mechanism.

    The better option is the Marketing Cloud Contacts REST API, which can return both contactID and contactKey for an address. Salesforce's API documentation explicitly exposes both fields for contact addresses and identifies Push as address type 9. 

    So the architecture would be:

    _PushAddress

    ↓

    ContactID + DeviceID + OptInStatus

    ↓

    Contacts REST API

    ↓

    ContactID → ContactKey

    Then write the result into a Data Extension if you need to use it repeatedly in Automation Studio/Journey Builder.

    One important distinction

    Don't assume:

    ContactID = ContactKey

    They are different identifiers. ContactID is the system-generated identifier, while ContactKey/SubscriberKey is the business identifier used to aggregate a contact's devices. Salesforce's MobilePush documentation explicitly describes Contact Key as the identifier used to aggregate a contact's devices. 

    Bottom line: Your SQL is working correctly. The missing ContactKey isn't because your join is wrong; SFMC doesn't expose the MobilePush ContactID-to-ContactKey relationship through a standard SQL-accessible Data View.

    For a complete Push-only population, use the Contacts API (or maintain your own mapping DE from the point where the MobilePush registration/contact key is known). 

     

    Carlota Brejo - if you need any help.. please ping me directly.

0/9000

*** Important Security Update: Enforcement of IP Allowlisting in Marketing Cloud Engagement on September 23, 2026 ****** Important Security Update: Enforcement of IP Allowlisting in Marketing Cloud Engagement on September 23, 2026 ***As part of our commitment to strengthening the default security of the Marketing ClAs part of our commitment to strengthening the default security of the Marketing Cloud Engagement platform, Salesforce is requiring the use of the login IP allowlist in blocking mode for all accounts. We have identified that your instance doesn't use the login IP allowlist in blocking mode. On September 23, 2026, we will enable it on your behalf.

 

Next Steps & Timeline

To help minimize potential disruption, we reviewed your recent login activity and compiled a list of recommended baseline IP addresses to include on your login IP allowlist. On September 23, 2026, we will enable blocking mode for your instance. After this date, users can log in to your Marketing Cloud Engagement account from an IP address on the allowlist.

 

Configuration Impact and Customer Responsibility

No action is required before September 23, 2026. To ensure your configuration is applied correctly, we recommend waiting until after September 23, 2026, before making any changes to your login IP allowlist settings. If you have any concerns, contact Salesforce Support.

 

After September 23, 2026, you are responsible for reviewing and maintaining your login IP allowlist. Monitor your login IP allowlist access logs on an ongoing basis to identify new IP ranges to add.  See View the Access Log, Add IP Addresses to the Allowlist, and Edit an IP Range.

 

When we enable blocking mode in your account, you can expect these changes:

  • We will apply a Salesforce-recommended baseline IP list consisting of standard /24 (256 address) IP ranges. These ranges are based on IPs observed to successfully authenticate to your instance over the last six months, excluding known malicious IPs.
  • "Log Violations and Deny Access" (blocking) mode will be enabled at the EID level for both UI Login and API access, with the IP ranges uniformly applied to all Business Units (BUs).

Resources

#Marketing Cloud Engagement #Marketing Cloud

 

 

댓글 13개
  1. 10월 1일 오후 1:46

    IP Allowlisting would continue in cohort wise manner, with final enforcement in January. Customers will be notified via email when an enforcement date has been set for their instance to enable blocking mode.

0/9000

Hi All,

Hope you are doing well.

Could you please help with the below requirement? 

 

Requirement:-

 

 We have multiple campaigns where the audience is segmented into:

  • Control Group (does not receive email/SMS)
  • Non-Control Group (receives email/SMS)

Currently, only the Non-Control Group data is updated in the Send Log, while the Control Group data is not. However, the client requires that Control Group data also be captured in the Send Log.

In the Journey, we are using a Random Split to divide the audience into 90% Non-Control Group and 10% Control Group. At the same time, we are updating the source data by marking the ControlGroup field as true

 using an Update Contact activity. 

 

Ask: 

We need a way to include Control Group data in the Send Log Data Extension across all campaigns.

 

Thanks, 

 VNR

답변 2개
  1. 9월 30일 오전 6:33

    @Nagaraju Vadlamudi

    Sendlog DE will only show or add records when a send has occurred. 

    It is not recommended to update Sendlog DE in any other way. (i.e. using SQL, import etc) 

    As you already have the ControlGroup "true" in the source DE, you can apply a filter and run it via automation to review the Control Group audience.  

    Additionally, as you have highlighted that you are using "Random Split" in Journey for 10% control group exclusion, I assume that the number of records being processed is >1000, otherwise Random Split may work unexpectedly. See this article for better understanding -

    https://help.salesforce.com/s/articleView?id=000386619&type=1

0/9000
답변 3개
  1. 9월 29일 오전 5:26

    Hi @Ajith M S

     

    Most of these are read-only helpers that sit on top of the SFMC UI, so they're low-risk to try. 

    Navigation and discovery 

    • SFMC Companion lets you click through Automations, Queries, Data Extensions and more to see where they're saved and what uses them. For example, clicking a Data Extension shows which Queries target it and which reference it in their code. It's the most useful one for untangling an unfamiliar account. Chrome Web Store
    • DESelect Search in SFMC is a free extension for finding things that native search handles poorly. Native search only scans one selected folder at a time. It can search across business units or just your current one. The listing carries a note that because of recent Google security updates, it only works if the AppExchange version is already installed, so check that before relying on it. DESelect Search in Salesforce Marketing Cloud - Chrome Web Store +2
    • SFMC Scout (recommended in the Trailblazer thread) gives you a side-panel search across Data Extensions, Automations, Journeys, Emails and Content Builder assets.

    Development and debugging

     

     

    • SFMC Inspector (from the thread) covers Data Extension exploration, automation-to-DE mapping, Journey discovery and SQL linting.
    • SFMC Dev Studio (from the thread) adds AMPscript/SSJS syntax highlighting, linting, snippets and function references.
    • SFMC IntelliType offers AI-powered code completions, snippet management, and contextual assistance for AMPscript, SSJS and SQL. It also includes Data Extension tools for finding and opening a Data Extension quickly without any API configuration. Chrome Web Store Chrome Web Store
    • Marketing Cloud  Developer Tools is a DevTools panel. Its features include exposing Publication List IDs and Journey Builder activity keys, showing Data Extension and Journey details, and surfacing more detailed error messages. One reviewer said it doesn't work in their org and another said it's hard to read in dark mode, so test it in your own account. Extpose

    Journey Builder and day-to-day admin

     

     

    • MCX (Marketing Cloud eXtension) covers a lot. It can compare Journey versions and Data Extension configurations side by side, map object relationships visually, and send push notifications directly from Journey Builder. Chrome Web Store
    • SFMC Automation Viewer lets you view automation details without pausing active automations. That's handy for checking a live automation. Chrome Web Store
    • There's also a Journey Builder email-preview extension that sends previews for every email in a journey at once. I only saw it in Chrome Web Store related-listing snippets, so I don't have its exact name.

    Things to check before rolling these out

     

     

    • Some of these are small third-party tools, and they act with your logged-in SFMC session. Companion notes it's limited by the Marketing Cloud user's roles and permissions, but check each one's requested permissions and privacy disclosures. That matters most on client or production accounts, where you should get sign-off first. Chrome Web Store
    • Several of these overlap (Companion, Scout and DESelect all do search), so one or two are usually enough.
    • Some listings are old, so confirm each is still maintained before depending on it.
    • For serious AMPscript/SSJS work, the Trailblazer answer also suggests Salesforce's AMPscript extension for VS Code. That gives you local development instead of coding in the browser.

     I hope you find the above information helpful. If it does, please mark it as Best Answer to help others too.

0/9000