Skip to main content Skip to complementary content

CDP overview

Qlik Application Automation for OEM has a unique feature to improve the implementation of data synchronization templates called the CDP (Central Data Platform).

The CDP should not be confused with a Customer Data Platform.

The Qlik Application Automation for OEM CDP is a central database used as intermediate storage (cache) to implement data synchronization templates.

Benefits of the CDP

  • Unified data model
  • Ability to re-use automations in multiple Bundle templates (thanks to the unified data model)
  • Central storage of the id's of an object from both source and destination (the CDP object has a direct link to its source object and its destination object)
  • Smart detection of changes which eliminates endless loops in 2-way sync: if you update a record in the CDP and it has no changes, the timestamp last update will not increase and no webhook will be triggered.
  • CDP Viewer (under menu item My CDP) to see and search all the data stored in the CDP

CDP Datamodel

The CDP has a fixed data model. The goal is to unify integrations by mapping data from a given cloud platform to the CDP unified data model.

Custom fields can be added to objects, in order to store data that does not fit the CDP unified data model.

The CDP also has a table for custom objects, this table can be used to store any type of data, e.g. invoices, orders etc. A custom object has a key which should be unique and a value. The value can contain any object.

CDP tables

New tables are added on a regular basis. Check the CDP connector in the automation editor for up-to-date information on the datamodel. Below is a list of current tables (object types) and for each table the FK's (foreign keys, links to other tables).

CRM tables:

  • Companies
  • Contacts
    • optional FK's: company_id

EventTech tables:

  • Events
  • Attendees
    • optional FK's: event_id
    • extends Contact
  • Exhibitors
    • optional FK's: event_id
    • extends Company
  • Sessions
    • optional FK's: event_id
  • Session registrations
    • required FK's: session_id, attendee_id
  • Speakers
    • optional FK's: event_id
    • extends Contact
  • Sponsors
    • optional FK's: event_id
    • extends Company
  • Exhibitors
    • optional FK's: event_id
    • extends Company

Cloud Telephony tables:

  • Calls

General/other tables:

  • Invoices
  • Custom objects

How the CDP is used

A typical integration template using the CDP will consist of at least 2 automations:

  • One automation to read data from a source platform and store it in the CDP
  • One automation to read data from the CDP and send it to a destination platform

The automations are combined in an integration template using the Bundle Templates concept. A Bundle is a grouping of automations that form one template. See the article on Bundles for more information.

Thanks to the CDP, automations can be reused in multiple Bundles. Let's say you have to create 10 integrations from various CRM's to a marketing automation tool called ACME. Without the CDP, you would build 10 integration template automations:

  • Salesforce –> ACME
  • Hubspot –> ACME
  • MS Dynamics –> ACME
  • Etc.

With the CDP, you would build 10 Bundles. Example:

  • Bundle Salesforce:
    • automation Salesforce –> CDP
    • automation CDP –> ACME
  • Bundle Hubspot:
    • automation Hubspot –> CDP
    • automation CDP –> ACME
  • Bundle MS Dynamics:
    • automation Dynamics –> CDP
    • automation CDP –> ACME
  • Etc.

As you can see above the automation CDP –> ACME can be reused in each template.

CDP Basic usage

This section covers the various uses of the CDP.

Reading data

We'll use Contacts as example, but the available Blocks are identical for other object types:

  • List contact: returns all contacts
  • Search contacts: search on one field
  • Search contacts advanced: ability to perform AND/OR on multiple fields
  • Get contact: get one record by id
  • Get contact by field: get one by any field (e.g. email =


You can build Triggered automations that listen to CDP Webhooks. The CDP will trigger a Webhook when data is added, updated or deleted. Example:

Running a Webhook through an automation.

alt text

Use Exclude from source to ignore updates coming from one source.

The Test payload is the incoming payload that will be used when you test the Triggered automation with the Test Webhook button. The default test payload shows you which data will be available. Note that the payload will include e.g. the source of the event (e.g. Salesforce).

The CDP will not trigger a webhook when a record is updated but no fields were changed.

Writing data

The CDP uses Upsert blocks that will perform an insert or update. The Where section in the inputs are used to define how to find existing records to update. In the following example, the contact with email will be updated with a new email address

Updating an email address.

An Upsert Contact block. Key is set to email, and Value is set to

External id's and sources

The CDP can store the id of the record from an external platform, this is called the external_id in the CDP, and is always combined with a source. The source can be anything, but make sure to use the identical naming throughout.

Each record can have multiple external_ids, one for each source. The external_ids are stored in the object as follows (even if there is only one):

  "id": "...",
  "email": "",
  "external_ids": {
        "Hubspot": "12345",
        "Salesforce": "6789"

As you can see, each source becomes a key under the property external_ids. The external_id can be retrieved with following path (assuming the source is Salesforce):

{ $.getContact.external_ids.Salesforce }

Records can be upserted using their external_id as follows:

Upserting a record.

An Upsert Contact block in the loop of a List Contacts block. The Upsert Contact block is selected. External id is set to List Contacts > Item > Id, and Email is set to List Contacts > Item > Email.

Note that the external_id is mapped both in the input field (External Id) and in the Where section. The same is true for the source:

What is mapped where.

The external_id dropdown. The Key is set to external_id, and Value is set to List Contacts > Item > Id.

The source dropdown. Key is set to source, and Value is set to Salesforce.

Custom objects

The Table Custom objects in the CDP can be used to store any type of object, e.g. an Order or Product. Each custom object has a key which is unique and a value. The value can be any object with properties/values. Example to insert/update a custom object using its key:

Upserting by key.

An Upsert Custom Object By Key block. Key is set to product_001.

You can also use the more generic Upsert Custom object, which has a Where section to define the fields to search for existing records.

Similar to other objects in the CDP, can Custom objects also have external_ids (always combined with a source).

CDP scope

The CDP is private per customer account, and by default the data is shared between all automations from that account that read data from the CDP and write data to the CDP.

You can also limit the scope by adding a scope to all CDP blocks that you use (including CDP Webhooks blocks). A scope can be anything (e.g. the name of a project, or a guid). A very common scope is a bundle guid, see below.

Limiting the scope to one bundle

Use the placeholder { bundleguid } as scope to limit the scope of all automations in a Bundle to one single bundle. This is needed to avoid processing data from other bundles, in case more than one integration is active in a single account.

An additional benefit is that when an integration is deleted and activated again, this will be a new bundle and thus also a new scope. This avoids CDP data from a previous installed integration being used in the new instance.

Note: a template should delete all its data from the CDP when the instance is deleted by the user. This is accomplished by using the Delete flow in the template, combined with blocks Delete records by scope.

Did this page help you?

If you find any issues with this page or its content – a typo, a missing step, or a technical error – let us know how we can improve!