Property Type Handling in CSV¶
When loading data, every value in your CSV starts as a string. The Loader automatically coerces these strings into the correct types based on the property definitions on your entity type. This page documents how each property type is handled. These behaviors do not change across entities and apply to all loadTypes.
null or empty values
If no value is specified for a given property, the property will be set to null or 0, depending on the property type. Use this if you want to clear out the value of a property. Exclude the property column entirely from the CSV file if you do not want to edit a property.
CSV Headers: Labels vs. Slugs¶
CSV column headers can use either the property's slug (key) or its display label. The Loader automatically converts labels to slugs during the preprocessing pipeline (steps 4 and 6).
Example: If your entity type has a property with:
- Slug:
fabricWeight - Label:
Fabric Weight
Either of these CSV headers will work:
fabricWeight,name,federatedId
Fabric Weight,name,federatedId
Matching rules:
- Slug matching is exact (case-sensitive).
- Label matching is case-insensitive.
- If a column matches neither a slug nor a label, it is ignored during entity construction and a warning is recorded.
- If a column matches a disabled/archived property, a warning is recorded but the value is still processed.
Type Coercion Reference¶
String / Text¶
| Behavior | Details |
|---|---|
| Coercion | None -- passed through as-is |
| Empty value | Empty string "" is a valid value and will be set on the property |
null handling |
Only truly falsy values (not empty strings) are skipped |
CSV escaping notes:
- You must escape double quotes by ensuring that the entire column is wrapped in double quotes themselves.
- Example: to get value
He said "Hello World!", CSV should be,"He said, "Hello World!"",
- Example: to get value
- You do not need to escape single quotes in CSV.
- Example: to get value
O'Brien, CSV can be,O'Brien,
- Example: to get value
- Commas within values can be escaped by enclosing the column in double quotes.
- Example: to get value
New York, NY, CSV should be,"New York, NY",
- Example: to get value
Number / Currency / Percent / Sequence¶
| Behavior | Details |
|---|---|
| Coercion | Commas, backslashes, and double quotes are stripped, then parsed as Number |
| Empty value | Skipped (property not set) unless the parsed value is 0, which is valid |
| Examples | "1,234.56" → 1234.56, "50" → 50, "$20.00" → NaN (don't include currency symbols) |
Always specify the exact value you intend to load, irrespective of the decimal format setting:
- For
Percent: use a number between 0 and 100. Example:50for 50%,50.5for 50.5%. - For
Currency: use a number. Example:20for $20,20.5for $20.50. - For
Number: use a number. Example:20for 20,20.5for 20.5.
The platform will round any numbers up to the nearest decimal place.
Don't include currency symbols or percent signs
The Loader strips commas and quotes but does not remove currency symbols ($, €) or percent signs (%). Provide raw numeric values only.
Boolean¶
| Behavior | Details |
|---|---|
| Coercion | "true" / "false" (case-insensitive) converted to true / false in step 1 of the pipeline |
| Empty value | false is a valid value and will always be set (not skipped) |
| Always included | Boolean properties are always included in the entity, even when the value is false |
Specify TRUE or FALSE in the CSV. Yes or No are not supported.
Date¶
| Behavior | Details |
|---|---|
| Coercion | Parsed as a standard JavaScript Date |
| Supported formats | YYYY-MM-DD, YYYY-MM-DDTHH:mm:ss.SSSZ, and most standard date formats |
| Empty value | Sets the property to null (clears the date) |
| Display | Dates display as MM/DD/YYYY in core apps regardless of input precision |
You may provide a date with or without the timestamp included, with support down to milliseconds in ISO format. Only a date without timestamp will display to end users.
- Specifying
2000-01-01(formatYYYY-MM-DD) in the CSV will display01/01/2000in core apps as January 1st, 2000. - Specifying
2025-06-24T16:55:16.123Z(formatYYYY-MM-DDTHH:mm:ss.SSSZ) in the CSV will display as06/24/2025in core apps as June 24th, 2025.
Single Select (Choice)¶
| Behavior | Details |
|---|---|
| Coercion | Display labels are automatically converted to option set values (keys) during preprocessing |
| Matching | You can provide either the option key or the display label |
| Empty value | Sets the property to null (clears the selection) |
| Invalid value | A warning is recorded if the value doesn't match any option; the value is passed through as-is |
Example: For an option set "Sub Class" with { key: "sweater", label: "Sweater" }:
- CSV value
"sweater"→ stored as"sweater"(already a key) - CSV value
"Sweater"→ converted to"sweater"during preprocessing
Multi Select¶
| Behavior | Details |
|---|---|
| Coercion | Comma-separated string is split into an array. Each value undergoes display-to-key conversion. |
| Format in CSV | Comma-separated within the cell, e.g., "North America,Europe" |
| Empty value | Sets the property to null (clears all selections) |
| CSV escaping | Since commas are used as both CSV delimiters and multi-select separators, wrap the cell in double quotes: "value1,value2" |
Example: For an option set "Regions" with options { key: "north-america", label: "North America" } and { key: "south-america", label: "South America" }:
- CSV value
"North America,South America"→["north-america", "south-america"] - CSV value
"north-america,south-america"→["north-america", "south-america"]
Size Range¶
Size ranges support two formats in CSV:
Format 1: Key-Value Dimensional
For multi-dimensional size ranges, use a colon-separated format where each dimension lists its sizes:
width: S,M,L | length: 30,32,34
Format 2: Comma-Separated Flat
For simple one-dimensional size ranges:
S,M,L,XL
Size range validation
After loading, size range values are validated against the entity's size range template. Invalid sizes (not in the template) are automatically removed, and warnings are recorded.
Formula¶
| Behavior | Details |
|---|---|
| Always skipped | Formula properties are never loaded from CSV. Any values in formula columns are silently discarded. |
| Calculation | Formulas are calculated automatically by the platform after entity creation/update. |
You cannot load into any property backed by a Formula directly. The Formula will always calculate itself on create or update, and there is no override capability.
Object Reference¶
| Behavior | Details |
|---|---|
| Coercion | The CSV value should be the federatedId of the referenced entity. The Loader resolves this to an entity ID. |
| Resolution | Federated IDs are looked up in batches. Unresolved references produce warnings. |
| Requirement | The referenced entity must already exist in VibeIQ with a federatedId. |
There is no support for id or name matching to other entities at this time.
Example: To relate an Item to a Color via an object reference property colorReference, specify the federatedId of the Color in the CSV. If the Color's federatedId is NAVY-BLUE, specify NAVY-BLUE in the Item load CSV.
User List¶
| Behavior | Details |
|---|---|
| Coercion | The CSV value should be the email address of the user. The Loader resolves emails to user IDs. |
| Resolution | All org users are fetched and matched by email. |
Style Number,Style Name,Merchandiser
STY-001,Classic Tee,jane.doe@company.com
STY-002,V-Neck Tee,john.smith@company.com
Property Levels (Family, Option, All, Override)¶
On entity types with property levels (referred to in the API as roles), loading behavior is distinct between each of them. Currently, these apply to:
ItementitiesProjectItementities
Family/Option Suffix Columns¶
For entity types with property levels, you can use the Family or Option suffix on property names to target specific levels:
| CSV Header | Effect |
|---|---|
someProperty |
Sets the value on the entity as-is |
somePropertyFamily |
Sets the value specifically on the Family entity |
somePropertyOption |
Sets the value specifically on the Option entity |
The suffix is stripped during matching -- somePropertyFamily resolves to the property with slug someProperty.
"Family" and "Option" Properties¶
There is no special handling for these property types. You will simply need to match the property key as a column in the CSV, or by using federatedMappings and conditionalColumns.
- "Family" properties will update the single Family-level entity and those values will be copied down and persisted onto each of that Family's Options.
- "Option" properties will update the single Option-level entity and those values will be persisted only onto that Option entity.
"All" Properties¶
"All" properties are managed individually for every entity in a Family, regardless if it's a Family or Option level entity. No copy down behavior exists for these properties because of this. The loader handles this differently based on what you give it.
If you provide an exact match on the property key, the loader will update the value for that property on every entity in the Family. You may also uniquely specify Family and Option level values separately by splitting the CSV out into two columns. One column with name suffixed with "Family" and the other with "Option". By doing this you can specify different values for each of the Family and Option.
Example with Family and Option columns:
| itemFederatedId | optionFederatedId | somePropertyKeyFamily | somePropertyKeyOption |
|---|---|---|---|
| 001 | 001-RED | Some Family Value | Unique RED value |
| 001 | 001-BLUE | Some Family Value | Unique BLUE value |
| 001 | 001-GREEN | Some Family Value | Unique GREEN value |
- The Family item will be given value "Some Family Value" for its
somePropertyKeyproperty. - The Option items will be given each different values for their
somePropertyKeyproperties.
Keep the Family column values the same for all rows when splitting them out!
If you are splitting out an "All" property with Family and Option columns, ensure you keep the Family column values the same for all rows. Otherwise, you may see indeterminate behavior where the loader randomly picks one of them, because it doesn't know which is the correct value.
Example with a single column:
| itemFederatedId | optionFederatedId | somePropertyKey |
|---|---|---|
| 001 | 001-RED | All the same |
| 001 | 001-BLUE | All the same |
| 001 | 001-GREEN | All the same |
- The Family item will be given value "All the same" for its
somePropertyKeyproperty. - The Option items will all be given that same "All the same" value for their
somePropertyKeyproperties.
"Override" Properties¶
"Override" properties are like "Family" properties, where the value set on the Family entity's property will copy down to all the Options' properties. The key distinction is that you can override the value on the Option level by specifying a different value for it. Just like for "All" properties, you can use "Family" and "Option" suffixes to specify different values for each. See the "All" properties section for more information on how this works.
Special Handling¶
Nested Properties¶
Properties with dot-notation slugs (e.g., dimensions.width) are supported. The Loader builds nested objects automatically:
CSV value "10" in column dimensions.width produces:
{
"dimensions": {
"width": "10"
}
}
Properties Not in the Type Schema¶
CSV columns that don't match any property on the entity type (by slug or label) are silently ignored during entity construction. They produce a warning during preprocessing but don't cause errors.
Federated ID Encoding¶
Federated IDs containing forward slashes (/) are automatically URL-encoded to %2F when looking up existing entities. You don't need to pre-encode them in your CSV.