Skip to main content

Importing Allocation Strategies

How to create allocation strategies in bulk using a file import.

The allocation strategy import lets you create new strategies in bulk by uploading a file — including store assignments and start and end dates. This is useful when migrating an existing allocation setup into Toolio or when strategies are being created outside of Assortment Plan seeding.

Important: The import creates new strategies only. It will not update or overwrite strategies that already exist in Toolio. Any changes after creation must be made in the UI.

File Format

Use this sample import file as a reference for the required columns and format.

The column schema is fixed by Toolio — only the fields listed below are recognized. Any additional columns in the import file are ignored. Customization beyond these fields is handled through allocation defaults, not by extending the file format.

Each row represents a choiceId and (optionally) a store. When multiple rows share the same choiceId, they are grouped into a single strategy:

  • Strategy-level fields are taken from the last row in the group.

  • Each row with a locationId creates a per-location override for that store. Per-location fields are: startDate, endDate, phaseOutDate, safetyStock, orderCycle, minPresentationWeeks, and sizeRange.

  • Rows without a locationId contribute only to strategy-level values.

Required Fields

  • choiceId is required. Without it, the row is rejected.

  • An External ID column is also required. The import uses the External ID, not the choiceId, to decide whether a strategy already exists. See Skipped — Strategy Already Exists below for how this affects choices that already have a strategy.

  • locationId is required on any row that defines a per-location override. A row without locationId only contributes to strategy-level fields.

All other fields are optional. When omitted, Toolio applies the matching allocation default if one exists, or the system-level default for that field.

Supported Fields

Field

Type

Purpose

choiceId

String

The choice being allocated. Required.

locationId

String

A specific store to include in the strategy. Required on rows that define per-location overrides.

locationListName

String

Existing location list to associate with the strategy. Defaults to a system-managed list if omitted.

startDate

Date

Date allocation should begin.

endDate

Date

Date allocation should stop.

phaseOutDate

Date

Date after which no further allocations are made.

demandType

Enum

How demand is calculated. Must match an allowed value.

demand

Number

Demand value (used with certain demandType values).

salesCurve

String

Name of the sales curve to apply.

sizeCurve

String

Name of the size curve to apply.

sizeRange

String

Name of the size range to apply.

safetyStock

Integer

Safety stock level.

orderCycle

Integer

Order cycle in weeks.

minPresentationWeeks

Integer

Weeks the presentation minimum is enforced, counted from the start date. 0 means never enforced.

holdbackPercentage

Number

Holdback percentage to retain at the source.

pushAll

Boolean

Whether to push all available inventory.

prioritizationMethod

Enum

Method used to prioritize allocation. Must match an allowed value.

locationCurve

String

Name of the location curve to apply.

launchCurve

String

Name of the launch curve to apply.

presentationProfile

String

Name of the presentation profile.

returnProfile

String

Name of the return profile.

rosRank

Enum

ROS rank value. Must match an allowed value.

rosModel

String

ROS model definition (JSON).

isActive

Boolean

Whether the strategy is active. Defaults to false. Set to true to make the strategy eligible for allocation runs immediately.

disableRetrend

Boolean

Whether retrending is disabled for this allocation strategy.

How Store Inclusion Works

Stores listed for a given choiceId are included in the strategy; any store not listed is excluded. There is no need to configure store lists manually after import.

Stores must be members of the associated location list. Including a store that isn't in the location list won't be flagged as an error, but the strategy may not behave as expected.

Location Lists

You can optionally specify a locationListName to associate the strategy with an existing location list in Toolio.

If no locationListName is provided, the system automatically assigns a system-managed default list.

If a locationListName is provided but does not exist in Toolio, the strategy for that choiceId will be skipped and an error will be returned — the import does not create new location lists.

How Allocation Defaults Are Applied

Allocation defaults are merged into each strategy during import, before the strategy is created. For any field not included in the import file, Toolio checks whether a matching allocation default exists and fills in the missing value.

Imported values always take precedence. If a field is present in the import file, the default for that field is ignored — even if a matching allocation default exists.

Fields that can be filled from allocation defaults include: Safety Stock, Order Cycle, Minimum Presentation Weeks, Holdback %, Push All, Prioritization Method, Sales Curve, Size Curve, Location Curve, Presentation Profile, and Return Profile. Location List is not taken from defaults: a row with no locationListName gets the system-managed list.

Example: Your allocation default sets Safety Stock = 2 and Sales Curve = "Standard Fall". Your import file includes a Safety Stock value of 5 for a choiceId but does not specify a Sales Curve. The resulting strategy will have Safety Stock = 5 (from the import) and Sales Curve = "Standard Fall" (from the default).

For per-location overrides, Toolio uses the first value it finds for each store: the value in your import file, then the store's value in the matching Allocation Default's location overrides, then the strategy-level value. This applies to Safety Stock, Order Cycle, Size Range, Minimum Presentation and Minimum Presentation Weeks.

If a strategy has no rows with a locationId and its matching Allocation Default has location overrides, Toolio creates a per-location override for every store in the strategy's location list, using the store values from the default. Each store starts on the strategy's startDate, or today if the file has none.

Errors and Skipped Rows

There are two distinct outcomes when a row or strategy cannot be processed: errors and skips. Both are reported after the import completes.

❗ The import summary reports the number of skipped and errored rows — it does not list which choiceIds they belong to. If the counts don't match what you expect, use the FAQs below to reconcile your file against the strategies that were actually created. Exposing more detail on skipped and errored rows is a known gap that has been logged with the Toolio product team.

Errors — Row Rejected, Strategy Not Created

An error is reported when a row contains invalid data. The strategy for that choiceId is not created. Errors fall into two categories:

Schema or format errors are caught before the import is saved. A row is rejected immediately if:

  • choiceId is missing (the only required field)

  • A field has the wrong data type (e.g. a non-date value in startDate, a non-integer in safetyStock)

  • An invalid value is used for an enum field — demandType, prioritizationMethod, or rosRank must match one of the allowed values listed in the sample import file

Reference errors are caught during finalization. A strategy is skipped if any name in the file cannot be resolved to an existing record in Toolio:

  • Store (locationId) not found

  • Location list (locationListName) not found

  • Size curve, sales curve, location curve, launch curve, size range, presentation profile, or return profile name not found

In both cases, the row number and field name are included in the error report so you can correct and re-import.

Skipped — Strategy Already Exists

Rows are grouped into strategies by External ID. If a strategy with that External ID already exists in Toolio, all of its rows are skipped. The count of skipped rows is included in the import summary. The import will never overwrite an existing strategy.

A new External ID on a choiceId that already has a strategy creates a second strategy for that choice. More than one strategy per choice is allowed. Toolio only blocks the new strategy if it shares a store with an existing active strategy and their date ranges overlap.

Using the Choice ID as the External ID does not guarantee a match. Only strategies created by an earlier import that used the Choice ID as the External ID carry it. Strategies created in Toolio, and strategies that existed before External ID matching was introduced, have a system-generated External ID (for example, AS-1234). A file keyed on Choice ID won't match those strategies, so the import creates a new one.

To avoid an unwanted second strategy:

  1. Before uploading, filter Allocation Strategies by the choices in your file.

  2. Remove any choice that already has a strategy from the file.

  3. Add the stores for those choices to the existing strategy in the grid.

FAQs

Can I add my own columns to the import file?

No. The schema is fixed by Toolio, and any columns outside the supported list are ignored. To customize values that aren't in the file, configure allocation defaults — they are merged into the strategy at import time for any field not provided.

Can I update an existing strategy through the import?

No. The import is create-only. If a strategy with the same External ID already exists, it will be skipped. All changes to existing strategies must be made in the UI.

What happens if I don't specify a location list?

The system assigns a system-managed default location list. You can update the location list on the strategy in the UI after import if needed.

What happens if one row in a choiceId group has an invalid reference?

The entire strategy for that choiceId is skipped — no partial strategies are created. Fix the invalid row and re-import to create the strategy.

How do I find out which choices were skipped?

The summary gives you a total count of skipped rows, not the choiceIds behind it. To identify them, compare the choiceIds in your import file against the strategies that already exist in Toolio — any External ID that already has a strategy was skipped, along with every other row in its group.

Keep in mind the count is a row count, not a choice count. A single skipped choiceId with six rows in your file reports as six skipped rows.

Why did the import create a second strategy for a choice that already had one?

The import matches existing strategies by External ID, not by choiceId. If the existing strategy has a system-generated External ID (for example, it was created in Toolio) and your file uses the Choice ID, they don't match and a new strategy is created. To keep everything on one strategy, remove the new strategy and add its stores to the existing one. Use store-level start and end dates if those stores need different timing.

A choice from my file has no strategy after the import. What should I check?

If a choiceId from your file has no strategy in Toolio, work through these checks in order:

  1. A strategy with that External ID already exists. Existing strategies are never overwritten, so all rows with that External ID are skipped. This is the most common cause.

  2. The dates aren't in a valid order. If the phaseOutDate falls before the startDate, no strategy is created for that choiceId. Confirm that startDate, endDate, and phaseOutDate are consistent on every row in the group.

  3. A referenced name doesn't exist in Toolio. A size curve, sales curve, location curve, launch curve, size range, location list, presentation profile, or return profile name that can't be resolved causes the whole strategy for that choiceId to be skipped — even if only one row in the group carries the bad reference.

  4. The file has no External ID column. An import without an External ID column can show Completed with no errors and still create no strategies. Add the column and re-import. If your External IDs match your Choice IDs, repeat the choiceId value in it.

Correct the rows and re-import. Because the import is create-only, re-running the same file won't affect strategies that were already created successfully.

Did this answer your question?