White-labeling Solutions by Kayzen

A brief overview on white-labeling solutions required by enterprises.

Mitali Devasir avatar
Written by Mitali Devasir
Updated over a week ago

Kayzen provides multiple white-labeling solution for customers. This document covers requirements and information around different white-labeling solutions

Kayzen provides 3 main white-labeling solutions:

1.UI/Console White labeling - Customers can white-label Kayzen User interface

2.MMP White labeling - Customers can have a white-label integration with MMP, so that customers name is visible as a supported network in MMP dashboard

3.Reporting API White labeling - Customers can access and share Kayzen’s reporting api as a whitelabel solution


UI/Console White-Labeling

This is a walkthrough for customizing and white-labeling the Kayzen console. Kayzen console is what customers will be using to set up their campaigns and review performance and reports.

General requirements for UI White-Labeling

Please fill this form - https://forms.gle/Z2EJJxZrogysgKGh7 - this doc covers the requirements for the following aspects

  1. Billing details: This will be reflected when you click on the funds in the UI

  2. Custom URL/domain: more info below

  3. Privacy URL, Terms of use, copyright text, etc. All of these will also be reflected in the UI for your customers

  4. Logo

  5. SMTP details: In order to add support for sending campaign related emails from your own email domain

Custom DSP URL / domain

1. Let us know the desired URL but take in consideration that you need to own the domain. Please add it in the form under "DSP custom URL". Eg www.mydomain.com

2. One of our developers will request a certificate for that domain in ACM, do the DNS validation, and get the validated CNAME

3. We will send you the validated CNAME + CNAME of the DSP domain itself pointing to console.kayzen.io

4. You should add the CNAMEs in your domain. Once done, we will finish the setup from our side and you should be able to access the Kayzen console using the custom domain


MMP white-labelling

Creating your own integration with MMP’s using Kayzen’s infrastructure

  1. Please start a thread with your MMP, for example with Appsflyer, asking for a new ad network / modular partner integration.

  2. You will be asked to fill some general forms, and will be asked to provide the following information:

  • Global click URL format - containing all supported parameters to be sent to the MMP at the moment of a click (this will be used for the impression url as well)

  • Global install postback URL - containing all expected parameters to be received

  • Global in-app events postback URL

  • As a good practice ask the MMP to enable passing non-attributed data, retargeting and view-through attribution.

3. After this, the integrations team from the MMP should enable the account and give you access to the dashboard.

Recommendations:

Use a generic email “admin@companyname.com” for the owner of the MMP dashboard.

You can share the credential with Kayzen this will help investigating dicrepancies or issues.

Impression & Click Trackers Templates

You will find below impression and click tracker templates for some of the MMPs integrated with Kayzen. You can get more information on the macros used in the trackers here.

Impression Tracker

Click Tracker

Impression Tracker

Click Tracker

Parameters:

  1. <tracker_identifying_network_for_an_app> - An ID identifying your integrated network for an app. Generated by Adjust

  2. tracker_limit [Optional] : Default: 10,000; Max: 250,000. Use if for increasing the tracker limit.

This can be added to impression/click url, for eg. this is how the click url will look like

Note: Trackers are used to record data against a network, campaign, adgroup and creative.

A network tracker can have 10,000 unique campaign sub-trackers, a campaign level tracker can have 10,000 adgroup sub-trackers and an adgroup level tracker can have 10,000 creatives under it.

All data for trackers generated past that number will be shown in the Adjust dashboard as 'unknown'.

Increasing the tracker limit can slow down the adjust’s dashboard, so optimize the campaign structure especially adgroup macro.

Impression Tracker

Click Tracker

Parameters:

  1. network_id=<your_network_id>- This is a unique id that will be provided by Kochava

To summarize refer to this table below, you can customize the trackers based on your requirements, refer to the macro document we have here.

Kayzen Macro

Appsflyer

Adjust

Kochava

{CAMPAIGN_NAME}

c

campaign

partner_campaign_name

{CAMPAIGN_ID}

af_c_id

partner_campaign_id

{CREATIVE_NAME}

af_ad

creative

creative_name

{CREATIVE_ID}

af_ad_id

creative_id

{EXCHANGE_NAME}

af_channel

exchange_name

{EXCHANGE_ID}

exchange_id

{CONVERSION_ID}

clickid

impression_id/<integration>_click_id.
For Kayzen it is kayzen_click_id.

impression_id

{DEVICE_PLATFORM_ID}

advertising_id/idfa

idfa/gps_adid

device_id

{APP_BUNDLE}

af_siteid

adgroup

{APP_ID}

publisher_id

site_id

{APP_NAME}

app_name

{COUNTRY_CODE}

country_code

{CREATIVE_TYPE}

af_ad_type

{DEVICE_OS_NAME}

os_name

device_os

{DEVICE_OS_VERSION}

os_version

device_os_version

{USER_IP}

af_ip

ip_address

ip_address

{USER_AGENT}

af_ua

user_agent

device_ua

{DEVICE_LANGUAGE}

af_lang

language

{GPS_LON}

user_lon

{GPS_LAT}

user_lat

{MODEL_NAME}

device_name

device_model

{MANUFACTURER_NAME}

device_vendor

{DEVICE_TYPE}

device_type

{AD_PLATFORM}

ad_platform

{CARRIER_NAME}

device_carrier

{ZIP_CODE}

user_zip

App Event's Postback Template

The structure is same for install and post install events i.e. just the event name will change as a value of the attribute "app_event". Events generating revenue should have revenue fields in the postback.

The following table details mandatory and recommended parameters by Kayzen. Please note this is not an exhaustive list since each MMP can send other parameters as well but ensure to include the mandatory fields.
We have added sample postback templates in the end for your perusal.

All means supported by Appsflyer, Adjust, Kochava
*Mandatory field

Parameter

Description

MMP

api_key*

Unique api key for your account/ app/website. You can get this api_key from Kayzen UI

All

gaid*

Google unique advertising ID

All

idfa*

iOS unique IDFA

All

app_event*

Name of the event that you have recorded. eg: app_open, registration, purchase etc.

All

can_claim*

Is attributed to Kayzen flag.

All

view_through*

Flag for indicating view through installs

All

bid_id*

Pass through parameter. Pass the click_id that was recorded when the user clicked on ad.

All

integ_cust*

Agency name integrating with the MMP. Hardcoded.

All

event_items

For any event, you can pass multiple event in a JSON format.

Appsflyer, Kochava

is_reengagement

Flag for re-engagement

All

revenue_USD

Revenue in USD

Appsflyer, Kochava

revenue

Revenue, as sent from MMP SDK in cents

Adjust

currency

Original ISO 4217 currency code

Adjust

revenue_usd

Revenue, in US dollars.

Adjust

os

OS. eg. Android, iOS

All

osv

OS Versions

All

ip

User IP

All

user_agent

User agent

All

country_code

Alpha 2 country code

All

city

Device city

All

app_id

Exchange specific App ID

Appsflyer, Adjust

app_name

Name of the app

Appsflyer, Adjust

app_version

App version number (Android); build-version-number for the bundle (iOS)

Appsflyer

sdk_version

MMP sdk version for the app

Appsflyer

match_type

Attribution method

All

click_ts

TIme of click

Appsflyer

install_ts

Time of install

Appsflyer

environment

Indicates production or sandbox activuty

Adjust

gp_referrer_click_ts

Google Play Referrer Click Timestamp

Appsflyer

gp_referrer_install_ts

Google Play Referrer Install Timestamp

Appsflyer

wifi

Flag for wifi

Appsflyer

carrier

Carrier Name

Appsflyer

activity_kind

Type of event. For eg; event, install, impression

Adjust

created_at

Activity timestamp

Adjust

model

Device Model

Adjust

device_model

User device model

Appsflyer, Kochava

device_type

Phone/Tablet

Adjust

device_brand

User device brand

Appsflyer, Kochava

session_length

Length of the user session

Adjust

lifetime_session_count

No. os sessions recorded across entire user lifetime

Adjust

is_unique

Adjust

unique_id

Adjust

is_organic

Flag for organic traffic

Adjust

conversion_duration

Time between click and install or attributions in seconds

Adjust

installed_at

Time of install

Adjust

is_reattributed

1 if user was reattributed at least once from an earlier source; 0 if user has never been reattributed

Adjust

eventtime

Time of the event

Appsflyer, Kochava

network_name

Name of the network responsible for the event conversion.

Kochava

attribution_time

Time that the attribution occurred.

Kochava

app_limit_track

The limit_tracking flag, as set by the developer within the app.

Kochava

device_limit_track

The limit_tracking flag as set by the user within the OS of their device.

Kochava

hours_played

Optional event attribute key.

Kochava

sessions_played

Optional event attribute key.

Kochava

duration

Optional event attribute key.

Kochava

referral_from

Optional event attribute key.

Kochava

attribution_window

Optional event attribute key.

Kochava

Sample Postbacks

Appsflyer

https://api-events.eventstracker.io/v1/ev?tp=appsflyer&api_key=<unique api key>&gaid={advertiserId}&idfa={advertiserId}&app_event={event-name}&event_items={event_items_json}&ip={ip}&eventtime={timestamp}&country_code={country-code}&city={city}&language={language}&device_model={device-model}&device_brand={device-brand}&osv={os-version}&can_claim={is_attributed}&bid_id={clickid}&is_reengagement={is-retarget}&is_reattribution={is-reattr}&revenue_USD={monetary}&app_id={app-id}&app_name={app-name}&app_version={app-version-name}&sdk_version={sdk-version}&match_type={match-type}&campaign={c}&click_ts={click-ts}&pub_id={af_siteid}&install_ts={install-unix-ts}&currency={currency}&rejected_reason={blocked-reason}&rejected_reason_value={blocked-reason-value}&gp_referrer_click_ts={gp_referrer_click_ts}&gp_referrer_install_ts={gp_referrer_install_ts}&view_through={is-impression}&os={platform}&wifi={wifi}&carrier={carrier}&user_agent={user-agent}&appsflyer_id={appsflyer_id}&attributed_touch_type={attributed_touch_type}&blocked_sub_reason={blocked_sub_reason}&bundle_id={bundle_id}&idfv={idfv}&is_lat={is_lat}&is_primary_attribution={is_primary_attribution}&campaign_id={af_c_id}&af_ad_id={af_ad_id}&ad_ad={ad_ad}&integ_cust=<client_name>

Adjust

https://api-events.eventstracker.io/v1/ev?tp=adjust&api_key=<unique api key>&gaid={gps_adid}&idfa={idfa}&activity_kind={activity_kind}&event_items={partner_parameters}&ip={ip_address}&created_at={created_at}&country_code={country}&city={city}&language={language}&user_agent={user_agent}&model={device_name}&device_type={device_type}&os={os_name}&osv={os_version}&session_length={time_spent}&lifetime_session_count={lifetime_session_count}&deeplink={deeplink}&bid_id<click_imp_passthrough_variable>&can_claim=1&is_unique={nonce}&unique_id={random}&app_id={app_id}&app_name={app_name}&view_through={impression_based}&is_organic={is_organic}&conversion_duration={conversion_duration}&installed_at={installed_at}&click_time={click_time}&click_attribution_window={click_attribution_window}&impression_attribution_window={impression_attribution_window}&reattribution_attribution_window={reattribution_attribution_window}&inactive_user_definition={inactive_user_definition}&match_type={match_type}&is_reattributed={is_reattributed}&app_event=<the_event>&install_begin_time={install_begin_time}&install_finish_time={install_finish_time}&user_agent={user_agent}&network={network_name}&revenue_float={revenue_float}&revenue_usd={revenue_usd}&currency={currency}&campaign_name={campaign_name}&adgroup_name={adgroup_name}&creative_name={creative_name}&is_s2s={is_s2s}&impression_ts={impression_time}&engagement_ts={engagement_time}&reattributed_ts={reattributed_at}&connection_type={connection_type}&cpu_type={cpu_type}&hardware_name={hardware_name}&network_type={network_type}&device_manufacturer={device_manufacturer}&proxy_ip={proxy_ip_address}&adjust_device_id={adid}&idfv={idfv}&web_uuid={web_uuid}&mobile_country={mcc}&mobile_network={mnc}&isp={isp}&platform={platform}&tracking_enabled={tracking_enabled}&tracking_limited={tracking_limited}&revenue={revenue}&currency={currency}&app_version={app_version}&referral_time{referral_time}&received_at={received_at}&sdk_version={sdk_version}&environment={environment}&integ_cust=<client_name>

Kochava

https://api-events.eventstracker.io/v1/ev?tp=Kochava&api_key={kayzen.api_key}&idfa={idfa}&gaid={android_id}&app_event={event_name}&ip={ip_address}&eventtime={timestamp}&country_code={country}&city={city}&language={language}&device_model={device_type}&device_brand={device_brand}&osv={os_version}&can_claim={can_claim}&event_items={event_metadata}&bid_id={click/imp_id}&is_reengagement={is_reengagement}&network_name={network_name}&attribution_time={install_timestamp}&app_limit_track={app_limit_track}&device_limit_track={device_limit_track}&match_type={matched_by}&hours_played={metadata.hours_played}&sessions_played={metadata.sessions_played}&currency={currency}&duration={metadata.duration}&referral_from={metadata.referral_from}&view_through={is_viewthrough}&attribution_window={lookback}&user_agent={device_ua}&adid={adid}&campaign_id={campaign_id}&campaign_name={campaign_name}&tracker_id={tracker_id}&tracker_name={tracker_name}&site_id={site_id}&creative_id={creative_id}&device_version={device_ver}&revenue={revenue}&integ_cust=<client_name>


Reporting API White-labeling

This section is about white-labeling Kayzen’s reporting API.

Kayzen reporting api url is api.kayzen.io this will be renamed in accordance to your custom url

  1. Purchase a ssl certificate for the domain you want for eg. https://example-api-domain.com and provide us with all the files which is the certificate files (.crt) along with the instruction file

  2. Our team will set up the certificate.

  3. You’ll needs to add a CNAME to example-api-domain.com to point to whitelabel-api.kayzen.io

In the end will look something like this.

example-api-domain.com CNAME whitelabel-api.kayzen.io

Did this answer your question?