
CSV Field Reference
This page provides detailed information about each column in the bulk upload CSV template.
Base Fields
External treatment ID
- Type: String
- Required: No
- Description: External identifier for integration with other systems
- Notes:
- Only available if enabled in your project settings
- Must be unique within your project if provided
Tags
- Type: String
- Required: No
- Description: Tags for organizing and categorizing treatments
- Format: Use semicolons (
;) to separate multiple tags
All tags must already exist in your project before using them in bulk upload. Create tags in the console first if needed.
Single Tag Example:
holiday
Multiple Tags Example:
holiday;premium;email
Formatting Rules:
- Use semicolons (
;) to separate tags - Do not include spaces after semicolons
- Do not leave empty values between semicolons
- Tags are case-sensitive
Treatment type*
- Type: String
- Required: Yes
- Description: The treatment type for this treatment
- Example:
POPUP_BANNER,PUSH_NOTIFICATION - Notes:
- The Treatment Type should already exist
- All treatments in a CSV must have the same Treatment type
Target action
- Type: String
- Required: Conditional (depends on project settings)
Format 1: Basic Event
For events without specific property requirements.
- Syntax:
EventName - Examples:
purchase
level_complete
sign_up
Format 2: Event with Properties
For events that require specific property values.
- Syntax:
EventName (PropertyName1: PropertyValue1 ; PropertyName2: PropertyValue2) - Single Property Example:
purchase (product_type: premium) - Multiple Properties Example:
level_end (level_number: 5 ; result: success ; difficulty: hard)
Formatting Rules:
- Event name comes first, followed by properties in parentheses
- Use colons (
:) to separate property name from property value - Use semicolons (
;) to separate multiple property pairs - Spaces around colons and semicolons are optional but recommended for readability
- Property names and values are case-sensitive
Important Notes:
- Event name must exist in your project
- Property names must exactly match the event's property definitions
- Property values must exactly match existing values for that property
- All specified properties must exist for the event
Name*
- Type: String
- Required: Yes
- Description: The treatment name displayed in the console
Description*
- Type: String
- Required: Yes
- Description: Detailed description of the treatment's purpose
Surfaces*
- Type: String (semicolon-separated)
- Required: Yes
- Description: Surfaces to include for this treatment
- Format: Use semicolons (
;) to separate multiple surfaces
Single Surface Example:
email
Multiple Surfaces Example:
email;sms;push
Formatting Rules:
- Use semicolons (
;) to separate surface names - Do not include spaces after semicolons
- Do not leave empty values between semicolons
Notes:
- Only surfaces associated with the treatment type can be specified
- At least one surface must be specified
- Surface names must exactly match existing surfaces
MEG
- Type: String
- Required: No
- Description: Mutual Exclusion Group name
- Example:
holiday_promotions
The Mutual Exclusion Group (MEG) must already exist in your project before using it in bulk upload. Create the MEG in the console first if needed.
Launch Schedule
Start timestamp*
- Type: Timestamp (UTC)
- Required: Yes
- Description: When the treatment becomes active
- Format:
MM/dd/yyyy hh:mm a - Example:
06/01/2024 12:00 AM - Notes:
- Must be in UTC timezone
- Use 12-hour format with AM/PM
- Month and day should be zero-padded (e.g.,
01not1)
End timestamp
- Type: Timestamp (UTC)
- Required: No
- Description: When the treatment expires
- Format:
MM/dd/yyyy hh:mm a - Example:
12/31/2024 11:59 PM - Notes:
- Must be in UTC timezone
- Use 12-hour format with AM/PM
- If not provided, treatment runs indefinitely
Content Fields
Content fields vary based on your treatment type. They fall into two categories:
Language-Agnostic Fields
Fields that apply to all languages.
- Column Name:
field_name - Example:
image_url,deep_link
Language-Specific Fields
Fields that have different content for each language.
- Column Name:
field_name_languagecode - Examples:
title_en,title_jabody_en,body_jacta_text_en,cta_text_ja
Notes:
- Each field has a maximum character limit (varies by treatment type and field)
- Exceeding the character limit will cause validation errors
Qualification Criteria
Qualification criteria determine which users are eligible to receive the treatment. Each qualification criterion is defined by four columns.
Column Pattern
For each qualification criterion number N (where N = 1, 2, 3, ...):
| Column | Description |
|---|---|
Qualification field N | The data field to evaluate |
Qualification condition N | The comparison condition |
Qualification value N | The value to compare against |
Apply qualification N if attribute not available | Behavior when data is missing (User Attributes only) |
Qualification field N
The data field to check for eligibility. Can be one of two types:
1. Regular Data Field (by ID)
Use the numeric data field ID from your project.
Example: 12345
2. Treatment Interaction Pattern (Self-Referencing)
Use the pattern: {InteractionType}_(THIS_TREATMENT)_{time_window}
Format: InteractionType_(THIS_TREATMENT)_TimeWindow
Supported Interaction Types:
Sent- Treatment was sent to userViewed- User viewed the treatmentClicked- User clicked on the treatmentSnoozed- User snoozed the treatmentDismissed- User dismissed the treatmentCta_completed- User completed the call-to-actionSwipe- User swiped on the treatment
Supported Time Windows:
| Time Window | Returns | Description |
|---|---|---|
first_timestamp | TIMESTAMP | When interaction first occurred |
latest_timestamp | TIMESTAMP | When interaction most recently occurred |
last_1d | INTEGER | Count in last 1 day |
last_7d | INTEGER | Count in last 7 days |
last_14d | INTEGER | Count in last 14 days |
last_28d | INTEGER | Count in last 28 days |
last_56d | INTEGER | Count in last 56 days |
days_since_first | INTEGER | Days since first occurrence |
days_since_last | INTEGER | Days since last occurrence |
Examples:
Sent_(THIS_TREATMENT)_last_7d- Number of times this treatment was sent in last 7 daysClicked_(THIS_TREATMENT)_latest_timestamp- Timestamp of most recent click on this treatmentViewed_(THIS_TREATMENT)_days_since_last- Days since last view of this treatment
Qualification condition N
The comparison operator to use. Valid conditions depend on the data field type.
For INTEGER and DOUBLE:
is- Equalsis not- Not equalsis greater than- Greater thanis at least- Greater than or equal tois less than- Less thanis at most- Less than or equal tois any of- Matches any value in a listis not any of- Does not match any value in a list
The between condition is not supported. Instead, use two separate qualification criteria: one with is at least for the minimum value and another with is at most for the maximum value.
For STRING:
is- Exactly equalsis not- Not equalscontains- Contains substringdoes not contain- Does not contain substringis any of- Matches any value in a listis not any of- Does not match any value in a list
For BOOLEAN:
is- Equals (true or false)
For TIMESTAMP_SECONDS:
at or before- At or before timestampat or after- At or after timestampis older than- Is before current time minus a duration> current time minus- Is after current time minus a durationhas happened- Checks if the event has occurred (value: true) or not occurred (value: false)
For INTEGER_LIST, DOUBLE_LIST, STRING_LIST:
contains- List contains valuedoes not contain- List does not contain valuecontains any of- List contains any value in specified listdoes not contain any of- List does not contain any value in specified list
Qualification value N
The value to compare against. Format depends on the condition and data field type.
Apply qualification N if attribute not available
This field controls what happens when a User Attribute data field has missing or unavailable data.
- Type: String (Boolean)
- Required: No (only applicable for User Attribute data fields)
- Valid Values:
TRUE- If the attribute is missing, treat the qualification as satisfied (user is eligible)FALSE- If the attribute is missing, treat the qualification as not satisfied (user is ineligible)- Empty - Default behavior, similar to setting it as FALSE
Important Notes:
- This field only applies to User Attribute data fields (data fields based on user properties)
- Cannot be set for Treatment Interaction Pattern fields or Event-based fields
- If you try to set this value for non-User Attribute fields, validation will fail
Example Scenario:
If you're targeting users with country = US, but some users don't have a country value:
- Set to
FALSE: Users without a country value won't receive the treatment even if other criteria are satisfied - Set to
TRUE: Users without a country value will be treated given that other criteria are satisfied
Next Step: Once your CSV is filled out, proceed to Upload and Validate for validation rules, error troubleshooting, and to upload your file.