Demandbase is a popular Account Based Marketing and “Go to Market” solution used by CaliberMind customers. We view CaliberMind and Demandbase as very complementary solutions for the savvy B2B marketer and there are a variety of use cases.
CaliberMind + Demandbase can offer many synergies and inte two core use cases for CaliberMind Customers:
- ABM advertising + Orchestration measurement
- Blended engagement scoring signals
- Visitor Account-Level Deanonymization
Use Case #1 – Using CaliberMind to Attribute Demandbase ABM Advertizing campaigns
Why do this? – CaliberMind provides a vendor-agnostic source of truth for marketing reporting. As a best practice we can lower Cost of Acquisition and optimize Ad Spend using this method!
Pre-requisite: Demandbase Campaign IDs are appended to the UTMs in a set parameter. For more information see: UTM Best Practices
- Option 1 – Datastream: If you have the Demandbase Datastream open a ticket in the calibermind.com/help portal to create a service-account user for DB to connect with. Once connected, DB will start to write data to the CaliberMind data warehouse. We will automatically start to attribute UTMs resulting in opportunity-related touches!
- Option 2 – If you don’t have the Datastream enabled, you can manually input the ad spend data into CaliberMind via and SFTP or Google Sheets, using the template found in this article.
After you do this please reach out to your CSM to confirm and help QA. The end result is being able to measure ROAS for ABM Campaigns.
Use Case #2 – Using CaliberMind to blend Demandbase scoring and segmentation
Why do this? – Both CaliberMind and Demandbase have capabilities around scoring and segmentation. Marketing Operations generally likes to avoid duplicative processes. Luckily, segmentation lists and scoring values can be passed between systems using the CRM as an intermediary. For example, Demandbase can add a target list to a campaign in SFDC then CaliberMind can be used to follow and track attribution against the list. Ultimately this can save time and duplicate work, driving towards a source-of-truth and alignment across teams.
There is no one-size-fits all approach to this type of integration, but luckily CaliberMind can work with any custom fields or objects managed by Demandbase. Just Slack us or email your CSM a question about how this could work. There are amazing possibilities with a unified segmentation and scoring strategy!
Use Case #3 – Using CaliberMind and Demandbase to enrich anonymous visitors
Why do this? – CaliberMind provides a unified buyer journey across all data sources. Our analyticsJS web tracker has the robust capability to seamlessly read the Demandbase visitor intelligence signals and pull them onto the buyer journey.
- See when accounts are visiting your site that are not yet in the CRM, leading to new account targeting.
- Provide a more complete buyer journey for engagement scoring– blending in semi-anonymous data from Demandbase. Scoring visitors and accounts that have not yet converted!
Pre-requisite: Demandbase IP-enrichment script AND the CaliberMind AnalyticsJS page script is deployed: Deploying CaliberMind Page Script.
There is a two step process to integrate CaliberMind AnalyticsJS with Demandbase web data.
- Deploy a Javascript “Listener” script in your website footer. The listener script will check for Demandbase data on the page and pull it into your warehouse. Once the listener see the DB script fire, it will add the visitor to a new “group”. Groups in AnalyticsJS are organizational attributes about the visitor. For Example: Demandbase may tell us a certain visitor is from ibm.com. We can then signal in CaliberMind to show IBM as showing intent on the buyer journey.
- Contact your CSM to enable data blending for your web tracker data.
That’s it.. You are now enriching visitors in your web tracker and you’re ready for anonymous scoring and attribution!
Here’s a sample code to implement an AnalyticsJS listener for Demandbase:
Deploy this code in at the bottom of your page just above the </body> tag.
<script type="text/javascript">
// Declare checkInterval variable at a higher scope
let checkInterval;
// Function to check if Demandbase data is available and make the analytics call
function checkForDemandbaseAndTrack() {
// Check if Demandbase and IP data exist
if (window.Demandbase && window.Demandbase.IP) {
// Extract company information from Demandbase data
const dbData = window.Demandbase.IP;
// Create a group ID - using registry_company_id or company_name
const groupId = dbData.CompanyProfile.web_site || dbData.company_name || "unknown_company";
// Use the named attributes as companyTraits
const companyTraits = {
company_vendor_id: dbData.CompanyProfile.company_id || '',
company_name: dbData.CompanyProfile.company_name || '',
company_domain: dbData.CompanyProfile.web_site || '',
company_industry: dbData.CompanyProfile.industry || '',
company_revenue: dbData.CompanyProfile.revenue_range || '',
company_size: dbData.CompanyProfile.employee_range || '',
company_street: dbData.CompanyProfile.street_address || '',
company_city: dbData.CompanyProfile.city || '',
company_state: dbData.CompanyProfile.state || '',
company_zip: dbData.CompanyProfile.zip || '',
company_country: dbData.CompanyProfile.country_name || '',
company_phone: dbData.CompanyProfile.phone || '',
company_segment: dbData.CompanyProfile.audience || '',
company_fit:''
};
// Create traits object with datasource and payload first, then company traits
const processedTraits = {
// Add datasource first
datasource: 'Demandbase',
// Store full payload in a nested object
payload: dbData,
// Spread existing traits last so they appear after datasource and payload
...companyTraits
};
// Make the analytics.group call with the company data
if (window.analytics && window.analytics.group) {
analytics.group(groupId, processedTraits);
console.log("Demandbase data sent to analytics:", processedTraits);
} else {
console.error("Analytics.js library not found");
}
// Clear the interval since we've successfully processed the data
if (checkInterval) {
clearInterval(checkInterval);
console.log("Cleared check interval");
}
return true;
}
return false;
}
// Check immediately when the script runs in case Demandbase is already loaded
const initialCheck = checkForDemandbaseAndTrack();
console.log("Initial check result:", initialCheck);
// Only set up the interval if initial check didn't succeed
if (!initialCheck) {
// Set up an interval to periodically check for Demandbase data
checkInterval = setInterval(checkForDemandbaseAndTrack, 500);
console.log("Set up interval check for Demandbase data");
// Set a timeout to eventually stop checking if Demandbase never loads
setTimeout(() => {
if (checkInterval) {
clearInterval(checkInterval);
console.warn("Timed out waiting for Demandbase data");
}
}, 10000); // Stop checking after 10 seconds
}
</script>