API & Integration Archives - The Spot https://thespotforpardot.com/category/new-features/api-integration/ A home for marketers on Salesforce to shape the future together Mon, 19 Feb 2024 14:33:59 +0000 en-US hourly 1 https://wordpress.org/?v=6.7.1 https://thespotforpardot.com/wp-content/uploads/2021/12/circle-150x150.png API & Integration Archives - The Spot https://thespotforpardot.com/category/new-features/api-integration/ 32 32 238606145 Must-Have Salesforce Marketing Cloud Extensions, Apps, and Add-Ons https://thespotforpardot.com/2023/11/22/must-have-salesforce-marketing-cloud-extensions-apps-and-add-ons/ https://thespotforpardot.com/2023/11/22/must-have-salesforce-marketing-cloud-extensions-apps-and-add-ons/#respond Wed, 22 Nov 2023 14:58:38 +0000 https://thespotforpardot.com/?p=7032

Marketing Cloud Engagement is a great tool and it offers a wide range of functionality and various capabilities. But, as with all software, there are always limitations that leave you wanting more. That’s where Marketing Cloud extensions become essential. Thanks to the strong Salesforce ecosystem, the openness of the platform, and the love it receives […]

The post Must-Have Salesforce Marketing Cloud Extensions, Apps, and Add-Ons appeared first on The Spot.

]]>

Marketing Cloud Engagement is a great tool and it offers a wide range of functionality and various capabilities. But, as with all software, there are always limitations that leave you wanting more. That’s where Marketing Cloud extensions become essential.

Thanks to the strong Salesforce ecosystem, the openness of the platform, and the love it receives from its customers, users, and enthusiasts, there are so many extensions, apps, and add-ons that can help enhance your Marketing Cloud experience.

Listed below are some of my favorites from my seven years of working with Salesforce Marketing Cloud (SFMC).

Top Marketing Cloud Extensions

SFMC Companion

This Chrome Extension is a fond favorite of mine and it is particularly useful for those “busy” Marketing Cloud accounts and for anyone who spends hours down rabbit holes trying to understand whether a particular Data Extension is still being used, or is even still relevant.

SFMC Companion offers a useful search functionality that allows you to look for any asset or object using a free-text search field. Furthermore, whilst on any SFMC asset or object, the ‘Inspect’ tool will show all components referencing or using that particular asset or object.

Thanks to SFMC Companion there is no longer a need to have several tabs open simultaneously just to understand whether a Data Extension can be deleted. 

Evergage Launcher

This might technically be cheating as it’s practically a necessity for implementing Marketing Cloud Personalization but I’ve always enjoyed using it.

This extension helps identify whether the Marketing Cloud Personalization (MCP) SDK has been added to the website, so you no longer need to pester your IT team, and it is also where you can launch the Visual Editor. 

The Visual Editor is by far the easiest way to build your JS Sitemap, which is a huge part of any MCP implementation. Users also have the ability to see their work whilst on the page – this comes in handy when creating personalization campaigns, another feature accessible via the Evergage Launcher. 

Salesforce Inspector

Whilst this is not specifically related to SFMC, it is worth installing. Most SFMC accounts use Salesforce CRM data (it’s very rare not to have Marketing Cloud Connect).

Therefore, with such a reliance on Core Salesforce data, this extension can save you a lot of time. If you quickly need to check the API field names or the field type, or even example values, Salesforce Inspector is your tool.

Furthermore, Salesforce Inspector lets you easily import and export data which is incredibly useful if you need to prepare test data for UAT.

Top Marketing Cloud Apps

It’s worth mentioning that for the following section, I’ve loosely used the term “Apps” as it covers everything from App Exchange products to Mobile Apps.

Query Studio

Perhaps one of Marketing Cloud’s best-kept secrets, but Query Studio is an incredibly useful app to add to your SFMC instance. If you’ve ever wanted to test your SQL skills without having to create an automation, then this might be for you.

Query Studio allows you to quickly build queries in the Marketing Cloud without needing to create and configure an automation. Once you’re happy with your selection, Query Studio can use your query to create Data Extensions automatically.

Marketing Cloud Mobile App

Ever needed to quickly track email performance or to check that you definitely paused that Journey, but you don’t have access to your laptop? The Marketing Cloud Mobile App might just be able to help.

However, whilst it’s useful to have instant access to your SFMC account with just your phone, it is worth pointing out that there are some SFMC features that are not available in the mobile App, so don’t throw away the laptop just yet.

You can find the app in both the Google Play Store and Apple Store.

SiteCore

Technically two for the price of one as there is both a Web CMS app and a DAM app but they’ll both help bolster your SFMC instance with the world-leading CMS. Although, it is probably worth pointing out that these apps are far from cheap.

If, however, you’re lucky enough to have one of these licenses, you can drag-and-drop approved SiteCore assets directly from the SFMC Email Editor. Alternatively, you can send contact data and behavior back to your Sitecore Experience Database to close the loop on asset performance.

DESelect Segment

Full disclosure, I’ve never had the pleasure of working with this particular app but I had to include it as it solves, what I think, is one of the biggest issues SFMC clients face when procuring SFMC… segmentation. DESelect brings drag-and-drop segmentation to Marketing Cloud and reduces the need for marketing teams to have SQL knowledge.

Again, it’s worth pointing out that whilst there is a free version available you will have to pay to increase usage, users and features (i.e., saturation control and deduplication). However, depending on your team’s skillset this app could well be worth considering.

Bonus Content

If the technical skills aren’t your team’s forte and AMPscript is constantly causing you trouble, check out ampscript.io, a useful tool that helps validate AMPscript code and highlights any AMPscript that may result in potential syntax errors.

Get more details about AMPscript in this blog post from Kayla Border.

Top Marketing Cloud Add-Ons

SalesWings

Ever needed Lead Scoring in SFMC? Say hello to SalesWings! This add-on is easy to install and is a highly cost-effective way of plugging the SFMC Lead Scoring hole.

SalesWings tracks website activity and couples it with data from CRM before scoring and grading customers using a flexible scoring model. SalesWings data can be shared with Salesforce CRM as well as used in future SFMC segmentation.

Litmus

If you’re lucky enough to have both a Litmus and SFMC account, then you should definitely consider integrating the two. Yes, SFMC allows you to preview emails, but with an integrated Litmus account, you get so much more.

With an integrated account you can sync emails from the Litmus builder to SFMC or build in SFMC and test as you go. You can test dynamic content and individual personalization with the integrated email previews and, perhaps most impressively, share email performance with Litmus to create a single view of performance.

Use Marketing Cloud extensions to make the most of the platform

Going back to my previous comment, all software products have their limitations, but it is Salesforce’s ecosystem that has encouraged enthusiasts to build upon its offerings which, as shown above, has led to some innovative solutions that could give your SFMC instance that much-needed capability boost.

So if you’ve been contemplating if the grass is greener on the other side it could be worth exploring the depths of the Salesforce Community — chances are there is already a solution to your problem out there.

Original article: Must-Have Salesforce Marketing Cloud Extensions, Apps, and Add-Ons

©2025 The Spot. All Rights Reserved.

The post Must-Have Salesforce Marketing Cloud Extensions, Apps, and Add-Ons appeared first on The Spot.

]]>
https://thespotforpardot.com/2023/11/22/must-have-salesforce-marketing-cloud-extensions-apps-and-add-ons/feed/ 0 7032
Campaign Audience Builder: A Solution to Harness your Salesforce Data Now https://thespotforpardot.com/2023/06/29/campaign-audience-builder-a-solution-to-harness-your-salesforce-data-now/ https://thespotforpardot.com/2023/06/29/campaign-audience-builder-a-solution-to-harness-your-salesforce-data-now/#respond Thu, 29 Jun 2023 17:38:06 +0000 https://thespotforpardot.com/?p=6747

Before the advent of Data Cloud and Customer Data Platforms (CDPs), businesses strived to integrate their data into their CRM to obtain a holistic view. If you’re considering another expansive platform, there’s an excellent interim solution to consider: the Campaign Audience Builder (CAB). Where to get Campaign Audience Builder The Campaign Audience Builder is a […]

The post Campaign Audience Builder: A Solution to Harness your Salesforce Data Now appeared first on The Spot.

]]>

Before the advent of Data Cloud and Customer Data Platforms (CDPs), businesses strived to integrate their data into their CRM to obtain a holistic view. If you’re considering another expansive platform, there’s an excellent interim solution to consider: the Campaign Audience Builder (CAB).

Where to get Campaign Audience Builder

The Campaign Audience Builder is a package on the Salesforce AppExchange developed by Lightblaze. Known for its user-friendly interface, CAB allows you to create audience segments using your Salesforce data, making it an efficient substitute or preliminary step towards a full-scale CDP solution.

Campaign Audience Builder Ease of Use

Campaign Audience Builder has a simple point-and-click interface that allows you to navigate and filter data related to the people you are trying to add to an audience.  It simply gets installed alongside your data and has a very short implementation time (I was up and running in 10 minutes).

Once installed, it really is a 3-step process of getting your first audience created and usable:

  1. Define the Criteria: as a techie myself, this was really the fun part. Connecting data and filtering the right records feels natural and familiar.
  2. Generate the Audience: This is basically running the process based on all the work you did in the previous step to see who matches. As always, it’s a great idea to spot-check that some people you expected to appear were successfully matched!
  3. Populate the Campaign: you have your list of people, it is time to put them somewhere that you can act on. This is when you choose which Campaign to use, how often the audience should be evaluated, and if people should be removed should they no longer meet your criteria.

Unlike CDPs and other types of data platforms, which require accommodating complex data relationships and aren’t always user-friendly, CAB offers a seamless alternative.

Advanced Segmentation Features in Campaign Audience Builder

Looking for Contacts that have Closed Won Opportunities with Products in a certain Product Family? Yep, Campaign Audience Builder can do that. 

Do you also want to ensure those same people don’t have a Case?  Yep, you can do that too. 

While not unlimited in its power, there’s no data scenario that you cannot segment with CAB (compared to report builder or segmentation in Account Engagement).

CAB allows you to select either a Lead or Contact as your audience driver and connect it with any related object. After defining your audience, you can populate a Campaign by creating CampaignMember records. CAB also provides controls on how frequently your audience should be evaluated and whether it should clean records that no longer meet your criteria.

With your audience defined, you can now use that information to populate a Campaign by creating CampaignMember records. You have some controls on how often CAB should be building your audience and if it should clean CampaignMember records that no longer meet the criteria.

Integration and Data Security

CAB stands out with its ability to directly publish the audience into Account Engagement (Pardot) into a static list. This feature eliminates the need to clumsily attach data to the Lead/Contact records for list population.

A key feature of CDPs is the ability to “act” on the new audience that you’ve created in downstream systems. While CAB doesn’t really integrate with a bunch of other third-party tools, it can call APEX/Flows (where you can do almost anything integration-wise).

Data security is paramount for Salesforce organizations. Moving data into other systems like data platforms or CDPs can potentially jeopardize these security controls. Since CAB operates within your Salesforce organization, it only accesses the data you can, thereby ensuring data security.

CAB may be the stepping stone you seek

In summary, the Campaign Audience Builder (CAB) offers a user-friendly, efficient, and secure way to handle your Salesforce data. It’s a practical stepping stone if you’re considering a more complex Customer Data Platform (CDP) solution. 

With its easy setup, advanced features, and commitment to data security, CAB is a smart choice for businesses looking to maximize their data management and audience segmentation without taking on a full CDP solution just yet.

Thinking about implementing CAB in your org? Contact the team at Sercante to learn more about the tool and how it will work with your overall technology strategy.

Original article: Campaign Audience Builder: A Solution to Harness your Salesforce Data Now

©2025 The Spot. All Rights Reserved.

The post Campaign Audience Builder: A Solution to Harness your Salesforce Data Now appeared first on The Spot.

]]>
https://thespotforpardot.com/2023/06/29/campaign-audience-builder-a-solution-to-harness-your-salesforce-data-now/feed/ 0 6747
How the Salesforce Integration User Saves Licenses for Real Humans https://thespotforpardot.com/2023/05/17/how-the-salesforce-integration-user-saves-licenses-for-real-humans/ https://thespotforpardot.com/2023/05/17/how-the-salesforce-integration-user-saves-licenses-for-real-humans/#respond Wed, 17 May 2023 16:28:43 +0000 https://thespotforpardot.com/?p=6676

Salesforce is introducing something pretty exciting for orgs that have little wiggle room while assigning licenses to Salesforce users. A new type of license called “Salesforce Integration User” is available now, and it’ll help you to save your user licenses for actual humans. The Salesforce Integration User was introduced to facilitate best practices of using […]

The post How the Salesforce Integration User Saves Licenses for Real Humans appeared first on The Spot.

]]>

Salesforce is introducing something pretty exciting for orgs that have little wiggle room while assigning licenses to Salesforce users. A new type of license called “Salesforce Integration User” is available now, and it’ll help you to save your user licenses for actual humans.

The Salesforce Integration User was introduced to facilitate best practices of using a separate license for any integrations that require an integration license to integrate with Salesforce. That includes integrations like Docusign and MuleSoft.

This license is specifically designed for System-to-System Integration types and provides the user with API Access Only.

How many Salesforce Integration User Licenses Do We Get?

All orgs will have 5 free Salesforce Integration User Licenses available to them, and additional licenses are available to purchase for about $10 each (customers should speak to their AEs regarding the purchase of additional licenses).

Salesforce Integration User License Setup

You can verify the number of integration user licenses available to you under Company Information > Setup.

In addition to the new licenses, a new standard profile called ‘Salesforce API Only System Integrations‘.

NOTE: When creating a new user with the Salesforce Integration User License, this will be the only profile available.

Creating a Custom Profile for the API Only System Integration User (System Permissions)

Since the new ‘Salesforce API Only System Integrations’ profile is a standard profile and therefore can’t be updated, it is recommended that you create a new profile by cloning the Salesforce API Only System Integrations (not System Administrator) for integration users in order to customize the permissions:

  1. Go to Setup > Profiles
  2. Locate the ‘Salesforce API Only System Integrations’ profile and click Clone.
  3. In the Permission set, go to System Permissions
  4. Enable the following permissions:
    • Password never expires – doing this prevents the password from expiring while someone is out of the office with no one available to update it across integrations
    • API Enabled
    • Api Only User
    • Chatter Internal User (optional)
  5. (Still under System Permissions) Make sure ‘Multi-Factor Authentication Login Requirements for API Access’ is not enabled

Create a Custom Permission Set for the Integration (Object Access)

  1. Go to Setup > (Quickfind) Permission Sets
  2. Create a new permission set
  3. Name your permission set to reflect the permission for this integration. For example “Integration – ZoomInfo”
  4. Leave the License Type empty “–None–”
  5. Add the following to the Object Settings for each object the integration needs access to:
    1. Object CRUD access (Create/Read/Update/Delete/View All/Modify All)
      • This example is for adding access to just the Account object to the Integration User.
    2. Field-level access (Read/Edit) for each field on the object
    3. Remember the principle of least privilege – we want to grant access only for the actions that the integration needs.
      • In particular, keep in mind custom record types that are deployed by integrations’ own packages

Creating an Integration User

To use one of these licenses, it is recommended to:

  • Create a new user for each specific integration (if there is not a dedicated license already)
  • Assign the Salesforce Integration license (or you can change the license or if you already have a dedicated user for the integration)
  • Give the user the Salesforce Integration API permission set license.
  • Add the custom permission set you created above.

Validate

Once your user is set up:

  • Add the new integration user credentials in the integration platform (the steps may vary based on the integration)
  • Test the integration to confirm the integration is working the way it should.
    • For example, are records being updated as expected?

Considerations

  • The Salesforce Integration user license is API Access Only, meaning that it is not suitable for non System to System integration uses. Users with this license will not have access to the direct user login or access the org through the UI.
  • With the new licenses, it is still recommended to use one integration user per integration to ensure traceability of the transactions that the integration has within Salesforce.
  • If you are moving an existing user to the integration user license, the new ‘Salesforce API Only System Integrations’ profile, may not have all the object permissions needed. Any specific permissions needed may need to be assigned using permission sets.
  • Pardot API users are usually better met with the Identity User License, but if there are reasons to use this license (Oath2 Client Credentials) the Integration Connector User permission set is what will need to be applied to grant Pardot record access. Users using this license may not appear in User Sync until after you manually create and connect a Pardot user.
  • A custom permission set granting object and field access is preferred over doing this in the profile as permissions in profiles is scheduled to be sunset Spring of ’26.

Additional Resources

Special thank you to Heather Rinke, Larry Harvey, and Mike Creuzer for contributing to this post.

Original article: How the Salesforce Integration User Saves Licenses for Real Humans

©2025 The Spot. All Rights Reserved.

The post How the Salesforce Integration User Saves Licenses for Real Humans appeared first on The Spot.

]]>
https://thespotforpardot.com/2023/05/17/how-the-salesforce-integration-user-saves-licenses-for-real-humans/feed/ 0 6676
MarDreamin’ 2022 Demo Jam Recap: Products to Extend Salesforce https://thespotforpardot.com/2022/11/09/mardreamin-2022-demo-jam-recap-products-to-extend-salesforce/ https://thespotforpardot.com/2022/11/09/mardreamin-2022-demo-jam-recap-products-to-extend-salesforce/#respond Wed, 09 Nov 2022 22:43:00 +0000 https://thespotforpardot.com/?p=5645

The final day of MarDreamin’ 2022 kicked off with the third-annual Demo Jam, which is like speed dating for SaaS/technology product solutions. Each participant shows the audience what there is to love about the products they’re selling, and then the audience votes to select a winner. MarDreamin’ is a Salesforce community conference for the marketer. […]

The post MarDreamin’ 2022 Demo Jam Recap: Products to Extend Salesforce appeared first on The Spot.

]]>

The final day of MarDreamin’ 2022 kicked off with the third-annual Demo Jam, which is like speed dating for SaaS/technology product solutions. Each participant shows the audience what there is to love about the products they’re selling, and then the audience votes to select a winner.

MarDreamin’ is a Salesforce community conference for the marketer. So, this Demo Jam’s focus was on products that play nice with Salesforce Marketing Cloud Engagement and Account Engagement (Pardot).

Each participant had three minutes to present their product demo. Then, demo jam attendees weighed in with their votes after all company representatives finished their presentations. We crowned the MarDreamin’ Demo Jam Champion at the end thanks to everyone’s votes.

2022 MarDreamin’ Demo Jam Winners

This year, we had a tie and named two MarDreamin’ Demo Jam winners. The two winners are Stensul and Sercante Labs. 

Both Sercante Labs and Stensul were neck-and-neck in the end, and the hosts had to call it a tie when a few last-minute votes left both companies with the same number of votes at the end.

MarDreamin’ Demo Jam rules

Each participant had 3 minutes to demo their product and wow the audience. Then at the end of the Demo Jam, the audience voted for their favorite product through an online poll.

2022 MarDreamin’ Demo Jam participants

Richard Feist and Angelica Cabral from Sercante shared Demo Jam hosting duties and provided welcome comic relief while giving away swag to attendees throughout the competition. 

Here’s who presented their products to compete for the best Salesforce Marketing Cloud-integrated  solution:

How the products from the Demo Jam can make your life easier

Each of the presentations at the MarDreamin’ Demo Jam included demonstrations of products that ease pain points for people who work in marketing roles and use Salesforce. 

Here’s a summary of each one and a replay of each demo:

LeanData

Standing at the center of Salesforce CRM, LeanData’s family of solutions orchestrate and automate the go-to-market process to help revenue teams close more deals and drive more revenue, faster.

Click here to request a demo from LeanData’s suite of products.

Sercante Labs

Sercante has grown and built a reputation for helping marketers succeed on the Salesforce platform. We do that through our consulting services, topical training, and by sharing thought leadership content. With Sercante Labs, we take that one step further and aim to build products, wizards, and tools that help marketing & sales pros kick ass.

Sercante Labs products are born out of challenges we see our customers routinely facing and usually start with an idea submission from our team or someone in the community. If you have a request or a “wouldn’t it be nice if…” idea, let’s chat!

Click here to chat with a Sercante Labs expert.

Stensul

The Stensul™ email creation platform dramatically reduces email creation time — by up to 90% — so teams can better focus on improving email performance. Stensul streamlines collaboration and simplifies the creation process for all marketers, so they can create emails that drive stronger results. 

Stensul integrates with all leading ESPs/MAPs as well as workflow platforms, image libraries, live content, link tracking, and messaging platforms. Top brands that trust Stensul to solve their most demanding email problems include Accolade, BMW, Cisco, Codecademy, Electric, Equifax, Lucidworks, MURAL, and Yahoo.

Click here to get an email efficiency analysis from Stensul.

Stack Moxie

Anyone who has managed a complex tech stack has experienced how minor inconsistencies can wreak havoc across integrated systems.

Typos, spelling errors, permission sets, and other simple problems can break systems sync, preventing proper lead routing, which stops the sales team from knowing when great leads are interested in your company.

Stack Moxie’s army of robots work on your behalf to make sure each lead promptly reaches its destination as expected. If errors arise, the robots proactively notify you so problems can be mitigated quickly.

Click here to request a personalized demo.

DESelect

DESelect helps marketers unlock the full power of Salesforce Marketing Cloud without needing to write SQL. Using DESelect’s simple drag-and-drop solutions, users can create complex audience segments quickly, easily integrate new data sources, accelerate campaign execution, and reduce costs by ending technical dependencies. 

Since launching in 2019, DESelect has raised $5.5+ million, built an international team, and helped customers like T-Mobile, Volvo, Cazoo, Emerald, and Merlin.

Click here to book a demo.

Tray.io

Tray.io is a low-code automation platform that can easily turn unique business processes into repeatable and scalable workflows that evolve whenever business needs change. Powering RevOps at Mixpanel, AdRoll and other industry leading enterprises, Tray helps you accelerate revenue and win more deals.

Click here to start your trial.

Why were these companies’ products featured?

The companies featured in the MarDreamin’ Demo Jam are all essential to the success of this conference each year. That’s because they are companies that sponsor the conference. 

The MarDreamin’ team can’t bring all this free content to you without the help of these sponsors. So, be sure to check them out using the links above as a ‘thank you’ to them for their sponsorship.

How to join next year’s Demo Jam

Hey, product marketing friends — you’re probably  kicking yourself and wishing you could have had your company’s tools featured in the Demo Jam. 

It’s all good. You can get ahead and reach out to the MarDreamin’ team now by clicking on this link. Complete the form on that page so you can lock in your sponsorship for 2023.

Learn more about extending Salesforce

We hope you’ve found something helpful through the demos or have sparked ideas to implement integrations in your tech stack. Remember to watch the 2021 Demo Jam Replay and read the 2021 Demo Jam Recap to see the demos from last year and keep it going. The 2020 Demo Jam Replay is also available here.

Have something in mind that you wish Salesforce could do but you haven’t found the solution yet? Tell us about it in the comments below or reach out to Sercante Labs to see if we can help. And remember to check out each of the Demo Jam participating companies!

Original article: MarDreamin’ 2022 Demo Jam Recap: Products to Extend Salesforce

©2025 The Spot. All Rights Reserved.

The post MarDreamin’ 2022 Demo Jam Recap: Products to Extend Salesforce appeared first on The Spot.

]]>
https://thespotforpardot.com/2022/11/09/mardreamin-2022-demo-jam-recap-products-to-extend-salesforce/feed/ 0 5645
External Actions: The Long-Awaited Pardot Feature https://thespotforpardot.com/2022/10/13/external-actions-the-long-awaited-pardot-feature/ https://thespotforpardot.com/2022/10/13/external-actions-the-long-awaited-pardot-feature/#respond Thu, 13 Oct 2022 14:36:51 +0000 https://thespotforpardot.com/?p=5567

Alas, Salesforce External Actions for Pardot is finally here. Until now, our options to have Marketing Cloud Account Engagement (Pardot) trigger a third-party system have been limited to either: pre-existing connectors or syncing to Salesforce and relying on a Salesforce-side integration.  With the Salesforce Winter ‘23 release, External Actions gives us the capability to integrate […]

The post External Actions: The Long-Awaited Pardot Feature appeared first on The Spot.

]]>

Alas, Salesforce External Actions for Pardot is finally here.

Until now, our options to have Marketing Cloud Account Engagement (Pardot) trigger a third-party system have been limited to either: pre-existing connectors or syncing to Salesforce and relying on a Salesforce-side integration. 

With the Salesforce Winter ‘23 release, External Actions gives us the capability to integrate into any third-party system and do cool things.

Note: This feature is available to Plus, Advanced, and Premium editions of Pardot.

The Lowdown on External Actions for Pardot

External Action allows Pardot to do things like: 

  • Send an SMS message via Twilio or MogliSMS
  • Create a new Salesforce record (such as Lead, Opportunity, any Object!)
  • Send information to your favorite Star Wars API
  • Register a Prospect in another system
  • and whatever else you dream up! 

While there are some considerations (detailed later in this post), External Actions are a great way to plow through the barriers that have prevented you from automating your entire workflow. 

It’s important to note that there’s a similarly named feature called External Activities.  With Pardot External Activities, you can receive data from third-party systems to use in Pardot. With External Actions, you can send data to third-party systems so they can do cool things.

How does a Pardot External Action work?

Once an External Action is built, it will appear as an Action option in an Engagement Studio Program. Depending on the action, you may need to provide additional information through text inputs. You can use HML Merge Tags here, too!

When the Engagement Studio Program is running and hits your action, Pardot will call into Salesforce (via API behind the scenes), and call the functionality.  It does this in a “fire and forget” manner, so there’s no error handling inside your Engagement Studio Program. It is also not “bulkified,” meaning it will make an API call for EACH Prospect. So, you may need to take the API limits of Salesforce AND your external system into consideration.

For this blog post, we built an External Action that tracks Favorite Color. 

Once you pick “Track Favorite Color” you have the ability to provide a value. In the screenshot below, we are using HML to pull this value from a Prospect’s record, though you can also provide static text if you want to say everyone’s favorite color is Sercante Green.

How can I set up a Pardot External Action?

To set up an External Action, there are 2 key pieces:

  1. You need something in Salesforce that can “do the thing” you want. It can be any of the following:
    • Autolaunched Flow
    • External Service
    • APEX InvocableMethod
  2. Marketing App Extensions have been configured inside Salesforce Setup

No-code options to configure Pardot External Actions

If you are looking to integrate with a third-party system, you might luck out on #1 and be able to leverage something built by that third-party in their Salesforce package. This could be your quickest way to being able to use an External Action.

If this isn’t available for you, first look at seeing if you can make an Autolaunched Flow that can meet your needs. This option is also great for creating Salesforce Records of any object type (keeping in mind you are limited to text input types in Pardot).

When working with another API, and if that API supports the OpenAPI protocol, you can use Salesforce External Services to hook things up. That will give you everything you need.

 The Trailhead Module on External Services is a great way to learn how to get started.

Code option to get started with Pardot External Actions

If the above aren’t an option, it’s time to break out your development skills (or work with someone who has them). We’ve got a sample APEX class here that gives you all the structural ingredients you need to make this work, you just have to fill in what you want it to actually do.

public class MyNewExternalAction {

    // Classes to be used by the Flow Designer
    public class FlowRequest {
        @InvocableVariable(label='Prospect Email')
        public String email;
        @InvocableVariable(label='Favorite Color')
        public String favColor;
        // add any other String or number-based attributes you need
    }

    // If you are calling an External API, this would be a great
    // place to put Classes to represent the response
    public class ApiResponse {

    }
    
    @InvocableMethod(callout=true label='My New External Action')
    public static void performActions(List<FlowRequest> flowRequests) {
        System.debug('Start performActions');
        // at time of writing, Pardot DOES NOT BATCH these, it's always 1
        // per batch
        FlowRequest flowRequest = flowRequests.get(0);
        System.Http http = new System.Http();

        try {
            // This is where you put what you want to do!
            // you can call another API, call other APEX
            // read & write Salesforce Objects.. Whatever you want

        } catch (Exception e) {
            System.debug('There was an issue executing the request');
            System.debug(e.getMessage());
            throw e;
        }
        System.debug('Done performActions');
    }
}

Once you have the functionality ready, you need to tell Pardot about it. This is done by configuring Marketing App Extensions inside Salesforce Setup.

Configuring the Marketing App Extensions

This is the “glue” that ties everything together and makes External Actions usable by Pardot. There are a few easy things to configure to make this “glue” work.

First, we need the Top-Level Marketing App Extension. Be careful with these, as you cannot delete them once created (so don’t go making a bunch of test records!).

  1. In Salesforce Setup, search for Marketing App Extensions
  2. If you don’t have one, create New
    • Provide an Extension Name and an API Name, as well as check “Active in Automations”
    • Click Save

Next, we need to enable this for Business Unit(s).

  1. With the Extension still open, go to the Related tab
  2. Click New beside Business Unit Assignments
  3. Add an assignment for each Business Unit you want this extension to be available for

Now we can create the External Action.

  1. With the Extension still open, go to the Related tab
  2. Click New beside Actions
  3. Provide an Action Name (this will be the name visible when selecting it from Engagement Studio)
  4. Provide an API Name (this does not auto-fill like you may be used to)
  5. (Recommended) Provide a description of what this Action does, since you might not remember in three months
  6. Search for your functionality. Once selected, the Action Schema will auto fill with JSON that you need to review and likely modify
  7. Review & Modify the Action Schema
    • Properties – this contains details about the parameters/values that you want to provide to the Automation.
      • type:  currently can only be “string” and “number”
      • title: the Label of the input when viewing in Engagement Studio
      • value: Allows you to provide a default value. You can use HML merge tags here!
      • Note: Sometimes when working with Flows, you might have properties that are not relevant (like flow interview id). You should remove them from Properties (assuming they aren’t an input variable that your flow requires to function)
    • View Components – this allows you to specify which properties you want to provide inputs for in Engagement Studio. Currently, definition should always be “lightning/control” and “scope” should always point to one of the properties
    • Required – a list of properties that would be required from within Engagement Studio
  8. Action Params auto fills, no changes needed
  9. When you are ready to have this available in Pardot, check the Active in Automations box.

Here’s what it would look like for our sample APEX class above. Note that we’ve chosen to only display the favorite color field in the Engagement Studio, though we are passing the Prospect’s email behind the scenes.

Save the Action and, after a few moments, it will be available for testing!

Can I use an External Action to do things in Pardot?

Imagine being able to take action on another Prospect record from an Engagement Studio Program! While not natively available within the platform, you could build this when combining External Actions with our Free package Flow Actions for Pardot. After setting up the package, you would only need to configure the Marketing App Extension to have any of our Flow Actions available as an External Action.

Create Unified Experiences with Pardot External Activities

External Actions are available with the Winter ‘23 release. These Actions, as well as External Activities, allow Marketers to automate across platforms for a more unified experience. 

How do you plan on using these features to better automate your processes? Tell us in the comments!

Original article: External Actions: The Long-Awaited Pardot Feature

©2025 The Spot. All Rights Reserved.

The post External Actions: The Long-Awaited Pardot Feature appeared first on The Spot.

]]>
https://thespotforpardot.com/2022/10/13/external-actions-the-long-awaited-pardot-feature/feed/ 0 5567
6 Things you Should Know Before Syncing Salesforce to Pardot https://thespotforpardot.com/2022/05/13/when-does-marketing-cloud-account-engagement-pardot-sync-with-salesforce/ https://thespotforpardot.com/2022/05/13/when-does-marketing-cloud-account-engagement-pardot-sync-with-salesforce/#respond Fri, 13 May 2022 19:38:00 +0000 https://thespotforpardot.com/?p=5217

Knowing the who, what, when, and how of Salesforce and Account Engagement (Pardot) sync behavior is key to understanding how you can use the integration to your advantage. If you’re a newbie to Marketing Cloud Account Engagement (Pardot), then you may be wondering how in the world this system communicates with the main workhorse of […]

The post 6 Things you Should Know Before Syncing Salesforce to Pardot appeared first on The Spot.

]]>

Knowing the who, what, when, and how of Salesforce and Account Engagement (Pardot) sync behavior is key to understanding how you can use the integration to your advantage.

If you’re a newbie to Marketing Cloud Account Engagement (Pardot), then you may be wondering how in the world this system communicates with the main workhorse of Sales Cloud (Salesforce). 

Well, follow me my little pretties, as we look behind the curtain of the Wizard of Oz to find out how it really all works.  

1. The Who: Identifying the Wizard 

Unmasking the culprit behind the smoke and mirrors of the sync magic is not a difficult path to take. Just navigate to your Pardot Settings tab, and hang a left at the Connectors intersection. 

Here you will find the wizard who’s behind all of the shenanigans.

Enter the B2BMA Integration user. 

B2BMA Integration User controls Sales Cloud and Pardot Sync behavior

You can find the B2BMA Integration user in your Salesforce setup with the username similar to the following: b2bmaintegration@00d5f000004yo05eag.ext (see below).

This user comes out of the box with the installation of any new v2 MCAE/Pardot instance purchased after February 11, 2019. It’s a free Salesforce licensed user that serves as the handshake between both MCAE/Pardot and Salesforce (Sales Cloud). 

Chances are, you have this user available to you. If not, you likely have a custom connector user that’s tied to a company-specific/unique Salesforce username (and license) that’s in its place. 

Whichever username you have, the underlying matter is that this is the who the system looks to for direction and instruction on what will sync when the sync occurs. Whatever this user can see, will be what the system will sync when the sync takes place.

2. The What: Determine what will sync to Salesforce

You may be wondering, what do you mean, whatever this user can see? Well, I’m glad you asked.

Connector user access determines what will sync to Salesforce

To understand what will sync when the sync occurs, you first have to understand the fabric of the connector user. This user is special. Whatever this user can see — a la whatever visibility to record data this user has access to will be what is included when the Salesforce-Pardot sync transpires.

Heads up — Salesforce connector user gotchas

As a quick reminder, there are four out-of-the-box standard objects that the connector user can communicate with in Salesforce; that’s the Lead, Contact, Account, and Opportunity objects. The Account and Opportunity objects/fields have a read-only relationship and the Lead and Contact objects/fields have a read/write relationship. 

Your connector user (B2BMA Integration User or Custom Connector User) will determine what set of records will be included in the sync between both systems. The out-of-the-box B2BMA Integration User has View All/Modify All permissions for all lead and contact records that exist in Salesforce. Therefore, if this user is the selected user, then all records will have the capability to sync between both systems. 

If your Pardot system has a different user (i.e. Custom Connector User) with sharing rules set up to only have access to certain lead/contact records, or if you are using Marketing Data Sharing (Advanced and Premium editions only), then those records will be the only ones that will be synced when the sync ensues.

3. The When: Understand how often Salesforce and Pardot sync

Once the connector user has been set up and is in “play mode” (see below green ticker), watch the wizardry transpire.

The smoke machine behind the curtain is powered by a native feature that automatically syncs record and field data every 2-4 minutes.  Certain changes to prospect or lead/contact records will be pushed to Salesforce and certain information that is updated on Salesforce records, that have a matching MCAE/Pardot record, will be pulled into the corresponding prospect record. 

4. All Salesforce record changes are not created equal 

It is tempting to say that any changes to records will trigger a sync. However, this is not the case. 

The Salesforce connector user will only recognize certain “activities” when it’s ready to perform its regularly scheduled automated sync. Such changes to prospect records can be classified by the three types of activities: 

  1. System
  2. User
  3. Prospect

The following is a breakdown of each type of action that can cause a prospect record to queue for syncing.

System activities:

  • Any record changes to field values that occur because of an automation rule or completion action
  • Using the “Add to Salesforce campaign” in an automation rule, segmentation rule, completion action, or Engagement Program action
  • Changing/updating a Salesforce campaign status via automation rule, segmentation rule, completion action, or Engagement Program action

User activities: 

  • Performing a prospect import
  • Changing any prospect fields (including opting out prospects via import or manually)
  • Making changes to a Pardot campaign (for those who do not have Connected Campaigns)
  • Making changes to a prospects’ assigned user
  • Manually syncing from the prospect record (yes you can go the good ole fashioned route and manually sync an individual prospect record by pressing the “Sync with CRM” button on the Prospect record)

Prospect activities:

  • When a new or existing prospects submits a Pardot form 
  • When a new or existing prospects submits on a Pardot form handler 
  • When a new or existing prospects submits on a Pardot landing page form
  • When an existing prospect unsubscribes (globally opts out)

5. But what about Salesforce to Pardot?

While there are qualified activities that can cause a sync to trigger from Pardot to Salesforce, there are equally a few activities that can trigger a sync from Salesforce to Pardot. 

The following is a breakdown of each type of action that can cause a prospect record to queue for syncing.

  • Updating the Last Modified timestamp triggers a sync to Pardot for existing prospects
  • Updating a lead or contact email address
  • Updating the assigned user (owner) for the lead or contact record
  • Making field changes to a lead or contact record (Check the Sync Behavior setting on the MCAE/Pardot field to determine whether this value will “win” out when the sync occurs)
  • Updating a related account record in Salesforce for a lead or contact who is associated to a Pardot prospect.

And of course, i’ll queue up the trusty Salesforce knowledge article disclaimer/recommendation below:

6. The How: Connector Preferences

Each Pardot account comes with two key customizable connector preferences that determine how the sync will follow suit:

  • Automatically create prospects in Pardot if they are created as a Lead or Contact in Salesforce

and

  • If records do not have a CRM ID to match when syncing, use email address to match.

The first setting has to do with record creation from Salesforce to Pardot and the second setting relates to the overall sync logic. 

With the first setting enabled (turned on/selected), the connector user will check every 2-4 minutes to see if a new lead or contact record with an email address has been created in Salesforce that does not currently exist in Pardot. If found, that record will be swooped up by the connector user, scanned and copied over to Pardot as a new prospect record with the corresponding record data accompanying it. 

Recommendations for enabling this setting for your system are on a case-by-case basis depending on your mailable database limits and overall internal operational workflow/strategy. 

The second connector preference setting relates to how the system performs its hierarchical sync logic when a sync commences. It is highly recommended (best practice) to enable and keep this setting checked on your connector due to its native sync logic behavior as shown in the below diagram:

Salesforce and Pardot Sync Logic

Essentially, what this outlines is that when the connector user performs the sync, it will first check for a matching CRM ID at the lead or contact level. If no matching record is found for the existing Pardot record, it will then check for a matching email address first at the Contact level then down at the Lead level. If neither a matching CRM ID or email address has been located for the Pardot prospect record, that record will remain in Pardot until the record is assigned (either to a user, a queue or via any active assignment rule).

Now you’re a Salesforce sync Wizard

So, now that you are armed with the who, what, when and how Pardot syncs with Salesforce, it’s time to lock arms with the Tin Man, Scarecrow and Lion to ease on down the road to Oz. 

If you’re still feeling a little “cowardly” or “scarecrowy” (yeah totally not a word), then let the Sercante Munchkins escort you along the way! 

Original article: 6 Things you Should Know Before Syncing Salesforce to Pardot

©2025 The Spot. All Rights Reserved.

The post 6 Things you Should Know Before Syncing Salesforce to Pardot appeared first on The Spot.

]]>
https://thespotforpardot.com/2022/05/13/when-does-marketing-cloud-account-engagement-pardot-sync-with-salesforce/feed/ 0 5217
Salesforce Spring ’22 Release: Platform Highlights for Marketers https://thespotforpardot.com/2022/03/22/salesforce-spring-22-release-platform-highlights-for-marketers/ https://thespotforpardot.com/2022/03/22/salesforce-spring-22-release-platform-highlights-for-marketers/#respond Tue, 22 Mar 2022 20:47:09 +0000 https://thespotforpardot.com/?p=4992

The Salesforce Spring ‘22 Release has been out for nearly a month now, and it included important features for marketers who are on the Salesforce platform.   We get three major releases from Salesforce each year — Spring, Summer and Winter. Each Salesforce release includes upgrades and enhancements that affect Salesforce orgs in different ways.  So, […]

The post Salesforce Spring ’22 Release: Platform Highlights for Marketers appeared first on The Spot.

]]>

The Salesforce Spring ‘22 Release has been out for nearly a month now, and it included important features for marketers who are on the Salesforce platform.  

We get three major releases from Salesforce each year — Spring, Summer and Winter. Each Salesforce release includes upgrades and enhancements that affect Salesforce orgs in different ways. 

So, if you’re using and managing marketing operations for your company or organization and want to know more about Salesforce, then you’re in the right place. We’re going to cover everything you need to know about the Salesforce Spring ‘22 Release if you’re a marketer who uses Salesforce.

Salesforce Spring ’22 Release: Highlights for Marketers

Marketers who use the Salesforce platform are getting lots of attention from the Salesforce Spring ‘22 Release. 

Some updates are changing the way we work to meet evolving technology demands. Others are saving us time by connecting the dots in a logical way. 

All we know is, this release includes big updates for people in the marketing world.

Highlight #1: Salesforce CMS Name Change to Digital Experiences

If you’ve enabled the new Pardot Lightning Email Builder or Lightning Landing Page Builder already, then you’ve heard of Salesforce CMS. 

Salesforce CMS was a tool within Lightning Experience that provides the ability to curate and share content, manage multiple languages, and control who can create what content. However, along with a slew of Salesforce product name changes, Salesforce renamed the tool Digital Experiences to stay consistent with the former Community Cloud change to Experience Cloud. 

There are no changes to the features that were available with Salesforce CMS, and Salesforce even allows users to type Salesforce CMS in the App Launcher to reach Digital Experiences.

Image Credit: Salesforce

Highlight #2: Salesforce Reporting Updates

Marketers on Salesforce have so many options when it comes to viewing marketing reporting metrics. Every tool in your tech stack has some sort of native reporting tools. But that data is limited to the tool.

Feeding that data into your marketing automation platform (MAP) gives you access to more insights when you can combine datasets. But you’re still limited.

But connecting your MAP to Salesforce platform reporting tools unlocks a whole world of data insights. We’re talking about sharing data from Pardot and Marketing Cloud with Salesforce Reports and Analytics Studio (Tableau CRM). 

Here are the reporting updates marketers on Salesforce will want to know about.

Improvement #1: Easily Find the Right Report Type for New Reports (Beta)

Building reports in Salesforce can be very confusing at first if you don’t know what report type to look for. So, this improvement is definitely an exciting one. 

With the new enhanced report type selector, users can view their most recently used report types and see if a report type is standard or custom.

Image Credit: Salesforce

Another feature provided in this update is the ability to view the objects and fields available with the report type. And you can also see what reports have been created by yourself and other users using the report type.

Image Credit: Salesforce

Improvement #2: Edit Multiple Fields Inline on the Report Run Page (Beta)

Salesforce users and marketers both have a need to update information on the fly while viewing a report in Salesforce. This new feature provides the ability to edit fields within your report on multiple records. 

You can make as many changes as you want, as long as the field is not locked, and then save all of the changes at once without rerunning the report. Fields that are related to other fields within that same record will update those additional fields as well once you save your changes within the report. 

The example below is a preview of what happens when the Account on an Opportunity is updated and the Employees field shows as pending. Seeing this screen means the field will update as well once the record is saved.

Improvement #3: ​​Automatically Tune Your Dashboards to Your Business Goals with Dynamic Gauge Charts (GA)

If you have ever used a Salesforce Dashboard to track your campaign metrics, then you might have used a Gauge Report chart before. 

Gauge charts typically track performance toward a certain goal that you set in place when the dashboard was created. This new feature will provide you with the ability to track your performance dynamically instead of setting a singular goal for the year. 

This means Salesforce will use your report metrics and dynamically update your goal as it responds to your business and performance whether it is a positive or negative change.

Improvement #4: Personal Information Security Updates

Marketers should always ensure that their customer data is compliant and respects the customer’s personal preferences. With that in mind, Salesforce has released a new update to help hide customer’s personal data from other customers who are in the same portal or community. 

Enabling Enhanced Personal Information Management will replace the current Hide Personal Information setting available in Setup and will secure even more PII data on the User record. The new feature provides the ability to select which standard and custom fields are considered PII in your Salesforce org.

Companies should be aware that customers will no longer have access to their own personal data in the community or portal for the fields you select to hide on the User record. This feature will become enforced in all Salesforce organizations during the Winter ‘23 release.

Salesforce is getting bigger and better all the time

B2B marketers who come to Salesforce are usually looking to scale their efforts and grow in a way that makes sense. These latest enhancements from the Salesforce Spring ‘22 Release get marketers closer to those goals by saving them time and resources. 

Contact the team at Sercante to get help implementing these enhancements in your Salesforce org. And leave us a comment below to let us know what you think about the Spring ‘22 Release.

Original article: Salesforce Spring ’22 Release: Platform Highlights for Marketers

©2025 The Spot. All Rights Reserved.

The post Salesforce Spring ’22 Release: Platform Highlights for Marketers appeared first on The Spot.

]]>
https://thespotforpardot.com/2022/03/22/salesforce-spring-22-release-platform-highlights-for-marketers/feed/ 0 4992
How to Develop Custom Lightning E-mail Components for Pardot https://thespotforpardot.com/2022/01/18/how-to-develop-custom-lightning-email-components-for-pardot/ https://thespotforpardot.com/2022/01/18/how-to-develop-custom-lightning-email-components-for-pardot/#respond Tue, 18 Jan 2022 21:13:47 +0000 https://thespotforpardot.com/?p=4223 Develop Pardot Custom Components

The Salesforce Winter ‘22 release introduced the ability to create a custom Lightning Web Component (LWC) for Lightning Email Content, and with Spring ‘22 we have the same ability for Pardot Lightning Email Templates. With this new feature, you can create components for standard areas of emails, such as footers or headers. Or, use it […]

The post How to Develop Custom Lightning E-mail Components for Pardot appeared first on The Spot.

]]>
Develop Pardot Custom Components

The Salesforce Winter ‘22 release introduced the ability to create a custom Lightning Web Component (LWC) for Lightning Email Content, and with Spring ‘22 we have the same ability for Pardot Lightning Email Templates.

With this new feature, you can create components for standard areas of emails, such as footers or headers. Or, use it for more complex items, such as displaying upcoming events or gathering prospect feedback.

In this post, we will present the code for 5 different LWCs, walking you through the most simple example and incrementing from there.

It is important to note that these custom components behave differently than Pardot Snippets or Dynamic Content. Unlike those features, when you change the LWC, existing Pardot Email Content and Templates do not get automatically updated. You need to go into each one to refresh them.

Because we all like analogies, think of the LWC as a rubber stamp and the Pardot Email Content & Template as paper. We can craft the stamp however we like (from simple to very complex), and once it is ready it will stamp the ink (HTML) onto the Email Content or Template. Changing the stamp does not change the ink already on the paper — you need to use the new/adjusted stamp and do it again.

Feel free to check out the code project in our github repository. If you aren’t already familiar with Salesforce Lightning Web Components, check out this Trailhead Quick Start.

Simple hard-coded HTML

This example is a pretty good one for anyone to get started. It demonstrates what is needed to at least have something work at the most basic level. Consider it the Hello World of Custom Email Components. In our github repository, this is the fixedAddress component.

This type of custom component is great to use for standard sections of your emails that do not change with each send. For example, the copyright notice, legal disclaimer, unsubscribe language etc.

At a minimum, our LWC will need 3 files:

  1. .html -> The HTML which will become rendered and stamped into the Email Content/Template
  2. .js -> Any coding required to support the component
  3. .js-meta.xml -> Salesforce Metadata, enabling this component to be used in Email Content/Templates

First, we will explore the Salesforce Metadata.

<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>52.0</apiVersion>
    <isExposed>true</isExposed>
    <masterLabel>Fixed Company Address</masterLabel>
    <targets>
        <target>lightningStatic__Email</target>
    </targets>
</LightningComponentBundle>

Some key notes:

  • isExposed (line 4) is needed to tell Salesforce that this component can be displayed in the Component Toolbox
  • masterLabel (line 5) is the name to display in the Component Toolbox
  • target = lightningStatic__Email is needed to tell Salesforce that this component can be used in the Lightning Email Builder. Other examples have a bunch of other targets, these are not needed and may result in your component showing up in unexpected places.

Next we will look at the JavaScript.

import { LightningElement } from 'lwc';

export default class FixedAddress extends LightningElement {}

Because our example is mostly hard-coded, there is nothing of value here. As we evolve, we’ll start seeing this get built out.

Finally, the HTML.

<template>
  <p>Our Address is: 123 Main St, Atlanta GA, USA</p>
</template>

Again, very simple. When the email HTML is rendered, everything in between the <template> tags will be written.

Here’s what it looks like in the builder. Once the component is added to the email, it is just simple text that is rendered.

Hard-coded HTML, which includes a merge field

This example is nearly identical to the previous one, so we will skip showing the JavaScript and the Metadata.  In our github repository, this is the fixedWithMergeFields component.

Straight to the HTML:

<template>
 <p>Hello {{{Recipient.FirstName&#125;&#125;&#125;, 
     I hope you are having a great time learning 
     about our products and services.</p>
</template>

What you might notice is how the merge tag has been written. Due to some very technical reasons, we can’t just use the usual {{{FIELD}}} syntax, we have to instead “escape” the closing curly brackets to make the LWC gods happy. This appears to only be the case when the merge tags are placed into the HTML file, as normal syntax can be used when the merge tags appear in the JavaScript.

Here’s what it looks like in the builder. Similar to the previous example, you get text that cannot be adjusted.

Allow someone creating an email to provide text

Now we are going to start allowing the user of a custom component to provide their own values. In our example we are going to start off a bit slow, simply allowing them to provide some text. In our github repository, this is the guidedManualEntry component.

We need to decide which “attributes” (or values) we want a user to provide. For this example, we will ask for a Title, an Image URL, and a Description. 

First, let’s take a look at our JavaScript. It needs to define these attributes.

import { LightningElement, api } from 'lwc';

export default class GuidedManualEntry extends LightningElement {
  @api
  title=""
  @api
  imageUrl=""
  @api
  description=""
}

You will note that each “attribute” has a variable name and the @api annotation. This annotation tells the LWC system that these can be referenced by the HTML file as well as our metadata file.

Next, we will tell our Metadata file to prompt the user to fill in these values.

<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
  ...
  <targetConfigs>
    <targetConfig targets="lightningStatic__Email">
      <property 
        label="Title"
        name="title"
        type="String"
        default="Title of Entry"
        required="false" />
      <property 
        label="Image URL" 
        name="imageUrl"
        type="String"
        placeholder="https://"
        description="Enter Image URL for this image. Be sure that it is a secure URL starting with https://"
        default="https://via.placeholder.com/575x150"
        required="false" />
      <property 
        label="Description"
        name="description"
        type="String"
        default="Description of Entry"
        required="false" />
    </targetConfig>
  </targetConfigs>
</LightningComponentBundle>

Ok, that’s a lot! What we are doing is giving our lightningStatic__Email target a list of properties to present on the right hand side of the Lightning Builder when someone wants to use our component.

Each property (to be presented) has a bunch of levers we can adjust to enable our user to give us what we need. Let’s break down the ones we use here:

  • label > basically a form field’s label
  • name > the name of the attribute in the LWC’s JS file
  • type > the type of input to present. For an email builder our current choices are:
    1. Boolean > displays a checkbox
    2. Integer > displays a text input allowing digits
    3. String > displays a text input allowing any character
    4. Color > displays a color selector
    5. HorizontalAlignment > displays a horizontal alignment selector
    6. VerticalAlignment > displays a vertical alignment selector
  • default > the default value to use when a new component is created
  • required > whether or not a value is required to save the component

The Salesforce LWC Developer documentation is a great resource for getting more details on all the abilities of the LWC metadata file.

Now that we are getting values from a user, we need to display them in the HTML!

<template>
  <h3>{title}</h3>
  <img src={imageUrl} />
  <p>{description}</p>
</template>

Here we are using LWC variables to place the values provided by the user. The syntax for this is the variable name (that has the @api annotation in your JavaScript file) wrapped by a single set of curly brackets. 

Now we can kind of understand why our HML syntax which includes 3 sets of curly brackets doesn’t really work, we can’t mix the two.

Here’s what this looks like in the builder. We are asking for the user to provide values within the section on the right hand side. 

You can combine your Custom Components with Layout components to build a nice consistent email.

Present a picklist of values, coming from APEX

Now things start to get interesting. We will tie our LWC to some APEX code, opening our world of options. Before we get started, it is important to know that you don’t have to use APEX to present a picklist of options, it can entirely be done in the Metadata. Sadly we can’t show every variation of example. In our github repository, this is the htmlPicklist component.

Before we get started, we want to give credit to the original author of this example to jrattanpal on github. We simply made some minor changes to enable it to be used as a learning example.

First, we need an APEX class which will provide the options that are available.

global class HTMLSources extends VisualEditor.DynamicPickList{
    
  global override VisualEditor.DataRow getDefaultValue(){
      VisualEditor.DataRow defaultValue = 
          new VisualEditor.DataRow('--Select--', '');
      return defaultValue;
  }

  global override VisualEditor.DynamicPickListRows getValues() {
      VisualEditor.DynamicPickListRows options = new VisualEditor.DynamicPickListRows();
      options.addRow(new VisualEditor.DataRow('HTML Option 1', '<h1>Sample 1, simple header</h1>'));
      options.addRow(new VisualEditor.DataRow('HTML Option 2', '<h3>Sample 2, smaller heading</h3>'));
      options.addRow(new VisualEditor.DataRow('HTML Option 3', '<h4>Sample 3, multiple blocks of HTML</h4><div>hello<p>testing html picklist</p></div>'));
      options.addRow(new VisualEditor.DataRow('HTML Option 4', '<h2>Hello Trailblazer</h2>'));
      options.addRow(new VisualEditor.DataRow('HTML Option 5', '<h2>This was swell</h2>'));
      return options;
  }
}

Note that the class extends VisualEditor.DynamicPickList, which requires us to provide 2 method overrides.

  • getDefaultValue -> provides the value selected when the component is first added to an Email. In our example above we simply prompt for a choice.
  • getValues -> provides all of the options that a user can pick from. To our knowledge you can’t retrieve a list of values dynamically based on another input from the user, though if this changes in the future be sure to let us know!

Now that we have APEX which can provide our values, let’s set up our LWC. We will start with our JS.

import { LightningElement, api } from 'lwc';

export default class HtmlPicklist extends LightningElement {
  @api
  set htmlValue(value) {
    if (this.attachmentPoint) {
      this.attachmentPoint.innerHTML = value;
    }
    this._htmlValue = value;
  }
  get htmlValue() {
    return this._htmlValue;
  }
  renderedCallback() {
    this.attachmentPoint = this.template.querySelector('div[ishtmlcontainer=true]');
    this.attachmentPoint.innerHTML = this.htmlValue;;
  }
}

The approach here is a little bit different than all the other examples. The goal is to take the “htmlValue” (which comes from APEX) and have that HTML be the entire HTML that gets stamped onto the Content/Template. This keeps our LWC HTML very lightweight and gives full control over the HTML to APEX (or wherever the APEX is getting the value).

Next, we will tell our Metadata file to prompt the user to choose one of the options.

<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="banner">
  ...
  <targetConfigs>
    <targetConfig targets="lightningStatic__Email">
      <property 
        name="htmlValue"
        label="Pick an HTML Sample"
        type="String" 
        required="true" 
        datasource="apex://HTMLSources"/>
    </targetConfig>
  </targetConfigs>
</LightningComponentBundle>

Some of our properties are similar to the previous example, however we introduce a new one.

  • datasource > 

As for the HTML file, it simply has a DIV that the JS can grab onto and fill.

<template>
  <div ishtmlcontainer="true" lwc:dom="manual"></div>
</template>

Here’s what it looks like in the builder. Similar to the previous example, the right hand side allows us to make a choice, and once made the content of our component is rendered.

Pull information from an Open API

This is the last of our examples, and it goes all out. By using an Open API, we don’t need to worry about authentication and all the additional steps to set it up in Salesforce. In our github repository, this is the starWarsCharacter component.

Similar to the previous example, we will start with some APEX. While there can be a lot going on here, the end result of the APEX is to provide a JSON String representing the attributes of each Object, or dropdown choice.

global with sharing class StarWarsCharacterPicklist extends VisualEditor.DynamicPickList {

  global override Boolean isValid(Object attributeValue){
      return true;
  }

  global override VisualEditor.DataRow getDefaultValue(){
      return new VisualEditor.DataRow('--Select a Character--', 'no-character-selected');
  }

  global override VisualEditor.DynamicPickListRows getValues() {
      System.debug('Providing Star Wars Character values now!');
      return getApiOptions();
  }

  private VisualEditor.DynamicPickListRows getApiOptions() {
    VisualEditor.DynamicPickListRows pickListRows = new VisualEditor.DynamicPickListRows();

    //Make API call to StarWarsAPI and get a list of characters
    List<StarWarsCharacterServices.StarWarsCharacter> characters = StarWarsCharacterServices.getCharacterList();


    // When a choice is made from the VisualEditor, the DataRow value will be provided to the LWC
    // We are choosing to have that "value" be a JSON string, so that the LWC can parse it and
    // render the properties as it sees fit
    for(StarWarsCharacterServices.StarWarsCharacter character: characters){
      String characterInfoAsJson = System.JSON.serialize(character);
      pickListRows.addRow(new VisualEditor.DataRow(character.name, characterInfoAsJson));
    }
    return pickListRows;
  }
}

Note that the class extends VisualEditor.DynamicPickList, which requires us to provide 2 method overrides.

  • getDefaultValue -> here we explicitly set a value that the JavaScript can look for, allowing it to determine if a character has been chosen or not
  • getValues -> the for loop iterates over a list of options that we’ve retrieved from some other source (just so happens to be a Star Wars API with a list of characters). For each option/star wars character, we build a JSON string of all the attributes we might care about in the LWC, and then return them.

Now, let’s take a look at the JavaScript.

import { LightningElement, api } from 'lwc';

export default class StarWarsCharacter extends LightningElement {
  @api
  character = {}
  @api
  characterChosen = false
  @api
  hasFilms = false
  @api
  hasStarships = false

  @api
  set characterJson(value) {
    // the "value" is the DataRow value that came from APEX
    // in our example, this is the JSON encoded string which contains details about our character
    console.log('setting characterJson::', value);
    this._characterJson = value;
    if(value==='no-character-selected') {
      console.log('There has been no character selected yet');
      this.characterChosen = false;
    }
    else {
      try {
        console.log('A StarWars character has been selected, parsing the JSON returned from APEX');
        this.character = JSON.parse(value);
        this.characterChosen = true;
        if(this.character.hasOwnProperty('films') && this.character.films.length > 0) this.hasFilms=true;
        if(this.character.hasOwnProperty('starships') && this.character.starships.length > 0) this.hasStarships=true;
        console.log('ok done');
      }
      catch(ex) {
        console.log('got an exception trying to parse json', ex.message);
        console.log(ex);
      }
    }
  }
  get characterJson() {
    return this._characterJson;
  }
}

Some things to note with this code:

  • @api character -> the JS Object which will contain all the attributes of a chosen Star Wars character.
  • characterChosen -> a flag that lets the HTML know which block to render
  • hasFilms -> a flag that lets the HTML know if the chosen character was in any films
  • hasStarships -> another flag
  • @api set characterJson -> a setter method, this is how the Email Builder will provide the JSON encoded string to the LWC once a choice has been made. The LWC then parses it and sets some of the flags.

Next, we will tell our Metadata file to prompt the user to choose one of the Characters.

<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
  ...
  <targetConfigs>
    <targetConfig targets="lightningStatic__Email">
      <property 
        label="Star Wars Character"
        name="characterJson"
        type="String"
        datasource="apex://StarWarsCharacterPicklist" 
        required="true" />
    </targetConfig>
  </targetConfigs>
</LightningComponentBundle>

It looks fairly similar to the previous example. A minor difference is that the “name” attribute specifies the setter method in the JavaScript as opposed to a property. Not a big difference, but worth calling out that you have a couple of options as you build your own.

Now, let’s look at our HTML.

<template>
  <template if:false={characterChosen}>
    <h3>Please select a Star Wars character from the picklist to the left</h3>
    <p>It may take a moment for Salesforce to retrieve the list of Characters and make them ready to display</p>
    <p>To my knowledge, it isn't possible to bind a search criteria to the API request, so all options need to be fetched first, however I'd love to know if someone figures this out!</p>
  </template>
  <template if:true={characterChosen}>
    <div class="card">
      <h2>{character.name}</h2>
      <p>
        Height: {character.height}<br />
        BirthYear: {character.birth_year}<br />
        HairColor: {character.hair_color}<br />
        HomeWorld: {character.homeworld}
        <template if:true={hasFilms}><br />Featured in {character.films.length} films</template>
        <template if:true={hasStarships}><br />Found in {character.starships.length} starships</template>
      </p>
    </div>
  </template>
</template>

We have 2 templates, the first displays some instructions when a choice has not yet been made, and the other displays information about the choice nicely. You can see we are using simple dot-notation to merge the character attributes into the HTML of the Email Content / Template.

The web developer inside of me really does prefer this approach for rendering HTML into an email, though it does prefer a consistent structured payload for each option.

Here’s what it looks like in the builder. Similar to the previous examples, the right hand side container is where the user makes their selection and, once made, the details are rendered in the email.

Custom components are platform assets, meaning they do not belong to a specific Pardot Business unit and can easily be shared across all of your Business Units. These components will enable your users to easily drag in standard areas of emails (copyright notice, unsubscribe language, etc.) as well as more technical components, making email building faster and easier. With no backend HTML access to Lightning Builder Email Content and Email Templates, custom components are vital to building advanced emails. 

What custom components do you plan on building? Let us know in the comments!

Original article: How to Develop Custom Lightning E-mail Components for Pardot

©2025 The Spot. All Rights Reserved.

The post How to Develop Custom Lightning E-mail Components for Pardot appeared first on The Spot.

]]>
https://thespotforpardot.com/2022/01/18/how-to-develop-custom-lightning-email-components-for-pardot/feed/ 0 4223
Get On Board with the New Pardot and Slack Integration (Beta) https://thespotforpardot.com/2021/10/26/get-on-board-with-the-new-pardot-and-slack-integration-beta/ https://thespotforpardot.com/2021/10/26/get-on-board-with-the-new-pardot-and-slack-integration-beta/#respond Tue, 26 Oct 2021 22:09:41 +0000 https://thespotforpardot.com/?p=4063 Pardot Slack Integration Winter 22

Included in the Salesforce Winter ‘22 release is a beta feature that highlights the beginning of an integration between Pardot and Slack. Salesforce officially acquired Slack on July 21, 2021, and the company is already looking to push out new features to integrate Slack with your Salesforce instance. The newest announcement regarding the integration between […]

The post Get On Board with the New Pardot and Slack Integration (Beta) appeared first on The Spot.

]]>
Pardot Slack Integration Winter 22

Included in the Salesforce Winter ‘22 release is a beta feature that highlights the beginning of an integration between Pardot and Slack.

Salesforce officially acquired Slack on July 21, 2021, and the company is already looking to push out new features to integrate Slack with your Salesforce instance. The newest announcement regarding the integration between the two systems went into detail about how every company should have a digital headquarters and what features will soon be available.

Here is what you need to know so you can understand how Slack will work with Pardot.

Connecting Pardot with your company Slack workspace

What does the beta service include?

This beta feature allows your marketing and sales teams to receive updates in their Slack workspace when a prospect engages with your marketing assets. Through a completion action on your marketing asset, a new post will be shared within your Slack workspace informing your team of what asset the prospect interacted with and their basic contact information. When setting up the completion action, you are able to select which Slack channel you want your team to receive the notification.

Push notifications from Pardot to Slack via Pardot completion action

How do I enable the Pardot and Slack integration?

Before enabling the Pardot Slack connector, you will need to create a Slack app that will be installed in your Slack workspace so you can connect Slack to Pardot. If you are like me and have never heard of a Slack app, that’s fine! A Slack app should be created when you need to use Slack APIs to connect your workspace with a third-party service through an integration.

It’s recommended to create an app from an app manifest when setting up the basic Slack app, but it is possible to create your own. The Salesforce documentation for this integration includes JSON code for you to use in the manifest file. 

Slack provides an easy-to-navigate article that helps you create your Slack app for whichever Slack workspace you want to integrate with Pardot. By following the steps shown through the “Create a new Slack app” button, you will be able to create your own app within a couple of minutes.

Once your app is created, you will have to install it in your Slack workspace. This is so the Pardot and Slack integration is connected and ready to be used. Finally, you will have to generate a token and scope through your Slack app to add your workspace to the Slack connector in Pardot.

Enable the Pardot Slack Connector

Now that we have everything set up on the Slack side of the integration, you should navigate to your Pardot settings through the Pardot Lightning App to enable the Pardot Slack connector. Once you have enabled this setting, Slack will be available as a Connector through your connector settings through the Pardot Settings tab.

Enable the Pardot Slack Connector
Pardot Slack Integration create connector

When you choose the Slack connector, you will be prompted to add a Slack workspace to integrate with Pardot. To connect to your workspace, you will have to use the bot token provided when you generated the token and scopes for your Slack app. Once your workspace is added to the Slack connector, you can then choose up to 10 channels from that workspace to connect to Pardot. 

You will need to copy the channel links in order to set them up through the connector. You can find these by right clicking on the designated channel within your Slack workspace.

Configure Slack Notification Completion Actions in Pardot

Now that you have your Slack workspace and channel(s) set up through the Slack connector in Pardot, you can use the “notify Slack channel” Completion Action on your marketing assets. When setting up your completion action, you are able to select which channel you want to post to as well as customize the message that is posted in the Slack channel. With each post, Pardot will also include the following fields for the prospect so your teams can easily identify them in Pardot:

  • Name
  • Job Title
  • Company
  • Email
  • Phone

These fields will show as blank values if they are not populated for the prospect who has completed the particular action you have set up.

Pardot Slack Integration sample message

Upcoming features

Salesforce announced Slack-First Marketing in mid-September and emphasized how the initiative will enable marketing teams to be able to collaborate through a shared digital workspace in Slack. 

Pardot Automation for Slack is the newest feature available for Pardot users to integrate with Slack. Although there is not much information on this new feature yet, we know it is expected to be available with the Spring ‘22 release and provides a shared view of your customer in Slack while streamlining notifications for the sales department.

Important things to know

Here are a few considerations you should keep in mind when you enable the Slack integration in Pardot.

  • You will need to work with your Slack workspace admin to create an app for the workspace you want to integrate with Pardot.
  • The Pardot Slack Connector is a beta feature and is only available in English.
  • The Pardot Slack Connector is not available through Pardot Classic, so you will need to install the Pardot Lighting App to use this feature.
  • You can only create the completion action to notify a Slack channel through a Pardot form, form handler, file download, custom redirect, page action, and Pardot Classic emails.
  • At this time, you are only able to connect one Slack workspace to Pardot and add up to 10 Slack channels for the integration.

Learn more about the Slack integration with Pardot

Remember to reach out to Sercante if you want to know more about setting up these features in your Pardot org. Or, comment below to let us know your thoughts.

Original article: Get On Board with the New Pardot and Slack Integration (Beta)

©2025 The Spot. All Rights Reserved.

The post Get On Board with the New Pardot and Slack Integration (Beta) appeared first on The Spot.

]]>
https://thespotforpardot.com/2021/10/26/get-on-board-with-the-new-pardot-and-slack-integration-beta/feed/ 0 4239
Implementing Pardot External Activities Natively in Salesforce https://thespotforpardot.com/2021/10/20/implementing-pardot-external-activities-natively-in-salesforce/ https://thespotforpardot.com/2021/10/20/implementing-pardot-external-activities-natively-in-salesforce/#comments Thu, 21 Oct 2021 00:06:34 +0000 https://thespotforpardot.com/?p=4035 implementing external activity natively in salesforce

Pardot is delivering a whole new way to leverage your prospect data in the Salesforce Winter ‘22 release. Our earlier blog post covers this new feature and how to set up the Pardot External Activity in Salesforce so any third-party service can begin sending these activities to Pardot via API. This post explains what third-party […]

The post Implementing Pardot External Activities Natively in Salesforce appeared first on The Spot.

]]>
implementing external activity natively in salesforce

Pardot is delivering a whole new way to leverage your prospect data in the Salesforce Winter ‘22 release. Our earlier blog post covers this new feature and how to set up the Pardot External Activity in Salesforce so any third-party service can begin sending these activities to Pardot via API. This post explains what third-party services need to do to send these activities to Salesforce using Salesforce declarative solutions (Flow/Process builder). 

At a high level, we need to:

  • Configure Salesforce to allow our solution to call the Pardot API
  • Implement Salesforce APEX code to handle the Pardot API request
  • Add an action to a Flow to make use of our new code
  • Test

This solution is a little more technical than our post on Zapier. Once you are done, you will end up with a Flow like this:

Start Record-triggered flow

Configure Salesforce

Any time we want to work with the Pardot API, we need to “authenticate” with Salesforce in order to get an Access Token. 

First, follow the steps in our earlier blog post Connecting to Pardot API from APEX. By the end, you should have:

  • A brand new Connected App (to avoid issues, don’t re-use previously created Connected Apps unless they were created using the instructions above) 
  • Named Credential for connecting to the API 

Salesforce APEX code

To build this capability, we need to create an @InvocableMethod so that our Salesforce declarative automations can see it and call it to do our bidding.As with any code solution, there are a variety of ways that we can tackle this. The code sample below will work for readers with one Pardot Business Unit. The original code file (and APEX Tests) can be found in our GitHub repository: external-activities-sfdx

public with sharing class PardotExternalActivityPublisher {
    public static final Integer HTTP_REQUESTS_PER_BATCH = 50;
    public static final String ONLY_ONE_BUSINESS_UNIT_ID = '0UvB00000004000AAA';
    public static final String NAMED_CREDENTIAL = 'APEX_Pardot_Credential';

    public class ExternalActivity {
        // @InvocableVariable(label='Business Unit Id')
        // public String businessUnitId;
        @InvocableVariable(label='Extension' required=true)
        public String extension;
        @InvocableVariable(label='Type' required=true)
        public String type;
        @InvocableVariable(label='Value' required=true)
        public String value;
        @InvocableVariable(label='Prospect Email' required=true)
        public String email;
    }

    @InvocableMethod(label='Send Activity to Pardot')
    public static void sendActivityToPardot(List<ExternalActivity> activities) {
        //Very quickly pass this request into the ASYNC Queue, eliminating delays for Users
        System.enqueueJob(new QueueablePardotCall(activities));
    }

    /**
     * Handles Asynchronously firing each Activity to Pardot
     */
    public class QueueablePardotCall implements System.Queueable, Database.AllowsCallouts {
        private List<ExternalActivity> activities;

        public QueueablePardotCall(List<ExternalActivity> activities) {
            this.activities = activities;
        }

        public void execute(System.QueueableContext ctx) {
            //depending on how many Activities we are processing, 
            //we might hit the APEX limit of 100 Web Callouts
            List<ExternalActivity> remainingActivities = new List<ExternalActivity>();
            Integer processedCount = 0;

            for(ExternalActivity activity : activities) {
                if(processedCount < HTTP_REQUESTS_PER_BATCH ) {
                    HttpRequest req = new HttpRequest();
                    req.setHeader('Pardot-Business-Unit-Id', ONLY_ONE_BUSINESS_UNIT_ID);
                    req.setHeader('Content-Type', 'application/json');
                    // req.setHeader('Pardot-Business-Unit-Id', activity.businessUnitId);
                    // activity.businessUnitId=null;

                    req.setEndpoint('callout:'+NAMED_CREDENTIAL+'/v5/external-activities');
                    req.setMethod('POST');
                    String body = System.JSON.serialize(activity, true);
                    System.debug('Submitting: ' + body);
                    req.setBody(body);
                    Http http = new Http();
                    try {
                        http.send(req);
                    }
                    catch(Exception e) {
                        //we fire it off and don't do anything if there's an error
                        //probably not the best approach for Production, though it will
                        //be up to you how to handle it
                        System.debug('There was an error submitting the External activity');
                        System.debug('Message: ' + e.getMessage() + '\n' +
                                        'Cause: ' + e.getCause() + '\n' +
                                        'Stack trace: ' + e.getStackTraceString());
                    }
                    processedCount++;
                }
                else {
                    //we will process this in the next batch of Payloads
                    remainingActivities.add(activity);
                }
            }
            if(!remainingActivities.isEmpty()) {
                System.enqueueJob(new QueueablePardotCall (remainingActivities));
            }
        }
    }
}

To use this code, make sure you replace the Business Unit ID at the top of the code with your Business unit ID (to find this, navigate to Salesforce Setup > Pardot Account Setup).

For readers with multiple Pardot Business Units, remove the constant ONLY_ONE_BUSINESS_UNIT_ID and then uncomment the businessUnit lines throughout. You will need to either specify the Business Unit ID in your Flow, or you could write additional APEX to iterate through your Pardot Business Units by working with the PardotTenant object in Salesforce.

You might also want to specify how you want to handle any exceptions you get from making the Pardot API call. In our example, we simply write exceptions to the debug log.

Our APEX code does assume that the Contact has synced over to Pardot already. If you can’t make this assumption, you may consider calling a Pardot Form Handler to make sure that the prospect is in Pardot already. We have an APEX example for that too (which follows a very similar pattern, so it should be easy to merge them).

Adding an Action to a Flow

Once the APEX has been deployed, you will now be able to use it declaratively.

In our example, we have a Zoom Webinar Member (which is a Junction Object between a Zoom Webinar and a Contact).

To set this up in a Flow:

  1. Navigate to Setup > Flows
  2. Select “New Flow” or edit an existing Flow
  3. Select the + symbol to add a new Element, select “Action”
  4. In the “Search all actions” window, locate “Send Activity to Pardot”
  5. Provide a meaningful Label and Description
  6. Set your input values
    • Extension: Enter the name of the Marketing App Extension you created in Salesforce
    • Prospect Email: Source the email from one of the fields/variables in your flow
    • Type: Enter one of the activities you set up and associated with your Marketing App Extension in Salesforce
    • Value: Enter (or source from a field/variable) the unique value to identify this Activity, event IDs work great here
  7. Click “Done”
Send activity to pardot

Test

Once all elements of your Flow are ready, testing can begin. Activate your Flow and perform the action you are using to trigger the Flow. After a couple of moments, check the Pardot prospect you are testing with, and you should now see all the information you passed through.

prospect activities

Testing is a little bit tricky, for two reasons:

  1. We are executing this functionality asynchronously, meaning a problem won’t show up in Salesforce like you are used to seeing. Debug logs will be your friend here. But don’t worry, there isn’t too much to sort through.
  2. If the Named Credential or anything else isn’t quite set up right (from step 1), Salesforce and debug logs aren’t very helpful in troubleshooting. You will have to painstakingly go through the instructions again to make sure that nothing was missed / done incorrectly.

Considerations

  • The Export Activity API call only works for known prospects, and it will not work if the email address is not already associated with a prospect in your Pardot Business Unit (this is why we have the form handler in our example).
  • If you have multiple Pardot Business Units, there is no intelligence of “choosing the right one.” You need to target the right one with your APEX solution, which assumes all prospects going through this code are from the same Pardot Business Unit. As we mentioned in the APEX section, you have the flexibility to code whatever you need to handle your business case. 

 For assistance with this or other Pardot External Activities, reach out to Sercante!

Original article: Implementing Pardot External Activities Natively in Salesforce

©2025 The Spot. All Rights Reserved.

The post Implementing Pardot External Activities Natively in Salesforce appeared first on The Spot.

]]>
https://thespotforpardot.com/2021/10/20/implementing-pardot-external-activities-natively-in-salesforce/feed/ 2 4235