Dataset and field reference
This is the exhaustive field catalog for all seven syncable datasets. For each dataset you get the Airtable column, what it holds, the Airtable cell type, and whether an edit in Airtable writes back into SKU.io. For the safety reasoning behind the inbound whitelists, see Inbound safety and the field whitelist.
How to read these tables
- Airtable field — the column label SKU.io provisions in your base and shows in the mapping-grid field picker.
- What it holds — the SKU.io value behind the column.
- Cell type — the Airtable field type: Text, Number, Currency, Date, Checkbox, or Attachment.
- Inbound-writable? — whether editing that column in Airtable can change SKU.io. Yes means the field is on the dataset's inbound whitelist; No (outbound-only) means SKU.io pushes it out but ignores any edit; No (read-only) / No (computed) are pushed but never accepted back; Key is the merge column and is never writable.
Only three datasets accept any inbound writes at all — Products, Sales Orders, and Suppliers. The other four (Inventory Levels, Sales Order Lines, Purchase Orders, PO Lines) are outbound-only: SKU.io writes them to Airtable and never reads edits back.
Every dataset's first field is the SKU.io ID key. SKU.io merges rows by matching this column, so it must stay unique per record — do not edit it in Airtable.
Every date column — Order Date, Updated At, Purchase Order Date, and the rest — is written to Airtable in UTC. The SKU.io UI displays date-times in your account's timezone, so the same value reads differently in Airtable. Account for the offset when you build date filters, grouped views, or dashboards in your base.
Datasets at a glance
| Dataset | Two-way? | Merge key | When a record goes away | Auto-create? |
|---|---|---|---|---|
| Products | Yes | Product SKU (falls back to the SKU.io ID) | Archived (has Archived) | Yes (opt-in) |
| Inventory Levels | No (outbound-only) | The product and warehouse combined | Removed outright | No |
| Sales Orders | Yes | Sales order number | Archived (has Archived) | No |
| Sales Order Lines | No (outbound-only) | The line's SKU.io ID | Removed outright | No |
| Purchase Orders | No (outbound-only) | Purchase order number | Archived (has Archived) | No |
| PO Lines | No (outbound-only) | The line's SKU.io ID | Removed outright | No |
| Suppliers | Yes | The supplier's numeric SKU.io ID | Archived (has Archived) | No |
Two-way datasets accept edits back only for the narrow field sets listed under each dataset below. Everything else is outbound-only.
Products
The richest dataset, and the one with the widest inbound whitelist. The merge key is the product SKU — if a product has no SKU, SKU.io falls back to its SKU.io ID.
| Airtable field | What it holds | Cell type | Inbound-writable? |
|---|---|---|---|
| SKU.io ID | The product SKU | Text | Key |
| Name | Product name | Text | Yes |
| Barcode | Barcode | Text | Yes |
| MPN | Manufacturer part number | Text | Yes |
| HTS Code | Harmonized tariff code | Text | Yes |
| Type | Product type | Text | No (outbound-only) |
| Weight | Weight | Number | Yes |
| Weight Unit | The weight's unit | Text | No (outbound-only) |
| Length | Length | Number | Yes |
| Width | Width | Number | Yes |
| Height | Height | Number | Yes |
| Average Cost | Average cost | Currency | No (read-only) |
| Unit Cost | Unit cost | Currency | Yes |
| Price | Price | Currency | No (outbound-only) |
| Brand | The product's brand name | Text | Yes |
| Images | Product images | Attachment | No (outbound-only) |
| Gross Margin % | Computed metric | Number | No (computed) |
| On Hand | Computed metric | Number | No (computed) |
| Units Sold (90d) | Computed metric | Number | No (computed) |
| Days of Cover | Computed metric | Number | No (computed) |
| Sell-through % (90d) | Computed metric | Number | No (computed) |
| Archived | Whether the product is archived | Checkbox | No (outbound-only) |
| Updated At | Last change in SKU.io | Date | No (outbound-only) |
Inbound-only fields (no outbound column): two more fields — Tags and Category — accept inbound writes but have no catalog column that SKU.io pushes outbound. You map them explicitly to Airtable columns of your choosing. Their inbound behavior is described in the Notes below.
Products is the only dataset that accepts inbound writes to related records. Every field marked Yes above is written straight to the product, except Brand; Tags and Category behave as described below. Everything else — inventory, Average Cost, pricing, the computed metrics, Type, Weight Unit, Archived, and Updated At — is ignored inbound.
Notes:
- Unit Cost is the only writable cost. Average Cost is read-only and Price is outbound-only, so SKU.io never lets Airtable overwrite either — both are excluded from inbound writes outright.
- Brand goes out as the brand's name. An inbound brand write matches an existing brand by name, or creates one if it doesn't exist.
- Tags syncs the full tag set. It accepts a list or a comma-separated string; values are trimmed, de-duplicated, sorted, and comma-joined so the same set always compares as unchanged.
- Category attaches an existing category by exact name only. Categories form a path-based tree, so SKU.io never creates one — an unknown name is skipped.
- Unmatched Airtable rows can auto-create a product when the mapping opts in: SKU.io creates a new product with its SKU set to the merge key and its type set to Standard, then applies the remaining fields. A merge key that collides with an existing SKU is rejected rather than overwriting the existing product.
Inventory Levels
Outbound-only — inventory is never writable from Airtable. Each row is a per-product, per-warehouse stock level. The merge key combines the product and the warehouse rather than using a single value.
| Airtable field | What it holds | Cell type | Inbound-writable? |
|---|---|---|---|
| SKU.io ID | The product and warehouse combined | Text | Key |
| SKU | The product's SKU | Text | No (outbound-only) |
| Warehouse | Warehouse name | Text | No (outbound-only) |
| Available | Available quantity | Number | No (outbound-only) |
| On Hand | On-hand quantity in this warehouse | Number | No (outbound-only) |
| Allocated | Allocated quantity | Number | No (outbound-only) |
| Avg Cost | Average cost | Currency | No (outbound-only) |
| Updated At | Last change in SKU.io | Date | No (outbound-only) |
Levels here are removed outright rather than archived: the dataset has no Archived column, so a removed level is deleted from Airtable rather than flagged. If a mapping's delete mode is set to Flag, SKU.io switches it to Delete for this dataset. The On Hand column here is one warehouse's on-hand quantity — distinct from the product-level On Hand metric on the Products dataset, which adds up stock across warehouses.
Sales Orders
Inbound-capable, but only descriptive customer details flow back — never the statuses or dates that drive fulfillment and financials. The merge key is the sales order number.
| Airtable field | What it holds | Cell type | Inbound-writable? |
|---|---|---|---|
| SKU.io ID | Sales order number | Text | Key |
| Order Status | Order status | Text | No (outbound-only) |
| Fulfillment Status | Fulfillment status | Text | No (outbound-only) |
| Payment Status | Payment status | Text | No (outbound-only) |
| Order Date | Order date | Date | No (outbound-only) |
| Customer Name | Customer name | Text | Yes (PII) |
| Customer Email | Customer email | Text | Yes (PII) |
| Customer Company | Customer company | Text | Yes (PII) |
| Customer Phone | Customer phone | Text | Yes (PII) |
| Customer PO | The customer's PO number | Text | Yes |
| Customer Memo | Memo for the customer | Text | Yes |
| Archived | Whether the order is archived | Checkbox | No (outbound-only) |
| Updated At | Last change in SKU.io | Date | No (outbound-only) |
Notes:
- Editing a status or the Order Date column in Airtable does nothing. Those fields are excluded from the inbound whitelist and never change the order.
- No auto-create. An unmatched Airtable row is queued for review — SKU.io never conjures a sales order from a spreadsheet row. Writes match an order by its sales order number.
- Only the six descriptive customer fields write back — the ones marked Yes above: Customer Name, Customer Email, Customer Company, Customer Phone, Customer PO, and Customer Memo. Order Status, Fulfillment Status, Payment Status, Order Date, and tracking are deliberately excluded — they drive fulfillment and financials, so an Airtable edit to any of them is ignored inbound.
- The four Customer fields are flagged PII in the field picker (see PII-flagged fields).
Sales Order Lines
Outbound-only. Each row is a single line on a sales order. The merge key is the line's SKU.io ID.
| Airtable field | What it holds | Cell type | Inbound-writable? |
|---|---|---|---|
| SKU.io ID | The line's SKU.io ID | Text | Key |
| Order Number | The order's sales order number | Text | No (outbound-only) |
| SKU | The product's SKU | Text | No (outbound-only) |
| Quantity | Line quantity | Number | No (outbound-only) |
| Price | Line amount | Currency | No (outbound-only) |
| Updated At | Last change in SKU.io | Date | No (outbound-only) |
Lines here are removed outright rather than archived — the dataset has no Archived column, so a removed line is deleted from Airtable, never flagged.
Purchase Orders
Outbound-only. The merge key is the purchase order number.
| Airtable field | What it holds | Cell type | Inbound-writable? |
|---|---|---|---|
| SKU.io ID | Purchase order number | Text | Key |
| Order Status | Order status | Text | No (outbound-only) |
| Receipt Status | Receipt status | Text | No (outbound-only) |
| Total Cost | Order total cost | Currency | No (outbound-only) |
| Total Quantity | Total quantity on the order | Number | No (outbound-only) |
| Supplier | Supplier name | Text | No (outbound-only) |
| Order Date | Purchase order date | Date | No (outbound-only) |
| Archived | Whether the PO is archived | Checkbox | No (outbound-only) |
| Updated At | Last change in SKU.io | Date | No (outbound-only) |
Unlike the line datasets, Purchase Orders has an Archived column, so removed POs can be archived rather than deleted: a mapping's Flag delete mode works here and marks removed rows as archived.
PO Lines
Outbound-only. Each row is a single line on a purchase order. The merge key is the line's SKU.io ID.
| Airtable field | What it holds | Cell type | Inbound-writable? |
|---|---|---|---|
| SKU.io ID | The line's SKU.io ID | Text | Key |
| PO Number | The order's purchase order number | Text | No (outbound-only) |
| SKU | The product's SKU | Text | No (outbound-only) |
| Quantity | Line quantity | Number | No (outbound-only) |
| Unit Cost | Line amount | Currency | No (outbound-only) |
| Updated At | Last change in SKU.io | Date | No (outbound-only) |
Lines here are removed outright rather than archived — no Archived column, so removed lines are deleted from Airtable, never flagged.
Suppliers
Inbound-capable, but only contact and company details flow back. The merge key is the supplier's numeric SKU.io ID.
| Airtable field | What it holds | Cell type | Inbound-writable? |
|---|---|---|---|
| SKU.io ID | The supplier's SKU.io ID | Text | Key |
| Name | Supplier name | Text | Yes |
| Company | Company name | Text | Yes |
| Contact Name | Primary contact name | Text | Yes (PII) |
| Text | Yes (PII) | ||
| Phone | Messaging phone | Text | Yes (PII) |
| Website | Website | Text | Yes |
| Archived | Whether the supplier is archived | Checkbox | No (outbound-only) |
| Updated At | Last change in SKU.io | Date | No (outbound-only) |
Notes:
- Operational settings are never editable from Airtable — lead times, PO automation, default warehouses, payment terms, and deposits have no column at all, so they can be neither exported nor written back.
- No auto-create in v1. An unmatched Airtable row is queued for review, never created as a new supplier.
- Only the six contact and company details write back — the ones marked Yes above: Name, Company, Contact Name, Email, Phone, and Website. Operational fields are excluded because there's no column to write, not merely because the whitelist omits them.
- Because the merge key must be a numeric SKU.io ID, a non-numeric value in the key column matches no supplier.
- The three contact fields are flagged PII (see PII-flagged fields).
Computed product metric columns
The Products dataset exposes five live read-only analytics columns. SKU.io recomputes them from live data on every sync and pushes them out, but never accepts them back — they're not on the Products inbound whitelist, so an Airtable edit to any of them is ignored. SKU.io only works these metrics out when the column is actually mapped.
| Airtable field | How it is computed |
|---|---|
| Gross Margin % | (Price − Average Cost) ÷ Price × 100, rounded to 1 decimal. Empty when Price is 0. |
| On Hand | Current on-hand stock added up across warehouses. |
| Units Sold (90d) | Fulfilled units over the trailing 90 days. |
| Days of Cover | On Hand ÷ (Units Sold (90d) ÷ 90), rounded to 1 decimal. Empty when no units sold. |
| Sell-through % (90d) | Units Sold (90d) ÷ (Units Sold (90d) + On Hand) × 100, rounded to 1 decimal. Empty when there is no stock and no sales. |
Days of Cover and Sell-through % are empty when there are no sales (or no stock and no sales) to divide by. Alongside Average Cost, Price, Images, Archived, and Updated At, these five metrics are outbound-only decoration — editing them in Airtable has no effect on SKU.io. Note that the Products On Hand metric adds up stock across warehouses, whereas the On Hand column on Inventory Levels is a single warehouse's quantity.
PII-flagged fields
Customer and contact fields — names, emails, phones, and companies — are flagged as PII in the mapping-grid field picker so you knowingly opt in before exporting personal data to Airtable.
| Dataset | PII fields |
|---|---|
| Sales Orders | Customer Name, Customer Email, Customer Company, Customer Phone |
| Suppliers | Contact Name, Email, Phone |
Related
- Inbound safety and the field whitelist — why only these narrow field sets write back.
- Sync-mapping settings reference — delete modes, inbound toggles, and per-field mapping options.
- How Airtable sync works — the outbound merge-and-archive lifecycle behind these tables.