Activate the Criteo Offline Sales Native Snowflake app
The Criteo Offline Sales app enables secure sharing of your offline sales data from your Snowflake environment directly into Commerce Max. This allows you to connect offline sales with online behavior, supporting store attribution and campaign optimization.
Open the Snowflake interface.
From the left navigation menu, go to Data Products > Marketplace. Then, search for Criteo Offline Sales.
Click Get.
When prompted, grant permission to access Criteo API endpoints and share data over SSL by clicking Connect.

Your app installation is done.
How to configure the Criteo Offline Sales app?
Once you have installed the app, you can configure it by following the steps below.
The first step is to enter your Account Id provided to you by a Criteo representative.
Next, you will be prompted to select and allow access to the table that keeps your offline sales data. Select the table and click Save.
For each column in the table, select the corresponding field in the database. Optionally, you can choose to provide access to Cortext AI for simplified table mapping. If you use AI mapping, a manual review is recommended to ensure accurate mapping.
The final step is to schedule the import to enable data change tracking and execute imports. Under the Import section, click Enable data change tracking. Once this is enabled, you will see the Start Import button. Your import will run successfully.
To see the import history and the time the latest import was running, navigate to the Dashboard section.
What happens next?
Once the configuration is complete:
All changes to the selected table will automatically sync with Criteo.
Offline sales data will appear on the Criteo platform within minutes.
This data will be incorporated into attribution reporting and will be available for targeting within Commerce Max.
Offline Sales Data Source Table Requirements
Table Structure: transactions
Column Name | Data Type | Description | Constraints |
timestamp | DATETIME/TIMESTAMP | When the transaction occurred | NOT NULL |
email_address | VARCHAR(255) | Customer email (plain or hashed) | NOT NULL |
transaction_id | VARCHAR(50) | Unique transaction identifier | PRIMARY KEY |
total_purchase_amount | DECIMAL(10,2) | Total amount of the purchase | NOT NULL |
currency | VARCHAR(3) | Currency code (e.g., USD, EUR) | NULLABLE |
products | JSON/TEXT | Array of purchased products | NOT NULL |
SQL that would create the transaction table.
CREATE TABLE transactions (
timestamp TIMESTAMP NOT NULL,
email_address VARCHAR(255) NOT NULL,
transaction_id VARCHAR(50) PRIMARY KEY,
total_purchase_amount DECIMAL(10,2) NOT NULL,
currency VARCHAR(3),
products JSON NOT NULL
);
Products Array Structure: products (within JSON)
Field Name | Data Type | Description | Constraint |
product_id | VARCHAR(50) | Product identifier | NOT NULL |
price | DECIMAL(10,2) | Individual product price at time of purchase | NOT NULL |
quantity | INT | Number of items purchased | NOT NULL, > 0 |
JSON Schema Example:
{
"type": "array",
"items": {
"type": "object",
"properties": {
"product_id": {"type": "string"},
"price": {"type": "number"},
"quantity": {"type": "integer", "minimum": 1}
},
"required": ["product_id", "price", "quantity"]
}
}
Example of how the products JSON might look like:
[
{
"product_id": "PROD001",
"price": 29.99,
"quantity": 2
},
{
"product_id": "PROD002",
"price": 15.50,
"quantity": 1
}
]