Manage attributes
Attributes are the reusable custom fields you attach to products — things like Colour, Material, Voltage, or Warranty Length. You define an attribute once in Settings (its type, its option values, its validation, how it displays), and it becomes available to assign to any product. This guide covers managing the attribute definitions themselves. To put an attribute's value onto a specific product, see set a product's categories & attributes.
For how attributes fit alongside categories, brands, and attribute groups, see how product taxonomy works. For a field-by-field lookup of every attribute type and validation option, see the attribute fields & types reference.
Before you begin
Each action is gated by its own permission. Without the relevant permission the corresponding button is hidden or disabled.
| Action | Permission |
|---|---|
| Create an attribute | attributes.create |
| Edit an attribute | attributes.update |
| Archive / restore an attribute | attributes.archive |
| Delete an attribute (single or bulk) | attributes.delete |
| Import attributes | attributes.import |
See the product permissions reference for the full list.
Browse the attributes list
Open Settings → Attributes. The list is paginated (10 per page by default) and shows each attribute's name, type, and attribute group. Archived attributes are hidden by default — they're excluded from the list unless you explicitly include them.
Each row's group column links through to the attribute group it belongs to; ungrouped attributes show no group.
Create an attribute
-
Select New Attribute.
-
Under Basic Info, enter a Name. The name must be unique across all attributes — reusing an existing name is rejected.
-
Set a Sort Order (a non-negative number that controls display order).
-
Choose a Type. The type is fixed to one of the values below and can't be blank:
Type Use for String Short single-line text. Can be flagged Is Link? to render as a hyperlink. Longtext Multi-line text. Can be flagged Is HTML?. Integer Whole numbers. Numeric Decimal numbers, with optional precision. Checkbox A yes/no toggle. Date A calendar date. Datetime A date and time. See the attribute fields & types reference for the exact behaviour of each type.
-
Optionally assign an Attribute Group to organise the attribute in the product form. Leaving this blank stores the attribute as ungrouped. (Selecting "no group" is stored as no group, never as group
0.) -
Configure the Display section if it applies (see below).
-
Set any Validation limits if it applies (see below).
-
Add Notes (up to 255 characters) if useful.
-
Select Save. To keep the dialog open and add another straight after, tick Create another before saving.
Display options and option values
The Display section is shown for most types but hidden for Checkbox and Longtext, which have no options.
- Tick Has Options? to make the attribute a pick-list.
- Choose the option Type — Single (pick one) or Multi (pick several).
- Tick Allow Custom Value? to let users type a value that's not in the list.
- Enter the option values in Type or Paste Options, one value per line.
Blank option values are ignored — any line with an empty value is skipped and no empty option is created.
Validation
The Validation fields depend on the type:
- Character Limit — for String and Longtext.
- Precision (digits) — for Numeric (0–9).
- Min and Max — for Integer and Numeric.
Edit an attribute and re-sync its options
- Select an attribute from the list to open it.
- Change any field — name, type, group, display, validation, or notes.
- Adjust the option values if the attribute has options.
- Select Save.
Option values are re-synced, not blindly replaced:
- Each submitted value is matched by its value and updated in place, or created if it's new.
- Any existing option value you don't resubmit is deleted. To keep an option, keep it in the list; to remove an option, delete its line before saving.
- If you leave the option values untouched (submit no options at all), existing values are left alone.
The Display settings are only overwritten when you actually submit display changes — if the edit doesn't include display options, the attribute keeps its current display configuration. On an edit, Name and Type are optional, so you can update other fields without resupplying them; when you do send a new name it must still be unique.
Archive and restore an attribute
Archiving hides an attribute from the default list without deleting it — a safe way to retire an attribute you may want back.
- To archive, open the attribute (or use its row action) and select Archive. Archived attributes drop out of the default list.
- To restore, include archived attributes in the list, open the archived attribute, and select Restore (unarchive).
If an attribute is already in the state you asked for — archiving one that's already archived, or restoring one that's already active — SKU.io returns a warning rather than an error, and the attribute is left unchanged.
Delete an attribute
Deleting is permanent and is guarded so you can't silently break live data.
- Open the attribute and select Delete, or select it in the list and use the bulk delete action.
- If the attribute is safe to remove, it's deleted. Deleting cascades: its option values are removed and it's detached from any products.
An attribute is blocked from deletion when it's still in use:
- Assigned to one or more products. The delete is rejected and the response names how many products use it.
- Referenced by an integration import mapping (a mapping that targets
attributes.{name}). Even a force-delete (ignore relations) won't remove an attribute that's still wired into an import mapping, because doing so would silently break that integration's imports. The response lists the offending mappings so you can repoint or remove them first.
A force-delete can override the product block, but it always surfaces the impact — how many products reference the attribute and which mappings are affected — so the consequence is never silent. Fix or accept the impact, then retry.
To check deletability across several attributes before you commit, SKU.io exposes a pre-check that returns, per attribute, whether it's deletable and the reason it's not — this is what powers the disabled/blocked state in the bulk delete confirmation.
Bulk archive, restore, or delete attributes
- Tick the checkboxes for the attributes you want, or use select all filtered to act on every attribute that matches your current filters (apply to all).
- Choose Archive, Restore, or Delete from the bulk actions.
- Confirm.
When you use apply to all, the current filters are resolved server-side into the exact set of matching attribute IDs, so the action covers the whole filtered result — not just the rows visible on the current page. Bulk delete respects the same in-use guards as a single delete: attributes that are assigned to products or referenced by import mappings are blocked and reported.
Import and export attributes
Attributes can be created and updated in bulk from a spreadsheet, and exported to one.
Import
- Select Import and upload your file.
- SKU.io shows a preview so you can review how each row will be applied before anything is written.
- Confirm to run the import.
Import rules:
nameandtypeare required on every row.- Rows are matched by
idwhen present; otherwise byname+type— a match updates the existing attribute, no match creates a new one. A row with anidthat doesn't exist is skipped and reported as an error. options_valuesis a comma-separated list; each value is created or updated as an option value on the attribute.- Display and validation columns (
has_options,options_type,is_link,sort_order,validation.character_limit,validation.precision,validation.min,validation.max) are folded into the attribute's display and validation settings. When a row updates an existing attribute, these are merged onto its current settings — only the columns you supply change, and any display or validation you leave out is kept.
For the general spreadsheet workflow, column formats, and error handling, see import products from a spreadsheet.
Export
Select Export to download the current attributes. The export columns mirror the importer exactly, so an exported file can be edited and re-imported as a round-trip:
| Column | Meaning |
|---|---|
id | Attribute ID (used to match on re-import). |
name | Attribute name. |
type | Attribute type. |
has_options | Whether the attribute is a pick-list. |
options_type | Single or Multi. |
attribute_group_id | The attribute group it belongs to. |
validation.character_limit | Character limit (text types). |
validation.precision | Decimal precision (numeric). |
validation.min / validation.max | Min/max bounds (number types). |
is_link | Whether a string renders as a link. |
sort_order | Display order. |
options_values | Comma-separated option values. |
See export products for the general export flow.
Next steps
- Manage attribute groups — organise attributes into groups on the product form.
- Set a product's categories & attributes — apply attribute values to an individual product.
- Attribute fields & types reference — every type, display option, and validation rule.
- How product taxonomy works — attributes alongside categories, brands, and groups.
- Manage categories · Manage brands — the other taxonomy building blocks.
Video transcript
Attributes are the reusable custom fields you attach to products, such as Color, Material, or Capacity. Settings, Products, Attributes lists each one with its type and the group it belongs to. Search or sort them, or add a new one with Create Attribute. Give the attribute a name and pick its type — text, a number, a date, a checkbox, or a long text field. Optionally place it in an attribute group, add validation like a character limit, and turn on Has Options for a fixed set of choices. Then Create, and it's ready to assign to any product.