Setup
Introduction
The purpose of this article is to share the Actito e-commerce data model, explaining which entities and attributes compose it, and how the data is fetched from the CMS.
Actito provides a simple way to collect data without any IT involvement from major e-commerce CMS platforms such as Shopify, Magento, or PrestaShop.
However, if you have developed your own e-commerce CMS, modified a standard integration, or use a non-compatible feature of one of the CMS above, you will need to manage the data synchronization yourself.
By following the recommendations below, you will still be able to benefit from all the features included in the e-commerce add-on.
Forbidden actions on the e-commerce database
- Do not modify the structure of the
orders,order lines,abandoned cart, orabandoned cart linestables (e.g., adding, removing, or renaming fields). - Do not change any table parameters, such as table names, field names, table links, triggers, or cleanup rules.
- Do not delete the
customers,orders,order lines,abandoned cart, orabandoned cart linestables. - Do not synchronize these tables through another channel (ETL, API, or manual import) if they are already synchronized via the Actito connector.
Allowed actions on the e-commerce database
- Add new tables to store additional data types based on your use case.
- Add new fields to the profile table.
- Synchronize any newly created tables.
- Add new subscriptions.
- Add new segments.
- Synchronize the profile table with multiple data sources (be cautious when a field is updated by more than one source).
Features of the e-commerce solution
The e-commerce solution is a bundle of features designed to help marketers manage their business efficiently, without IT constraints.
The bundle includes:
-
A data model tailored for e-commerce
- A multi-table model that stores key customer information (accounts, orders, abandoned carts, etc.)
-
A connector to import data from your e-commerce CMS
- Supported CMS platforms: Magento, PrestaShop, Shopify
-
Marketing insights
- Prebuilt segments to classify your customers (e.g., New Buyers, Potential Purchasers, New Subscribers, Engaged 3 Months, etc.)
- An RFM matrix to identify your most and least valuable customers and define strategic actions.
- A dashboard providing e-commerce insights related to your marketing activity (optional paid feature).
-
Activation strategies
- Prebuilt customer journeys to easily launch your first campaigns and quickly increase your turnover.
-
Content management
- Automatically prefill your email campaigns with product information retrieved from your CMS, saving time and reducing the risk of errors.
Actito Environment
Overview of the solution
When the e-commerce solution is deployed, a new database named Customers is created by default.
This database is synchronized with your e-commerce CMS via an Actito-owned connector.
The e-commerce solution provides marketers with all relevant data related to customer accounts, orders, and abandoned carts.
Newsletter subscriptions are also synchronized bidirectionally: from the CMS to Actito and from Actito back to the CMS.

The e-commerce solution can also be deployed on an existing profile table.
In this case, no new database is created, and all the features described above will be available from the existing table.
You may also use the e-commerce solution without the Actito connector.
In that case, you must handle data exchanges yourself via the Actito Integration Framework.
For more details, refer to the section “Data synchronization without the Actito connector.”
Finally, several e-commerce solutions can coexist under the same Actito license.
Database
Overview
Actito’s data model is a multi-table data model centered on the profile concept.
A profile represents an identified person targeted by a marketing campaign.
All imported data must be directly or indirectly linked to a profile.
E-commerce data model schema

PK = Primary key
FK = Foreign key
Profile definition
This section defines the profile concept for the e-commerce solution.
This information applies only if the profile table is created during the e-commerce solution setup.
If an existing profile table is used, its definition prevails.
- Deploying the e-commerce solution on an existing profile table does not automatically add new attributes, except for predefined segmentations.
If you wish to synchronize additional attributes with the Actito connector, you must create them before deploying the e-commerce solution.
See this article for details. - Ensure that the existing profile table configuration is compatible with the e-commerce solution (profile uniqueness and mandatory fields must be respected).
Unicity of a Profile
Profile uniqueness is defined by either the email address or the customer account ID from your e-commerce CMS.
Profile creation or update operations are based on this key.
This data is mandatory for:
- Creating or updating a profile in the database
- Linking business information such as orders or abandoned carts
It is also possible to define both as keys.
In this configuration, the email address is set as the main unique and mandatory key, while the account ID is unique but optional.
In this case, business data such as orders or abandoned carts are linked to the profile using the email address.
How to choose the right key
| Key | Inject new profiles from other data sources | Update email address from customer account | Guest checkout* |
|---|---|---|---|
| accountId | Only from data sources that provide the customer Account ID from the e-commerce CMS | Possible | Not possible |
| emailAddress | Only from data sources that provide the email address | Not possible | Possible |
| emailAddress & accountId** | From data sources that provide either the email address or the customer Account ID | Possible | Possible |
* Many e-commerce CMSs require shoppers to create an account before purchasing. If this setting is disabled, shoppers can complete a guest checkout without creating an account.
** Using both keys can cause synchronization issues. If profile data refers to two different profiles (e.g., Account ID → Profile A and Email Address → Profile B), the operation (create or update) cannot be completed and will be rejected.
Email Subscription
The e-commerce solution includes management of a single email subscription.
By default, the subscription name in the data model is Newsletter.
When deploying the e-commerce solution on an existing data model, you can select which Actito subscription to synchronize with the standard email subscription field in your e-commerce customer account.
Mandatory Fields
A field defined as mandatory must be provided when creating a new profile.
Otherwise, the profile will be rejected during the import process.
This rule applies to all data injection methods (e-commerce connector, API, automatic file import, manual import, web form, or user interface).
By default, no field in the profile table is mandatory except the defined profile key.
If the e-commerce solution is deployed on an existing profile table, ensure that all mandatory fields in the target table can be populated from the customer account data in your e-commerce CMS.
Unicity of the Email Address
In Actito, a profile can own only one email address.
Warning: If the email address field is not set as unique, multiple profiles with the same email may receive the same campaign multiple times.
To prevent this, Actito offers an option to send only one communication per email address (randomly selecting one profile).
| If profile uniqueness is defined by | Email address set as unique |
|---|---|
| accountId | NO |
| emailAddress | YES |
| emailAddress + accountId | YES |
Unicity of the Mobile Phone Number
In Actito, a profile can own only one mobile phone number.
Warning: If the mobile phone number field is not unique, multiple profiles sharing the same number may receive the same SMS campaign multiple times.
To prevent this, Actito provides an option to send only one message per phone number (randomly selecting one profile).
The mobile phone number is set as not unique by default.
Unicity of the Account ID
| If profile uniqueness is defined by | Account ID set as unique |
|---|---|
| accountId | YES |
| emailAddress | NO |
| emailAddress + accountId* | YES |
* Warning: Using double keys can lead to synchronization issues.
If the imported profile data refers to two different profiles (e.g., Account ID → Profile A and Email Address → Profile B), the operation (create or update) cannot be performed and will be rejected.
Segmentations
The e-commerce solution provides 8 predefined segments.
Purchase-behavior-based segmentations
| Segmentation name | Type | Rule definition |
|---|---|---|
| Client churn risks | Simple | Email address is known (reachable) AND Newsletter subscription is true AND Number of orders ≥ 1 AND Last order (by creation date) is less than 180 days old AND No orders in the last 6 months AND Actito engagement score is “Bad” or “Low” (last activity is old) |
| Potential purchasers | Simple | Engagement score is “Fair”, “Good”, or “Very good” AND No orders (Order ID unknown) AND Email address is known AND Newsletter subscription is true |
| New buyers | Simple | Number of orders = 1 AND Last order is less than 30 days old AND Email address is known AND Newsletter subscription is true |
| VIP customers | Simple | Number of orders ≥ 5 AND Last order is less than 120 days old AND Email address is known AND Newsletter subscription is true |
Email-behavior-based segmentations
| Segmentation name | Type | Rule definition |
|---|---|---|
| Unengaged | Simple | Profile created more than 90 days ago AND No email opens in the last 90 days |
| New subscribers | Simple | Profile created less than 14 days ago AND Newsletter subscription is true |
| Engaged 3 months | Simple | Profile created more than 90 days ago AND (Email open or click in the last 90 days) |
| Unengaged 1 year | Simple | Profile created more than 365 days ago AND (Email open or click in the last 365 days) |
Table Definition
| Technical name | Customers |
| Display name | Customers |
| Type of table | Profile |
Attributes
| # | Technical name | Display name | Type | Constraints | Actito standard attribute |
|---|---|---|---|---|---|
| 1 | accountId | accountId | STRING | Max 255 chars; can be unique/mandatory depending on settings | - |
| 2 | firstName | firstName | STRING | Max 64 chars | firstName |
| 3 | lastName | lastName | STRING | Max 64 chars | lastName |
| 4 | emailAddress | emailAddress | STRING | Max 255 chars; can be unique/mandatory depending on settings | emailAddress |
| 5 | sex | sex | STRING | Values: M (male), F (female) | sex |
| 6 | birthDate | birthDate | DATE | Format: yyyy-mm-dd | birthDate |
| 7 | addressCompany | addressCompany | STRING | Max 255 chars | - |
| 8 | VATNumber | VATNumber | STRING | Max 255 chars | - |
| 9 | addressStreet | addressStreet | STRING | Max 255 chars | addressStreet |
| 10 | addressLocality | addressLocality | STRING | Max 50 chars | addressLocality |
| 11 | addressCountry | addressCountry | STRING | 2 chars, ISO 3166-1 format (e.g., FR, BE, DE) | addressCountry |
| 12 | addressRegion | addressRegion | STRING | Max 255 chars | - |
| 13 | addressPostalCode | addressPostalCode | STRING | Max 10 chars | addressPostalCode |
| 14 | mobilePhoneNumber | mobilePhoneNumber | STRING | Include international prefix; allowed chars: + ( ) . - / 0–9 | gsmNumber |
| 15 | customerGroup | customerGroup | STRING | Max 255 chars | - |
| 16 | source | source | STRING | Max 255 chars | - |
| 17 | motherLanguage | motherLanguage | STRING | ISO 639-1, 2 chars | motherLanguage |
Subscriptions
| # | Technical name | Display name | Type | Constraints | Actito standard attribute |
|---|---|---|---|---|---|
| 1 | Newsletter | Newsletter | BOOLEAN | true/false | subscription |
Segmentations
| # | Technical name | Display name | Type | Constraints | Actito standard attribute |
|---|---|---|---|---|---|
| 1 | Client churn risks | Client churn risks | STRING | member / null | simple segmentation |
| 2 | Potential purchasers | Potential purchasers | STRING | member / null | simple segmentation |
| 3 | New buyers | New buyers | STRING | member / null | simple segmentation |
| 4 | VIP customers | VIP customers | STRING | member / null | simple segmentation |
| 5 | Unengaged | Unengaged | STRING | member / null | simple segmentation |
| 6 | New subscribers | New subscribers | STRING | member / null | simple segmentation |
| 7 | Engaged 3 months | Engaged 3 months | STRING | member / null | simple segmentation |
| 8 | Unengaged 1 year | Unengaged 1 year | STRING | member / null | simple segmentation |
Definition of the Business Tables of the E-commerce Solution
This section describes the configuration of the business tables used in the e-commerce solution.
Orders Table
This table stores all orders associated with a customer account.
Table definition
| Parameter | Value |
|---|---|
| Technical name | orders |
| Display name | Orders |
| Type of table | Interactions |
| Profile table linked | Refer to the profile table name |
| Creation time column (mandatory) | creationMoment |
| Primary key | orderId |
| Auto-incremental key | No |
| Composite key | No |
| Integrity check | No |
Attributes
| # | Technical name | Display name | Type | Constraints | Foreign key |
|---|---|---|---|---|---|
| 1 | orderId | orderId | STRING | Mandatory, unique, max 255 characters | - |
| 2 | reference | reference | STRING | Max 255 characters | - |
| 3 | currency | currency | STRING | Max 255 characters | - |
| 4 | date | date | TIMESTAMP | Format: YYYY-MM-DD hh:mm:ss | - |
| 5 | total | total | NUMBER | Integers or long; positive numbers without +; negative numbers with -; decimal separator . | - |
| 6 | totalExclTax | totalExclTax | NUMBER | Same as total | - |
| 7 | totalInclTax | totalInclTax | NUMBER | Same as total | - |
| 8 | shipping | shipping | NUMBER | Same as total | - |
| 9 | shippingOption | shippingOption | STRING | Max 255 characters | - |
| 10 | paymentMethod | paymentMethod | STRING | Max 255 characters | - |
| 11 | couponCode | couponCode | STRING | Max 255 characters | - |
| 12 | status | status | STRING | Max 255 characters | - |
| 13 | shopId | shopId | STRING | Max 255 characters | - |
| 14 | shopName | shopName | STRING | Max 255 characters | - |
| 15 | emailAddress or accountId* | emailAddress or accountId | STRING | Mandatory, max 255 characters | Profile table |
* Depends on the profile key defined during setup.
Limit and Cleaning Rules
| Parameter | Value |
|---|---|
| Amount of data | 10 million rows |
| Behavior when a profile is deleted | No action |
| Cleaning rule | Not set |
Events
| Event name | Trigger | Rules definition |
|---|---|---|
| New order | CREATE ROW | - |
Order Lines Table
This table stores individual order lines associated with a customer account and an order.
Table definition
| Parameter | Value |
|---|---|
| Technical name | orderLines |
| Display name | Order Lines |
| Type of table | Interactions |
| Profile table linked | Refer to the profile table name |
| Creation time column (mandatory) | creationMoment |
| Primary key | orderDetailId |
| Auto-incremental key | No |
| Composite key | No |
| Integrity check | Profile known, order known |
Attributes
| # | Technical name | Display name | Type | Constraints | Foreign key |
|---|---|---|---|---|---|
| 1 | orderId | orderId | STRING | Mandatory, max 255 characters | Orders table |
| 2 | orderDetailId | orderDetailId | STRING | Mandatory, unique, max 255 characters | - |
| 3 | orderReference | orderReference | STRING | Max 255 characters | - |
| 4 | sku | sku | STRING | Max 255 characters | - |
| 5 | description | description | STRING | Max 255 characters | - |
| 6 | name | name | STRING | Max 255 characters | - |
| 7 | quantity | quantity | NUMBER | Integers or long; positive numbers without +; negative numbers with -; decimal separator . | - |
| 8 | unitPrice | unitPrice | NUMBER | Same as quantity | - |
| 9 | unitPriceExclTax | unitPriceExclTax | NUMBER | Same as quantity | - |
| 10 | unitPriceInclTax | unitPriceInclTax | NUMBER | Same as quantity | - |
| 11 | productUrl | productUrl | STRING | Max 255 characters | - |
| 12 | pictureUrl | pictureUrl | STRING | Max 255 characters | - |
| 13 | shopId | shopId | STRING | Max 255 characters | - |
| 14 | shopName | shopName | STRING | Max 255 characters | - |
| 15 | emailAddress or accountId* | emailAddress or accountId | STRING | Mandatory, max 255 characters | Profile table |
* Depends on the profile key defined during setup.
Limit and Cleaning Rules
| Parameter | Value |
|---|---|
| Amount of data | 10 million rows |
| Behavior when a profile is deleted | No action |
| Behavior when an order is deleted | No action |
| Cleaning rule | Not set |
Events
| Event name | Trigger | Rules definition |
|---|---|---|
| New order line | CREATE ROW | - |
Abandoned Carts Table
This table stores abandoned carts associated with a customer account.
Table definition
| Parameter | Value |
|---|---|
| Technical name | abandonedCarts |
| Display name | Abandoned Carts |
| Type of table | Interactions |
| Profile table linked | Refer to the profile table name |
| Creation time column (mandatory) | creationMoment |
| Primary key | abandonedCartId |
| Auto-incremental key | No |
| Composite key | No |
| Integrity check | Profile known |
Attributes
| # | Technical name | Display name | Type | Constraints | Foreign key |
|---|---|---|---|---|---|
| 1 | orderId | orderId | STRING | Mandatory, max 255 characters | - |
| 2 | reference | reference | STRING | Max 255 characters | - |
| 3 | currency | currency | STRING | Max 255 characters | - |
| 4 | total | total | NUMBER | Integers or long; positive numbers without +; negative numbers with -; decimal separator . | - |
| 5 | totalExclTax | totalExclTax | NUMBER | Same as total | - |
| 6 | totalInclTax | totalInclTax | NUMBER | Same as total | - |
| 7 | status | status | STRING | Max 255 characters | - |
| 8 | abandonedSinceMoment | abandonedSinceMoment | TIMESTAMP | Format: YYYY-MM-DD hh:mm:ss | - |
| 9 | shopId | shopId | STRING | Max 255 characters | - |
| 10 | shopName | shopName | STRING | Max 255 characters | - |
| 11 | emailAddress or accountId* | emailAddress or accountId | STRING | Mandatory, max 255 characters | Profile table |
* Depends on the profile key defined during setup.
Limit and Cleaning Rules
| Parameter | Value |
|---|---|
| Amount of data | 10 million rows |
| Behavior when a profile is deleted | No action |
| Cleaning rule | Not set |
Events
| Event name | Trigger | Rules definition |
|---|---|---|
| New abandoned cart | CREATE ROW | - |
Abandoned Cart Lines Table
This table stores individual abandoned cart lines associated with a customer account.
Table definition
| Parameter | Value |
|---|---|
| Technical name | abandonedCartLines |
| Display name | Abandoned Cart Lines |
| Type of table | Interactions |
| Profile table linked | Refer to the profile table name |
| Creation time column (mandatory) | creationMoment |
| Primary key | abandonedCartDetailId |
| Auto-incremental key | No |
| Composite key | No |
| Integrity check | Profile known, abandoned cart known |
Attributes
| # | Technical name | Display name | Type | Constraints | Foreign key |
|---|---|---|---|---|---|
| 1 | abandonedCartId | abandonedCartId | STRING | Max 255 characters | Abandoned Carts table |
| 2 | abandonedCartDetailId | abandonedCartDetailId | STRING | Mandatory, unique, max 255 characters | - |
| 3 | abandonedCartReference | abandonedCartReference | STRING | Max 255 characters | - |
| 4 | sku | sku | STRING | Max 255 characters | - |
| 5 | description | description | STRING | Max 255 characters | - |
| 6 | name | name | STRING | Max 255 characters | - |
| 7 | quantity | quantity | NUMBER | Integers or long; positive numbers without +; negative numbers with -; decimal separator . | - |
| 8 | unitPrice | unitPrice | NUMBER | Same as quantity | - |
| 9 | unitPriceExclTax | unitPriceExclTax | NUMBER | Same as quantity | - |
| 10 | unitPriceInclTax | unitPriceInclTax | NUMBER | Same as quantity | - |
| 11 | productUrl | productUrl | STRING | Max 255 characters | - |
| 12 | pictureUrl | pictureUrl | STRING | Max 255 characters | - |
| 13 | shopId | shopId | STRING | Max 255 characters | - |
| 14 | shopName | shopName | STRING | Max 255 characters | - |
| 15 | emailAddress or accountId* | emailAddress or accountId | STRING | Mandatory, max 255 characters | Profile table |
* Depends on the profile key defined during setup.
Limit and Cleaning Rules
| Parameter | Value |
|---|---|
| Amount of data | 10 million rows |
| Behavior when a profile is deleted | No action |
| Cleaning rule | Not set |
Events
| Event name | Trigger | Rules definition |
|---|---|---|
| New abandoned cart line | CREATE ROW | - |
Data Synchronization
Through the Connector Designed by Actito
Synchronization Mode
The connector is available for the following e-commerce CMS versions:
- Magento Open Source v2.0 to v2.4.5
- PrestaShop v1.6 to v1.7
- Shopify
Data is synchronized through API to inject information into Actito in real time.
Profile Table
Main Information
| Parameter | Value |
|---|---|
| Technical name of the linked table | Refer to the profile table linked to the e-commerce solution set in the setup kit |
| Entity | Refer to the entity set in the setup kit |
| Import mode | Create and Update |
Important Notes
- Every minute, Actito polls for new or updated customers since the last synchronization.
- When a new order is synchronized, the system also checks for updates in the related profile.
- Profiles missing mandatory fields on the Actito side are rejected during import.
- Invalid values in any field result in rejection of the profile during import.
Newsletter Subscription
When using the connector to fetch data from the e-commerce CMS, Actito follows the CMS as the authoritative source. The connector manages the following data flows:
- Updates the email subscription from the e-commerce CMS to Actito.
- Updates the email subscription from Actito to the e-commerce CMS.
The subscription is linked to the standard email subscription field in the e-commerce customer account.
| CMS | Attribute |
|---|---|
| Magento 2.X | extension_attributes[is_subscribed] from table customers |
| PrestaShop | newsletter from table customers |
| Shopify | accepts_marketing from table customers |
Rules and Mapping Between E-commerce CMS and the Data Model
- If the connector is linked to an existing profile table, it is possible to map the data exported from the connector to the profile table. This mapping must be documented in the SET_KIT document. Without mapping, fields will not be synchronized.
- If the default profile table named Customers provided by the e-commerce solution is used, refer to the Mapping and Rules documents below.
Note: All fields are available in the data model, even if they cannot be retrieved from the e-commerce CMS.
| CMS | Mapping and Rules |
|---|---|
| Magento 2.X | This document |
| PrestaShop | This document |
| Shopify | This document |
Other Information
- It is possible not to synchronize the customer account. Even if a table is not synchronized, it will still be deployed if the e-commerce solution is not using an existing profile table.
- Some attributes may be unavailable or unsynchronized depending on the e-commerce CMS. These fields are still created in the table but remain empty. This applies only when the profile table is created by the e-commerce solution.
- Subscription updates from Actito to the e-commerce CMS:
- Can be activated or deactivated*
- Available for all new connectors deployed from 16 February 2022. Existing connectors created before this date do not have this synchronization activated.
Orders Table
Main Information
| Parameter | Value |
|---|---|
| Technical name of the linked table | Orders |
| Entity | Refer to the entity set in the setup kit |
| Import mode | Create and Update |
Rules and Mapping Between E-commerce CMS and the Data Model
- Every two minutes, Actito polls for new or updated customers since the last synchronization.
- Orders that do not link to a known profile will be rejected.
- Orders missing mandatory fields will be rejected during the import process.
- Invalid values in any field will result in rejection of the order.
- When an order is updated, only new rows are added; deleted rows are not supported.
| CMS | Mapping and Rules |
|---|---|
| Magento 2.X | This document |
| PrestaShop | This document |
| Shopify | This document |
All fields are available in the data model, even if they cannot be retrieved from the e-commerce CMS.
Other Information
- It is possible not to synchronize orders (including order lines). Even if the table is not synchronized, it will still be deployed.
Order Lines Table
Main Information
| Parameter | Value |
|---|---|
| Technical name of the linked table | orderLines |
| Entity | Refer to the entity set in the setup kit |
| Import mode | Create and Update |
Rules and Mapping Between E-commerce CMS and the Data Model
- Every two minutes, Actito polls for new or updated customers since the last synchronization.
- Order lines that do not link to a known profile will be rejected.
- Orders missing mandatory fields will be rejected during the import process.
- Invalid values in any field will result in rejection of the order line.
- When an order is updated, only new rows are added; deleted rows are not supported.
| CMS | Mapping and Rules |
|---|---|
| Magento 2.X | This document |
| PrestaShop | This document |
| Shopify | This document |
Other Information
- It is possible not to synchronize order lines. Even if the table is not synchronized, it will still be deployed.
Abandoned Carts Table
Main Information
| Parameter | Value |
|---|---|
| Technical name of the linked table | abandonedCarts |
| Entity | Refer to the entity set in the setup kit |
| Import mode | Create Only |
Rules and Mapping Between E-commerce CMS and the Data Model
- Every 5 minutes, Actito polls for new abandoned carts since the last synchronization.
- A cart is considered abandoned if there is no update after 180 minutes by default. This value can be modified; refer to the SET_KIT document for the correct setting.
- Abandoned carts that do not link to a known profile will be rejected.
- Abandoned carts missing mandatory fields will be rejected during the import process.
- Invalid values in any field will result in rejection of the abandoned cart.
- Only one abandoned cart per day is managed by the connector.
| CMS | Mapping and Rules |
|---|---|
| Magento 2.X | This document |
| PrestaShop | This document |
| Shopify | This document |
Other Information
- It is possible not to synchronize abandoned carts. Even if the table is not synchronized, it will still be deployed.