The new Transactional API in SFMC

Salesforce has introduced a set of new APIs for Salesforce Marketing Cloud. These APIs are dedicated to transactional messaging. They come in three flavors. Transactional messaging for emails. Transactional messaging for SMS. Transactional messaging for PUSH.

From the Salesforce Developer site

  • The API runs on an updated messaging platform, which improves scale and send speed.
  • All messages are sent as quickly as possible. For email, there’s no need to select high, medium, or low priority in a send definition.
  • You can track each message through Marketing Cloud from the client’s host system, including the Event Notification Service, using the messageKey attribute.

A few key points to remember

  • The transactional API is different from the triggered email sends or triggered SMS
  • We have to create the send definitions through the API itself, meaning your on-prem system will need to manage that task
  • Existing data views within Marketing Cloud will not provide reconciliation detail for the messages. It is highly recommended to create an ENS service.
  • The API is not to be used for commercial messages

To summarize, this is a powerful feature that gives more control, and flexibility to the marketing team. However, also brings an additional burden on development teams.

Read more at the Salesforce Developer Site

Three Long Overdue Features in SFMC that have finally arrived!

Journey Pause

Journey Builder is a powerful tool in SFMC. It provides a visual canvas where we can drag-drop channels and orchestrate the interaction with the audiences. One of the issues with this until now was once we started a journey, there was no mechanism to pause. The only option was to cancel, meaning every contact within that journey exits the journey. When we recreate a new version, there was no easy way to resume the audience from where they had left off. Think about a multi-week onboarding campaign, and we may be sending the same welcome emails to millions if we’re not paying attention.

But no more. We can now pause journeys for up to fourteen days.

Deployment Package

Salesforce provides a robust platform for change control and deployment between instances. The only exception being the Marketing Clouds. We could share data extensions between business units. But when it came to hundreds of Journeys and Automations and building a production BU from a Test BU, the only option was recreating everything from scratch. It was great to see a deployment manager for SFMC. It needs to be installed from the SFMC AppExchange. Deployment Manager can be used to deploy Journeys, Data Extension, Attribute Groups, and Automations. Another point to note it doesn’t overwrite any of the artifacts if they already exist in the target BU.

Query Studio

Salesforce has Workbench for running SOQL queries. What were the options for a SFMC user till the very recent past? Create a Data Extension. Write SQL. Populate that target data extension. Iterating and testing audiences in a data extension can become messy pretty quickly. Query Studio has finally come to the rescue. It’s an app that needs to be installed from the SFMC AppExchange. Once installed, it shows up as a menu option, and the interface is intuitive.

Takeaways from Ramp Up Virtual Summit – How Marketing is changing and a farewell to third-party cookie

“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”
― Albert Einstein

I recently attended the Ramp UP virtual Marketing Summit. These tumultuous times are upending a lot of consumer behavior and accelerating change.

Here are some of the key takeaways.

Empathy based Marketing

  1. Lens of authenticity. Diversity and inclusion will play major role in marketing.
  2. Not product-based marketing but people-based marketing
  3. Companies will need to act local.
  4. Some companies are trying to help local B2B partners and championing their stories as part of marketing campaigns.

Social Listening is more important than ever

  1. Social-Listening through AI-ML based tools will gain more traction
  2. Brand Survey and Third-party vendor based brand study will continue to be relevant

Consumer Behavior Upended

  1. eCommerce is on the rise. (Shopify -the e-commerce giant reported total revenue for Q1 2020 of $470 million, a 47% percent increase year-over-year.)
  2. Video consumption has increased many-fold.

Linear TV(Traditional tv) to CTV(Connected TV)

  1. AD supported connected TV platforms will play a crucial role in Marketing
  2. Platforms like Roku and Amazon who have content, Audience and DSP will be the major players.
  3. Outcome based TV marketing in the future.

DSP stands for demand-side platform it allows buyers of digital advertising inventory to manage multiple ad exchange and data exchange accounts through one interface.

Traditional Gender based Audience Segments losing relevance

  1. Millennia’s are looking at gender as a spectrum rather than a binary

Cookie Less world will increase reliance on first-party data

  1. Trusted eco-system with trusted value exchange
  2. How to use persistent data across platforms is a challenge
  3. Safari is blocking 3rd party cookies now, Google chrome to do it in a couple of years.
  4. CDP will gain traction as companies will be forced to better use the first-party data
  5. Companies will need to put well-defined governance process on data rules. How data will leave the enterprise, does it need to be anonymized, scrubbed etc.
  6. Logged-In data will become valuable
  7. Focus on Data Compliance will increase

CDP stands for Customer Data Platform. It aggregates data from different touch points organizes and creates a single view of the customer. First-party data is the data companies collect from the consumers.

Walled Gardens become more powerful

Walled Gardens mean closed platforms. In the World of AD tech, it will be Facebook and Google. In a cookie-less world with access to user-data of billions of users these enterprises will become more powerful than ever.

Location based targeting will gain importance IN A COVID-WORLD

What is a cookie?

A cookie is a text file that is stored in your computer through the browser when you surf the internet. The term was coined by web-programmer Lou Montulli and is in use since 1995.

What is a first-party cookie?

Stored by the website you are visiting. They are here to stay.

What is a third-party cookie?

Created by a separate domain. Ex: When we click on a ad-link in a site or a social-icon, third-party server saves a cookie in our machines. These are mostly used by ad-retargeting services.

An Intro to B2C Commerce Developer Certification

I recently passed an interesting certification – Commerce Cloud Digital Developer. Commerce cloud is branded as Salesforce but under the hood it’s a distinctly separate product. Salesforce acquired Demandware in 2016 for $2.8B and rebranded it as B2C commerce cloud.

I wanted to share lessons-learned and my experience in general.

SFRA NOT SITE GENESIS

Coming fresh to the platform I had no legacy baggage. The certification focuses on SFRA not SiteGenesis. Routes not Pipelets.

CONTROLLER-MODEL-ROUTE

Understanding controller, models and middleware functions is crucial. You need to understand and remember the syntax of the controller functions. The test is going to check your knowledge on how controllers retrieve form data, uses the response to render the ISML template. The following is a list of items I think are crucial for the test.

  1. Forms.getForm
  2. res.render using JSON
  3. Middleware chaining for CSRF and cache
  4. Cartridge placement
  5. Append, Replace when to use
  6. Transactions

LOGGING

Logging is an important topic. I saw several questions in the test covering the following topics.

  1. File naming Convention
  2. Category based logging -when logs will be written
  3. Log message syntax
  4. When logging will be suspended, what’s the limit

OCAPI

OCAPI is a section which is vast and I was worried. There were very few questions on the actual resource URL’s maybe one question on OCAPI hooks. Having said that you must know the difference between GET, POST, PUT, PATCH and if there are restrictions on using them.

PAGE DESIGNER – CONTENT SLOT

Page Designer and Content-Slot questions were basic. Campaigns can be tied with content slots but not for page designers, when one becomes applicable versus the other. What kind of files are being used by Page Designer?

FORM – TEMPLATE

Understanding the folder structure is important as the questions will test your knowledge on how the folders will be structured. It pays well to understand each of the ISML tags. How localization fallbacks work for same region different language.

Webservice

  1. How to create service
  2. How to connect with SOAP
  3. Best practice

MERCHANT TOOLS – ADMINISTRATION

This is a section I had struggled as was not sure which one’s to focus. This is my post-test understanding.

  1. Ordering Section – Taxation
  2. Content Import
  3. Site Import
  4. Custom Object Grouping
  5. Setting up search parameters
  6. Search refinement
  7. Category based search
  8. How objects can be replicated

FEW OTHER ITEMS

  1. NPM Command
  2. Debug values of a script
  3. Tools to understand code performance
  4. Storefront toolkit

Hopefully this help!

Two Use Cases for SFMC to attain Customer 360

Integrating Marketing Cloud with AWS platform

These days, a significant percentage of customers are using the AWS platform for data ingestion. If Marketing Cloud is using the AWS platform as the source of customer data for the campaign orchestration and the data from the Marketing Cloud system is not syncing back to the AWS platform, it gets cumbersome to achieve a customer 360. The typical process will be to query the data from the SFMC system and manually push to the AWS platform, which will be time-consuming and marketers will not have a real-time sense of customer behavior.

We can build a quick solution without using any third-party connectors. For this solution, we will be using the external SFTP location.

Prerequisites:

Amazon Simple Storage Service (Amazon S3) is an object storage service. FTP can be set up for the S3 location. Amazon has started providing this service from 2018.

Steps:

  • Generate SSH key through command Terminal for Mac users.
  • Amazon S3 bucket can be encapsulated with FTP. The FTP will need an SSH public-private key for access.
  • Setup user access with the FTP location. An admin at the AWS side can set this up pretty quickly.
  • Register the SSH key in SFMC
  • Once the SSH is registered, we will register the FTP location as an external SFTP location in the SFMC system

And that’s all we need for extracting data extensions and data extract data directly to the S3 location.

AWS Lambda is a compute service that lets us run code without provisioning or managing servers. Python-based functions on AWS Lambda can be used to read from the S3 bucket and populate the data in the AWS redshift cluster.

 

Integrate Salesforce Audience Studio with Salesforce Marketing Cloud.

Salesforce Marketing Cloud-based email campaigns can be integrated with the Salesforce DMP platform, known as Audience studio. Salesforce Audience studio was formerly known as Krux and has been re-branded as Salesforce Audience studio. It can read from 1st party and 3rd party data sources and create audience segments with new insights.

A typical use case will be journey based email campaigns. We can send emails to a specific audience from Journey Builder.

  • DMP platform can track the audience across devices and builds an expanded view of the customer.
  • DMP platform can send this enriched data as CSV files to the SFTP location and then Marketing Cloud can use these segments as a source of Journeys.
  • This can be used for re-targeting

The email’s contents will need to have a special tag for the Krux pixels to fire. The tags can be selected from a drop-down in the content builder.

 

Salesforce Marketing Cloud Developer Certification – Lessons Learned

As someonSalesforce-Certified-Marketing-Cloud-Developer_RGBe, who had spent the last few years on the SFMC platform, I wanted to give it a shot. Apart from the Trailhead modules, I couldn’t find much information and the subject seemed vast. I relied on my hands-on experience and took the plunge anyway. Was relieved to see the “pass” on the screen!!

As I was reviewing my path to the certification, I think the most difficult part for me was to decide on areas to focus. Someone can easily spend time on areas which may not be relevant for the purpose of passing the certification. These areas can still be used extensively by a software engineer who is working on SFMC.

I wanted to share my experience and lessons learned, hopefully, it helps the next person to prioritize things a bit better than me and not spend too much time on study topics which may not be as relevant!

The exam has the following break up:

  1. Data Modelling-14%
  2. Programmatic Language – 35%
  3. API – 22%
  4. Data Mangement – 22%
  5. Security -7%

Total questions – 60 Passing Score – 63%

Data Modelling

  • Understand the Contact model. How contacts are created across different channels and linked through data designer.
  • Contact Deletion process. Consideration for Enterprise 2.0 accounts. The volume of contacts. Time period. How SFMC decided to delete contacts.
  • Data retention for Data extension. Data retention for send logs

Programmatic Language

  • The exam questions were very basic. Concentrate on the high-level concepts than the complete set of functions.
  • Loops, conditions, variable declaration, set values to a variable, commenting, error handling should be the primary focus.
  • How AMPScript and SSJS interact with each other
  • How to retrieve data from data extensions and write to data extensions. Lookup related data extension function.
  • There were no questions from Web Proxy or Guide Template

API

  • Get familiar with oAuth2.0.
  • How to get client-id and client-secret and use the bearer token in a REST or SOAP call
  • Adding contact to a Journey – API endpoints
  • Adding data to a data extension -API endpoints – ( I find Postman to be a very useful tool to run API tests)

Data Mangement

  • SQL queries – You should break them in smaller parts – timeout value
  • Inner vs outer join
  • How to query the date views
  • SQL functions like IsDate, Convert, Cast. Usage of the Case statement.
  • There was a particular question on _click and _sent, which if someone is not familiar with writing queries will not be able to answer.
  • My 2cents will be to write a few queries with the data views using the concepts of inner vs outer join.
  • Data extraction and File import. Query-based data extract vs tracking extract

Security

  • Salesforce Marketing Cloud doesn’t use Shield
  • Get familiar with different concepts of encryption at REST
  • Field-level encryption

That’s all folks!!

 

 

Architecting Marketing Cloud at scale – 10 items for your checklist

checklist-sfmc

The human animal differs from the lesser primates in his passion for lists. ~ H. Allen Smith
No matter how expert you may be, well-designed checklists can improve outcomes. ~ Steven Levitt
The checklist is one of the most high powered productivity tool ever discovered. ~ Brian Tracy

Enough on why we need checklists :). Here goes mine.

1. Contact Model:

In modern times, getting data is no more the challenge, getting too much of it is the new challenge. How do you make sense of the data? Do you understand how they are related? Which signals to use for segmentation and campaigns? This is where the contact model comes in. Simply put, this is a set of Data Extensions that are related to a key value, and they show how the subscriber is represented in Marketing Cloud.

2. Sandboxes:

Marketing cloud does not have sandboxes. We do not have a full copy or partial copy sandboxes, which can be promoted to a production instance. Just to make our life a bit easier, what we can do is to procure multiple business units. One Parent BU and have two BU’s within it, one can be used as a prod, and the other one can be QA. A bit of planning beforehand goes a long way. How to implement new changes? How to test email sends? Journeys? Early 2019 Salesforce introduced Deployment packages for Marketing Cloud. So, technically with shared email and Data extensions, we can copy that nice fancy journey we created to our production box with point-click.

3. Data Integration

Getting the data is no longer a technical challenge. Still, we should plan for it. From the point of creation to the data being available for a campaign, how long does it take? What happens if someone deleted their account? There are several ways to integrate data into Marketing cloud. File-based SFTP uploads. Mulesoft, Dell Boomi, Informatica based API integration. Data volume, east of change, cost are some of the criteria that should be considered for the integration,

4. Primary Keys

Data extensions are the main drivers in Marketing cloud. They store subscriber data, provide data to emails, journeys, mobile studio. We use them to create the contact model. One point that often gets overlooked is the ability to create primary keys for Data Extensions. Imagine a data extension with 25M records which stores a coupon code and you wanted to search for a specific coupon code for a subscriber in CA with login name XYZ. Without running a SQL query or filter, Marketing cloud does not provide many alternatives. Here, the primary keys come real handy. If my data extension had user login and state as a composite primary key. I can simply go to Contact builder and search for that user login or state. They also help in long-running queries.

5. SQL Query timeout

A question, I often encounter is what is the size limit of a Data Extension, Salesforce recommends retention and sizing, but there is no hard limit. I have seen data extensions upward of 200M without any specific issues. Having said that, running queries on those data extensions in conjunction with system data views like _sent, _bounce is a completely different ballgame. Before creating a SQL query, ask yourself, why do you need it? Out of the box reports, discover reports may be good alternatives. Data extracts from the Marketing cloud can be scheduled. If SQL queries are the only solution, then remember to break them up by dates or other criteria. 29 minutes is all it takes for Marketing cloud to say that it’s not going to run that query anymore.

6. Optimize All Subscriber view

This is a small task yet important. Salesforce support can optimize the all subscriber view, so it shows up subscribers when the list is huge. The default behavior is to render all the subscribers, for an account which exceed 100M, it means nothing ever shows up.

7. GDPR Compliance

How you would grow your data. Will marketers create new Data Extensions for sends? If user record is deleted, how should you remove the data from the Marketing cloud instance? Think of an account which has grown over the years, multiple marketing teams using it. Thousands of data extensions and then you are hit with GDPR. What do you do? I don’t know. What I know is we can set processes around how do we create new data. In the ideal world, the data sets should come from the integrations and within Marketing cloud, it should be segmented through filters and queries. Once a user opts out, unsubscribe should follow. If there is an external system which deletes user records, that also should have a way to sync with Marketing Cloud. Contact deletion is possible, It can only happen from parent BU and 1M at a time. More importantly, start with a plan on how to delete and archive data.

8. Verification of Processes

When we are talking about multiple data ingestions and millions of records each day, a lot of things can go wrong. Build process checks. Automation studio provides an activity named verification. If you are expecting an hourly feed of active users and it varies between 100K to a million, You can create a Data Extension size check through the activity and if it’s ever less than 50K, people who need to know to get the alerts. Similarly, create queries for data extension which are expected to grow over time. kind of an audit log.

9. IP Pools

I am assuming you have already warmed at least one IP. If we are talking about less than 1M sends, we are all good. If you envision your account to grow 10X. Maybe 20M sends in a day? Keeping an IP pool comes in handy, remember each IP will take 4-6 weeks to warm up. I will bucket 2M sends per IP.

10. Reporting and Analytics

Marketing cloud provides three ways to provide reporting data, out of the box reports which you configure, create extraction and push them to an FTP folder, run your own queries and filters and store the data in Data Extensions. Think which requires the least customization and least maintenance.

A bonus one

AMPScript and SSJS are powerful tools. They can create, read from, write to Data Extensions. Before designing a system which uses them, please keep in mind they have data retrieve limits of 2000 and 2500 records. SSJS offers ways to retrieve more records and you can also devise your own ways, something to keep in mind when you are designing the system processes.

 

De-Mystifying The World Of MadTech

martech-1 copy

“When you make the obvious mysterious, then the mysterious becomes unavailable.”

– Walter Darby Bannard

We would like to focus on Martech with MA tools to orchestrate journey-maps and use a tag-based DMP for creating a monetization model, ROI should be clear through the attribution model.  – Sounds cryptic, then please read on!

I had my struggle with the buzzwords, acronyms, and keywords while navigating the realm of Martech, Adtech, Madtech a.k.a Digital Marketing.

This is my humble attempt to de-mystify the scary acronym based multiverse of Digital Marketing. This is neither a technical write-up nor a functional road-map. This is more of a cheat sheet. If the Digital Marketing space is new to you, this blog should give you some pointers. Hopefully, next time when you are talking about Digital Marketing, you can concentrate on the substance rather than getting lost with the acronyms and buzzwords.

Let me first try to explain the data flow in digital marketing.

Just a tiny bit of detail, so things make a bit more sense.

Consumers are at the forefront of digital marketing and they create footprints whenever they reach a touchpoint. What is a touchpoint? A website, a mobile app, kiosk, call center. From a company’s perspective, some part of it falls in the known universe.

TyrelCorp knows Jim is their customer, registered through their website and interested in their warp-drive. Jim is also searching for warp-drives in Starlist which is a web-reseller of warp drive and downloaded an app named StarVoyager. This is the unknown universe or anonymous. The battle is to stitch the known and unknown. Why? Why take all this pain. So, when Startlist sells banner space in its website, Borg, the smart marketer from TyrelCorp can make sure he is targetting people like Jim.

Jim is a busy guy. He is not only buying ads, but he also sends a ton of emails sends push notification in the app, hosts Starforce( an event for showcasing cutting edge warp drives). He needs to know, when Jim finally buys the warp drive to voyage to the unknown, what triggered it. The ad, the roadshow or that great email campaign. So he can be ready for Spock, another customer who is in the market for a warp drive.

Once Jim and Spock have their warp drives, Borg wants to keep them interested in his product so he can sell ancillary products or just help them realize how great the product is and make them a life-long loyal customer.

Borg is not alone, he is a collective. There are business partners who share information with him, like Starlist. He also sometimes gives information from his known universe to others in the collective. And this, in a nutshell, is the World of Digital Marketing.

CRM – Customer Relationship Management

This is where TyrelCorp keeps the information about Jim. So Borg can engage his Nexus-9’s ( Next gen Sales-Androids) to communicate, nurture leads like Jim.

Products: Salesforce Salescloud, Microsoft CRM

CDP – Customer Data Platform

This is where Borg would like to stitch the information from CRM and any other systems where people are registering. This becomes one centralized system for customers.

Products: Segment, Tealium

DMP – Data Management Platform

The unknown and look-alikes fall in this universe. Where Borg’s quest to find Jim and people like Jim continues. DMP can be used for buying ads on different platforms.

Products: Adobe Audience Manager, Salesforce DMP

TAG

Tags are used to move data between websites and apps. In the simplest sense, they are Javascript which is embedded in a web page or a mobile app and they talk to a server with information like device-id, IP, etc.

Products: Google Tag Manager, Adobe Tag Manager

PIXEL

Pixels and tags are the same technology. They are crucial for web analytics, big data, capturing customer behavior.

1st Party Data

TyrelCorp’s own data is 1st party data.

2nd Party Data

Jim registered on Starlist and Borg have made an arrangement to get that data from Startlist. This data though not collected by TyrelCorp, it is the next best thing and known as 2nd-Party data. Remember someone’s first-party data is someone else’s 2nd party data.

3rd Party Data

Borg also buys information from Galactic Search Engine. He doesn’t trust the accuracy completely but still, it gives him an edge over other competitors. This kind of data is collected by entities who don’t have a direct relationship with the user.

Journey Map

Jim’s experience. He receives an email from TyrelCorp and clicks on it and goes to there website and registers. The representation of a customer’s journey across touchpoints.

Products: Interaction Studio, Journey Builder (Salesforce Marketing Cloud)

B2B – Business to Business

TyrelCorp and Starlist are B2B partners. If I have to give an old world example, it would be a car manufacturer like Honda, Nissan, and their dealers.

Products: Salesforce Pardot, Marketo

B2C – Business to Consumer

TyrelCorp to Jim.

Products: Salesforce Marketing Cloud

B2E -Business to Enterprise

Starlist is giving a promotion to its employees, they can get warp drives at half price. How does Tyrel Corp see Starlist now, both business and consumer? This is where things morph and get into B2E.

DSP – Demand Side Platform

DSP allows buyers of digital advertising inventory to manage multiple ad exchange and data exchange accounts through one interface.

Products: MediaMath, TradeDesk

SSP – Supply Side Platform

A technology platform to enable web publishers and digital out-of-home (DOOH) media owners to manage their advertising space inventory, fill it with ads and receive revenue.

Products: Salesforce Salescloud, Microsoft CRM

Social listening

It is the monitoring of your brand’s social media channels for any customer feedback and direct mentions of your brand or discussions regarding specific keywords, topics, competitors, or industries, followed by an analysis to gain insights and act on those opportunities. When TyrelCorp is sending the email blast they want to see in Earth who are twitting about Warp-Drives and if the sentiment is positive about space travel during that time.

Products: Social Studio(Salesforce Marketing Cloud), Sprinklr

Attribution

From Wikipedia:: “Marketing attribution provides a level of understanding of what combination of events in what particular order influence individuals to engage in the desired behavior, typically referred to as a conversion”

Products: Bizible

AdTech

The term “ad tech,” which is short for advertising technology, broadly refers to different types of analytics and digital tools used in the context of advertising

MadTech

MadTech is the confluence of Marketing, Advertising, and Technology.

MarTech

Grouping of technologies that marketers leverage to conduct and improve their marketing activities.

MA -Marketing Automation.

A platform which helps orchestrate campaigns, email sends, push notifications.

Products: Marketo, Salesforce Marketing Cloud, Eloqua

Some other buzzwords to know, look-alike modeling, predictive analytics, audience segmentation. Maybe next time!

Disclaimer: Please note, the product list is just for quick reference and to get someone started on a google search and not a definitive list by any means!!

Intro To Marketo

marketo

I recently had the opportunity to work on Marketo which is a B2B Marketing Automation platform. Marketo came into existence around 2006. It’s a major player in the enterprise B2B space and it shares the space with similar tools like Salesforce Pardot and Oracle Eloqua.

In 2008, Marketo introduced its first product, Marketo Lead Management, followed by Marketo Sales Insight in 2009 and Marketo Revenue Cycle Analytics in 2010. In April 2012, Marketo completed its first acquisition by acquiring Crowd Factory, which enabled the company to integrate social media marketing capabilities into its application suite.

Marketo was acquired by Adobe in 2018 for $4.75 billion.

There is a tremendous amount of consolidation happening in this space and Marketo’s journey bears a testament to that.

As someone coming from a Salesforce Marketing Cloud background which is more about individual customer journey(B2C), my journey into Marketo was slow and tedious 🙂 .

If you are coming from an SFMC background, hopefully, this blog will give you some quick insight.

If you do not have a martech background, I hope the intro should still give you a good starting point.

Getting into Marketo

The best way to get access to Marketo is through corporate alliances that your company may have. Once you get to access it’s pretty straight forward. It’s a cloud-based setup and you will access Marketo through a URL. Marketo does not provide sandbox access to individuals.

Marketo Administration

Marketo has standard user management features. It supports users and roles.

Along with that it also supports audit trail for assets which would be handy when working on assets as part of a team.

screen shot 2019-01-19 at 5.08.57 pm

Marketo starts with Leads

In the world of Marketo, everything revolves around leads. How do we get leads in Marketo?

CSV import or sync with CRM systems. Marketo supports syncing with Microsoft Dynamic CRM and Salesforce and a ton of other systems with appropriate connectors.

Microsoft Dynamic CRM and Salesforce are the two most popular CRM’s that are integrated with Marketo.

What is Synced-Salesforce?

The following objects are synced:

  • Lead
  • Contact
  • Account
  • Opportunity & Role
  • Campaign & Members
  • User & Lead Queue
  • Task/Event
  • Custom Objects

The sync with Salesforce is bi-directional with a 5-minute interval. A lead in Salesforce can be passed into Marketo and once the lead has gone through the campaigns and nurtured to a promising state it can be taken up in Salesforce through the lead sync.

Some terms to know in the world of Marketo

Lists allow a marketer to organize a collection of leads. There are two types of lists within Marketo, static and smart. A static list is a fixed set of leads that a marketer can add or remove as they choose. A smart list is a dynamic collection of leads based on a set of designated characteristics. An example of a smart list would be “All leads who have an abandoned shopping cart in a website.” This smart list will continue to grow.

screen shot 2019-01-19 at 5.57.17 pm

Campaign Folders are at the top level which can be treated as folders. Within campaign folders, we can have programs and smart campaigns. Leads are added to campaigns. Anything smart means dynamic and based on parameters it will update.

Remember the trio of Program-Event-Campaign. As it pretty much all the structures in Marketo revolve around this.

There is three types of programs.

  • Engagement
  • Email
  • Event

A stream is created within a program. We set cadence to each stream after associating an email or event to it. For example, we can create streams like an early stage, medium stage, close to conversion and in each of the streams we can create a cadence to send emails, have a certain wait time and trigger various actions.

Leads belong to a list

screen shot 2019-01-19 at 5.36.50 pm

What are the channels?

  • Email marketing is used for sending emails. Marketo has a dynamic content capability.
  • Support A/B testing.
  • Marketo natively doesn’t support SMS. Nothing similar to the mobile connector mobile push within the tool.
  • Marketo supports landing pages and forms. We can create custom Marketo object and use them to populate data through Marketo forms.

Design studio in Marketo would be very similar to the Content Builder of SFMC. Marketo landing pages and forms would be equivalent to cloud pages.

screen shot 2019-01-19 at 5.37.47 pm

Marketo Forms

Marketo supports a  simple interface to create forms. Intuitive and mostly drag and drop.

screen shot 2019-01-20 at 8.33.22 am

screen shot 2019-01-20 at 8.34.48 am

Marketo Email Design

Template based email design.

screen shot 2019-01-20 at 8.30.53 am

screen shot 2019-01-20 at 8.29.40 am

Channel Orchestration

Marketo Flow is the closest thing to Journey Builder. It can be used to

  • Send Email
  • Call Webhook
  • Wait
  • Take account based actions

We can create a flow within the Marketo campaign. Flow supports drag and drop of various activities from a panel. Where marketers can create a sequential set of activities for leads.

screen shot 2019-01-13 at 9.51.00 am

Marketo API Support

Marketo exposes a REST API which allows for remote execution of many of the system’s capabilities.  From creating programs to bulk lead import, there are a large number of options which allow fine-grained control of a Marketo instance.

These APIs generally fall into two broad categories: Lead Database, and Asset.  Lead Database APIs allow for retrieval of, and interaction with Marketo person records and associated object types such as Opportunities and Companies.  Asset APIs allow interaction with marketing collateral and workflow-related records.

You will need access to the Admin menu and Launch point.

doc-rest-api-admin-web-services

Marketo Analytics and Lead Nurture

Marketo provides standard email engagement metrics. It also supports filter based reporting. Reports can be delivered based on different frequencies. Users can subscribe to reports to find out how many leads are at which stage of the revenue engagement cycle.

screen shot 2019-01-20 at 8.49.14 am

 

 

 

 

 

10 Ideas to implement in SFMC

HEADER image

I have been using Salesforce Marketing cloud for some time now. It’s a powerful tool and a lot can be accomplished. Having said that I have also noticed that we can take it to the next level through a few process implementations. Not too complex but do they require some preparation. In this blog, I am trying to share my lessons learned.

Full Disclaimer: I haven’t implemented all of them.

My hope is someone might get some inspiration and take them forward!

1.Error Handling:

It gets difficult to understand where the error is occurring when you have hundreds of scripts in automation studio and cloud pages. Debugging an issue can be a daunting task.

For all server-side scripting functions, we can have a simple construct where we use a data extension for error logging.

In the below code snippet I have used a data extension named Global_Error_Log.From a try-catch block we populate the data extension, I added a small error description, current time, function name as meaningful information.

Code Snippet:

Platform.Load("core","1").                                                  //This is a global DE which should be used in the catch block            var de=DataExtension.Init('Global_Error_Log');                        try{}                                                                   catch(ex)                                                              {                                                                       de.Rows.Add(ErrorDescription:Stringify(ex)};                            }                 

2.Customize Send Logs

Each marketing cloud instance comes with a default DE for email send and SMS send. All email and SMS send are logged in this DE automatically. That’s great but we can do better. We can create custom fields in this DE and in the email or SMS send use AMPScript and use a variable with the same name. If we populate this variable during send, the field in the DE will also get populated.

Let’s say we have a user_id that we are populating from the CRM system. We can create a data attribute in the send log DE for the user_id and use an AMPScript variable during the email or SMS sent to populate that. This feature is really helpful when we have to do custom reporting based on subscribers.

3.Retrieve Data Extension definition

The use case for this functionality would apply to scenarios where we would like to create a large no of data extensions on the fly. We would like to iterate through all the data extensions in a marketing cloud instance and then retrieve the details of the individual functions something in similar lines below.

To retrieve all the Data Extensions from a BU, You cannot use the  REST API and you have to go to SOAP. We can use an API client like Postman or download SDK for marketing cloud and use a language like Python.

var birthdayDE = DataExtension.Init("birthdayDE");
var fields = birthdayDE.Fields.Retrieve();

We can save the name of the data extension and the resulting field JSON in a target data extension and that becomes a crude DB backup.

4.Server-side JavaScript to create DE

This is an extension of point#3 where we use a data extension which contains all the DE name and the corresponding JSON. We iterate through the DE and create the Data Extension in a particular BU.

Code snippet:

The first code snippet creates a field in a data extension. We initialize the data extension and then create a new field through de.Fields.add functions.

The second code snippet creates the whole data extension and we put the JSON under the deObj at a single go.

var de = DataExtension.Init('SSJSTest');

var newField = {
  Name : "NewFieldV2",
  CustomerKey : "CustomerKey",
  FieldType : "Number",
  IsRequired: true,
  DefaultValue: "100"
};
var status = de.Fields.Add(newField);

var deObj={
"CustomerKey":"Read_Your_Value",
"Name":"Slalom_Rocks", SendableInfo:{ Field:{"Name":"Read_Your_Value","FieldType":"Text"}, RelatesOn:"Subscriber Key"}, "IsTestable":true, "Fields":[ {"Name":"FieldName","FieldType":"Number","IsPrimaryKey":true}, {"Name":"FirstName","FieldType":"Text","MaxLength":50}, ] }; var myDE=DataExtension.Add(deObj)

5.Copy all Journeys into JSON for migration

The Journeys are exposed through REST API.
We can Get the journey detail through the following GET REST call.
https://www.exacttargetapis.com/interaction/v1/interactions
From the resulting JSON get the detail of a specific journey.
https://www.exacttargetapis.com/interaction/v1/interactions/{7d870-2163-4601-af59-4d342a2acef1}
Create that journey with the following  POST API call.
https://www.exacttargetapis.com/interaction/v1/interactions
Now use the JSON to create a journey in a new BU.

6. Use Content builder API

In SFMC a folder, image, email are content. Content builder can be used to upload these contents.SFMC also comes with a powerful API. With any REST client, we can use the API to do an advanced search or do repetitive tasks.

Example use case:

There are thousands of content and you are trying to search for something specific.

Gets an asset collection by advanced query.

The following is a code snippet from Salesforce marketing cloud documentation.

Host: https://YOUR_SUBDOMAIN.rest.marketingcloudapis.com
POST //asset/v1/content/assets/query
Content-Type: application/json
Authorization: Bearer YOUR_ACCESS_TOKEN

{
    "page":
    {
        "page":1,
        "pageSize":50
    },

    "query":
    {
        "leftOperand":
        {
            "property":"version",
            "simpleOperator":"equal",
            "value":1
        },
        "logicalOperator":"AND",
        "rightOperand":
        {
            "property":"assetType.name",
            "simpleOperator":"equal",
            "value":"Template"
        }
    },

    "sort":
    [
        { "property":"id", "direction":"ASC" }
    ],

    "fields":
    [
        "enterpriseId",
        "memberId",
        "thumbnail",
        "category",
        "content",
        "data"
    ]
}

7. Use validate function of Automation Studio

Validate function can check Data Extensions for specific conditions and trigger emails. Let’s say there is critical automation that runs every night and typically it processes a million record. You want to stop the processing if the source DE has less than 100K record and also want to alert the System Admin. Validate function is the perfect candidate for this.

It checks the current record count of a specified data extension: If the record count falls outside a defined range, the activity sends an email notification, stops the automation, or both.

Automation Studio Verification

8.Enhanced Dynamic Content

Enhanced Dynamic Content lets you import into Content Builder a delimited file containing text and image URLs to create enhanced dynamic content for emails.

Instead of using AMPscript and data extensions to manually create complex dynamic content and the rules for each variation, the system creates the content from the data in your import file. Content Builder saves the assets as Enhanced Dynamic Content Maps in the content library that you can use as blocks in emails and templates. You can link your enhanced dynamic content to an audience during the import or while adding the blocks to an email or template.
Once we figure out which areas of email will change over time and based on what criteria the file can be structured pretty quickly.
This gives back control to the marketer to control the content and not depend on IT.
Let’s say the discount code changes based on the type of holiday. We can create a file mapping for it.
In case of last-minute data change requests no need to change the verified email. We only change our data file.

9.Learn to create Journey Builder custom Activity

The activities we drag into Journey builder are not limited by what we can drag onto the canvas. We can define our own activities. This is a powerful feature. Having said that we probably will need this very few times in our implementation.

If we are integrating with external systems for data updates based on user journeys this would be useful.

Use case: every time an email is sent to customer and he has not opened it in 7 days , I want to send direct mail. The direct email will be an integration with UPS and it will take customer’s current address as an input.

We can create a canvas activity for postal send. A marketer can use this as a drag and drop and visualize the whole customer journey.

Prerequisites :

Access to a hosting platform like Heroku.

Understanding of JavaScript and web architecture.

10.Create Dynamic Queries from server-side Javascript

For complex scenarios where audience segmentation is dynamic, we can create dynamic queries leveraging the query object.

I have put two code snippets as an example.

The first code snippet concatenates a string and prepares the query text. It initiates a query object.

The second function takes a query string and a query object and executes it.

function CreateDynamicQuery(){

var outreachGroupDE = DataExtension.Init(“Emp_Group_DE”);
var groupData = outreachGroupDE.Rows.Retrieve();

for (var i = 0; i < groupData.length; i++)
{

groupList=groupList.concat(groupData[i].PracticeName);
if(i < groupData.length-1)
{
groupList = groupList.concat(“,”);
}
}

groupList=groupList.replace(/,/g,”‘,'”);
var qd=QueryDefinition.Init(‘ Select_Group_By_Practice_Key’);
var queryName = “USE_DE”;
var query = “SELECT GroupName, PracticeName,LocalOffice,Role,”+ groupData[i].GroupName +”as GroupName from Emp_Info “;
query=query+ “WHERE PracticeName IN(‘”;
query=query+groupList;
query=query+”‘)”;

status = queryUpdatePerform(qd,queryName,query);

}
function queryUpdatePerform(qd,querytext,query)
{
try
{
var update_status = qd.Update({
Name : querytext,
QueryText: query
});
var perform_status = qd.Perform();
status = “{Update:”.concat(update_status).concat(“, “).concat(“Perform:”).concat(query).concat(“}”);
de.Rows.Add({ErrorDescription:status});
return status;

}
catch(ex)
{
de.Rows.Add({ErrorDescription:Stringify(ex)});
}
}