Skip to content
Get Help

Custom Exports API Overview

Overview ​

Benefits of Custom Exports API ​

Use the Branch Custom Exports API to find and queue log records that match your search criteria for export. You can do so either via the Custom Exports section in Branch or via the API (this page).

API limitations ​

LimitationDetails
Data availabilityThe data is typically available within 2 to 4 hours. However, under certain conditions, it may take as long as 6 hours.
Max number of records returned by APIIf you want to limit the number of records returned to 15 million or less, use the limit parameter.

If you need more than 15 million records returned, use the allow_multiple_files parameter instead and set it to true. When allow_multiple_files is set to true, the limit parameter is disregarded. It defaults to fitting 5 million records in a single file and provides multiple files depending on total record size.
Max number of days that can be queried at a timeThe maximum number of days that can be queried at once is 60.

Also, there is a restriction on querying more than 100 days of data within a one-hour window for the same app. For example, this could be 100 requests of 1 day each, or 4 requests covering 25 days each.
Rate limit for creating exports*• 10 requests per minute
• 25 requests per hour
Rate limit for checking the status of a report*• 50 requests per minute
• 1000 requests per hour
Exporting from test environmentsAt this moment, it is not possible to export data out of a Branch test environment.
Repeated requests within 60 minutes will be cachedIf you make identical requests within 60 minutes of each other, you will not see multiple export jobs running. Instead, the same export job is used. If you're using the API, the same job_id is returned. This is to avoid the case of hundreds or thousands of requests being made for the exact same data set, within seconds or minutes of each other. After 60 minutes, your request kicks off a new job to retrieve data.

You'll get the following response once you've hit the rate limit:

json
{
  "errors": [
    {
      "message": "Limit is exceeded for org-525983469347282987, retry after 3418 seconds",
      "error_code": 7
    }
  ]
}

Prerequisites & API access ​

To use the Custom Exports API, you need to have completed the following:

  1. Created a Branch account.

  2. Implemented the Branch SDK into your mobile app (iOS | Android).

  3. Opted in to sharing device data through Apple's AppTrackingTransparency framework. When an install is attributed to paid ads, a 2nd install event fires after user opt-in.

    Data changes post iOS

    Opt-ins affect your final install count. We recommend using a different identifier (for example, IDFV) to dedupe install events on your internal systems.

    For additional information on changes post iOS 14.5, visit our FAQ Pages.

  4. Logged in to Branch with the Sensitive Data and Export Access Permission enabled.

Providing agencies API access ​

Any user with access to an account’s API keys can access Branch’s Custom Exports API (and thus unfiltered, log-level data). As a result, we recommend against providing third parties with the permissions required to view API keys during the invitation process.

Data purge

  • Branch purges last-attributed data after 60 days.

If you work with an agency that runs your advertising campaigns and want to give them access to export the subsequent data, you can provide them with access to the Custom Exports API.

To provide an agency team member with access to the Custom Exports API:

  1. In the left-hand navigation, under Configure, select Account Settings.

  2. On the Account Settings page, select the Agencies tab.

  3. Expand the agency in question, find the agency team member you want to give access to, hover over the button in the Actions column, and select Edit.

  4. In the Edit Agency Team Member modal:

    1. Under Access Level, check the Export box.
    2. Under Permissions, check the Sensitive Data box.
  5. Optional: Add data filters.

    1. Under Data Filters, toggle any necessary data filters on. Exported data will be filtered accordingly.
  6. Select Save.

Agency-tagged data

If you do not enable the "Only Show Agency-Tagged Data" filter, the agency team member can export sensitive data associated with all of your campaigns, regardless of whether they are associated with them or not.

Authentication ​

For calls to the Custom Exports API, you need your Access Token.

Legacy Branch

To retrieve your Access Token in the legacy Branch experience:

  1. Navigate to Account → Settings → User.
  2. If you have not yet generated an Access Token, select the Generate token button.
  3. Use the copy icon to copy your Access Token.

New Branch

To retrieve your credentials in the new Branch experience:

  1. Navigate to the Configuration → Security & Access → Credentials tab.
  2. If you have not yet generated an Access Token, select the Generate token button.
  3. Use the copy icon to copy your Access Token.

Visit our guide to learn more about managing your Branch credentials.

API usage ​

Create export request ​

http
POST /v2/logs?organization_id=ORG_ID
POST /v2/logs?app_id=APP_ID
Headers:
Access-Token: API_KEY
Content-Type: application/json
Body: JSON parameters
Host: api2.branch.io

Request headers ​

HeaderDescriptionRequired
Access-TokenKey that encapsulates the user's permission with regard to an organization. Obtained from Branch. Needed for authentication.Yes
Content-Typeapplication/jsonYes

Request body parameters ​

ParameterTypeDescriptionRequired
start_dateDateThe beginning datetime for the requested results, provided in ISO-8601 format including hours, minutes, seconds, and milliseconds. Dates without offsets (that is, a time zone) default to the value provided for the timezone parameter. If the timezone parameter is not specified, the date's time zone defaults to UTC. The date must be within the last 120 days. Example: 2016-01-01T00:00:00ZYes
end_dateDateThe end datetime for the requested results, provided in ISO-8601 format including hours, minutes, seconds, and milliseconds. Dates without offsets (that is, a time zone) default to the value provided for the timezone parameter. If the timezone parameter is not specified, the date's time zone defaults to UTC. Example: 2016-01-01T23:59:59:999ZYes
report_typeStringThe Branch EO topic to be exported.Yes
fieldsComma Separated ListList of comma-separated fields desired in results.Yes
limitIntegerIf you want to limit the number of records returned to 15 million or less, use the limit parameter.

If you need more than 15 million records returned, use the allow_multiple_files parameter instead and set it to true. When allow_multiple_files is set to true, the limit parameter is disregarded. It defaults to fitting 5 million records in a single file and provides multiple files depending on total record size.
Yes
timezoneStringTime zone for results. Accepts tz database strings like ‘America/Los_Angeles’. Optional parameter; results are returned in the time zone set in Branch if not provided. Defaults to UTC only if a time zone is not set in Branch.No
filterComma Separated ListFilter by fields and boolean operators against fields of the LogInstalls model; must be URI encoded and JSON parsed. Example: ["gt","last_attributed_touch_timestamp", 1604015756]No
response_formatStringFormat of the response; can be either "json" or "csv". If not selected, defaults to CSV. Branch uses UTF-8 encoding for CSV files.No
allow_multiple_filesBooleanSet this parameter to true if you want more than 15 million records returned. Branch makes the records available to you in multiple files. When allow_multiple_files is set to true, the limit parameter is disregarded. It defaults to fitting 5 million records in a single file and provides multiple files depending on total record size.No
response_format_compressionStringThe file compression method to use for the data.

Options:

- gz
- snappy
Yes if you set allow_multiple_files to true

Export all fields ​

To export every available field, use ["all"] in place of the field list:

  • Scheduled Log Exports: "report_fields": ["all"]
  • Custom Exports: "fields": ["all"]

Before you use it:

  • Your Access Token needs all export permissions. These currently include Sensitive Data and Fraud Settings & Data. If Branch adds new export permissions, you need those too.
  • New fields appear in your export automatically as Branch adds them. Make sure your systems can handle new columns.
  • Fields that don't apply to a report type still appear, with null values.

Response body parameters ​

ParameterDescription
handleUnique request handle generated against the endpoint call.
export_job_status_urlThe URL of the export request.

Example request/response ​

curl
curl -X POST 'https://api2.branch.io/v2/logs?app_id=123456700098765432'
                    -H "Content-Type: application/json"
                    -H "Access-Token: YOUR_ACCESS_TOKEN_HERE"
                    -d '{"report_type": "eo_open",
                    "limit": 100,
                    "fields": ["timestamp","name"],
                    "start_date": "2019-12-09T00:00:00Z",
                    "end_date": "2019-12-09T01:59:59Z",
                    "filter": ["gt","last_attributed_touch_timestamp", 1604015756]
                    }'
json
{"handle":"1612dbb3-85ef-49f8-b1c5-5818c163600c","export_job_status_url":"https://api2.branch.io/v2/logs/1612dbb3-85ef-49f8-b1c5-5818c163600c?app_id=123456700098765432"}

Response codes ​

Response codeDescription
200Status of aggregate export.
400Authentication failed.

Get export request ​

http
GET /v2/logs/JOB_ID
Headers:
Access-Token: API_KEY
Host: api2.branch.io

Request headers ​

HeaderDescriptionRequired
Access-TokenKey that encapsulates the user's permission with regard to an organization. Obtained from Branch. Needed for authentication.Yes
Content-Typeapplication/jsonYes

Response path parameters ​

ParameterTypeDescriptionRequired
request_handleStringThe ID returned by the log export queue.Yes

Request query parameters ​

ParameterTypeDescriptionRequired
limitIntegerThe maximum number of results to return.No
formatStringFormat of returned data: json or csv.No

Response body parameters ​

ParameterTypeDescription
codeIntegerThe response code.
lines_exportedIntegerNumber of lines exported against the originating request.
statusStringRequest status over the current execution time.
status_urlStringThe URL of the export request.

Example request/response ​

curl
curl -X GET https://api2.branch.io/v2/logs/<YOUR_HANDLE>\?app_id\=<YOUR_BRANCH_APP_ID>
                    -H "Content-Type: application/json"
                    -H "Access-Token:<YOUR_ACCESS_TOKEN>"
json
{"code":200,"lines_exported":2000000,"status":"complete","response_url":"https://branch-exports-web.s3.amazonaws.com/732662944269095814-eo_open-2019-12-10-2019-12-10-1612dbb3-85ef-49f8-b1c5-5818c163600c-bUlN2lwyTE10qIVH.csv?Signature=YOUR_ACCESS_TOKEN_HERE&AWSAccessKeyId=YOUR_ACCESS_TOKEN_HERE&Expires=1577305615"}

Response codes ​

Response codeDescription
200Status of aggregate export.
400Authentication failed.
404Job ID not found.

Status values ​

StatusDescription
pendingRequest is pending.
runningRequest is still running.
completeRequest is complete.
failRequest failed.

Check data readiness ​

http
POST /v2/data/ready
Headers:
Access-Token: YOUR_API_KEY_HERE
Content-Type: application/json
Body: JSON parameters
Host: api2.branch.io

Request headers ​

HeaderDescriptionRequired
Access-TokenKey that encapsulates the user's permission with regard to an organization. Obtained from Branch. Needed for authentication.Yes
Content-Typeapplication/jsonYes

Request body parameters ​

ParameterTypeDescriptionRequired
dateStringThe start of the interval time range, in the format YYYY-MM-DD hh:mm:ss (must be within the past year).Yes
warehouse_meta_typeStringThe type of data to check for. Can be either EVENT or AGGREGATE.Yes
topicStringThe Branch EO topic to be exported.Yes
app_idIntegerYour Branch app ID, found under Account Settings in Branch.Yes

Response body parameters ​

ParameterDescription
data_readyWhether or not the requested data is ready; can be true or false.
dateThe date and time associated with the requested data, in the format YYYY-MM-DD hh:mm:ss.

Examples ​

Successful request/response: ​

curl
curl -X POST 'http://api2.branch.io/v2/data/ready'
                    -H 'Content-Type: application/json'
                    -H 'Accept: application/json'
                    -H 'Access-Token: <YOUR_API_KEY_HERE>'
                    -d '{"date":"2024-01-05 17:00:00",
                    "warehouse_meta_type":"EVENT",
                    "topic":"eo_click",
                    "app_id":"<YOUR_APP_ID_HERE>"}'
json
{ "data_ready": true, "date": "2024-01-05 17:00:00" }

Invalid request/response: ​

curl
curl -X POST 'http://api2.branch.io/v2/data/ready'
                    -H 'Content-Type: application/json'
                    -H 'Accept: application/json'
                    -H 'Access-Token: <YOUR_API_KEY_HERE>'
                    -d '{"date":"2024-01-06 17:00:00",
                    "warehouse_meta_type":"EVENT",
                    "topic":"eo",
                    "app_id":"<YOUR_APP_ID_HERE>"}'
json
{"errors":[{"message":"Report type eo is invalid. It has to be one of: [eo_branch_cta_view, eo_click, eo_commerce_event, eo_content_event, eo_custom_event, eo_impression, eo_install, eo_open, eo_pageview, eo_reinstall, eo_user_lifecycle_event, eo_web_session_start, eo_web_to_app_auto_redirect, eo_dismissal, eo_san_touch, webhook2, skadnetwork_invalid_messages, skadnetwork_valid_messages, eo_branch_cta_view_blocked, eo_click_blocked, eo_commerce_event_blocked, eo_content_event_blocked, eo_custom_event_blocked, eo_impression_blocked, eo_install_blocked, eo_open_blocked, eo_pageview_blocked, eo_reinstall_blocked, eo_user_lifecycle_event_blocked, eo_web_session_start_blocked]","error_code":7}]}

Response codes ​

Response codeDescription
200Status of data successfully retrieved.
400Topic is invalid or data retention for requested data has expired.
500Internal server error (Branch failure).

Appendix ​

Available EO fields ​

FieldsTypeDescription
android_app_link_urlStringA client-specified web URL (Branch or non-Branch) that opens an Android app via Android App Links.
app_idLongApp ID (capitalize ID in Liveview)
app_nameStringApp Name
attributedBooleanAttributed
content_itemsArrayStructContent Items
custom_dataMapStringStringCustom Data
customer_event_aliasStringCustomer Event Alias
days_from_last_attributed_touch_to_eventIntegerDays From Last Attributed Touch To Event
deep_linkedBooleanDeep Linked
di_match_click_tokenLongDI Match Click Token
event_data_ad_typeenum { BANNER, INTERSTITIAL, REWARDED_VIDEO, NATIVE }Ad Type
event_data_affiliationStringAffiliation
event_data_couponStringCoupon
event_data_currencyStringCurrency
event_data_descriptionStringEvent Description
event_data_exchange_rateDoubleExchange Rate
event_data_revenueDoubleRevenue
event_data_revenue_in_usdDoubleRevenue In USD
event_data_search_queryStringSearch Query
event_data_shippingDoubleShipping
event_data_taxDoubleTax
event_data_transaction_idStringTransaction ID
event_data_local_currencyStringLocal Currency
event_data_local_currency_exchange_rateStringLocal Currency Exchange Rate
event_data_revenue_in_local_currencyStringRevenue in Local Currency
event_data_custom_param_1StringCustom parameter for event
event_data_custom_param_2StringCustom parameter for event
event_data_custom_param_3StringCustom parameter for event
event_timestampLongEvent Timestamp
existing_userBooleanExisting User
external_intent_uriStringExternal Intent URI
first_event_for_userBooleanFirst Event For User
fraud_bool_suspiciousBooleanIndicates whether the underlying event (such as a click or install) was flagged as suspicious or fake by fraud detection. This typically triggers when traffic originates from known bad IPs, emulators, server farms, or TOR networks.
fraud_bool_suspicious_attributionBooleanIndicates whether the attribution relationship was flagged as fraudulent by fraud detection. While the install itself might be real, the ad interaction claiming credit is suspicious (often used to detect Install Hijacking, Click Injection, or Click Flooding based on abnormal click-to-install latency times).
fraud_descriptionsArrayStringContains the descriptions of the specific fraud detection rule(s) that flagged the event. Examples of values include 'Suspicious Device', 'Click Injection', 'Device Conflict', 'Geo Conflict', or 'Persona Fraud'.
hash_versionStringHash Version
hours_from_last_attributed_touch_to_eventIntegerHours From Last Attributed Touch To Event
idStringID
install_activity_attributedBooleanInstall Attributed
install_activity_data_has_clicked_adBooleanInstall Has Clicked Ad
install_activity_data_has_clicked_emailBooleanInstall Has Clicked Email
install_activity_timestampLongInstall Timestamp
install_activity_touch_data_additional_data_tilde_ad_idStringInstall Ad ID
install_activity_touch_data_additional_data_tilde_ad_set_idStringInstall Ad Set ID
install_activity_touch_data_additional_data_tilde_campaign_idStringInstall Campaign ID
install_activity_touch_data_additional_data_tilde_creative_idStringInstall Creative ID
install_activity_touch_data_dollar_3pStringInstall Partner 3p Value
install_activity_touch_data_dollar_meta_is_mobile_data_terms_signedBooleanWhether Meta's mobile data terms have been signed for the Install Touch. When true, Meta does not require Branch to scrub Meta-related data from this record.
install_activity_touch_data_plus_via_featuresArrayStringInstall Features
install_activity_touch_data_plus_web_formatStringInstall Web Format
last_attributed_touch_data_plus_attribution_methodStringThe specific signal or mechanism used to link the conversion event to the marketing touchpoint (for example, ADVERTISING_ID, GCLID, AEM, PERSONA).
last_attributed_touch_data_plus_attribution_method_typeStringThe category of methodology used to produce the attribution (for example, PARTNER_DETERMINISTIC, BRANCH_MODELLED, PARTNER_PRIVACY_FRAMEWORK).
install_activity_touch_data_tilde_ad_nameStringInstall Ad Name
install_activity_touch_data_tilde_ad_set_nameStringInstall Ad Set Name
install_activity_touch_data_tilde_advertising_partner_idStringInstall Ad Partner ID
install_activity_touch_data_tilde_advertising_partner_nameStringInstall Ad Partner
install_activity_touch_data_tilde_agencyStringInstall Agency
install_activity_touch_data_tilde_agency_idLongInstall Agency ID
install_activity_touch_data_tilde_campaignStringInstall Campaign
install_activity_touch_data_tilde_channelStringInstall Channel
install_activity_touch_data_tilde_creative_nameStringInstall Creative Name
install_activity_touch_data_tilde_customer_ad_nameStringInstall Customer Ad Name
install_activity_touch_data_tilde_customer_ad_set_nameStringInstall Customer Ad Set Name
install_activity_touch_data_tilde_customer_campaignStringInstall Customer Campaign
install_activity_touch_data_tilde_customer_keywordStringInstall Customer Keyword
install_activity_touch_data_tilde_customer_placementStringInstall Customer Placement
install_activity_touch_data_tilde_customer_secondary_publisherStringInstall Customer Secondary Publisher
install_activity_touch_data_tilde_customer_sub_site_nameStringInstall Customer Sub Site Name
install_activity_touch_data_tilde_featureStringInstall Feature
install_activity_touch_data_tilde_journey_nameStringInstall Journey Name
install_activity_touch_data_tilde_keywordStringInstall Keyword
install_activity_touch_data_tilde_placementStringInstall Placement
install_activity_touch_data_tilde_secondary_publisherStringInstall Secondary Publisher
install_activity_touch_data_tilde_stageStringInstall Stage
install_activity_touch_data_tilde_tagsArrayStringInstall Tags
install_activity_touch_data_tilde_view_nameStringInstall View Name
install_activity_touch_typeStringInstall Touch Type
last_attributed_touch_data_custom_fieldsStringLast Attributed Touch Custom Fields
last_attributed_touch_data_dollar_3pStringAd Partner (3p)
last_attributed_touch_data_dollar_meta_is_mobile_data_terms_signedBooleanWhether Meta's mobile data terms have been signed for the Last Attributed Touch. When true, Meta does not require Branch to scrub Meta-related data from this attribution record.
last_attributed_touch_data_dollar_marketing_titleStringMarketing Title
last_attributed_touch_data_plus_current_featureStringCurrent Feature
last_attributed_touch_data_plus_pam_enabledBooleanWhether PAM was enabled for the last attributed touch.
last_attributed_touch_data_plus_aggregate_measurementBooleanAggregate measurement associated with the last attributed touch.
last_attributed_touch_data_plus_attribution_methodStringThe specific signal, mechanism, identifier, or framework used to link the conversion event to a marketing touchpoint (for example, ADVERTISING_ID, GCLID, GBRAID, AEM, PERSONA).
last_attributed_touch_data_plus_attribution_method_typeStringClassifies the broader category of methodology used to generate or validate the attribution signal, grouping methods based on reliability or privacy frameworks (for example, PARTNER_DETERMINISTIC, PARTNER_CLICK_IDENTIFIERS, BRANCH_MODELLED, PARTNER_PRIVACY_FRAMEWORK).
last_attributed_touch_data_tilde_idLongLast Attributed Touch ID
last_attributed_touch_data_plus_touch_idStringLast Attributed Touch Touch ID
last_attributed_touch_data_plus_urlStringURL
last_cta_view_data_plus_touch_idStringLast CTA View Touch ID
last_attributed_touch_data_plus_via_featuresArrayStringVia Features
last_attributed_touch_data_plus_web_formatStringWeb Format
last_attributed_touch_data_tilde_ad_idStringAd ID
last_attributed_touch_data_tilde_ad_nameStringAd Name
last_attributed_touch_data_tilde_ad_set_idStringAd Set ID
last_attributed_touch_data_tilde_ad_set_nameStringAd Set Name
last_attributed_touch_data_tilde_advertising_account_nameStringAdvertising Account Name
last_attributed_touch_data_tilde_advertising_account_idStringAdvertising Account ID
last_attributed_touch_data_tilde_advertising_partner_idStringAd Partner ID
last_attributed_touch_data_tilde_advertising_partner_nameStringAd Partner
last_attributed_touch_data_tilde_agencyStringAgency
last_attributed_touch_data_tilde_agency_idStringAgency ID
last_attributed_touch_data_tilde_banner_dimensionsStringBanner Dimensions
last_attributed_touch_data_tilde_branch_ad_formatStringBranch Ad Format
last_attributed_touch_data_tilde_campaignStringCampaign
last_attributed_touch_data_tilde_campaign_idStringCampaign ID
last_attributed_touch_data_tilde_campaign_typeStringCampaign Type
last_attributed_touch_data_tilde_channelStringChannel
last_attributed_touch_data_tilde_creative_nameStringCreative Name
last_attributed_touch_data_tilde_creative_idStringCreative ID
last_attributed_touch_data_tilde_customer_ad_nameStringCustomer Ad Name
last_attributed_touch_data_tilde_customer_ad_set_nameStringCustomer Ad Set Name
last_attributed_touch_data_tilde_customer_campaignStringCustomer Campaign
last_attributed_touch_data_tilde_customer_keywordStringCustomer Keyword
last_attributed_touch_data_tilde_customer_placementStringCustomer Placement
last_attributed_touch_data_tilde_customer_secondary_publisherStringCustomer Secondary Publisher
last_attributed_touch_data_tilde_customer_sub_site_nameStringCustomer Sub Site Name
last_attributed_touch_data_tilde_external_touch_idStringExternal Touch ID
last_attributed_touch_data_tilde_featureStringFeature
last_attributed_touch_data_tilde_journey_idStringJourney ID
last_attributed_touch_data_tilde_journey_nameStringJourney Name
last_attributed_touch_data_tilde_keywordStringKeyword
last_attributed_touch_data_tilde_keyword_idStringKeyword ID
last_attributed_touch_data_tilde_optimization_modelStringOptimization Model
last_attributed_touch_data_tilde_placementStringPlacement
last_attributed_touch_data_tilde_placement_idStringPlacement ID
last_attributed_touch_data_tilde_secondary_ad_formatStringSecondary Ad Format
last_attributed_touch_data_tilde_secondary_publisherStringSecondary Publisher
last_attributed_touch_data_tilde_secondary_publisher_idStringSecondary Publisher ID
last_attributed_touch_data_tilde_stageStringStage
last_attributed_touch_data_tilde_sub_site_nameStringSub Site Name
last_attributed_touch_data_tilde_tagsArrayStringTags
last_attributed_touch_data_tilde_technology_partnerStringTechnology Partner
last_attributed_touch_data_tilde_touch_subtypeStringGoogle Video Ads "Engaged View"
last_attributed_touch_data_tilde_view_idStringView ID
last_attributed_touch_data_tilde_view_nameStringView Name
last_attributed_touch_timestampLongLast Attributed Touch Timestamp
last_attributed_touch_timestamp_isoStringLast Attributed Touch Timestamp (ISO)
last_attributed_touch_typeStringLast Attributed Touch Type
last_cta_view_data_custom_fieldsStringLast CTA View Custom Fields
last_cta_view_data_dollar_3pStringLast CTA View Ad Partner (3p)
last_cta_view_data_dollar_meta_is_mobile_data_terms_signedBooleanWhether Meta's mobile data terms have been signed for the Last CTA View Touch. When true, Meta does not require Branch to scrub Meta-related data from this CTA view record.
last_attributed_touch_data_plus_referring_domainStringReferring Domain
last_cta_view_data_plus_via_featuresArrayStringLast CTA View Via Features
last_cta_view_data_plus_web_formatStringLast CTA View Web Format
last_cta_view_data_tilde_ad_idStringLast CTA View Ad ID
last_cta_view_data_tilde_ad_nameStringLast CTA View Ad Name
last_cta_view_data_tilde_ad_set_idStringLast CTA View Ad Set ID
last_cta_view_data_tilde_ad_set_nameStringLast CTA View Ad Set Name
last_cta_view_data_tilde_advertising_partner_nameStringLast CTA View Ad Partner
last_cta_view_data_tilde_agencyStringLast CTA View Agency
last_cta_view_data_tilde_banner_dimensionsStringLast CTA View Banner Dimensions
last_cta_view_data_tilde_branch_ad_formatStringLast CTA View Branch Ad Format
last_cta_view_data_tilde_campaignStringLast CTA View Campaign
last_cta_view_data_tilde_campaign_idStringLast CTA View Campaign ID
last_cta_view_data_tilde_campaign_typeStringLast CTA View Campaign Type
last_cta_view_data_tilde_channelStringLast CTA View Channel
last_cta_view_data_tilde_creative_idStringLast CTA View Creative ID
last_cta_view_data_tilde_creative_nameStringLast CTA View Creative Name
last_cta_view_data_tilde_external_touch_idLongLast CTA View External Touch ID
last_cta_view_data_tilde_featureStringLast CTA View Feature
last_cta_view_data_tilde_idLongLast CTA View ID
last_cta_view_data_tilde_keyword_idStringLast CTA View Keyword ID
last_cta_view_data_tilde_optimization_modelStringLast CTA View Optimization Model
last_cta_view_data_tilde_placementStringLast CTA View Placement
last_cta_view_data_tilde_secondary_ad_formatStringLast CTA View Secondary Ad Format
last_cta_view_data_tilde_secondary_publisherStringLast CTA View Secondary Publisher
last_cta_view_data_tilde_stageStringLast CTA View Stage
last_cta_view_data_tilde_tagsArrayStringLast CTA View Tags
last_cta_view_data_tilde_technology_partnerStringLast CTA View Technology Partner
last_cta_view_timestampLongLast CTA View Timestamp
last_cta_view_timestamp_isoStringLast CTA View Timestamp (ISO)
\+match_guaranteedbooleanFlag that determines if the app session was made with 100% accuracy. Only available in the Custom Exports API.
minutes_from_last_attributed_touch_to_eventIntegerMinutes From Last Attributed Touch To Event
nameStringName of event based on selected topic
organization_idLongOrganization ID
organization_nameStringOrganization Name
originStringOrigin
reengagement_activity_attributedBooleanReengagement Activity Attribute
reengagement_activity_data_has_clicked_adBooleanReengagement Has Clicked Ad
reengagement_activity_data_has_clicked_emailBooleanReengagement Has Clicked Email
reengagement_activity_timestampLongReengagement Timestamp
reengagement_activity_touch_data_additional_data_tilde_ad_idStringReengagement Ad ID
reengagement_activity_touch_data_additional_data_tilde_ad_set_idStringReengagement Ad Set ID
reengagement_activity_touch_data_additional_data_tilde_campaign_idStringReengagement Campaign ID
reengagement_activity_touch_data_additional_data_tilde_creative_idStringReengagement Creative ID
reengagement_activity_touch_data_dollar_3pStringReengagement Partner 3p Value
reengagement_activity_touch_data_dollar_meta_is_mobile_data_terms_signedBooleanWhether Meta's mobile data terms have been signed for the Reengagement Touch. When true, Meta does not require Branch to scrub Meta-related data from this reengagement record.
reengagement_activity_touch_data_plus_via_featuresArrayStringReengagement Features
reengagement_activity_touch_data_plus_web_formatStringReengagement Web Format
reengagement_activity_touch_data_tilde_ad_nameStringReengagement Ad Name
reengagement_activity_touch_data_tilde_ad_set_nameStringReengagement Ad Set Name
reengagement_activity_touch_data_tilde_advertising_partner_idStringReengagement Advertising Partner ID
reengagement_activity_touch_data_tilde_advertising_partner_nameStringReengagement Advertising Partner Name
reengagement_activity_touch_data_tilde_agencyStringReengagement Agency
reengagement_activity_touch_data_tilde_agency_idLongReengagement Agency ID
reengagement_activity_touch_data_tilde_campaignStringReengagement Campaign
reengagement_activity_touch_data_tilde_channelStringReengagement Channel
reengagement_activity_touch_data_tilde_creative_nameStringReengagement Creative Name
reengagement_activity_touch_data_tilde_customer_ad_nameStringReengagement Customer Ad Name
reengagement_activity_touch_data_tilde_customer_ad_set_nameStringReengagement Customer Ad Set Name
reengagement_activity_touch_data_tilde_customer_campaignStringReengagement Customer Campaign
reengagement_activity_touch_data_tilde_customer_keywordStringReengagement Customer Keyword
reengagement_activity_touch_data_tilde_customer_placementStringReengagement Customer Placement
reengagement_activity_touch_data_tilde_customer_secondary_publisherStringReengagement Customer Secondary Publisher
reengagement_activity_touch_data_tilde_customer_sub_site_nameStringReengagement Customer Sub Site
reengagement_activity_touch_data_tilde_featureStringReengagement Feature
reengagement_activity_touch_data_tilde_journey_nameStringReengagement Journey Name
reengagement_activity_touch_data_tilde_keywordStringReengagement Keyword
reengagement_activity_touch_data_tilde_placementStringReengagement Placement
reengagement_activity_touch_data_tilde_secondary_publisherStringReengagement Secondary Publisher
reengagement_activity_touch_data_tilde_stageStringReengagement Stage
reengagement_activity_touch_data_tilde_tagsArrayStringReengagement Tags
reengagement_activity_touch_data_tilde_view_nameStringReengagement View Name
reengagement_activity_touch_typeStringReengagement Touch Type
referrer_click_timestampLongReferrer Click Timestamp
seconds_from_install_to_eventIntegerSeconds From Install To Event
seconds_from_last_attributed_touch_to_eventIntegerSeconds From Last Attributed Touch To Event
seconds_from_last_attributed_touch_to_store_install_beginIntegerSeconds From Touch To Store Install Begin
site_event_items_countIntegerContent Items Count
store_install_begin_timestampLongStore Install Begin Timestamp
timestampLongTimestamp
timestamp_isoStringTimestamp (ISO)
universal_link_urlStringA client-specified web URL (Branch or non-Branch) that opens an iOS app via Apple Universal Links.
user_data_aaidStringAAID
user_data_android_idStringAndroid ID
user_data_app_versionStringApp Version
user_data_brandStringBrand
user_data_browserStringBrowser
user_data_buildStringBuild
user_data_cpp_levelStringThe Consumer Protection Preference level
user_data_cpu_typeStringCPU Type
user_data_cross_platform_idStringCross Platform ID
user_data_developer_identityStringDeveloper Identity
user_data_device_typeStringDevice Type
user_data_dma_ad_personalizationBooleanIndicates whether the end-user has explicitly granted or denied ads personalization consent. Set to true if consent is granted, and false if denied.
user_data_dma_ad_user_dataBooleanIndicates whether the end-user has explicitly granted or denied consent for the 3rd-party transmission of user-level data for advertising purposes. Set to true if consent is granted, and false if denied. Required if user_data_dma_eea is set to true. Warning: Failure to include user consent signals may result in attribution or campaign performance degradation.
user_data_dma_eeaBooleanIndicates whether European regulations, including the Digital Markets Act (DMA), apply to this user and conversion. Set to true if the user is included in European Union regulations (for example, located within the EEA), and false if they are excluded. Required if EU regulations apply to this user. Warning: Failure to include user consent signals may result in attribution or campaign performance degradation.
user_data_environmentStringEnvironment
user_data_geo_city_codeIntegerCity Code
user_data_geo_city_enStringCity
user_data_geo_country_codeStringCountry Code
user_data_geo_country_enStringCountry
user_data_geo_dma_codeIntegerDMA Code
user_data_geo_latFloatLatitude
user_data_geo_lonFloatLongitude
user_data_geo_postal_codeStringPostal Code
user_data_geo_region_enStringRegion
user_data_geo_region_codeStringRegion Code
user_data_http_referrerStringHTTP Referrer
user_data_idfaStringIDFA
user_data_idfvStringIDFV
user_data_internet_connection_typeStringInternet Connection Type
user_data_ipStringIP Address
user_data_is_jailbrokenBooleanIs Jailbroken
user_data_kindle_idStringKindle ID
user_data_languageStringLanguage
user_data_limit_ad_trackingBooleanLimit Ad Tracking
user_data_modelStringModel
user_data_oaidStringHuawei OAID
user_data_osStringOS
user_data_os_versionStringOS Version
user_data_os_version_androidStringOS Version (Android)
user_data_past_cross_platform_idsArrayStringPast Cross Platform IDs
user_data_platformArrayStringPlatform
user_data_prob_cross_platform_idsArrayStructProbabilistic Cross Platform IDs
user_data_roku_ridaStringRoku Device ID
user_data_screen_heightIntegerScreen Height
user_data_screen_widthIntegerScreen Width
user_data_sdk_versionStringSDK Version
user_data_user_agentStringUser Agent
user_data_windows_aidStringWindows AID
user_data_device_localeStringDevice Locale
user_data_carrier_nameStringCarrier Name
user_data_opted_in_statusStringWhether the user opted in to ATT or not
user_data_app_storeStringThe app store the user downloaded from

Available SKAdNetwork (SKAN) message fields ​

FieldTypeDescription
idvarcharSKAN Message ID
body_transaction_idvarcharSKAN Transaction ID
body_versionvarcharSKAN Version
body_ad_network_idvarcharSKAN Ad Network ID
body_campaign_idintegerSKAN Campaign ID
body_app_idbigintSKAN App ID (App Store ID)
body_attribution_signaturevarcharBody Attribution Signature
body_redownloadbooleanSKAN Redownload
body_source_app_idbigintSKAN Source App ID
body_conversion_valueintegerBody Conversion Value
body_fidelity_typeintegerBody Fidelity Type
body_did_winbooleanBody Did Win
body_coarse_conversion_valuevarcharCoarse Conversion Value (SKAN 4 and above)
body_source_domainvarcharSource Domain
body_source_identifierintegerApple Source Identifier (SKAN 4 and above)
body_postback_sequence_indexintegerPostback Window (SKAN 4 and above)
body_testbooleanWhether the SKAN postback is a test record. When true, the record should be filtered out as it represents test data rather than production attribution.
last_attributed_touch_data_tilde_creative_idvarcharAd Partner Creative ID
last_attributed_touch_data_tilde_creative_namevarcharAd Partner Creative Name
last_attributed_touch_data_tilde_ad_namevarcharAd Partner Ad Name
last_attributed_touch_data_tilde_ad_idvarcharAd Partner Ad ID
last_attributed_touch_data_tilde_ad_set_namevarcharAd Partner Ad Set Name
last_attributed_touch_data_tilde_ad_set_idvarcharAd Partner Ad Set ID
last_attributed_touch_data_tilde_campaign_idvarcharAd Partner Campaign ID
last_attributed_touch_data_tilde_campaignvarcharAd Partner Campaign Name
invalid_reasonvarcharInvalid Reason
timestampbigintTimestamp (when Branch received data)
event_timezone_adjusted_daybigintTimestamp (provided by Partner)
annotation_dollar_3pvarcharAnnotation Dollar 3P
annotation_conversion_value_mapped_valuevarcharAnnotation Conversion Value Mapped Value
annotation_customer_event_aliasvarcharAnnotation Customer Event Alias
annotation_revenue_lowervarcharAnnotation Revenue Lower Bound
annotation_revenue_uppervarcharAnnotation Revenue Upper Bound
app_idbigintBranch App ID
organization_idbigintBranch Organization ID
advertiser_copybooleanAdvertiser Copy for iOS 15+ devices

IP discrepancies

Geographic data, such as country and city, may not be available for a very small percentage of events where the IP cannot be resolved to a location.

Available topics ​

TopicsHuman-readable name
eo_click_blockedBlocked Clicks
eo_commerce_event_blockedBlocked Commerce Events
eo_content_event_blockedBlocked Content Events
eo_branch_cta_view_blockedBlocked CTA Views
eo_custom_event_blockedBlocked Custom Events
eo_impression_blockedBlocked Impressions
eo_install_blockedBlocked Installs
eo_open_blockedBlocked Opens
eo_pageview_blockedBlocked Pageviews
eo_reinstall_blockedBlocked Reinstalls
eo_user_lifecycle_event_blockedBlocked User Lifecycle Events
eo_web_session_start_blockedBlocked Web Session Starts
eo_clickClicks
eo_commerce_eventCommerce Events
eo_content_eventContent Events
eo_branch_cta_viewCTA Views
eo_custom_eventCustom Events
eo_dismissalDismissals
eo_impressionImpressions
eo_installInstalls
eo_openOpens
eo_pageviewPageviews
webhook2Postback Records
eo_reinstallReinstalls
skadnetwork_invalid_messagesSKAdNetwork Invalid Messages
skadnetwork_valid_messagesSKAdNetwork Valid Messages
eo_user_lifecycle_eventUser Lifecycle Events
eo_web_session_startWeb Session Starts
eo_san_touchSelf-Attributing Network Touch

Blocked topics

Branch allows the export of blocked topics for up to 60 days from the time of the request.

Cthulhu filter specification ​

Cthulhu is a prefix notation syntax written in JSON for specifying filters on records (usually column-based records).

Purpose
Easily parses into an abstract syntax tree.

Glossary
any - any valid JSON basic value (number, string)
... - previous item in a list can repeat as many times as necessary

NameSpecExampleSQL equivalent
eq["eq",<>
<>
["eq","x", 1]x= 1
gt["gt",<>
<>
["gt","x", 1]x> 1
gte["gte",<>
<>
["gte","x", 1]x >= 1
lt["lt",<>
<>
["lt","x", 1]x< 1
lte["lte",<>
<>
["lte","x", 1]x <= 1
like["like",<>
<>
["like", "x", ". *foobar"]x LIKE "%
foobar"
between["between",<>
<>
<>
["between", "x",1, 2]x
BETWEEN
1 AND 2x >= 1 AND x <= 2
In["in", ,="">,="">["in","x", 1,2, 3]x IN (1,2,3)
and["and", , ...]["and",["gt","x", 1],["lt","x", 2]]x> 1 AND x < 2
or["or", , ...]["or",["eq","x", 1],["eq",
"x", 2]]
x = 1 OR x= 2
not["not",]["not",["eq","x", 1]]x != 1
array_contains["array_contains", , ]["array_contains","last_attributed_touch_data_tilde_tags","Share"]array_contains(array(1, 2, 3), 2)

Additional examples

FilterMeaning
["eq","last_attributed_touch_data_dollar_3p","a_tiktok_ads"]Where last_attributed_touch_data_dollar_3p equals a_tiktok_ads.
["eq","name","PURCHASE"]Where name equals PURCHASE.
["or",["eq","name","store_page"],["eq","name","store_category_page"],["eq","name","dynamic_home_page"]]Where name equals store_page, store_category_pay, or dynamic_home_page.
["and",["eq","last_attributed_touch_data_dollar_3p","a_google_adwords"],["not",["eq","last_attributed_touch_data_tilde_external_touch_id",""]]]Where last_attributed_touch_data_dollar_3p equals a_google_adwords, and last_attributed_touch_data_tilde_external_touch_id is not empty.

FAQs ​

Why do I receive an error while trying to run a custom export from a test environment app?

While Branch's test environment is a fully functional, parallel configuration of your Branch live environment, the Custom Exports functionality is only available when used in the live environment. Attempting to export a report from an app running in the test environment always fails with the message "Error creating export."