Skip to main content

What's changed

SKU.io ships often. This log records user-facing changes โ€” a new feature, a moved menu, a changed workflow โ€” so you can keep your internal SOPs in sync. Each entry is tagged by area and impact, and the SOP impact line tells you what a step-by-step procedure may need to change.

For AI agents & automation

A structured, machine-readable version is published at /changelog.json. Filter entries[] by date to get everything since your SOPs were last synced, then read each linked doc (append .md to any docs.sku.io URL for clean markdown). There's a ready-made agent skill that does this for you โ€” Sync your SOPs (part of the open-source Agentic Skills library).

Impact tags: ๐ŸŸข Added ยท ๐ŸŸก Changed ยท ๐Ÿ”ถ Moved (navigation changed โ€” highest SOP risk) ยท ๐Ÿ”ต Fixed ยท โšช Deprecated ยท ๐Ÿ”ด Removed

2026-08-06โ€‹

Pick a template's paper size from a dropdown instead of typing itโ€‹

Settings ยท ๐ŸŸข Added

The Code Editor toolbar now carries a Page dropdown offering A3, A4, A5, Letter and Legal. Choosing one writes the declaration into the template for you, and the preview redraws at that sheet size with the print engine's own margins, so a page-size change is visible before you save rather than after the first print. Templates with nothing set still print A4. If a template asks for a size we can't print, it falls back to A4 and the preview's warning banner names the unusable value rather than silently substituting.

SOP impact โ€” If your SOP tells people to hand-edit a paper-size declaration in the markup, replace that step with the Page dropdown โ€” it is the same setting, without the typo risk. An SOP that says "documents always print A4" needs qualifying: A4 is the default, not the only option. Purchase orders are the exception and ignore the dropdown entirely; they are produced by their own renderer and always print US Letter.

Docs: /guides/settings/pdf-templates/page-setup-and-css-reference ยท /guides/settings/pdf-templates/template-editor-reference

The template editor now tells you what a change is about to breakโ€‹

Settings ยท ๐ŸŸข Added

Three places used to stay quiet. The editor now shows an amber warnings bar โ€” separate from the red errors that block a save โ€” naming a template with no line-items block, a placeholder pointing at an image that no longer exists, images loaded from the web that get stripped when the PDF is produced, and CSS reaching out to the internet. Deleting an image from the Assets library now checks first and lists every template that uses it by name, type and store, with the button changing to Delete anyway. And a template left holding a placeholder for a deleted image now saves normally with a warning instead of being locked out of the edit that would fix it.

SOP impact โ€” Warnings never block a save; only the red validation bar does. If your SOP treats any bar under the toolbar as "stop", split the two โ€” amber is advisory. Before deleting artwork from the image library, read the list the dialog shows you and fix those templates first; re-uploading the same file afterwards does not repair them, because the replacement gets a different placeholder name.

Docs: /guides/settings/pdf-templates/template-editor-reference ยท /guides/settings/pdf-templates/add-images-and-footer-banners

Settings ยท ๐Ÿ”ต Fixed

A template's paper size and its pinned footer banner were only being honoured on some of the paths that produce a PDF. Quotes, vendor credits and sales credits ignored both โ€” a banner meant to repeat at the bottom of every page printed inline in the body instead, and the chosen paper size was dropped. All render paths now share the same page setup, so a footer banner pins to the bottom of every page with the Page 1 of 3 line beneath it, whichever document produced it. The banner's band is sized from the artwork's own proportions, and the preview warns when a banner is squat enough to eat a large share of every page.

SOP impact โ€” Credit notes and quotes will look different on their next print if their template contains a footer banner or a non-A4 paper size โ€” the design you saved is now actually being applied. Re-proof those two types on the PDF tab before a batch goes out. Page numbers and a footer banner come as a pair: a template with no banner still gets no page numbers.

Docs: /guides/settings/pdf-templates/page-setup-and-css-reference ยท /guides/settings/pdf-templates/add-images-and-footer-banners ยท /guides/settings/pdf-templates/credit-note-template-reference

Pick lists and packing slips now print what you configuredโ€‹

Orders ยท ๐Ÿ”ต Fixed

Pick lists are now a first-class document type: they use the template you edited in Settings โ†’ PDF Templates rather than a legacy report, and they honour a store's own version when every order on the sheet belongs to that store. Each row also carries why the picker is being sent to that bin and how far a re-printed sheet got. On packing slips, the header's shipment row now names the shipment and its tracking number, so paperwork for box 2 is distinguishable from box 1 on a split order, and a substituted line prints the ordered product with a Shipped as: line underneath naming what is actually in the box.

SOP impact โ€” A store that has its own pick list template will start printing it โ€” check that it is the design you want before the next wave. Sheets printed for a multi-store batch still use the global template, because there is no single store to resolve. If your packing procedure relied on writing the shipment number on by hand, that step can go. Substitutions are now visible to the customer on the slip; if your process was to explain them separately, review that.

Docs: /guides/settings/pdf-templates/pick-list-template-reference ยท /guides/settings/pdf-templates/packing-slip-template-reference ยท /guides/settings/pdf-templates/how-pdf-templates-work

2026-08-02โ€‹

A refused API request now names which of the two limits stopped itโ€‹

Settings ยท ๐ŸŸข Added

A 403 from the API used to be a dead end: the token might be missing a scope, or the person who owns the token might be missing a role permission, and the response looked the same either way โ€” so people edited token scopes to fix problems that lived on their user account. Every refusal now carries an error field that says which one it is. insufficient_scope means the fix is on the token, and the response also names the exact scope to add and arrives as a standard authentication challenge; insufficient_permission means the token is valid and the owner's role is short, and the response lists the missing permission names. An endpoint that is closed to API tokens entirely still answers with neither. The token's Usage Log now shows the message each caller received alongside the status and endpoint, so a refusal someone else's script hit hours ago can be diagnosed without reproducing it. And the scope picker checks each scope against your own role as you choose it, flagging any your role can't fully deliver and naming the missing permissions on hover โ€” before you ever make the call.

SOP impact โ€” If your SOP's response to an API 403 is "add more scopes to the token", it is wrong roughly half the time โ€” read the error field first, and when it says insufficient_permission, route the request to whoever administers roles instead of editing the token. Integrations that parse refusals can now branch on error rather than string-matching the message. When issuing a token, a warning icon in the scope picker is not a blocker and does not mean you picked the wrong scope; it means your own role can't deliver all of it, and the token will work for the rest.

Docs: /guides/settings/fix-a-403-from-your-api-token ยท /guides/settings/api-scopes-reference ยท /guides/settings/create-a-personal-access-token

2026-08-01โ€‹

Developer settings โ€” API tokens, webhooks, OAuth apps, AI assistant connections, and two-factor sign-inโ€‹

Settings ยท ๐ŸŸข Added

Settings โ†’ Developer is now documented end to end. Personal access tokens are created with a name, an expiry, and a scoped permission checklist (15 groups, 30 read/write scopes, plus a read-only preset), with optional IP allowlisting and a per-minute rate cap; the value is shown exactly once. Afterwards each token has its own usage page โ€” requests over time, status breakdown, top endpoints โ€” and can have its scopes edited, its secret rotated in place, or be revoked outright, with warnings as expiry approaches. Outbound webhooks let one HTTPS endpoint subscribe to one event, with a signing secret, a test send, a per-subscription delivery log you can open a payload and response from, manual retry, an automatic retry schedule, and auto-disable after sustained failure. OAuth applications you publish are registered with redirect URIs and scopes and issue a copy-once client secret. An AI assistant can be connected over MCP with a single connection token that reaches the MCP endpoint only and inherits your own permissions. Two-factor sign-in now supports an authenticator app alongside emailed codes, with recovery codes, a low-code warning, and re-prompting on sensitive developer actions. Sensitive actions โ€” creating a token with write permissions, generating an MCP connection token โ€” now ask you to re-enter your password, which opens a 5-minute window.

SOP impact โ€” If your SOP creates an API token, it now has two extra steps: pick a scope for every permission the integration needs (the token can no longer be all-powerful by default), and re-enter your password when the token carries write or manage permissions. The token value is displayed once and never again โ€” an SOP that assumes it can be re-read later must paste it into a secret store at creation, or use Rotate Secret to issue a fresh one without re-pointing anything. If your SOP polls SKU.io on a timer, a webhook subscription replaces the poll. If two-factor sign-in is switched on, creating tokens and generating an AI assistant connection will also ask for a code.

Docs: /guides/settings/developer-settings-overview ยท /guides/settings/create-a-personal-access-token ยท /guides/settings/manage-personal-access-tokens ยท /guides/settings/api-scopes-reference ยท /guides/settings/subscribe-to-webhooks ยท /guides/settings/monitor-webhook-deliveries ยท /guides/settings/register-an-oauth-application ยท /guides/settings/manage-oauth-applications ยท /guides/settings/connect-an-ai-assistant ยท /guides/settings/review-connected-apps ยท /guides/settings/manage-active-sessions ยท /guides/settings/set-up-two-factor-authentication

IRR now explains itself on every surface โ€” and a cash-flow correctness fixโ€‹

Insights ยท ๐ŸŸก Changed

The IRR Analytics leaderboard, the purchase orders list, the purchase-order IRR tab and the supplier IRR tab now explain each number where you read it. Two cash-flow corrections change some figures: a sale can no longer be dated before the stock it drew down was received (sales are floored to their FIFO layer's receipt date, and downstream transfer/kit sales dated before the PO's stock existed are dropped), which removes spurious pre-receipt inflows; and orders that legitimately sold before you paid the supplier โ€” negative working capital โ€” now carry a Sold on terms chip on the board, in the cash-flow proof and on the order, instead of reading as a data defect. The proof modal's active window now always renders earliest to latest, so a sold-on-terms order no longer shows a backwards date span. On the purchase orders list, an annualized return past the ยฑ1,000%/yr display ceiling now shows as a growth multiple (10.0ร—/yr) rather than a flat 1000.0%, and a small dot marks a provisional figure from a lightly-sold order. Every metric label, column header, KPI card and Return advanced-filter now carries a hover explanation distinguishing the annualized rate from the money multiple, and the Product / Fully-loaded cost toggle explains both options โ€” including why fully-loaded is unavailable on an order with no allocated freight or duty.

SOP impact โ€” IRR and sell-through figures may move for orders whose sales previously predated receipt โ€” re-baseline any target you set from a figure read before 2026-08-01. If your SOP treats a high IRR as suspect, note that a Sold on terms chip or a ร—/yr growth multiple is now an explained, intentional reading, not an error to escalate; a dot beside an IRR means the order is too lightly sold to act on. IRR % and Sell-through % are still off by default on the purchase orders list โ€” switch them on in the column picker.

Docs: /guides/insights/irr-analytics

2026-07-30โ€‹

Lot and expiration trackingโ€‹

Inventory ยท ๐ŸŸข Added

Products can now be lot-tracked with FIFO or FEFO consumption, a default shelf life, a near-expiry alert window, a minimum-remaining-shelf-life floor, and expiry-aware availability. Batch numbers and manufacture/expiry dates are captured per lot when stock is received on a purchase order, surface on the product's Lots & Expiry tab, and roll up across the catalog on the new Insights โ†’ Inventory Expiry & Shelf-Life report. Lots now carry through manufacturing: Record Production requires a batch number for lot-tracked outputs and inherits the output's expiry date from the earliest component lot, component lots are allocated automatically by each component's own FIFO/FEFO method, and fulfillment shows the allocated lot with an override. Manufacturing โ†’ Lots โ†’ Genealogy traces a batch backward to its component lots and suppliers or forward to the customers who received it, and can run the same backward trace across a list of sales orders. A Backfill Lot Data CSV import dates stock received before tracking was switched on, without changing its cost.

SOP impact โ€” If your SOP receives a purchase order for a perishable product, it now has a Lot / Expiry Details panel to fill in before Receive Items โ€” the allocated quantity must match the quantity received. Enable tracking first on the product's Serial & Lot Tracking tab; there is no tenant-wide switch. If you manufacture, turn tracking on for every component before the first build โ€” tracking is not retroactive, and an un-tracked component leaves a permanent gap in the genealogy trace. Record Production now requires a batch number on lot-tracked outputs.

Docs: /guides/inventory/set-up-lot-and-expiration-tracking

2026-07-29โ€‹

Content Sync: keep your catalog in sync with channel editsโ€‹

Content Sync ยท ๐ŸŸข Added

New Content Sync area (PIM โ†’ Content Sync). Edits made to product content on a sales channel are detected and queued as reviewable changes across eight governed fields โ€” Barcode and MPN (Identity), Title, Brand and Attributes (Descriptive), Images (Media), Weight and Dimensions (Physical) โ€” each shown as a catalog-vs-channel diff you can apply or ignore. A channel-side bulk edit rolls up into one row you can clear with Approve all, and Title is flagged risky so it is always held out of one-click bulk actions. Ownership is set per field group on the channel's Settings โ†’ Content Sync tab (Catalog, Channel, or Two-way, with optional auto-apply), and any single listing can override those rules in place without changing the channel. When both sides edit a two-way field you get a conflict to resolve โ€” keep yours, take theirs, or keep both. Every outcome lands in a per-listing change history you can filter, compare two versions from, export as CSV, and roll back. Enabling content sync baselines current channel content, so only later edits are flagged โ€” when you want the differences that already existed, run a Full comparison on demand (the arrow beside Reconcile, in the inbox or the review drawer) and every governed field is diffed against the catalog regardless of the baseline. A new governance gate can block publishing to a channel until the fields that channel requires are filled in.

SOP impact โ€” If your SOP re-keys channel edits into the catalog by hand, replace that step with reviewing and applying the change from PIM โ†’ Content Sync. Enable content sync per channel first under the channel's Settings โ†’ Content Sync tab, and set field-group ownership there โ€” enabling it baselines current channel content, so only edits made after you turn it on are flagged. If your SOP includes a one-off catalog clean-up after enabling, use Reconcile โ†’ Full comparison instead of a plain reconcile โ€” a normal re-check will not surface differences that pre-date the baseline. If an SOP relies on publishing a product before its content is complete, check whether that channel's governance gate is on: publishing now fails with the missing fields named.

Docs: /guides/inventory/review-channel-content-changes

2026-07-28โ€‹

Landed cost visibility: PO cost popover now complete, revalued layers flaggedโ€‹

Inventory Costing ยท ๐Ÿ”ต Fixed

The PO Lines cost-breakdown popover now includes landed cost invoices entered on inbound shipments (previously only PO-entered bills were counted, understating Avg Cost). FIFO layer pages now flag when a layer has been revalued since receipt, with a link to its revaluation history. A new guide covers adding landed costs after receipt and where the impact appears.

SOP impact โ€” If your SOP verifies landed costs via the PO Lines cost popover, its Avg Cost now matches the FIFO layer exactly; the layer page's Unit Cost at Origin is labeled as a historical snapshot with a revaluation-history link.

Docs: /guides/inventory/add-landed-costs-after-receipt

Product substitutions โ€” swap out-of-stock lines to an equivalent SKUโ€‹

Sales Orders ยท ๐ŸŸข Added

Link equivalent SKUs with per-rule automation (manual / if out of stock / always), swap stalled order lines to a stocked substitute in one click, and release backlogs in bulk. The packing slip keeps the ordered SKU; the pick list shows the substitute with the original in brackets.

SOP impact โ€” If your SOP handles out-of-stock orders by editing lines or adjusting stock, replace that step with a substitution rule plus the Swap resolvable filter on Sales Orders (bulk: More โ†’ Swap & Release).

Docs: /guides/orders/substitute-products-on-sales-orders

2026-07-27โ€‹

Purchase-order reminders now skip closed POsโ€‹

Workflows ยท ๐ŸŸก Changed

The Find Purchase Orders workflow node has a new Order status setting (Draft, Open, Closed, or Any status), defaulting to Draft + Open. Previously the node matched on submission status only. Because closing a purchase order does not change its submission status, a PO closed while still unsubmitted stayed unsubmitted forever and reappeared in every scheduled reminder. Existing workflows pick up the new default automatically โ€” no edit needed.

SOP impact โ€” Scheduled PO-reminder emails will list fewer purchase orders than before: closed ones now drop off, so an SOP that reconciles the email against a count should expect the lower number. If your procedure relies on seeing closed POs, open the workflow, click the Find Purchase Orders step, and set Order status to Any status.

Docs: /guides/workflows/get-an-email-reminder-about-unsubmitted-purchase-orders

2026-07-24โ€‹

Segment the Profitability report by customer tagโ€‹

Insights ยท ๐ŸŸข Added

You can now tag customers โ€” by hand on their detail page, or automatically from synced Shopify orders โ€” and segment the Profitability report by those tags. Each customer tag becomes a revenue, cost, and profit segment in both the Trend and Cost Breakdown views, with drill-down to the underlying orders.

SOP impact โ€” To analyze margin by customer segment, go to Insights โ†’ Reports โ†’ Profitability and set Group By to Customer Tags. Tag customers on their detail page (Contacts โ†’ Customers โ†’ the Tags card); Shopify customer tags also sync in automatically. Note: because a customer can have several tags, per-tag rows can total more than the grand total, which still counts each order once.

Docs: /guides/insights/segment-profitability-by-customer-tag ยท /guides/contacts/customers/tag-a-customer ยท /concepts/customer-tags-from-shopify

Supplier pickup (drop-ship will-call) ordersโ€‹

Orders ยท ๐ŸŸข Added

You can now run drop-ship orders that a distributor collects directly from your supplier: a pickup shipping method turns a drop-ship line into a supplier pickup, fulfilled with Mark as Picked Up (no tracking), with a PDF pickup authorization and a Supplier Pickup Orders report.

SOP impact โ€” If an SOP fulfills a drop-ship line by entering a tracking number, orders set to a pickup shipping method are now completed with Mark as Picked Up instead โ€” and appear under Insights โ†’ Reports โ†’ Supplier Pickup Orders.

Docs: /guides/orders/create-a-supplier-pickup-order

2026-07-23โ€‹

Customizable dashboardsโ€‹

Dashboard ยท ๐ŸŸข Added

Add any of 100+ widgets to your dashboard with a live preview, arrange and resize them, and keep multiple named dashboards you can switch between.

SOP impact โ€” Dashboards are now personal and customizable: if an SOP assumes a fixed set of dashboard cards, note users can add/remove widgets and keep multiple dashboards via Dashboard โ†’ Customize.

Docs: /guides/dashboard/customize-your-dashboard

Airtable integration (two-way sync)โ€‹

Integrations ยท ๐ŸŸข Added

Connect an Airtable account and sync SKU.io data both ways with no middleware. Push products, inventory, orders, purchase orders, and suppliers into Airtable on a schedule or in real time; provision a ready-made Ops Hub base in one click; and review edits made in Airtable before they update your catalog. Includes computed product-analytics columns, a monthly API-usage cap, sync-health alerts, and an "Airtable: Write Rows" automation node.

SOP impact โ€” If your process exports SKU.io data to CSV or uses middleware to reach Airtable, you can now connect Airtable directly under Apps & Integrations โ†’ Airtable and map datasets instead.

Docs: /guides/integrations/airtable/

2026-07-22โ€‹

Trend-aware baselines and promotion liftโ€‹

Demand Planning ยท ๐ŸŸข Added

Demand Planning can now build a forecast from a damped growth trend (or a recency-weighted average) instead of only a flat mean, show each recommendation's baseline decomposition, and re-apply a measured promotion as a multiplier that scales with your volume.

SOP impact โ€” If your reorder SOP assumes a flat-average forecast, note the new Baseline method control in Demand Planning โ†’ Configuration; choosing Damped trend changes the recommended quantities for trending products.

Docs: /guides/inventory/trend-aware-forecasting

2026-07-20โ€‹

Build workflows from scratch on a schedule + unsubmitted-PO email remindersโ€‹

Workflows ยท ๐ŸŸข Added

Workflows can now run on a recurring Schedule (hourly/daily/weekly/monthly, in your timezone) and query your purchase orders with a new Find Purchase Orders node. Together they power a build-from-scratch email reminder about POs sitting Unsubmitted. Two how-tos document the general canvas authoring and the reminder recipe (previously only templates were documented).

SOP impact โ€” If your SOP for chasing unsubmitted purchase orders relied on someone manually checking the list, you can replace it with a scheduled workflow (Schedule -> Find Purchase Orders -> IF count>0 -> Send Email) that emails a summary on your chosen cadence. Building a workflow from scratch (not just from a template) is now a documented, supported path.

Docs: /guides/workflows/build-a-workflow-from-scratch ยท /guides/workflows/get-an-email-reminder-about-unsubmitted-purchase-orders

2026-07-14โ€‹

Bulk-manage supplier tax rate (GST) & currencyโ€‹

Suppliers ยท ๐ŸŸข Added

A supplier's default tax rate and default pricing tier (which sets its currency) are now available in the Suppliers list as toggleable, inline-editable columns, in the list export, and in the supplier importer.

SOP impact โ€” If your SOP for maintaining supplier GST/currency said it could only be done one supplier at a time on the detail page, update it: you can now export suppliers, edit the Default Tax Rate / Default Pricing Tier columns, and re-import; or inline-edit them in the list grid view.

Docs: /guides/contacts/suppliers/importable-columns-reference ยท /guides/contacts/suppliers/export-suppliers ยท /guides/contacts/suppliers/list-columns-reference

2026-07-13โ€‹

Internal Notes (PO) and custom fields (SO) now save on spreadsheet importโ€‹

Orders ยท ๐Ÿ”ต Fixed

The purchase-order importer now saves the Internal Notes column, and the sales-order importer now saves custom-field columns. Previously the mapper offered these columns and showed them in the preview, but they were silently dropped on import.

SOP impact โ€” If your import SOP avoided mapping Internal Notes (PO) or custom fields (SO) because they didn't stick, you can now include them โ€” they persist.

Docs: /guides/orders/purchase-orders/import-columns-reference ยท /guides/orders/sales-orders/importable-columns-reference

Column-by-column import & export references for sales & purchase ordersโ€‹

Orders ยท ๐ŸŸข Added

Every importable and exportable column for sales orders and purchase orders is now documented with its type, whether it's required, accepted values, and behaviour โ€” including the export-to-re-import round-trip.

SOP impact โ€” Use these references to build or verify your bulk order import/export SOPs against the exact column list rather than trial and error.

Docs: /guides/orders/sales-orders/importable-columns-reference ยท /guides/orders/sales-orders/export-columns-reference ยท /guides/orders/purchase-orders/import-columns-reference ยท /guides/orders/purchase-orders/export-columns-reference

Set per-tier selling prices via the products spreadsheet importโ€‹

Products ยท ๐ŸŸก Changed

The Products list Import now writes per-tier selling prices from a Price: <tier> column (for example, Price: Retail). Previously it only wrote cost, and selling prices had to be set another way.

SOP impact โ€” If your product-pricing SOP routed bulk price changes through the generic Data Imports tool or Bulk-edit as a workaround, you can now set selling prices directly in the Products import file with a Price: <tier> column.

Docs: /guides/products/import-products#set-selling-prices

2026-07-06โ€‹

Fulfillments combined into one sidebar item with tabsโ€‹

Fulfillments ยท ๐Ÿ”ถ Moved

The separate Fulfillments sidebar entries were combined into a single sidebar item that uses horizontal tabs.

SOP impact โ€” If an SOP says to click a specific Fulfillments item in the sidebar, update it: open the single Fulfillments item, then choose the relevant tab.

Docs: /guides/orders

Last verified: