Orders | Kevel Audience

Export order data to import into Kevel Audience.

Orders can be augmented with additional information - or corrected with more up-to-date data- that might not be available in your CRM.

Use Cases

There are 4 main use cases for importing orders into Kevel Audience:

Minimize under-Reporting of Kevel Ad Server Conversions

Kevel Audience enhances transactions by associating them with all reliable user identifiers. For example, if a user sees an ad tracked via an anonymous ID and later makes an offline purchase using a loyalty card, Kevel can link that purchase back to the original impression. This helps Retail Media customers avoid under-reporting conversions within their ecosystem.

Bootstrap Kevel Audience Using past Order Records

Importing orders plays an important role when bootstrapping a system. While Kevel Audience builds user profiles with attributes produced from the users' interaction with the website, businesses usually have a lot of information on orders placed before events are collected. These orders can add valuable information to produce user attributes. The attributes that benefit the most from a bootstrap from past orders are the ones related to the next purchase predictions, RFM and lifetime value. The attributes related to the likelihood to buy are produced using different types of events from the users' interaction with the website (besides the actual purchases), so they don't benefit much from an import of orders previously unseen in the system.

Sync Kevel Audience Orders with Your CRM for Data Accuracy

Orders can change their state (for example, becoming canceled or refunded) without an explicit event from the user on the website. In these scenarios, periodic import of orders from your CRM backend can help Kevel Audience have a more accurate view of existing orders.

Complement Order Information Collected by Tracking Events with Details Private to the CRM Backend

Sometimes, the data available when producing events to be collected by Kevel Audience lacks some details that are private and, therefore, not directly accessible by the website. Typical scenarios are information missing from specific line items (like product-related data) or incomplete payment information due to actions that happen after the event is triggered. To keep Kevel Audience informed with accurate order information, order data is typically imported on a regular schedule.

Order Events from Imports

Order imports generate order events. If the order is unknown, an orderPlace is generated. Otherwise, if the import provides new information, for example, the status of a line item is updated, an orderUpdate event is generated.

Considering the provided product ID, events generated from order imports are enriched if a product feed is available. Only omitted attributes are added from the product feed. Attributes available on the import are kept on the event and are not replaced by data from the product feed.

Troubleshooting

After an order import completes, including dry runs, the result may include warnings that highlight data quality issues. The questions below cover the most common ones.

Why does my import show a "heavy users" warning?
This warning appears when a single user ID accounts for ≥2% of the total orders in the file. The import still processes normally, but the affected user IDs are listed so the issue can be investigated before it affects segmentation or downstream systems. The most common cause is a mismatch in the user-identifier column — for example, a shared, placeholder, or system-generated value used instead of a unique per-user identifier. Profiles with an unusually high number of orders can skew segmentation results and strain downstream processing.

What to do: verify that the userId and userIdType columns contain the correct per-user identifiers for each row.

Why does my import show a "repeated order IDs" warning?
All line items for a given order must appear in consecutive rows. The importer closes an order as soon as a row with a different order ID is encountered; if the same order ID reappears later in the file, those rows are treated as an update to the already-closed order rather than part of the original. This has practical consequences: attribution forwarding only considers the first group of line items for each order. When ≥2% of the import's orders are affected, a warning is shown listing example order IDs.

What to do: ensure the file is sorted so that all rows belonging to the same order are grouped together before uploading.

Why are some imported orders generating orderUpdate events instead of orderPlace?
When an order ID is already known to Kevel Audience — for example, because a tracking event for that order was previously collected — the import is treated as an update to the existing order rather than a new placement. This generates an orderUpdate event instead of orderPlace. This is expected behavior when syncing CRM data with orders that were already tracked in real time. If the result is unexpected, verify that the orderId values in the import file match exactly the order IDs sent in tracking events. A mismatch (for example, a different format or prefix) will cause orders to appear new to the system even when they shouldn't.

Why aren't product details being updated after I refreshed the product feed?
Product feed enrichment only fills in attributes that are absent from the imported order — it never overwrites values already present in the file. Additionally, enrichment happens at import time using the product feed available then; updating the feed afterward does not retroactively update orders that have already been imported.

What to do: To apply a refreshed product feed to existing orders, re-import those orders. The new import will pick up the updated feed data for any attributes not supplied in the file itself.

Formats

We currently have support for the following 1st and 3rd party formats:

Supported schemas

Kevel Audience CSV

This format is intended for order imports using CSV, where each line is an Order serialized to CSV. You can download an example file here.

Relevant notes:

Caution
All line items for the same order need to appear in consecutive rows in the CSV file. The appearance of a line item row, with a different order id from the previous rows, closes the order being ingested and completes the order ingestion process for it - including downstream event issuing of a new order event. If the same order id shows up later (even in the same file) with other line items, those will be treated as an update to the order, not part of the initial and original order event. This has practical consequences, for example, attribution forwarding will only consider the first set of line items that were ordered and not any subsequent rows.

Column Required Type Description Details Example
orderId Required String Order identifier Must be unique by Order or123
userIdType Required String The type of user identifier (e.g. "email") Check the User Identifiers documentation email
userId Required String The user identifier john@email.com
networkId Number The identifier of the Kevel Network this Order belongs to 123
currency Required String The currency used in monetary values Check the supported currencies EUR
total Required Double Total value of the order with all discounts already considered, including subtotal, tax and shipping total = subtotal + tax + shipping 102.5
subtotal Required Double The value of the order, when tax and shipping are excluded subtotal = total - tax - shipping 85
tax Required Double The total applied tax value for the order 11.5
shipping Required Double The total shipping costs for the order 6
discount Required Double The total discounted value for the order 5
refund Required Double The total refunded value for the order 0
paymentMethod String The payment method Visa
shippingMethod String The shipping method UPS
shippingCountry String The destination country France
source String Source from where the order was placed. Examples are web, phone call, POS.
promotions List of Strings Vouchers applied in the purchase. Strings separated by ; WINTERSALE
createdAt Required DateTime When the order was created Date format: ISO-8601 2020-09-16T10:38:06+0100
lastUpdated DateTime When the order was last updated Date format: ISO-8601 2020-09-16T20:13:31+0100
custom_<name...> String Attribute name and value to be imported as custom field These columns can be specified multiple times with different names with the "custom_" prefix. The imported order will have those attribute names (without the "custom_" prefix) and respective values as custom fields. For example, "custom_color" will be mapped to "customFields.color" in the order.
lineItem_id String A unique identifier for the line item within the order li125zc
lineItem_productId Required String Product identifier p125zc
lineItem_itemGroupId String Identifier for a group of products that come in different versions (variants) p125
lineItem_name String Product name My Product
lineItem_sku Required String Product SKU p125zc-5
lineItem_brand String Product brand Nike
lineItem_category String Product category Men > Shirts > Short Sleeve Shirts
lineItem_categoriesList List of Strings A hierarchically sorted list of the sub-categories that this product belongs to. The first item should be the most general sub-category, while the last should be the most specific. Strings separated by ; Men;Shirts;Short Sleeve Shirts
lineItem_currency Required String The currency used in monetary values Check the supported currencies EUR
lineItem_total Required Double Total value of the line item with all discounts already considered, including subtotal, tax and shipping total = subtotal + tax + shipping 102.5
lineItem_subtotal Required Double The value of the line item, when tax and shipping are excluded subtotal = total - tax - shipping 85
lineItem_tax Required Double The total applied tax value for the line item 11.5
lineItem_shipping Required Double The total shipping costs for the line item 6
lineItem_discount Required Double The total discounted value for the line item 5
lineItem_refund Required Double The total refunded value for the line item 0
lineItem_quantity Required Double Quantity of items purchased from this line item 1.0
lineItem_promotions List of Strings Vouchers applied in the purchase or displayed together with the product Strings separated by ; WINTERSALE
lineItem_adult Boolean Whether the product includes sexually suggestive content. Must be true or false. Defaults to false false
lineItem_subscriptionDuration Long If the purchase relates to a subscription, captures the subscription duration, in milliseconds. 15552000000
lineItem_size String Product size S
lineItem_sizeSystem String Country of the size system used by your product. EU
lineItem_status Required String Line item status.
placed the order has been placed but the item is yet to be paid
paid the item has been paid but not yet delivered
fulfilled the item has been paid and delivered
refunded the item has been refunded
cancelled the item has been modified to exclude this line item Supported status: placed, paid, fulfilled, refunded, cancelled fulfilled
lineItem_custom_<name...> String Attribute name and value to be imported as custom field of the line item These columns can be specified multiple times with different names with the "lineItem_custom_" prefix. The imported line item will have those attribute names (without the "lineItem_custom_" prefix) and respective values as custom fields.

Shopify CSV

Kevel Audience supports CSV order exports from Shopify. The documentation for generating a Shopify export can be found here. Please ensure you select Export orders to export all order information instead of Export transaction histories, which only exports the transactions.

Relevant notes: