Reconciling your xDB Contact Data

SitecoreReconcile.png

Who’s using Sitecore’s marketing functions?

Let’s face it. Getting into Sitecore marketing operations is not easy. The vast majority of the ~4,500 Sitecore customers don’t use it for more than a CMS. Of the organizations that use Sitecore for marketing, we’ve seen mostly limited use of 1 or 2 functions. Very few are using Sitecore as an end-to-end MarTech solution that’s integrated into the organization’s line of business application (e.g., CRM, POS, ERP, etc.).

For that subset of clients that are all-in, it’s critical to ensure that your xDB contact data matches your line of business application; that you’re not missing any contacts within your customer segments.

Why do we need to reconcile contact data?

The obvious reason is to ensure that we’re delivering the right experiences to the right customers. If our segmentation logic is flawed or we don’t have our systems configured correctly, we’re going to have a disconnect between actual and expected/desired outcomes.

Data informed. Tech powered. Outcome driven.
— I don't remember who said this. If you do, please DM me the name.

The other reason is a little softer, but equally important. It’s critical for marketers to have confidence in their analytics. If you can’t get consistent & accurate feedback on your marketing strategies & tactics, you can’t improve. Unexplainable variances lead to a lack of trust, which leads to lack of adoption, and/or abandonment of initiatives. And ultimately, the shiny & expensive marketing system sits idle.

To follow are a few things that we’ve done to get to a MarTech system that reconciles with the business.

Tips & tricks

xDB Peek

How do you know if a contact’s profiles, goals, campaigns, custom facets are coming across correctly? We use xDB Peek extensively to validate xDB configurations and troubleshoot when things go wrong. It’s a free download. You can learn more about it here.

Duplicate contact queries

SELECT email, count(*) as counts FROM [xdb_collection].[ContactFacets] i CROSS APPLY OPENJSON(i.FacetData) WITH ( email nvarchar(100) '$.PreferredEmail.SmtpAddress' -- and additional columns definitions ) j WHERE email != '' Group By email Order by counts DESC

It’s not uncommon to accidentally end up with duplicate contacts in xDB. That can happen due to improper input field set-up, incorrect list manager importing, etc.

If you run the SQL query to the right against each shard you’ll get a list of emails and a count of how many instances of the emails are in each shard. You shouldn’t have any duplicates. You’ll also need to combine each of the shard exports and look for duplicates to make sure that you don’t have duplicates across shards.

Validate the natural customer journey progression

Understand and document the different ways that we collect customer information during their journey with us. List out all the different data collection methods. That could be Sitecore forms, custom forms, bot services like Drift and inputs from line of business systems. If we’re not collecting & formatting data the same way across all input methods, we run the risk of duplicate contacts. Sitecore uses identifiers to track visitors (contacts) from unknown to known. Consistency is key here.

Single source of the truth (system of record)

A big part of xDB reconciliation is knowing what we’re reconciling to. What’s your organization’s single source of the truth? CRM, point of sale, ERP? Or, is your answer, ‘it depends’, with multiple systems in play? A lot of organizations can’t definitively point to a single source of the truth/system of record when it comes to their customer record. If you’re among them, you’ll have to recognize that you have work to do before turning your attention to Sitecore.

Reconciliation tests

segment1.png

Once you have that single source of the truth, you’ll want to build out a battery of tests that allow you to validate customer segment counts in xDB vs. what’s in your system of record. These tests can start off as segmented lists in List Manager. If you have Sitecore conditions that evaluate xDB facet data you can review the counts that you get in List Manager against the counts that you get in your system of record. The image above is a condition that returns all contacts that have a Membership Status = ‘Renewed’. That should match the membership management system exactly. If not, we have a problem. These type of tests can also be accessed via API and integrated into a recurring test automation suite.

Having the systems and processes in place to be able to empirically prove that your data is accurate will ensure that you’re building your marketing programs on a strong foundation.