Augmenting MMP Data via S2S Integration
Overview
Liftoff offers server-to-server integration options in order to augment a standard MMP integration with additional data points for optimization.
Device Matching Identifiers
In order for optimization to work correctly, Liftoff will need to match your postbacks to an attributed MMP install and its upper-funnel engagements (e.g. click, impression). To perform this matching, we require at least one of the following IDs to be included with every postback.
We recommend sharing the third_party_tracking_token
whenever possible, since the IDFA’s availability is limited by Apple’s ATT framework and similar restrictions on the GAID are expected from Google in the future.
Parameter/Column Name | Description |
---|---|
third_party_tracking_token | Liftoff click or impression ID that the MMP attributes the user’s install to. |
If using this Matching Identifier, is_attributed is assumed to be 1, so there is no need to explicitly set this value. | |
mmp_tracker_device_id | A unique ID for the given install generated by the tracker/MMP on the first app open. |
If using this Matching Identifier, is_attributed should be set to 1. | |
gaid | Google Advertising ID |
If using this Matching Identifier, is_attributed should be set to 1. | |
idfa | Apple ID for Advertising |
If using this Matching Identifier, is_attributed should be set to 1. |
Hypothetical User Flow
- Mobile user clicks on Liftoff ad.
- Liftoff redirects user to MMP.
- MMP stores click and redirects user to app store.
- Mobile user installs your app.
- MMP attributes the install to Liftoff and sends us a postback with the attributed click ID.
- Mobile user triggers in-app events.
- MMP attributes the events to Liftoff and sends postbacks with attributed click ID.
- Advertiser derives additional data points for the mobile user.
- Advertiser sends Liftoff S2S postback with MMP-attributed
third_party_tracking_token
ID or one of the matching identifiers outlined in the chart above.
Sending Data to Liftoff
Realtime Postbacks
For each additional event (e.g., purchase) or data point (e.g., LTV prediction) you generate, you send an HTTP GET request to our servers.
Postback URL Template
http://analytics.liftoff.io/customer_tracker/v1/{liftoff_app_id}/events?third_party_tracking_token={third_party_tracking_token}&mmp_tracker_device_id={mmp_tracker_device_id}&client_ip={client_ip}&idfa={idfa}&google_aid={google_aid}&event_name={event_name}&event_timestamp={event_timestamp}&bundle_id={bundle_id}&revenue={revenue}¤cy_code={currency_code}&is_ad_revenue={is_ad_revenue}&is_attributed={is_attributed}&is_first_event={is_first_event}&platform={platform}&install_timestamp={install_timestamp}&os_version={os_version}&is_viewthrough={is_viewthrough}<v_score={ltv_score}<v_model_version={ltv_model_version}
Macros
Values in curly braces within the postback template above denote macros that should be replaced with the relevant information for each postback according to these definitions:
Macro | Description |
---|---|
{liftoff_app_id} | Required. Liftoff-specific app ID (found in the developer page within the customer dashboard). |
{third_party_tracking_token} | The unique click/impression ID for the engagement attributed by the MMP. |
{mmp_tracker_device_id} | A unique ID for the given install generated by the tracker/MMP on the first app open. |
{idfa} | Apple’s identifier for advertising (empty for Android). |
{google_aid} | Google Play advertising identifier (empty for iOS). |
{event_name} | The name of the event that the postback corresponds to, e.g., “purchase.” |
{event_timestamp} | The timestamp that the event occurred at, in seconds since epoch (e.g., “1407259958”). |
{is_attributed} | “1” when the event should be attributed to Liftoff; “0” otherwise. |
{client_ip} | The device’s IP address. For the most accurate data, use IPv6 whenever available. |
{platform} | Either "ios" or "android." |
{revenue} | Non-zero for events which have a transaction amount associated with them. |
{currency_code} | 3-letter ISO 4217 currency code for the associated revenue (e.g., “USD”). |
{is_ad_revenue} | “1” when the event revenue was generated via in-app advertising. |
{is_viewthrough} | “1” when the event was attributed to Liftoff because of an impression; “0” when attributed via a click. |
{is_first_event} | Whether this is the first time this event has been triggered for this user. |
{device_model} | String representing specific device model type, e.g., “iPhone14,7.” |
{language} | Device language, e.g., “en-US.” |
{user_agent} | The device user agent (e.g., "Mozilla/5.0 ..."). |
{os_version} | The version of iOS or Android the user is running. |
{install_timestamp} | The timestamp the corresponding install occurred at, in seconds since epoch. |
{ltv_score} | Required for pLTV optimization only. Numeric score representing the predicted lifetime value of an acquired user. |
{ltv_model_version} | Required for pLTV optimization only. The version of your LTV model, if you track them. |
Batched Postbacks via S3
You can also provide the same data via a scheduled job that uploads CSV files into an S3 destination. This option may be less optimal than realtime postbacks because it introduces a delay in information sharing.
File Specifications
- The column names should adhere to the mapping specified in the macros table above (without the curly brackets). For example,
{tracking_token}
should be stored within atracking_token
column. - New events should be uploaded at a regular cadence—typically hourly or daily.
- Files should be uploaded with the appropriate extension (
.csv
,.tsv
,.csv.gz
,.tsv.gz
). - Uploaded files will be automatically deleted after 14 days.
File Extensions
Extension | Description |
---|---|
.csv | Indicates a standard comma-delimited file. |
.tsv | Indicates a tab-delimited file. |
.csv.gz | Indicates a gzipped, comma-delimited file. |
.tsv.gz | Indicates a gzipped, tab-delimited file. |
Credentials & Destination
The specific S3 bucket, AWS credentials, etc., will be provided by your Liftoff account team once integration has been approved.