Location capacity import lets you set the unit capacity of many locations at once by uploading a file, instead of typing values into the Location Capacity tab one cell at a time.
The values it writes are exactly the ones a user can enter by hand, and they drive the same capacity check: after a run, Toolio trims recommended transfers that would push a location past its capacity. See Location Capacity in Allocation for how capacity, the check window, the threshold, and the cuts work.
The importer is the practical way to maintain capacity at scale. When capacity is partitioned by product hierarchy, a single store can have thousands of combinations — the tab is for spot edits, and the file is how capacity actually gets loaded and kept current.
Use Cases
Use the location capacity import when:
You are turning capacity on for the first time and need a value on every store before the first run
You maintain capacity in a space-planning or planogram system and want Toolio to follow it
Floor sets or a remodel have changed what a group of stores can hold
You partition capacity by Division or Department and the number of combinations makes cell-by-cell editing impractical
You need to remove capacity from a set of stores or partitions in bulk
Before You Import
Two things must be settled before the first file, because both decide what the file has to look like.
Location Capacity must be enabled for your organization. Without it, the Location Capacity tab is hidden and no capacity run happens. Contact your customer success manager to turn it on.
The capacity partition grain must be set first. The Capacity Partition Grain in Settings > Module Settings > Allocation > Allocation Configuration decides whether capacity is one number per store or one number per store and hierarchy combination — and therefore which columns your file needs. The importer never changes the grain; it only reads it.
❗ Changing the grain deletes every capacity value that no longer matches it. Settle the grain before you load capacity — if you change it afterwards, you will need to re-import.
Running the Import
Go to Settings > Imports
Click
New ImportSelect
Location Capacityas the modelChoose
Systemas the mapper, unless you have defined a custom mapper for your own headers — see Using Mappers to Map Data to Toolio AttributesSelect your CSV file and upload it
The file is processed in the background and appears in the import list with its row and error counts, like any other import — see Manual Imports and Import Status and Error Diagnostics.
You can also drop the file on your SFTP for an automated feed. Toolio routes it to the location capacity importer when the filename contains any of the following (case-insensitive):
location_capacitylocation-capacitylocationcapacity
Examples: location_capacity_2026_spring.csv, nightly-location-capacity.csv
File Format
Each row is one capacity value: a location, one value for each level of the capacity partition grain, and the unit capacity.
Toolio matches your headers to the columns below by name, so a file that uses these names as headers imports without any setup. A column is recognized either by its attribute name or by its display name — location_external_id and Location External Id both resolve. Column order does not matter, and any column Toolio does not recognize is ignored, though it is kept with the row for error reporting.
Supported Fields
Attribute | CSV Type | DB Type | Required | Example | Description |
| String | varchar(255) | Yes | 1042 | External ID of the location as it appears on your location feed. A location alias also resolves. Matched case-insensitively, whitespace trimmed. A blank cell, or a value that matches no location, rejects the row. |
| String | json | Conditional | Mens | One column per level in your capacity partition grain, headed by that level's name — |
| Integer | varchar(255) | Yes | 1200 | How many units the location can hold for that combination. A whole number from 1 to 2,147,483,647. A blank cell deletes the value for that combination. |
The capacity_units column must be present in the file even when you are only clearing values — a blank cell is the instruction to delete, so the column has to be there to carry it.
Sample Import File
Copy one of the samples below into a spreadsheet, replace the values with your own, and save it as a CSV whose name contains location_capacity.
Sample 1: A Division and Department Grain
This is a file for an organization whose Capacity Partition Grain is Division then Department. Every row carries a value for both levels.
Location External Id | Division | Department | Capacity Units |
1042 | Mens | Accessories | 1200 |
1042 | Mens | Footwear | 3400 |
1042 | Womens | Footwear | 2800 |
1043 | Mens | Accessories | 900 |
1043 | Mens | Footwear |
Location External Id,Division,Department,Capacity Units 1042,Mens,Accessories,1200 1042,Mens,Footwear,3400 1042,Womens,Footwear,2800 1043,Mens,Accessories,900 1043,Mens,Footwear,
Reading the sample:
Store 1042 gets three capacity values, one per division and department combination it stocks
Store 1043 gets a capacity for Mens Accessories, and its Mens Footwear capacity is deleted by the blank cell
Any combination not listed — Womens Footwear at store 1043, for example — keeps whatever value it already has
Sample 2: No Partition Grain
When no partition grain is configured, capacity is a single number for the whole location and the file carries only two columns.
Location External Id | Capacity Units |
1042 | 7400 |
1043 | 5100 |
1044 | 6250 |
Location External Id,Capacity Units 1042,7400 1043,5100 1044,6250
How Values Are Applied
Each row resolves to one cell — one location and one combination — and the value in capacity_units decides what happens to it.
| Result |
A whole number from 1 upward | The value is set, replacing whatever was there |
Blank | The value is deleted; the location is no longer constrained for that combination |
| The row is rejected and the existing value is kept |
The combination is not in the file at all | Unchanged |
Two consequences are worth holding on to.
Absent is not deleted. A file only changes the cells it names. You can load one division's capacities without disturbing any other, and a new store entered by hand stays as entered until the file catches up with it.
Last write wins. An imported value replaces a value a user typed into the Location Capacity tab, and a value typed into the tab replaces an imported one. Neither is protected from the other.
Duplicate Rows
Two rows that name the same location and the same combination address the same cell:
If they carry the same
capacity_units, the last one is used and the others are counted as skippedIf they carry different
capacity_units, both rows are rejected and the existing value is kept
Unintended duplicates are usually a sign that the file carries a hierarchy column the grain does not partition by — for example a Class column in a file for a Division and Department grain. Those rows collapse onto each other, because the extra column is not part of the cell's identity. Remove the column, or add that level to the grain.
Errors and Rejected Rows
Invalid rows are reported individually with the uploaded row echoed back, so you can correct the file and re-import. The rest of the file still loads.
Row-Level Errors
Error | Cause |
| The |
| The value matches no location External ID or alias in Toolio |
| The cell holds |
| A hierarchy level cell was left empty. Capacity is always set against a complete combination — there is no "all departments" row |
| A typo, or a value that is not an option value of that level and has no alias |
| Two mapped columns point at the same hierarchy level with different values |
| Conflicting duplicate rows, as described above |
| The location was removed mid-import. Re-import the affected rows |
| The grain was changed, or a level value deleted, while the file was being imported. Re-import once the configuration has settled |
File-Level Errors
When one of these is hit, nothing is written and the whole file is skipped.
Error | Cause |
| The file has no location column |
| The file has no capacity column |
| A level of the capacity partition grain has no column in the file |
The location and capacity columns are checked first, so a file missing both those and a grain level reports the location and capacity columns only; fix them and re-import to see the rest.
A missing level is a whole-file error on purpose. Every row in a partial file would be written at a shallower scope than the one configured, and each row would look perfectly correct on its own — so the file is refused rather than half-applied.
After the Import
Imported capacity behaves exactly like capacity entered by hand:
It appears as the
Unit Capacityvalue on the Location Capacity tab of the location detail panel, underSettings > Organization Settings > LocationsIt is picked up by the next capacity check, which runs automatically after the scheduled nightly allocation run
It constrains nothing until that check runs
To apply new capacities immediately, use Recalculate Capacity Constraints in the ⋮ menu on the Recommended Transfer Orders screen. The action is permissioned — if you do not see it, ask your administrator for the Recalculate Capacity Constraints permission on your role. Then open Capacity Summary from the same menu to see where the run landed: which locations and partitions are over, how many units were cut, and how much overage remains.
💡 A recalculation resets every transfer inside the window of every partition it evaluates back to system-recommended values, so manual edits on those transfers are replaced. Run it after a capacity load, not in the middle of reviewing transfers.
FAQs
Does the import delete capacity for locations that are not in the file?
No. Only the combinations the file names are touched, and everything else keeps its current value. Deleting is always explicit: list the location and combination with a blank capacity_units.
Can I set a capacity of 0?
No. 0 rejects the row, because zero reads as "no capacity defined" everywhere downstream rather than as a real limit. To remove a constraint, leave capacity_units blank, which deletes the value.
Does the order of the hierarchy columns matter?
No. A file with Division before Department writes to exactly the same combinations as one with them the other way round. Toolio matches on the header name, not the position.
Can one file cover only part of the grain?
No. Every level in the Capacity Partition Grain must appear as a column, and every row must carry a value for each of them. A file missing a level is rejected whole.
Will the import overwrite a value someone typed into the Location Capacity tab?
Yes. The most recent write wins, whether it came from the tab or from a file. There is no protection on manually entered values.
Do I need to re-import after a product hierarchy reclassification?
No. Capacity values are stored against the hierarchy values themselves, so renaming or reordering levels in the hierarchy leaves them in place. Only a change to the Capacity Partition Grain deletes values, and only the ones that no longer match it.
The import succeeded but nothing changed. What happened?
Check the import's error count first — a file whose location IDs or level values do not resolve can reject every row while still reporting as processed. If the rows were accepted, make sure the capacity check has actually run since: imported values only affect transfers after a nightly run or a Recalculate Capacity Constraints.
Can I use this to load capacity through an automated feed?
Yes. Drop the file on your SFTP with location_capacity in the filename and it routes to this importer on its own, on whatever cadence you send it.
