Anaplan Promotion Integration Guide
This guide explains how to integrate Promotion Import from Anaplan with effectmanager.
We offer a fully automated import of promotion data from Anaplan into effectmanager.
This guide explains:
- How to set up the integration
- File format requirements
- Promotion creation and update logic
- Import validations
- Email notifications and error handling
1. Setting Up the Integration
To enable the integration, the following is required:
- An active agreement with effectmanager
- An Anaplan export file in the required format
If you want to enable the integration, please contact our sales team.
2. File Requirements
The integration only accepts files that meet the following requirements.
Accepted File Format
| Requirement | Format |
|---|---|
| File type | CSV |
| Number format | 10000.00 (dot as decimal separator) |
| Date format | YYYY-MM-DD |
3. Promotion Import Logic
We have the following logic for the Anaplan promotion import.
Promotion Creation
If the Promotion ID does not already exist in effectmanager:
- A new promotion is created automatically
- Default mechanism:
- Buy:
1 - Amount:
1
- Buy:
Promotion Updates
If the Promotion ID already exists:
- Existing promotion data is updated for dates, subsidy, and products
- The promotion state is updated according to the imported status
- New values overwrite existing values for the current state
4. File Structure and Field Validation
The Anaplan file must follow the following structure.
Column A — Promo ID
| Property | Value |
|---|---|
| Header | Promo ID |
| Mapping | Promotion Number |
| Format | Text and numbers |
Rules
- Used as the unique Promotion ID
- Mandatory field
- If empty, the import fails with an error
Column B — Name
| Property | Value |
|---|---|
| Header | Name |
| Mapping | Promotion Name |
| Format | Text and numbers |
Rules
- Commas are not allowed because the file is comma-separated (CSV)
Column C — Status
| Property | Value |
|---|---|
| Header | Status |
| Mapping | Promotion State |
Accepted Values
| Anaplan Value | effectmanager State |
|---|---|
| Planned | Planned |
| Internally confirmed | Confirmed |
| Externally confirmed | Confirmed |
| Declined | Cancelled |
Rules
- Only the values above are accepted
- Empty or unsupported values generate an error
Additional Logic
New Promotions
If a new promotion is imported with an initial status Declined. The promotion is rejected on import.
Existing Promotions
If an existing promotion is imported with status Declined:
- The existing state is preserved
- Status is updated to
Cancelled
Column D — Banner
| Property | Value |
|---|---|
| Header | Banner |
| Mapping | Chain Internal Number |
| Format | Text and numbers |
Rules for chains
The Chain ID must:
- Match an active chain in effectmanager
- Exist in effectmanager
- Inactive or unknown chains generate an error.
Additional Logic
-
For new promotions, the retail chain settings determine whether subsidy calculations are based on:
-
Sales In or Sales Out
-
-
After a promotion has been created, the Chain ID cannot be changed.
-
If a different Chain ID is imported for an existing Promotion ID, the import generates an error, and the promotion is not updated.
Errors
The import fails for the promotion if:
- The Chain ID is inactive
- The Chain ID does not exist in effectmanager
- The Chain ID differs from the one originally imported for the Promotion ID
- The Chain ID is no longer active on a Product ID
Column E — Material
| Property | Value |
|---|---|
| Header | Material |
| Mapping | Product Internal Number |
| Format | Text and numbers |
Rules for products
The product must:
- Exist as an active unit in effectmanager
- Have an active retail chain connection to the specified Chain ID
Additional Logic
- Active products are automatically added to the promotion during import
- If an inactive product is included in the file:
- The product is not added to the promotion, and an error is generated
- If a product previously existed on the promotion but is no longer included in the import file, the product is automatically removed from the promotion in effectmanager
Errors
The import fails for the promotion if:
- The internal number is inactive
- The chain is inactive
- The chain is inactive on the product internal number
Column F — Sell-in from
| Property | Value |
|---|---|
| Header | Sell-in from |
| Mapping | Delivery Start Date |
| Format | YYYY-MM-DD |
Rules
- Must match the required date format
- Must be equal to or before the Promotion Start Date
Additional Logic
- Updates the Delivery Start Date
- If empty:
- The field remains empty
- No default value is applied
Column G — Sell-in to
| Property | Value |
|---|---|
| Header | Sell-in to |
| Mapping | Delivery End Date |
| Format | YYYY-MM-DD |
Rules
- Must match the required date format
Additional Logic
- Updates the Delivery End Date
- If empty:
- The field remains empty
- No default value is applied
Column H — Sell-out from
| Property | Value |
|---|---|
| Header | Sell-out from |
| Mapping | Promotion Start Date |
| Format | YYYY-MM-DD |
Rules
- Must match the required date format
- Must be equal to or after the Delivery Start Date
- Must be before the Promotion End Date
- Must be filled out
Additional Logic
- If empty, we give an error on the import of the Promotion ID
- Updates the Promotion Start Date
- Promotion week is automatically calculated according to effectmanager standards
Column I — Sell-out to
| Property | Value |
|---|---|
| Header | Sell-out to |
| Mapping | Promotion End Date |
| Format | YYYY-MM-DD |
Rules
- Must match the required date format
- Must be equal to or after the Promotion Start Date
- Must be filled out
Column J — Mechanic 1
| Property | Value |
|---|---|
| Header | Mechanic 1 |
| Mapping | Promotion Type |
Accepted Values
- Leaflet
- Instore
Rules
- Must be filled out with a value
- Values are mapped directly to Promotion Types in effectmanager Promotion Properties
Column K — End Consumer Price
Not used by the integration.
Column L — Position 1
Not used by the integration.
Column M — Price Condition 1
| Property | Value |
|---|---|
| Header | Price Condition 1 |
| Mapping | Price conditions for promotion subsidy |
| Accepted Values |
|
Any other value generates an error.
Column N — Discount Type 1
| Property | Value |
|---|---|
| Header | Discount Type 1 |
| Mapping | Price conditions for Subsidy |
| Accepted Values |
|
Any combination other than the below will generate an error.
| Price Condition | Discount Type | Result |
|---|---|---|
| If M = ZP51 | Per Unit | Updates all Promotion units with the specified value per unit. |
| If M = ZP50 | Absolute | Imports the absolute value to Promotion Fixed Costs and updates all Promotion units with a divided split per unit. |
| If M = Empty | Empty | Accepted value; nothing is updated. |
Column O — Discount Value Final 1
| Property | Value |
|---|---|
| Header | Discount Value Final 1 |
| Format | Decimal number |
| Example | 1000.00 |
Rules
- Must use a dot as a decimal separator
- Mandatory if Column M or N is filled
- If Column M & N = Emtpy, we allow Column O to be empty.
Columns P–S — Discount Setup 2
These fields follow the same validation and mapping rules as Columns M–O.
Column T — Total Volumes (CU)
| Property | Value |
|---|---|
| Header | Total volumes (CU) |
| Mapping | Sales In – Consumer Units |
| Accepted formats | 10000000 and 10000000.000000 |
Rules
- Values are rounded using standard banking rounding rules
- Value cannot be
0. If the value is0the import fails with an error. - Imported on the Consumer Unit level and effectmanager.
Additional Logic for Total Volumes (CU) 0
If Column A (Promotion ID) is new
- If Sales In is
0, for all the Internal Numbers, the Promotion is rejected and we give an error - If Sales In is
0, for some Internal Number they are not added to the new Promotion ID, and we give an alert - If Sales In is different than
0, the Internal Number is added to the created Promotion ID - If Sales In is
0 - Result: The Promotion ID is created and only contains the Internal Numbers that have Sales In
If Column A (Promotions ID) exists in effectmanager
- If the Internal Number already exists on the Promotion in effectmanager, Sales In is updated to
0. - If the Internal Number is new to the Promotion and Sales In is
0, it is not added, and we give an error - If the Internal Number is new to the Promotion and Sales In is different than
0, it is added to the existing Promotion
5. Email Notifications and Error Handling
After each import, an email notification is automatically sent to the configured contact person.
The email contains:
- Import status
- Successfully imported promotions
- Validation errors
- Failed rows
Any reported errors must be corrected in the source file or in effectmanager before the next import.
6. Typical Validation Errors
| Error Type | Cause | Messages |
|---|---|---|
| Invalid Status | Unsupported status value or initial Declined |
Invalid status on row X. Promotion Status is mandatory. One of the following statuses was expected: 'Planned', 'Externally Confirmed', 'Internally Confirmed', 'Declined' |
| Missing Status | Mandatory field is empty |
Promotion Status is mandatory. Empty status on row X |
| Missing Promo ID | Mandatory field is empty |
Promotion ID is mandatory. Empty promotion ID on row x |
| Invalid Date Format | Date does not match YYYY-MM-DD |
Invalid 'SellOutFrom'. The following format is expected: 'yyyy-MM-dd'; Promotion Sell-out date is invalid on row x Invalid 'SellInFrom'. The following format is expected: 'yyyy-MM-dd'; Sell-in values are invalid on row x. |
| Missing Dates | Mandatory field is empty |
Missing value in column 'SellOutFrom'; |
| Start Date > End Date |
Does not meet |
(Delivery) Start date > (Delivery) End date Delivery Start date should be smaller than the Delivery End date for row [number] ' |
| Non-existing Chain | ChainID does not match ID in effectmanager |
On line [number]: unknown retail chains |
| Empty Chain | Mandatory field is empty |
On line[number]: unknown retail chains: () |
| Inactive Chain | Chain is inactive in effectmanager |
On line [Numbers]: inactive retail chain units: ([Chain name], [Product Internal Number]) |
| Inactive Product | The Product is inactive |
On line [Numbers]: inactive retail chain units: ([Chain name], [Product Internal Number]) On line : The following units are used but are not available for the chosen retail chain: 1. [ProductName] ([Internal Number]) in retail chain [Retail Chain name] but retail chain unit is inactive and product is inactive. |
| Inactive Retail Chain Relation to the product | No active assortment (Retail Chain Connection) exists for the period |
On line [number]: Missing retail chain units ([Chain name], [Internal Number]) On line [Number]: The following units are used but are not available for the chosen retail chain |
| Invalid Decimal Format | Decimal uses a comma instead of a dot, and this will shift all the columns. |
Product import data mapping failed. There are 20 headers and 21 columns in a row: |
| Invalid Promotion Type | Type does not match | Promotion mechanic is not accepted on row [number]. |
| Missing Promotion Type | Mandatory field is empty |
Promotion mechanic is missing on row [number] |
|
Invalid Discount Type |
Unsupported discount type | Price condition 1 is invalid on row 2 |
|
Invalid Discount Type |
Unsupported discount type combinations of the columns |
Either all of the following must be filled in, or neither: Price Condition 1, Discount Type 1, Discount Value Final 1 on row |
|
Invalid Format for |
Discount Value is not in the proper format. |
DiscountValueFinal1 '232.2454.3456' is not in the proper format; |
| Zero Volume New Promotions | Total volume is 0 on one or more products |
Total Volumes must be a number greater than 0 on all new products. |
|
Zero Volume Existing |
Total volume is 0 on one or more products |
Total Volumes must be a number greater than 0 on all new products. |
| Move Promotion | Adding Existing Promotion ID on another chain |
Promotion with number [PromotionID] already exists on the following retail chains: [Chain name] |