<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://www.sku.io/docs/release-notes/</id>
    <title>SKU.io Release Notes</title>
    <updated>2026-08-02T09:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://www.sku.io/docs/release-notes/"/>
    <subtitle>New features, improvements, and fixes for the SKU.io platform.</subtitle>
    <icon>https://www.sku.io/docs/img/favicon.ico</icon>
    <rights>Copyright © 2026 SKU.io.</rights>
    <entry>
        <title type="html"><![CDATA[Channel attributes and metafields — the fields only your channel has, finally in your catalog]]></title>
        <id>https://www.sku.io/docs/release-notes/2026/08/02/channel-attributes-and-metafields/</id>
        <link href="https://www.sku.io/docs/release-notes/2026/08/02/channel-attributes-and-metafields/"/>
        <updated>2026-08-02T09:00:00.000Z</updated>
        <summary type="html"><![CDATA[Shopify metafields and Magento custom product attributes can now fill SKU.io product fields at creation and be watched for drift afterwards.]]></summary>
        <content type="html"><![CDATA[<p>Every channel has a standard set of product fields, and then it has yours. The care instructions you added as a Shopify metafield. The <code>country_of_manufacture</code> and <code>warranty_months</code> attributes your Magento store has carried for years. That data is real, it's maintained, and until now SKU.io imported none of it — it read the fields every channel has and dropped everything else on the floor, leaving you to re-enter it by hand or accept a catalog that knows less than your storefront does. <strong>Channel attributes</strong> closes that gap. SKU.io now discovers the attributes your channel actually sends, shows you how many products carry each one and what the values look like, and lets you point them at any SKU product field — either once, when a product is first created, or on every sync, with drift detection watching for changes.</p>
<p><strong>✨ What this means for you:</strong></p>
<ul>
<li class="">Shopify <strong>metafields</strong> and Magento <strong>custom product attributes</strong> are discovered automatically — no schema setup, no field list to maintain.</li>
<li class="">Every attribute shows how many of your products carry it and up to three real sample values, so you can tell a genuine attribute from an app's leftovers before you map it.</li>
<li class="">Map an attribute to any SKU product field — a catalog attribute, the title, a weight, a price tier — and the channel's value lands there.</li>
<li class="">Need a catalog attribute that doesn't exist yet? Type the name, press Enter, and SKU.io creates it for you.</li>
<li class="">Map at <strong>creation time</strong> to fill new products from the channel, or in <strong>Content Sync</strong> to keep them current and get flagged when the channel edits them.</li>
<li class="">Clean values on the way in — strip a channel-specific SKU prefix, trim a trailing size code, join two fields together — without touching them afterwards.</li>
<li class="">Nothing is mapped by default. An attribute you don't map is ignored entirely.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="two-places-to-map-and-they-do-different-jobs">Two places to map, and they do different jobs<a href="https://www.sku.io/docs/release-notes/2026/08/02/channel-attributes-and-metafields/#two-places-to-map-and-they-do-different-jobs" class="hash-link" aria-label="Direct link to Two places to map, and they do different jobs" title="Direct link to Two places to map, and they do different jobs" translate="no">​</a></h2>
<p>This is the part worth getting right up front, because the two surfaces look similar and behave very differently.</p>
<p><strong>Field Mappings</strong> decides what fills a SKU product <strong>the first time it's created</strong> from a channel listing. It runs once per product, at creation, and then it's done. It's the widest of the two — it can reach almost any SKU field.</p>
<p><strong>Channel Attributes</strong>, inside Content Sync, decides what keeps flowing <strong>after</strong> the product exists. Those mappings are applied on every sync, and the ones that land on fields Content Sync governs are also compared against your catalog, so a merchandiser editing the material in Shopify raises a reviewable change instead of a silent divergence.</p>
<p>Most teams want both: Field Mappings to get a new product populated, Channel Attributes to keep it honest.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="discovering-what-your-channel-actually-sends">Discovering what your channel actually sends<a href="https://www.sku.io/docs/release-notes/2026/08/02/channel-attributes-and-metafields/#discovering-what-your-channel-actually-sends" class="hash-link" aria-label="Direct link to Discovering what your channel actually sends" title="Direct link to Discovering what your channel actually sends" translate="no">​</a></h2>
<p>Open a channel's <strong>Products</strong> page and select <strong>Field Mappings</strong>, and the channel's own vocabulary is already there beside its standard fields — grouped as <strong>Metafields</strong> on Shopify and <strong>Custom Attributes</strong> on Magento, each labelled with how many of your products carry it.</p>
<p><img decoding="async" loading="lazy" alt="The Field Mappings editor for a Shopify store, with metafields listed beside the standard product fields and a SKU field picker on each row" src="https://www.sku.io/docs/assets/images/field-mappings-564d93201070b8073971a3d6b2a72fa0.png" width="1200" height="738" class="img_ev3q"></p>
<p>Shopify metafields read the way you named them: <code>custom.care_instructions</code> shows as <strong>Custom: Care Instructions</strong>, <code>shopify.material</code> as <strong>Shopify: Material</strong>. Magento attribute codes are title-cased from the code itself — <code>country_of_manufacture</code> as <strong>Country Of Manufacture</strong>. Filter to <strong>Unmapped</strong> after a first sync and you're looking at exactly what the channel is sending you that SKU.io is currently throwing away — which is usually where the useful merchandising data has been hiding.</p>
<p>None of this comes from asking the channel for a schema. SKU.io builds the list from the products it has already synced, which means what you see is what your store genuinely uses, not every field the platform theoretically supports.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="clean-the-value-on-its-way-in">Clean the value on its way in<a href="https://www.sku.io/docs/release-notes/2026/08/02/channel-attributes-and-metafields/#clean-the-value-on-its-way-in" class="hash-link" aria-label="Direct link to Clean the value on its way in" title="Direct link to Clean the value on its way in" translate="no">​</a></h2>
<p>Channel data rarely arrives in exactly the shape your catalog wants. A <strong>transform</strong> reshapes it during import, so you're not fixing the same thing by hand every time a product is created.</p>
<p><img decoding="async" loading="lazy" alt="A field mapping with a transform expanded, replacing a channel-specific SKU prefix during import" src="https://www.sku.io/docs/assets/images/transform-28350a498dd4915045bc8642dd53e255.png" width="1200" height="738" class="img_ev3q"></p>
<p>Pick a mapped row, select <strong>Add Transform</strong>, and choose what to do: <strong>Remove Text</strong> deletes every occurrence of a string, <strong>Find &amp; Replace</strong> swaps one for another, <strong>Remove from Beginning</strong> and <strong>Remove from End</strong> trim a fixed number of characters, and <strong>Append Field</strong> joins another channel field on with a separator you choose. Stack more than one and they run in order. Transforms are available on Amazon, BigCommerce, eBay, Shopify, TikTok Shop, Walmart and WooCommerce.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="keep-them-current-and-catch-the-edits">Keep them current, and catch the edits<a href="https://www.sku.io/docs/release-notes/2026/08/02/channel-attributes-and-metafields/#keep-them-current-and-catch-the-edits" class="hash-link" aria-label="Direct link to Keep them current, and catch the edits" title="Direct link to Keep them current, and catch the edits" translate="no">​</a></h2>
<p>The other half lives at the bottom of a channel's <strong>Content Sync</strong> settings tab. Same vocabulary, different job: these mappings run on every sync.</p>
<p><img decoding="async" loading="lazy" alt="The Channel Attributes panel listing each metafield with its coverage count, sample values, and the SKU field it maps to" src="https://www.sku.io/docs/assets/images/channel-attributes-28848e3275c93f53b3228fd1ae8ce987.png" width="1632" height="911" class="img_ev3q"></p>
<p>Each row tells you what you need to decide with: <strong>Coverage</strong> — how many of your synced products carry it, so an attribute on 12 of 12 is obviously worth mapping and one on 2 probably isn't. <strong>Sample values</strong> — up to three real values pulled from your own listings, so you see what you'd be importing before you commit. Then pick a target in <strong>Maps to</strong> and switch the row <strong>Active</strong>.</p>
<p>Targets that Content Sync governs — Basic Info, Physical, and Product Attributes — are written on sync <em>and</em> compared, so a change on the channel side shows up in the Content Sync inbox like any other drift, with the before and after side by side. Pricing and supplier targets are written but never compared; the panel labels them <strong>written, not compared</strong> so you're never guessing which you picked.</p>
<p><img decoding="async" loading="lazy" alt="The Channel Attributes panel for a Magento store, with custom attribute codes mapped to catalog fields" src="https://www.sku.io/docs/assets/images/magento-channel-attributes-f60fd5fd809f60ec105298a61f1e45d7.png" width="1632" height="802" class="img_ev3q"></p>
<p>Magento stores get the same treatment for their custom product attributes: point <strong>Manufacturer</strong> at <strong>Brand</strong>, <code>material</code> at a <strong>Material</strong> catalog attribute, and leave the shipping-compliance codes you don't maintain in SKU.io unmapped.</p>
<p>One thing to know: on <strong>Magento 2</strong>, custom attributes are available in Field Mappings at product creation but not in Channel Attributes, so a Magento 2 custom attribute can fill a SKU field when the product is created but can't be watched for drift afterwards. Shopify metafields and Magento 1 custom attributes can be. The eight governed content fields sync normally on Magento 2 either way.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-to-find-it">Where to find it<a href="https://www.sku.io/docs/release-notes/2026/08/02/channel-attributes-and-metafields/#where-to-find-it" class="hash-link" aria-label="Direct link to Where to find it" title="Direct link to Where to find it" translate="no">​</a></h2>
<p>Creation-time mapping: <strong>Apps &amp; Integrations → your channel → Products → Field Mappings</strong>. Ongoing mapping and drift detection: <strong>Apps &amp; Integrations → your channel → Settings → Content Sync → Channel Attributes</strong>. Mappings are saved per connection, so two Shopify stores can map differently.</p>
<p><strong>Full guides:</strong></p>
<ul>
<li class=""><a href="https://docs.sku.io/guides/integrations/map-channel-fields-to-products" target="_blank" rel="noopener noreferrer" class="">Map channel fields to SKU products</a> — everything that happens at product creation, including transforms and the per-channel differences.</li>
<li class=""><a href="https://docs.sku.io/guides/inventory/review-channel-content-changes" target="_blank" rel="noopener noreferrer" class="">Review and apply channel content changes</a> — Channel Attributes, drift detection, and the rest of Content Sync.</li>
</ul>]]></content>
        <author>
            <name>SKU.io Product Team</name>
            <uri>https://sku.io</uri>
        </author>
        <category label="Major Feature" term="Major Feature"/>
        <category label="New" term="New"/>
        <category label="Integrations" term="Integrations"/>
        <category label="Inventory" term="Inventory"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Living Catalog — see every content change your channels make, and decide who wins]]></title>
        <id>https://www.sku.io/docs/release-notes/2026/07/30/living-catalog/</id>
        <link href="https://www.sku.io/docs/release-notes/2026/07/30/living-catalog/"/>
        <updated>2026-07-30T09:00:00.000Z</updated>
        <summary type="html"><![CDATA[SKU.io now watches your channel listings for content edits, shows you a field-by-field diff, and lets you set the source of truth per field group.]]></summary>
        <content type="html"><![CDATA[<p>Importing a product from a channel has always been a one-time snapshot. Someone retitles a listing in Seller Central, swaps in a better photo, corrects a weight from pounds to grams — and SKU.io never hears about it. Months later your catalog and your channels have quietly drifted apart, and nobody can say which side is right. The usual workaround is a spreadsheet and a lot of squinting. <strong>Living Catalog</strong> replaces it: SKU.io now watches the content on your mapped listings, records exactly which fields changed on the channel side, and hands you a review queue instead of a mystery. Nothing is overwritten behind your back — you decide, per field, whether your catalog or the channel is the source of truth.</p>
<p><strong>✨ What this means for you:</strong></p>
<ul>
<li class="">Every channel-side content change lands in one inbox, broken out field by field — not "this product changed" but "the weight changed from 5.4 kg to 5600 g".</li>
<li class="">You set the source of truth per field group: your catalog wins, the channel wins, or two-way.</li>
<li class="">Nothing touches your catalog until you look at it. Review the before/after, then Apply or Ignore.</li>
<li class="">A channel-side bulk edit that hit 40 listings is one row and one <strong>Approve all</strong> click, not 40 reviews.</li>
<li class="">Let safe fields like weight and images apply automatically while the product title waits for a human.</li>
<li class="">When both sides changed the same field, you get an explicit choice — never a silent overwrite.</li>
<li class="">One listing needs different rules than its channel? Override it in place, without touching the channel.</li>
<li class="">Every applied change is reversible, and the full history is filterable, comparable, and exportable.</li>
<li class="">Need the differences that were already there before you switched it on? Run a <strong>full comparison</strong> on demand.</li>
<li class="">Optionally block publishing to a channel until the content that channel requires is actually filled in.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="one-inbox-for-every-content-change">One inbox for every content change<a href="https://www.sku.io/docs/release-notes/2026/07/30/living-catalog/#one-inbox-for-every-content-change" class="hash-link" aria-label="Direct link to One inbox for every content change" title="Direct link to One inbox for every content change" translate="no">​</a></h2>
<p><strong>PIM → Content Sync</strong> is the queue. Cards across the top count what's waiting — Pending, Conflicts, Errors, and how many listings are affected — and the sidebar carries a badge so you notice new drift without going looking for it.</p>
<p><img decoding="async" loading="lazy" alt="The Content Sync drift inbox listing changed fields per listing, with pending and conflict counts across the top" src="https://www.sku.io/docs/assets/images/drift-inbox-fdf3294ab57e9c8477a4c749338bd2ec.png" width="1920" height="1080" class="img_ev3q"></p>
<p>Each row is a single changed field, with the old value, the new value, which channel it came from, and when it was detected. Filter by status, field group, channel, riskiness, or source; search by SKU, product name, listing title, or the change ID itself. The field that carries the most marketing weight — the product <strong>Title</strong> — is flagged <strong>risky</strong>, so it can't be waved through in a bulk action by accident.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="approve-a-whole-templated-change-in-one-click">Approve a whole templated change in one click<a href="https://www.sku.io/docs/release-notes/2026/07/30/living-catalog/#approve-a-whole-templated-change-in-one-click" class="hash-link" aria-label="Direct link to Approve a whole templated change in one click" title="Direct link to Approve a whole templated change in one click" translate="no">​</a></h2>
<p>Channel-side edits are rarely one-offs. A supplier re-weighs a range, an ops teammate reformats every title, a photographer re-shoots a category — and forty listings change the same field on the same afternoon. Grouping turns that into a single decision.</p>
<p>Set <strong>Group by</strong> to <strong>Field</strong> (the default) and each bucket becomes one row: <em>"Weight changed"</em>, <em>"5 changes across 5 listings"</em>, and an <strong>Approve all</strong> button that applies the whole batch as a background job you can watch in the job tray. Click the bucket itself to focus the feed on just those changes.</p>
<p>Risky fields stay out of it by design. Group by <strong>Field</strong> and the <strong>Approve all</strong> button on the <em>Title changed</em> bucket is disabled outright — <em>"Risky fields have to be reviewed listing by listing."</em> Group by <strong>Field group</strong> and <strong>Approve all</strong> quietly skips the risky fields inside the group and applies the rest.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="review-the-diff-before-you-accept-it">Review the diff before you accept it<a href="https://www.sku.io/docs/release-notes/2026/07/30/living-catalog/#review-the-diff-before-you-accept-it" class="hash-link" aria-label="Direct link to Review the diff before you accept it" title="Direct link to Review the diff before you accept it" translate="no">​</a></h2>
<p>Click any row and the review drawer opens with the catalog value on the left and the incoming channel value on the right — rendered for the kind of field it is, so you're reading the change and not hunting for it.</p>
<p><img decoding="async" loading="lazy" alt="The review drawer showing the catalog title beside the incoming channel title, with the changed words highlighted and Apply and Ignore buttons" src="https://www.sku.io/docs/assets/images/review-drawer-fa2d09659ea5ac748488111364aa2bb7.png" width="760" height="556" class="img_ev3q"></p>
<p>Titles and brands highlight the individual <strong>words</strong> that were added and removed, so a one-word retitle doesn't read as a full rewrite — and if only spacing or markup moved, it says so instead of showing you a diff. Image changes come as thumbnail strips with the removals and additions called out. Attributes list only the keys that actually changed. Weights and dimensions carry their units, and applying converts them: a channel that says <strong>1650 g</strong> writes <strong>1.65 kg</strong> into a catalog that tracks kilograms.</p>
<p>Apply or Ignore field by field, or clear the whole listing at once: <strong>Apply all safe</strong> takes the low-risk changes and leaves the flagged ones alone, <strong>Apply ALL</strong> takes everything including the risky fields, and <strong>Ignore all</strong> dismisses the lot. An ignored change stays dismissed until the channel value genuinely changes again — the same edit won't resurface on every re-check. <strong>Reconcile now</strong> re-checks that listing against the channel on the spot.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="you-decide-who-owns-each-field">You decide who owns each field<a href="https://www.sku.io/docs/release-notes/2026/07/30/living-catalog/#you-decide-who-owns-each-field" class="hash-link" aria-label="Direct link to You decide who owns each field" title="Direct link to You decide who owns each field" translate="no">​</a></h2>
<p>Content sync is off by default on every channel, and turning it on doesn't change a single value — it starts watching. Open <strong>Apps &amp; Integrations → your channel → Settings → Content Sync</strong>.</p>
<p><img decoding="async" loading="lazy" alt="The Content Sync settings tab with per-field-group ownership set to Catalog, Channel or Two-way, plus auto-apply switches" src="https://www.sku.io/docs/assets/images/field-ownership-81fb387ef76ca8f2ace520a5009c58a8.png" width="1638" height="389" class="img_ev3q"></p>
<p>Eight fields are governed, grouped so you can set ownership once: <strong>Identity</strong> (Barcode, MPN), <strong>Descriptive</strong> (Title, Brand, Attributes), <strong>Media</strong> (Images), and <strong>Physical</strong> (Weight, Dimensions). For each group, pick who owns it — <strong>Catalog</strong>, <strong>Channel</strong>, or <strong>Two-way</strong> — and whether inbound changes <strong>auto-apply</strong> or queue for review. Need one exception inside a group? Open <strong>Field overrides</strong> and set that single field differently. You can also choose how often listings are re-checked as a backstop to real-time webhooks, and let SKU.io fill genuinely empty catalog fields from the channel automatically — filling a gap is not the same risk as overwriting curated copy.</p>
<p>One thing worth knowing: switching content sync on <strong>baselines</strong> the listing content as it stands right now. Differences that already existed aren't dredged up retroactively — only changes made from that point on are flagged as drift. You're starting from a clean inbox, not inheriting years of history.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="when-you-do-want-the-whole-picture">When you <em>do</em> want the whole picture<a href="https://www.sku.io/docs/release-notes/2026/07/30/living-catalog/#when-you-do-want-the-whole-picture" class="hash-link" aria-label="Direct link to when-you-do-want-the-whole-picture" title="Direct link to when-you-do-want-the-whole-picture" translate="no">​</a></h2>
<p>That clean-inbox default is the right one day to day, but it has a corollary: a difference that was already there when you switched content sync on stays invisible, because the channel never moved. If you imported your products from Shopify and only started governing attributes or dimensions later, a normal re-check has nothing to report — it's comparing against a baseline that already contained the mismatch.</p>
<p><strong>Full comparison</strong> is the answer. Open the arrow beside <strong>Reconcile</strong> and pick it, and SKU.io ignores the baseline entirely: it diffs every governed field against your catalog <em>as things stand right now</em>, whether or not the channel content has changed since the last check. Pre-existing gaps surface as ordinary pending changes you can review, apply, or bulk-approve exactly like any other drift.</p>
<p>It's there on both scopes — <strong>Reconcile now → Full comparison</strong> in the review drawer for a single listing, and <strong>Reconcile → Full comparison</strong> in the inbox for a channel or the whole tenant. Because it reports every difference rather than only the new ones, scope it with the channel filter when you're backfilling; a tenant-wide pass can raise a lot at once, and the confirmation says so before it starts.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="and-one-listing-can-disagree-with-its-channel">…and one listing can disagree with its channel<a href="https://www.sku.io/docs/release-notes/2026/07/30/living-catalog/#and-one-listing-can-disagree-with-its-channel" class="hash-link" aria-label="Direct link to …and one listing can disagree with its channel" title="Direct link to …and one listing can disagree with its channel" translate="no">​</a></h2>
<p>Channel settings are the default, not a straitjacket. When a single SKU needs different treatment — one hero product whose title you never want touched — expand <strong>Customize for this listing</strong> in the review drawer and set ownership or auto-apply for that listing alone. A chip at the top tells you where it stands: <em>"Inherited from Amazon defaults"</em> or <em>"3 customizations on this listing"</em>, and <strong>Reset to channel defaults</strong> hands it back.</p>
<p>Overrides are sparse, not snapshots. Only what you explicitly change is stored, so everything you leave alone keeps tracking the channel — later changes to the channel's defaults still flow through.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="when-both-sides-changed">When both sides changed<a href="https://www.sku.io/docs/release-notes/2026/07/30/living-catalog/#when-both-sides-changed" class="hash-link" aria-label="Direct link to When both sides changed" title="Direct link to When both sides changed" translate="no">​</a></h2>
<p>Set a field to two-way and eventually both sides will edit it between syncs. SKU.io refuses to guess.</p>
<p><img decoding="async" loading="lazy" alt="A conflict in the review drawer offering Keep mine, Take theirs, or Keep both" src="https://www.sku.io/docs/assets/images/conflict-resolution-cc51883c27b096480f6d144d0d46066d.png" width="760" height="696" class="img_ev3q"></p>
<p>The field is marked <strong>Conflict</strong> and held until you choose: <strong>Keep mine</strong> keeps your catalog value and dismisses the channel edit, <strong>Take theirs</strong> overwrites with the channel value, and <strong>Keep both</strong> takes the channel value now while preserving your version for the next outbound push. Whichever you pick, the other value is recorded rather than discarded.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="nothing-is-one-way">Nothing is one-way<a href="https://www.sku.io/docs/release-notes/2026/07/30/living-catalog/#nothing-is-one-way" class="hash-link" aria-label="Direct link to Nothing is one-way" title="Direct link to Nothing is one-way" translate="no">​</a></h2>
<p><strong>Change history</strong> at the bottom of the review drawer is the full audit trail for a listing's content — applied, auto-applied, ignored, superseded, conflicted, errored, and rolled-back entries, each with who resolved it and when. Filter it by field, status, who detected it, who resolved it, and a date range.</p>
<p>It reads outcomes, not attempts: a change that never wrote to your catalog shows its before → after struck through, so an ignored suggestion can't be mistaken for an applied one. Tick two entries on the same field and <strong>Compare versions</strong> shows the value that field held after each — read-only, so nothing you do while comparing can touch the catalog. Anything that <em>did</em> write gets a <strong>Roll back</strong> button that restores the value it replaced, and the rollback is itself recorded, with a button that reads <strong>Undo rollback</strong>. Export the filtered history as CSV when someone needs it in a spreadsheet.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="stop-incomplete-products-from-shipping-to-a-channel">Stop incomplete products from shipping to a channel<a href="https://www.sku.io/docs/release-notes/2026/07/30/living-catalog/#stop-incomplete-products-from-shipping-to-a-channel" class="hash-link" aria-label="Direct link to Stop incomplete products from shipping to a channel" title="Direct link to Stop incomplete products from shipping to a channel" translate="no">​</a></h2>
<p>The same content rules can work in the other direction. Turn on <strong>Block publishing when required content is missing</strong> at the bottom of a channel's Content Sync settings and pick what that channel insists on — Barcode, Images, Dimensions, whatever it needs.</p>
<p>From then on, publishing a listing to that channel checks the catalog product first, and if anything required is empty the publish job fails naming the exact gap: <em>"Blocked by the content governance gate — this product is missing Barcode, Images."</em> The gate is deliberately outbound only. Inbound content is never blocked, because inbound content is how an incomplete product gets filled in.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-to-find-it">Where to find it<a href="https://www.sku.io/docs/release-notes/2026/07/30/living-catalog/#where-to-find-it" class="hash-link" aria-label="Direct link to Where to find it" title="Direct link to Where to find it" translate="no">​</a></h2>
<p>The inbox lives at <strong>PIM → Content Sync</strong> — beside the other surfaces that own product content. Turn it on per channel from <strong>Apps &amp; Integrations → your channel → Settings → Content Sync</strong>, where you'll also find field ownership, auto-apply, and the governance gate.</p>
<p><strong>Full guide (with a 1:40 video walkthrough):</strong> <a href="https://docs.sku.io/guides/inventory/review-channel-content-changes" target="_blank" rel="noopener noreferrer" class="">Review channel content changes</a></p>]]></content>
        <author>
            <name>SKU.io Product Team</name>
            <uri>https://sku.io</uri>
        </author>
        <category label="Major Feature" term="Major Feature"/>
        <category label="New" term="New"/>
        <category label="Inventory" term="Inventory"/>
        <category label="Integrations" term="Integrations"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Product substitutions — sell the SKU they search for, ship the one you stock]]></title>
        <id>https://www.sku.io/docs/release-notes/2026/07/28/product-substitutions/</id>
        <link href="https://www.sku.io/docs/release-notes/2026/07/28/product-substitutions/"/>
        <updated>2026-07-28T09:00:00.000Z</updated>
        <summary type="html"><![CDATA[Link equivalent SKUs so stalled orders swap to a stocked substitute in one click — or release a whole backlog at once, with a full preview first.]]></summary>
        <content type="html"><![CDATA[<p>The same physical part often lives under two SKUs: the official part number customers search for, and the identical equivalent you actually keep on the shelf. Until now those orders just stalled — the listed SKU sat backordered while the interchangeable item was in stock a few feet away, and "fixing" it meant editing order lines by hand. <strong>Product substitutions</strong> links equivalent SKUs so those orders flow: swap a stalled line to the stocked substitute in one click, or select the whole backlog and release it at once. The customer still sees exactly what they ordered — the invoice and packing slip keep the original SKU — while the pick list tells your warehouse which part to actually pull.</p>
<p><strong>✨ What this means for you:</strong></p>
<ul>
<li class="">Orders for an out-of-stock SKU <strong>stop stalling</strong> when an equivalent is on the shelf — swap one line in a click, or bulk <strong>Swap &amp; Release</strong> the backlog.</li>
<li class="">A <strong>Swap resolvable</strong> tab on Sales Orders counts every stalled order a substitution could release right now, so the opportunity is never invisible.</li>
<li class=""><strong>Customer documents stay honest</strong>: the invoice and packing slip keep the ordered SKU; the pick list shows the substitute with the original in brackets so pickers grab the right part.</li>
<li class="">Substitutes can <strong>count toward the availability you publish</strong> to your sales channels — so a listing backed by interchangeable stock stays buyable instead of showing sold out.</li>
<li class="">Demand and profit <strong>follow the SKU that actually ships</strong>, so replenishment reorders the right item instead of the alias.</li>
<li class="">Manage rules anywhere: per-product on a <strong>Substitutes</strong> tab, or across your whole catalog on a <strong>Substitutions</strong> page with Excel import and export.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="set-the-rules-once-per-product-pair">Set the rules once, per product pair<a href="https://www.sku.io/docs/release-notes/2026/07/28/product-substitutions/#set-the-rules-once-per-product-pair" class="hash-link" aria-label="Direct link to Set the rules once, per product pair" title="Direct link to Set the rules once, per product pair" translate="no">​</a></h2>
<p>Open a product's <strong>Substitutes</strong> tab and add the equivalent you stock. Each rule has a mode: <strong>Manual only</strong> (a person applies it from the order line), <strong>Only when out of stock</strong> (swaps automatically when the ordered product can't cover the line), or <strong>Always</strong> (every order swaps — perfect for part numbers you list for search but never stock). You can also allow swaps when the substitute is itself out of stock, and choose whether its stock counts toward the original's published availability.</p>
<p><img decoding="async" loading="lazy" alt="A product&amp;#39;s Substitutes tab showing a substitution rule with its mode, live availability, usage count, and notes" src="https://www.sku.io/docs/assets/images/substitutes-tab-a2a39a33dda40cf5e7f529d8c34c0dc2.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="spot-the-stalled-orders-a-swap-would-fix">Spot the stalled orders a swap would fix<a href="https://www.sku.io/docs/release-notes/2026/07/28/product-substitutions/#spot-the-stalled-orders-a-swap-would-fix" class="hash-link" aria-label="Direct link to Spot the stalled orders a swap would fix" title="Direct link to Spot the stalled orders a swap would fix" translate="no">​</a></h2>
<p>The Sales Orders page gains a <strong>Swap resolvable</strong> tab with a live count of stalled orders that a substitution could release right now. Click it and you're looking at exactly those orders — nothing else.</p>
<p><img decoding="async" loading="lazy" alt="The Sales Orders page with the new Swap resolvable tab showing a live count of releasable orders" src="https://www.sku.io/docs/assets/images/swap-resolvable-tab-f430319d6236bf9f59c146985d69827b.png" width="1920" height="1080" class="img_ev3q"></p>
<p>On any stalled order, lines with a matching rule show a <strong>Swap available</strong> chip. The menu lists each substitute with its live availability, the rule's mode and notes, and marks the ones that fully resolve the shortfall — one click swaps the line and allocates stock from the substitute.</p>
<p><img decoding="async" loading="lazy" alt="An order line&amp;#39;s swap menu suggesting the stocked equivalent with live availability and the rule&amp;#39;s notes" src="https://www.sku.io/docs/assets/images/swap-menu-7ef6bed6706bed7e463bdf99229cf7aa.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="release-a-whole-backlog--with-a-preview-first">Release a whole backlog — with a preview first<a href="https://www.sku.io/docs/release-notes/2026/07/28/product-substitutions/#release-a-whole-backlog--with-a-preview-first" class="hash-link" aria-label="Direct link to Release a whole backlog — with a preview first" title="Direct link to Release a whole backlog — with a preview first" translate="no">​</a></h2>
<p>Select the stalled orders and choose <strong>Swap &amp; Release</strong>. Before anything runs, a confirmation shows precisely what will happen: each order's planned swaps — ordered SKU → substitute SKU with quantity and rule mode — plus any orders that would be skipped and why. Confirm, and a background job applies the swaps and sends the orders to fulfillment while you watch the resolvable count drop to zero.</p>
<p><img decoding="async" loading="lazy" alt="The Swap &amp;amp; Release confirmation previewing each planned swap before anything runs" src="https://www.sku.io/docs/assets/images/bulk-preview-da2e35380f22f9774ad29cdb13e7ac7f.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-to-find-it">Where to find it<a href="https://www.sku.io/docs/release-notes/2026/07/28/product-substitutions/#where-to-find-it" class="hash-link" aria-label="Direct link to Where to find it" title="Direct link to Where to find it" translate="no">​</a></h2>
<p>Turn the feature on under <strong>Settings → Products → Product Substitutions</strong>. Manage rules on any product's <strong>Substitutes</strong> tab or the <strong>Substitutions</strong> page under <strong>PIM</strong>, and work the backlog from <strong>Orders → Sales Orders → Swap resolvable</strong>.</p>
<p><strong>Full guide:</strong> <a href="https://docs.sku.io/guides/orders/substitute-products-on-sales-orders" target="_blank" rel="noopener noreferrer" class="">Substitute an out-of-stock product on a sales order</a></p>]]></content>
        <author>
            <name>SKU.io Product Team</name>
            <uri>https://sku.io</uri>
        </author>
        <category label="Major Feature" term="Major Feature"/>
        <category label="New" term="New"/>
        <category label="Orders" term="Orders"/>
        <category label="Inventory" term="Inventory"/>
        <category label="Fulfillment" term="Fulfillment"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Airtable integration — two-way sync with no middleware]]></title>
        <id>https://www.sku.io/docs/release-notes/2026/07/24/airtable-integration/</id>
        <link href="https://www.sku.io/docs/release-notes/2026/07/24/airtable-integration/"/>
        <updated>2026-07-24T09:00:00.000Z</updated>
        <summary type="html"><![CDATA[Connect Airtable and sync products, inventory, orders, and suppliers both ways — no Zapier, no CSV round-trips, no paid connector in between.]]></summary>
        <content type="html"><![CDATA[<p>If your team plans in Airtable — merchandising calendars, purchasing boards, ops trackers — keeping it in step with SKU.io has meant CSV round-trips or a paid middleware subscription that breaks the moment either side changes. The new <strong>Airtable integration</strong> removes the bridge entirely: connect your Airtable account and SKU.io syncs your operational data <strong>both ways</strong>, on a schedule or in near-real-time. Push products, inventory, orders, purchase orders, and suppliers into your own Airtable base — or let SKU.io build a ready-made base for you in one click — and when someone edits a safe field in Airtable, review the change before it updates your catalog. It's a first-party, two-way connector with nothing in the middle.</p>
<p><strong>✨ What this means for you:</strong></p>
<ul>
<li class=""><strong>No middleware.</strong> Connect Airtable directly from SKU.io — no Zapier, no Make, no per-task billing, no third vendor to blame when a sync breaks.</li>
<li class=""><strong>Both directions.</strong> Push SKU.io data into Airtable, <em>and</em> let a narrow, safe set of Airtable edits flow back into your catalog for review.</li>
<li class=""><strong>A base in one click.</strong> Let SKU.io provision a ready-made "Ops Hub" base — the right tables and field types, pre-mapped and backfilled — so you're synced in minutes.</li>
<li class=""><strong>On your schedule.</strong> Sync every 15 minutes, hourly, daily, on demand, or in real time as records change.</li>
<li class=""><strong>Safe by design.</strong> Only fields you map are written, and inbound edits can never touch order status, inventory, costs, or pricing.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="connect-your-account--and-see-everything-in-one-place">Connect your account — and see everything in one place<a href="https://www.sku.io/docs/release-notes/2026/07/24/airtable-integration/#connect-your-account--and-see-everything-in-one-place" class="hash-link" aria-label="Direct link to Connect your account — and see everything in one place" title="Direct link to Connect your account — and see everything in one place" translate="no">​</a></h2>
<p>Connecting is a single OAuth handshake: open <strong>Apps &amp; Integrations → Airtable</strong>, select <strong>Connect Airtable</strong>, and grant access in the Airtable window. Once connected, a dashboard shows your account, connection status, the exact scopes you granted, and your monthly Airtable API usage — so you always know the sync is healthy.</p>
<p><img decoding="async" loading="lazy" alt="The Airtable dashboard in SKU.io showing a connected account, connection status, monthly API usage meter, granted scopes, and quick stats for datasets synced and last sync" src="https://www.sku.io/docs/assets/images/connected-dashboard-e77db40394c2a6094b8884b5c0548d82.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="map-any-dataset--and-sync-it-your-way">Map any dataset — and sync it your way<a href="https://www.sku.io/docs/release-notes/2026/07/24/airtable-integration/#map-any-dataset--and-sync-it-your-way" class="hash-link" aria-label="Direct link to Map any dataset — and sync it your way" title="Direct link to Map any dataset — and sync it your way" translate="no">​</a></h2>
<p>Each row on the <strong>Datasets</strong> tab ties one SKU.io dataset to one Airtable table. A guided wizard walks you through the dataset, the destination base and table, the field mapping, and the options — sync direction, schedule, real-time push, and how deletions are handled. Seven datasets are available; <strong>Products</strong>, <strong>Sales Orders</strong>, and <strong>Suppliers</strong> can sync two ways.</p>
<p><img decoding="async" loading="lazy" alt="The Add dataset mapping wizard open on step one, listing the syncable datasets — Products, Inventory Levels, Sales Orders, and more — with two-way badges on the datasets that support inbound sync" src="https://www.sku.io/docs/assets/images/mapping-wizard-11a339bca71c2524a34fcecf87cbdedf.png" width="1920" height="1080" class="img_ev3q"></p>
<p>Once a dataset is mapped, push the latest data any time with <strong>Sync now</strong>, or let it run on the schedule you chose. SKU.io matches records by a stable key, so repeat syncs update the same Airtable rows instead of creating duplicates.</p>
<p><img decoding="async" loading="lazy" alt="The Datasets tab listing mappings for Products, Sales Orders, Suppliers, and Inventory Levels — each showing its Airtable base and table, direction, schedule, real-time toggle, and last-sync time" src="https://www.sku.io/docs/assets/images/datasets-ec91ec46d67610bb350b8475b1d11dec.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="let-airtable-enrich-your-catalog--safely">Let Airtable enrich your catalog — safely<a href="https://www.sku.io/docs/release-notes/2026/07/24/airtable-integration/#let-airtable-enrich-your-catalog--safely" class="hash-link" aria-label="Direct link to Let Airtable enrich your catalog — safely" title="Direct link to Let Airtable enrich your catalog — safely" translate="no">​</a></h2>
<p>Airtable is a great place for content and planning teams to work, so the integration lets a whitelisted set of edits flow <strong>back</strong> into SKU.io. When someone changes a safe field in Airtable, the change lands in an <strong>Inbound</strong> review queue — showing the record it affects, the old and new values, and a status — so you approve it before it updates your catalog. Operational fields like order status, inventory, costs, and pricing are never writable from Airtable.</p>
<p><img decoding="async" loading="lazy" alt="The Inbound review queue showing proposed changes from Airtable — pending edits with a before-and-after diff linked to their SKU.io product, alongside unmatched rows" src="https://www.sku.io/docs/assets/images/inbound-review-2dc16042944caa58ff725b07ed6bbd04.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-to-find-it">Where to find it<a href="https://www.sku.io/docs/release-notes/2026/07/24/airtable-integration/#where-to-find-it" class="hash-link" aria-label="Direct link to Where to find it" title="Direct link to Where to find it" translate="no">​</a></h2>
<p>Open <strong>Apps &amp; Integrations → Airtable</strong> and select <strong>Connect Airtable</strong> to get started. For step-by-step guides and short walkthrough videos — connecting, mapping and syncing, reviewing inbound changes, and the full field reference — see the <a href="https://docs.sku.io/guides/integrations/airtable/" target="_blank" rel="noopener noreferrer" class="">Airtable integration documentation</a>.</p>]]></content>
        <author>
            <name>SKU.io Product Team</name>
            <uri>https://sku.io</uri>
        </author>
        <category label="Major Feature" term="Major Feature"/>
        <category label="New" term="New"/>
        <category label="Integrations" term="Integrations"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Customizable dashboards — build the view your business runs on]]></title>
        <id>https://www.sku.io/docs/release-notes/2026/07/24/customizable-dashboards/</id>
        <link href="https://www.sku.io/docs/release-notes/2026/07/24/customizable-dashboards/"/>
        <updated>2026-07-24T09:00:00.000Z</updated>
        <summary type="html"><![CDATA[Add, arrange and resize widgets on your home dashboard, keep several dashboards for different jobs, and switch between them in one click.]]></summary>
        <content type="html"><![CDATA[<p>Your home dashboard used to be one fixed layout — the same handful of cards for everyone, whether you live in sales, purchasing, or the warehouse. Now it's yours to shape. <strong>Customizable dashboards</strong> let you add any of 100+ widgets — KPIs, trend charts, gauges, leaderboards and live activity — then drag, resize and arrange them exactly how you want. Keep separate dashboards for different jobs (an Overview, a Sales view, an Operations view) and switch between them with one click. Everything is drawn from your live data, so the moment a widget lands on your board it's already showing real numbers.</p>
<p><strong>✨ What this means for you:</strong></p>
<ul>
<li class=""><strong>A dashboard per job.</strong> Build an <em>Overview</em>, a <em>Sales</em> board, an <em>Operations</em> board — as many as you need — and flip between them instantly.</li>
<li class=""><strong>100+ widgets, one picker.</strong> Browse by category or search, and drop in exactly the metrics you care about.</li>
<li class=""><strong>See it before you add it.</strong> A live preview renders each widget with <em>your</em> data, so you never add a card and hope.</li>
<li class=""><strong>Arrange it your way.</strong> Drag widgets to reorder, resize them from a third of the row up to full width, and reorder your dashboards themselves.</li>
<li class=""><strong>Works on your phone.</strong> Your dashboards follow you to mobile in a clean single-column view.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="add-exactly-the-widgets-you-want">Add exactly the widgets you want<a href="https://www.sku.io/docs/release-notes/2026/07/24/customizable-dashboards/#add-exactly-the-widgets-you-want" class="hash-link" aria-label="Direct link to Add exactly the widgets you want" title="Direct link to Add exactly the widgets you want" translate="no">​</a></h2>
<p>Click <strong>Customize</strong>, then <strong>Add widget</strong>, and the widget picker opens. On the left, widgets are grouped by area — Sales &amp; Orders, Inventory &amp; Stock, Financials &amp; Profitability, Forecasting &amp; Demand, and more — or you can search all 100+ at once. Pick a card and the panel on the right shows a <strong>live preview built from your real data</strong>, so you know precisely what you're getting before it goes on the board.</p>
<p><img decoding="async" loading="lazy" alt="The widget picker with categories on the left, a searchable gallery of widgets, and a live preview of the selected widget on the right" src="https://www.sku.io/docs/assets/images/widget-picker-861115df05897d75b4d9eae03778396c.png" width="1920" height="1080" class="img_ev3q"></p>
<p>Add a widget and it drops onto your dashboard and scrolls into view. In edit mode you can drag any widget to reorder it, set its width, or remove it — then <strong>Save</strong> (or just press ⌘/Ctrl+S). Changed your mind? <strong>Cancel</strong> (or Esc) backs out, and you'll be asked before anything is discarded.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="keep-several-dashboards-and-switch-in-a-click">Keep several dashboards and switch in a click<a href="https://www.sku.io/docs/release-notes/2026/07/24/customizable-dashboards/#keep-several-dashboards-and-switch-in-a-click" class="hash-link" aria-label="Direct link to Keep several dashboards and switch in a click" title="Direct link to Keep several dashboards and switch in a click" translate="no">​</a></h2>
<p>One board rarely fits every role. Create as many named dashboards as you like and switch between them from the tabs at the top — each remembers its own set of widgets and layout. Rename them, set a default that opens when you sign in, drag the tabs to reorder them, and delete the ones you no longer need.</p>
<p><img decoding="async" loading="lazy" alt="The dashboard showing tabs for Overview, Sales and Operations, with revenue, cost, profit and orders KPIs and a revenue trend chart" src="https://www.sku.io/docs/assets/images/dashboard-d629703af139d44820c71c13146d7a1a.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="take-it-with-you">Take it with you<a href="https://www.sku.io/docs/release-notes/2026/07/24/customizable-dashboards/#take-it-with-you" class="hash-link" aria-label="Direct link to Take it with you" title="Direct link to Take it with you" translate="no">​</a></h2>
<p>Your dashboards aren't just a desktop thing. On a phone, the same board you built stacks into a clean single column, and the tab switcher comes along so you can jump between your Overview, Sales and Operations views on the go.</p>
<p><img decoding="async" loading="lazy" alt="The dashboard on a mobile phone, showing the dashboard tabs and widgets stacked in a single column" src="https://www.sku.io/docs/assets/images/mobile-f3a33a9751d1f9279cd37b8c4402aa7b.png" width="414" height="896" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-to-find-it">Where to find it<a href="https://www.sku.io/docs/release-notes/2026/07/24/customizable-dashboards/#where-to-find-it" class="hash-link" aria-label="Direct link to Where to find it" title="Direct link to Where to find it" translate="no">​</a></h2>
<p>It's your home screen. Open <strong>Dashboard</strong> from the main menu, then click <strong>Customize</strong> in the top-right to add, arrange and resize widgets, and use the tabs beneath the title to create and switch between dashboards.</p>
<p><strong>Full guide:</strong> <a href="https://docs.sku.io/guides/dashboard/customize-your-dashboard" target="_blank" rel="noopener noreferrer" class="">Customize your dashboard</a></p>]]></content>
        <author>
            <name>SKU.io Product Team</name>
            <uri>https://sku.io</uri>
        </author>
        <category label="Major Feature" term="Major Feature"/>
        <category label="New" term="New"/>
        <category label="Reporting" term="Reporting"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Trend-aware forecasting — your baseline keeps up with growth, and promotions scale with it]]></title>
        <id>https://www.sku.io/docs/release-notes/2026/07/23/trend-aware-forecasting/</id>
        <link href="https://www.sku.io/docs/release-notes/2026/07/23/trend-aware-forecasting/"/>
        <updated>2026-07-23T17:00:00.000Z</updated>
        <summary type="html"><![CDATA[Demand planning can now follow a product's growth instead of a flat average, show exactly how each number is built, and turn a past promotion into a lift that re-applies at today's volume.]]></summary>
        <content type="html"><![CDATA[<p>Your demand-planning forecast has always turned recent sales into a reorder quantity — but it treated every product as if it sold at one steady pace. A SKU that has tripled over the last quarter was still planned off its flat average, so you under-bought your fastest movers and over-bought the ones winding down. And when you wanted to plan for a promotion you'd run before, you had to eyeball last year's numbers and mentally scale them up. <strong>Trend-aware forecasting</strong> changes both: the baseline can now follow a product's trend instead of a flat mean, every recommendation shows exactly how it was built, and a promotion you measured once becomes a reusable lift that automatically scales with how much your business has grown.</p>
<p><strong>✨ What this means for you:</strong></p>
<ul>
<li class="">Choose <strong>how each baseline is calculated</strong> — a flat average, a recency-weighted average, or a <strong>damped trend</strong> that projects recent growth forward without overshooting.</li>
<li class="">A <strong>growing</strong> product is planned closer to its <em>current</em> pace, not a stale average; a <strong>declining</strong> one winds down instead of over-ordering.</li>
<li class="">Every recommendation now shows its <strong>decomposition</strong> — base velocity, the trend applied, and the final daily rate — so you can see exactly <em>why</em> the number moved.</li>
<li class=""><strong>One-off spikes</strong> — a past promotion, a data glitch — can be <strong>excluded from the baseline automatically</strong>, so they don't inflate your everyday demand.</li>
<li class="">Turn a <strong>past promotion into a reusable lift</strong>: measure it once, and it re-applies at <em>today's</em> volume — a promo that lifted you 2.5× still lifts 2.5× after you've doubled.</li>
<li class=""><strong>Promo windows are suggested for you</strong> from detected sales spikes, so you confirm a date range instead of typing one.</li>
<li class="">The <strong>full decomposition downloads with your export</strong>, alongside the confidence and rationale you already get.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="pick-how-your-baseline-is-calculated">Pick how your baseline is calculated<a href="https://www.sku.io/docs/release-notes/2026/07/23/trend-aware-forecasting/#pick-how-your-baseline-is-calculated" class="hash-link" aria-label="Direct link to Pick how your baseline is calculated" title="Direct link to Pick how your baseline is calculated" translate="no">​</a></h2>
<p>Open <strong>Inventory → Demand Planning</strong> and you'll find a new <strong>Baseline method</strong> control in the forecast configuration. Leave it on <strong>Flat mean</strong> for the classic behavior, or switch to <strong>Recency-weighted</strong> to lean on your most recent sales, or <strong>Damped trend</strong> to project a product's recent growth forward. Choosing Damped trend reveals two dials — <strong>Trend damping</strong>, which controls how strongly the trend carries forward, and a <strong>Max growth cap</strong> so a short-term surge can't run away with your order. There's also an <strong>Exclude detected anomalies from baseline</strong> option that keeps one-off spikes out of your everyday demand.</p>
<p><img decoding="async" loading="lazy" alt="The demand-planning configuration with a new Baseline method selector set to &amp;quot;Damped trend&amp;quot;, showing the Trend damping slider, a Max growth cap, and an &amp;quot;Exclude detected anomalies from baseline&amp;quot; option" src="https://www.sku.io/docs/assets/images/baseline-method-ee67f722c26f73f7481597511bcce092.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="see-the-number-build-step-by-step">See the number build, step by step<a href="https://www.sku.io/docs/release-notes/2026/07/23/trend-aware-forecasting/#see-the-number-build-step-by-step" class="hash-link" aria-label="Direct link to See the number build, step by step" title="Direct link to See the number build, step by step" translate="no">​</a></h2>
<p>Build the forecast and each line's daily rate now reflects its trend — a fast-growing product reads noticeably higher than its flat average, a fading one reads lower. Click the <strong>calculator icon</strong> on any row and the calculation detail opens with a new <strong>Baseline decomposition</strong>: it shows the <strong>base velocity</strong> the product would sell at flat, the <strong>trend</strong> that was applied (and whether the growth cap kicked in), and the <strong>final baseline</strong> the order is built from — so the reason behind every recommendation is right there, not hidden in an average.</p>
<p><img decoding="async" loading="lazy" alt="The calculation detail showing a Baseline decomposition: base velocity 3.08/day, a damped trend factor lifting it to 5.17/day, and the final baseline — above the interactive formula" src="https://www.sku.io/docs/assets/images/decomposition-73ccc21023dc6964f10a86f9f09738f0.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="re-use-a-promotion--and-let-it-grow-with-you">Re-use a promotion — and let it grow with you<a href="https://www.sku.io/docs/release-notes/2026/07/23/trend-aware-forecasting/#re-use-a-promotion--and-let-it-grow-with-you" class="hash-link" aria-label="Direct link to Re-use a promotion — and let it grow with you" title="Direct link to Re-use a promotion — and let it grow with you" translate="no">​</a></h2>
<p>Ran a sale last year and want to plan for it again? Open <strong>Promo Windows</strong>, mark the promotion's dates, and <strong>measure the lift</strong> it produced against your real sales history. From there you can <strong>apply</strong> that lift to your forecast — and because it's stored as a <em>multiplier</em> rather than a fixed number of units, it re-applies at today's volume automatically. A promotion that lifted demand 2.5× still lifts it 2.5× after your baseline has doubled, with nothing to recalculate. To make setup easier, <strong>Suggest from spikes</strong> scans your sales history and proposes the promotion's date range for you.</p>
<p><img decoding="async" loading="lazy" alt="The Promo Windows workspace showing a measured promotion with its lift, an &amp;quot;Apply&amp;quot; action to add it to the forecast, and a &amp;quot;Suggest from spikes&amp;quot; button" src="https://www.sku.io/docs/assets/images/promo-windows-ebb2f14f1e77d021eb099b73ba1e8327.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-to-find-it">Where to find it<a href="https://www.sku.io/docs/release-notes/2026/07/23/trend-aware-forecasting/#where-to-find-it" class="hash-link" aria-label="Direct link to Where to find it" title="Direct link to Where to find it" translate="no">​</a></h2>
<ul>
<li class=""><strong>Choose your baseline:</strong> open <strong>Inventory → Demand Planning</strong>, and in the <strong>Configuration</strong> panel set the <strong>Baseline method</strong> (and, for Damped trend, the damping and growth cap).</li>
<li class=""><strong>See the decomposition:</strong> after you <strong>Build Forecast</strong>, click the <strong>calculator icon</strong> on any line and read the <strong>Baseline decomposition</strong> at the top of the calculation detail.</li>
<li class=""><strong>Re-use a promotion:</strong> open <strong>Promo Windows</strong> from the forecast results, create or <strong>Suggest</strong> a window, <strong>Measure lift</strong>, then <strong>Apply</strong> it — it lands as a demand modifier ready to build.</li>
<li class=""><strong>Take it with you:</strong> click <strong>Export</strong> and keep <strong>Include calculation details</strong> switched on to download the full baseline and promo breakdown for every line.</li>
</ul>]]></content>
        <author>
            <name>SKU.io Product Team</name>
            <uri>https://sku.io</uri>
        </author>
        <category label="Major Feature" term="Major Feature"/>
        <category label="New" term="New"/>
        <category label="Inventory" term="Inventory"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Per-warehouse lead times — how long each supplier takes to reach each location]]></title>
        <id>https://www.sku.io/docs/release-notes/2026/07/22/supplier-warehouse-lead-times/</id>
        <link href="https://www.sku.io/docs/release-notes/2026/07/22/supplier-warehouse-lead-times/"/>
        <updated>2026-07-22T00:05:00.000Z</updated>
        <summary type="html"><![CDATA[Set a different lead time per warehouse on any supplier, so demand planning orders on the real delivery time for each destination instead of one blended average.]]></summary>
        <content type="html"><![CDATA[<p>Your suppliers rarely reach every one of your warehouses in the same number of days. The same vendor might land stock at your main warehouse in two weeks but take six by sea to a warehouse in another region — yet SKU.io applied a single lead time to every destination, so one of those reorder recommendations was always built on the wrong number. <strong>Per-warehouse lead times</strong> let you set a default lead time on a supplier and then override it for individual warehouses, and demand planning automatically uses the right one for each destination you forecast.</p>
<p><strong>✨ What this means for you:</strong></p>
<ul>
<li class="">Add an <strong>Advanced lead times</strong> override on any supplier — a specific number of days for a specific warehouse — right on its Purchasing settings.</li>
<li class="">Warehouses you don't override simply <strong>inherit the supplier's default</strong> lead time, so you only configure the exceptions.</li>
<li class="">Demand planning and reorder suggestions use the <strong>lead time for the destination warehouse you're forecasting</strong> — so multi-region and multi-warehouse buys stop sharing one blended (and usually wrong) number.</li>
<li class="">Every forecast tells you <strong>which lead time it used</strong> — the supplier's default, a per-warehouse override, or a measured actual from your own receiving history — so the number is always traceable.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="set-lead-times-per-warehouse-right-on-the-supplier">Set lead times per warehouse, right on the supplier<a href="https://www.sku.io/docs/release-notes/2026/07/22/supplier-warehouse-lead-times/#set-lead-times-per-warehouse-right-on-the-supplier" class="hash-link" aria-label="Direct link to Set lead times per warehouse, right on the supplier" title="Direct link to Set lead times per warehouse, right on the supplier" translate="no">​</a></h2>
<p>Open a supplier and go to <strong>Purchasing Defaults</strong>. The <strong>Lead Time</strong> field is the supplier's default — used everywhere unless you say otherwise. Just below it, the new <strong>Advanced lead times</strong> section lets you add an override: pick a warehouse, enter the number of days, and add another for each exception you have. In the example below, this supplier normally takes <strong>14 days</strong>, but reaches the <strong>London Warehouse</strong> in <strong>45</strong>.</p>
<p><img decoding="async" loading="lazy" alt="The supplier&amp;#39;s Purchasing Defaults in edit mode: a default Lead Time of 14 days, and a new Advanced lead times section with a per-warehouse override of 45 days set for the London Warehouse" src="https://www.sku.io/docs/assets/images/advanced-lead-times-911bf82eef0a8176cb3ce66a79c3554f.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="only-configure-the-exceptions">Only configure the exceptions<a href="https://www.sku.io/docs/release-notes/2026/07/22/supplier-warehouse-lead-times/#only-configure-the-exceptions" class="hash-link" aria-label="Direct link to Only configure the exceptions" title="Direct link to Only configure the exceptions" translate="no">​</a></h2>
<p>There's no need to fill in a row for every warehouse. The overrides you set are listed clearly on the supplier, and every other location quietly falls back to the default lead time above — so a vendor that's slower to just one region takes a single line to configure, not a table full of duplicates.</p>
<p><img decoding="async" loading="lazy" alt="The saved supplier settings showing a Lead Time of 14 days and an Advanced lead times line reading &amp;quot;London Warehouse: 45 days&amp;quot;" src="https://www.sku.io/docs/assets/images/per-warehouse-view-940fdd383479db106581d61de60ad9de.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-forecast-uses-the-right-one--and-shows-you-which">The forecast uses the right one — and shows you which<a href="https://www.sku.io/docs/release-notes/2026/07/22/supplier-warehouse-lead-times/#the-forecast-uses-the-right-one--and-shows-you-which" class="hash-link" aria-label="Direct link to The forecast uses the right one — and shows you which" title="Direct link to The forecast uses the right one — and shows you which" translate="no">​</a></h2>
<p>When you build a demand-planning forecast with a <strong>destination warehouse</strong> selected, SKU.io resolves the lead time for <em>that</em> warehouse: a per-warehouse override wins first, then a measured actual learned from your own purchase-order history, then the supplier's default. Because each destination now plans on its own real lead time, a US buy and a UK buy for the same vendor no longer share one figure — and the <strong>Lead</strong> column on every line tells you exactly which source drove the number, so a longer overseas lead time is never a mystery.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-to-find-it">Where to find it<a href="https://www.sku.io/docs/release-notes/2026/07/22/supplier-warehouse-lead-times/#where-to-find-it" class="hash-link" aria-label="Direct link to Where to find it" title="Direct link to Where to find it" translate="no">​</a></h2>
<ul>
<li class=""><strong>Set the overrides:</strong> open <strong>Contacts → Suppliers</strong>, choose a supplier, then <strong>Settings → Purchasing Defaults</strong>, and add rows under <strong>Advanced lead times</strong>.</li>
<li class=""><strong>See it applied:</strong> open <strong>Inventory → Demand Planning</strong>, build a forecast with a <strong>destination warehouse</strong> selected, and check the <strong>Lead</strong> column — hover it to see which lead time the forecast used for that location.</li>
</ul>]]></content>
        <author>
            <name>SKU.io Product Team</name>
            <uri>https://sku.io</uri>
        </author>
        <category label="Major Feature" term="Major Feature"/>
        <category label="New" term="New"/>
        <category label="Purchasing" term="Purchasing"/>
        <category label="Inventory" term="Inventory"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Forecast confidence — know which reorder numbers to trust, and prove why]]></title>
        <id>https://www.sku.io/docs/release-notes/2026/07/21/forecast-confidence/</id>
        <link href="https://www.sku.io/docs/release-notes/2026/07/21/forecast-confidence/"/>
        <updated>2026-07-21T18:30:00.000Z</updated>
        <summary type="html"><![CDATA[Every demand-planning recommendation now shows a confidence level and a likely range, explains the number in plain English, and exports the full audit trail.]]></summary>
        <content type="html"><![CDATA[<p>Your demand-planning forecast has always given you a reorder quantity — but not a way to tell whether that number was built on two years of steady sales or two days of noise. A brand-new SKU with almost no history looked exactly as authoritative as a proven bestseller, and once you exported the results, the reasoning behind each number disappeared. <strong>Forecast confidence</strong> fixes that: every recommendation now carries a <strong>confidence level</strong>, a <strong>likely range</strong> around the quantity, and a plain-English explanation of how it was calculated — right in the results table, in the calculation detail, and in the export you hand to finance.</p>
<p><strong>✨ What this means for you:</strong></p>
<ul>
<li class="">Every forecast line shows a <strong>confidence tier</strong> — High, Medium, Low, or New — so you can see at a glance which recommendations to trust and which to review.</li>
<li class="">A <strong>likely range</strong> sits under each quantity (for example, <em>158–194</em>), so you see the uncertainty, not just a single point number.</li>
<li class="">Brand-new and thin-history products are flagged <strong>New</strong> instead of quietly emitting a confident-looking figure you can't rely on.</li>
<li class="">The calculation detail explains the score — the <strong>drivers</strong> behind it, plain-English <strong>reasons</strong>, and a <strong>suggested fix</strong> when confidence is low.</li>
<li class="">A one-line <strong>rationale</strong> puts the whole calculation in words anyone can read — no formula-decoding required.</li>
<li class="">The <strong>export now matches what you see on screen</strong> — confidence, the likely range, the input sources, and the rationale all download to CSV or Excel for a complete, defensible audit trail.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="see-which-numbers-to-trust--at-a-glance">See which numbers to trust — at a glance<a href="https://www.sku.io/docs/release-notes/2026/07/21/forecast-confidence/#see-which-numbers-to-trust--at-a-glance" class="hash-link" aria-label="Direct link to See which numbers to trust — at a glance" title="Direct link to See which numbers to trust — at a glance" translate="no">​</a></h2>
<p>Build a forecast and each line now has a <strong>Conf</strong> column. A colored chip tells you the confidence tier for that recommendation, and just below the recommended quantity you'll see the likely range the forecast expects demand to fall within. A steady, well-established product reads <strong>Medium</strong> or <strong>High</strong>; an intermittent seller with sparse history reads <strong>Low</strong>; a product with almost no sales in the window reads <strong>New</strong> — so a thin-data guess never masquerades as a sure thing.</p>
<p><img decoding="async" loading="lazy" alt="The demand-planning results table with a new Conf column showing Medium and Low confidence chips, and a likely-range figure under each recommended quantity" src="https://www.sku.io/docs/assets/images/results-0c6a85c20a2c404b6de9490781242e87.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="understand-the-why--and-what-to-do-about-it">Understand the <em>why</em> — and what to do about it<a href="https://www.sku.io/docs/release-notes/2026/07/21/forecast-confidence/#understand-the-why--and-what-to-do-about-it" class="hash-link" aria-label="Direct link to understand-the-why--and-what-to-do-about-it" title="Direct link to understand-the-why--and-what-to-do-about-it" translate="no">​</a></h2>
<p>Open any line's calculation detail and the new <strong>Confidence</strong> section shows exactly how the score was reached. Four drivers are laid out plainly — how much sales <strong>history</strong> the product has, how <strong>densely</strong> it actually sold, how <strong>variable</strong> demand is day to day, and how <strong>recently</strong> it last sold — each marked good or flagged. Below that, a short <strong>Why</strong> explains the tier in one or two sentences, and <strong>Suggested fixes</strong> point you at the next step (for example, <em>link a predecessor product</em> or <em>extend the sales window</em>). The likely range is stated as a service level, and a plain-language rationale summarizes the whole thing: <em>"Ordering 176: 31 days of history at 4/day, 14-day lead time… Confidence Medium… Likely range 158–194 at 90% service level."</em></p>
<p><img decoding="async" loading="lazy" alt="The calculation detail drawer showing the Confidence section: a Medium tier with a likely range, four drivers with statuses, a plain-English &amp;quot;Why&amp;quot;, and suggested fixes" src="https://www.sku.io/docs/assets/images/confidence-drawer-dfcaa49871add65d357da99500f830dd.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="export-the-whole-story">Export the whole story<a href="https://www.sku.io/docs/release-notes/2026/07/21/forecast-confidence/#export-the-whole-story" class="hash-link" aria-label="Direct link to Export the whole story" title="Direct link to Export the whole story" translate="no">​</a></h2>
<p>When you export the forecast, a new <strong>Detail</strong> section lets you choose exactly how much of the calculation to include. Keep <strong>calculation details</strong> and <strong>confidence &amp; rationale</strong> switched on and the download carries everything you see in the app — the confidence tier and score, the likely range, the input sources, and the plain-language rationale for every line. The file you hand to finance is now a complete, self-explanatory record of how each reorder number was reached.</p>
<p><img decoding="async" loading="lazy" alt="The Export Forecast Results dialog with a new Detail section offering &amp;quot;Include calculation details&amp;quot;, &amp;quot;Include sales history&amp;quot;, and &amp;quot;Include confidence &amp;amp; rationale&amp;quot; toggles" src="https://www.sku.io/docs/assets/images/export-da7af0ac7dac865740f0536c8af878c8.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-to-find-it">Where to find it<a href="https://www.sku.io/docs/release-notes/2026/07/21/forecast-confidence/#where-to-find-it" class="hash-link" aria-label="Direct link to Where to find it" title="Direct link to Where to find it" translate="no">​</a></h2>
<ul>
<li class=""><strong>See it on your forecast:</strong> open <strong>Inventory → Demand Planning</strong>, choose your suppliers, and click <strong>Build Forecast</strong> — the <strong>Conf</strong> column and the likely-range figures appear on every line.</li>
<li class=""><strong>Dig into a number:</strong> click the <strong>calculator icon</strong> on any row to open the calculation detail, then read the <strong>Confidence</strong> section, the drivers, and the rationale.</li>
<li class=""><strong>Take it with you:</strong> click <strong>Export</strong> (top right) and, under <strong>Detail</strong>, keep <strong>Include confidence &amp; rationale</strong> switched on before downloading your CSV or Excel file.</li>
</ul>]]></content>
        <author>
            <name>SKU.io Product Team</name>
            <uri>https://sku.io</uri>
        </author>
        <category label="Major Feature" term="Major Feature"/>
        <category label="New" term="New"/>
        <category label="Inventory" term="Inventory"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Recipe History — know what's inside every bundle and kit, on any date]]></title>
        <id>https://www.sku.io/docs/release-notes/2026/07/21/recipe-history/</id>
        <link href="https://www.sku.io/docs/release-notes/2026/07/21/recipe-history/"/>
        <updated>2026-07-21T15:30:00.000Z</updated>
        <summary type="html"><![CDATA[See what any bundle or kit contained on any past date, schedule a recipe change for the future without touching today's, and correct a past recipe when something was recorded wrong.]]></summary>
        <content type="html"><![CDATA[<p>You tweak a kit's recipe — swap a component, bump a quantity — and suddenly your history and your forecasts look different, as if the previous version never existed. Worse, you can't answer a simple question: <em>what was actually in this bundle back in the spring?</em> Until now, a bundle or kit had exactly one recipe — whatever it happens to be right now. <strong>Recipe History</strong> changes that. Every bundle and kit now keeps a full, dated history of its recipe, so you can see what it contained on any date, edit it without rewriting the past, schedule a change ahead of time, and correct a past recipe when something was recorded wrong.</p>
<p><strong>✨ What this means for you:</strong></p>
<ul>
<li class=""><strong>A full timeline of every recipe change</strong> — every version of a bundle or kit's recipe, with what changed, when, and who made it.</li>
<li class=""><strong>See the recipe as of any date</strong> — pick a date and SKU.io shows exactly what the product contained then.</li>
<li class=""><strong>Editing no longer rewrites the past</strong> — a change applies from today forward, so last quarter's records stay exactly as they were.</li>
<li class=""><strong>Schedule a change ahead of time</strong> — set a new recipe to take effect on a future date; today's recipe stays live until then, then switches over automatically.</li>
<li class=""><strong>Correct the past when you need to</strong> — fix a recipe that was recorded wrong for a stretch of time, clearly flagged as a correction, and bring the affected orders back in line.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-full-history-of-every-recipe">A full history of every recipe<a href="https://www.sku.io/docs/release-notes/2026/07/21/recipe-history/#a-full-history-of-every-recipe" class="hash-link" aria-label="Direct link to A full history of every recipe" title="Direct link to A full history of every recipe" translate="no">​</a></h2>
<p>Every bundle and kit now has a <strong>Composition</strong> tab that shows its recipe as a timeline. Each entry is a dated version — active now, superseded, scheduled for later, or a correction — with a plain-language note of what changed and who made it. Alongside it, the <strong>Effective Recipe</strong> panel shows exactly what's in the product today. No more guessing whether the recipe you're looking at is the one that was in effect last season.</p>
<p><img decoding="async" loading="lazy" alt="The Composition tab for a kit, showing a Revision History timeline of dated recipe versions on the left and the current Effective Recipe on the right" src="https://www.sku.io/docs/assets/images/composition-timeline-a3a4f718843ebb75a44e7c0db7d910ad.png" width="1680" height="1000" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="see-the-recipe-as-of-any-date">See the recipe as of any date<a href="https://www.sku.io/docs/release-notes/2026/07/21/recipe-history/#see-the-recipe-as-of-any-date" class="hash-link" aria-label="Direct link to See the recipe as of any date" title="Direct link to See the recipe as of any date" translate="no">​</a></h2>
<p>Set the <strong>As of</strong> date and the Effective Recipe updates to show what the product contained on that day. A kit that ships with three components today might have had two last summer — and now that's a single click to confirm, not an archaeology project. Because the history is real, a recipe you edit today never changes what the product looked like on an earlier date.</p>
<p><img decoding="async" loading="lazy" alt="The Effective Recipe panel resolved as of a past date, showing the two components the kit contained then — before a later component was added" src="https://www.sku.io/docs/assets/images/as-of-viewer-a67465afcfc160639edcf3fb7d96142a.png" width="1680" height="1000" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="schedule-a-change-ahead-of-time">Schedule a change ahead of time<a href="https://www.sku.io/docs/release-notes/2026/07/21/recipe-history/#schedule-a-change-ahead-of-time" class="hash-link" aria-label="Direct link to Schedule a change ahead of time" title="Direct link to Schedule a change ahead of time" translate="no">​</a></h2>
<p>Planning a formulation update or a seasonal edition? Open <strong>New recipe change</strong>, adjust the components, and set the <strong>effective date</strong> in the future. SKU.io schedules it: the live recipe stays exactly as it is until that day arrives, then the new one takes over on its own. You can line up a change weeks ahead without it affecting anything you sell today.</p>
<p><img decoding="async" loading="lazy" alt="The New recipe change dialog with a future effective date, showing a &amp;quot;Scheduled — the live recipe stays unchanged until then&amp;quot; confirmation" src="https://www.sku.io/docs/assets/images/schedule-change-2638bd1f8d825653d97d251eff8f4c2b.png" width="1680" height="1000" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="correct-the-past-when-you-need-to">Correct the past when you need to<a href="https://www.sku.io/docs/release-notes/2026/07/21/recipe-history/#correct-the-past-when-you-need-to" class="hash-link" aria-label="Direct link to Correct the past when you need to" title="Direct link to Correct the past when you need to" translate="no">​</a></h2>
<p>Sometimes a recipe was simply recorded wrong for a stretch of time. Set the effective date in the <strong>past</strong> and confirm, and SKU.io files it as a correction — changing only that window's history, and marking it clearly so the change is always attributable. For bundles, you can take it a step further: SKU.io lists every order placed in that window — with each one's status and the exact <strong>before → after</strong> for each component — so you can bring the affected orders in line with the corrected recipe.</p>
<p><img decoding="async" loading="lazy" alt="The affected-orders step after a back-dated bundle correction, listing the orders in that window with their status and a before-to-after change for each component" src="https://www.sku.io/docs/assets/images/rewrite-orders-993b048272b3d655a9997988ac83a216.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-to-find-it">Where to find it<a href="https://www.sku.io/docs/release-notes/2026/07/21/recipe-history/#where-to-find-it" class="hash-link" aria-label="Direct link to Where to find it" title="Direct link to Where to find it" translate="no">​</a></h2>
<p>Open any <strong>bundle</strong> or <strong>kit</strong> product and select the <strong>Composition</strong> tab. Your product's current recipe is on the right; its full history is on the left; and <strong>New recipe change</strong> lets you edit it now, schedule it for later, or correct it in the past.</p>]]></content>
        <author>
            <name>SKU.io Product Team</name>
            <uri>https://sku.io</uri>
        </author>
        <category label="Major Feature" term="Major Feature"/>
        <category label="New" term="New"/>
        <category label="Inventory" term="Inventory"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Drop-ship automation — hands-off supplier fulfillment that actually routes]]></title>
        <id>https://www.sku.io/docs/release-notes/2026/07/21/drop-ship-automation/</id>
        <link href="https://www.sku.io/docs/release-notes/2026/07/21/drop-ship-automation/"/>
        <updated>2026-07-21T08:45:00.000Z</updated>
        <summary type="html"><![CDATA[Out-of-stock orders now auto-route to your drop-ship supplier, create and send the purchase order for you, and show exactly where each shipment stands.]]></summary>
        <content type="html"><![CDATA[<p>Drop-shipping should be the easiest kind of fulfillment — your supplier ships straight to the customer and you never touch the stock. In practice, an out-of-stock order would quietly backorder against your own warehouse instead of routing to the supplier, and when it <em>didn't</em> drop-ship there was no single place to see why. <strong>Drop-ship automation</strong> brings the whole flow together: a <strong>Drop-ship Status</strong> panel that shows exactly why an order will (or won't) route to a supplier, automatic routing of eligible out-of-stock orders, a purchase order created and sent on your behalf, and a clear view of whether that PO actually reached the supplier. No more guessing, no more silent backorders.</p>
<p><strong>✨ What this means for you:</strong></p>
<ul>
<li class="">A <strong>Drop-ship Status</strong> checklist tells you at a glance whether a product will drop-ship — and, if not, exactly <strong>what's missing</strong> — so you never wonder why an order backordered.</li>
<li class="">Out-of-stock orders for eligible drop-ship products <strong>route to your supplier automatically</strong> — no manual warehouse assignment.</li>
<li class="">The supplier <strong>purchase order is created and sent for you</strong>, either the moment the order is placed or batched at times you choose.</li>
<li class="">You can see whether a drop-ship PO has been <strong>sent to the supplier</strong> right on the order — and the fulfillment step reads <strong>"Mark Shipped,"</strong> so it's clear the supplier, not your warehouse, is doing the shipping.</li>
<li class="">One clear place to configure drop-ship on a supplier, with a <strong>per-supplier stock setting</strong> instead of a hidden fixed number.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="see-exactly-why-an-order-will--or-wont--drop-ship">See exactly why an order will — or won't — drop-ship<a href="https://www.sku.io/docs/release-notes/2026/07/21/drop-ship-automation/#see-exactly-why-an-order-will--or-wont--drop-ship" class="hash-link" aria-label="Direct link to See exactly why an order will — or won't — drop-ship" title="Direct link to See exactly why an order will — or won't — drop-ship" translate="no">​</a></h2>
<p>Drop-shipping is deliberately explicit: an order only routes to a supplier when the product, the supplier link, the supplier's warehouse and its stock feed are all in place, so nothing is ever sent to a supplier by accident. The new <strong>Drop-ship Status</strong> panel makes those requirements legible in one spot. Open a supplier's product and it shows an <strong>Eligible / Not eligible</strong> badge and a checklist of every requirement, each ticked green or flagged, with anything <strong>missing</strong> called out so you know precisely what to fix.</p>
<p><img decoding="async" loading="lazy" alt="The Drop-ship Status panel on a supplier product, showing an &amp;quot;Eligible&amp;quot; badge and a green checklist: supplier linked to product, link is drop-ship capable, product is drop-shippable, supplier warehouse enabled, supplier stock feed" src="https://www.sku.io/docs/assets/images/dropship-status-panel-d95e76b81d57378fac7840043d8eb615.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="route-out-of-stock-orders-to-your-supplier--automatically">Route out-of-stock orders to your supplier — automatically<a href="https://www.sku.io/docs/release-notes/2026/07/21/drop-ship-automation/#route-out-of-stock-orders-to-your-supplier--automatically" class="hash-link" aria-label="Direct link to Route out-of-stock orders to your supplier — automatically" title="Direct link to Route out-of-stock orders to your supplier — automatically" translate="no">​</a></h2>
<p>Turn on <strong>Enable drop-ship auto-routing</strong> and your drop-ship supplier becomes a stop in your warehouse priority list — drag it wherever it belongs. When an order can't be filled from your own stock, SKU.io routes the eligible lines to that supplier instead of backordering them against your primary warehouse.</p>
<p>You stay in control: a line only ever drop-ships when the product, the supplier, and the supplier's warehouse are all opted in — so nothing gets sent to a supplier by accident.</p>
<p><img decoding="async" loading="lazy" alt="Warehouse settings with a drop-ship auto-routing toggle and the drop-ship supplier pinned in the warehouse priority list" src="https://www.sku.io/docs/assets/images/warehouse-priority-522fd73dd99ae0641888e096c0565163.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="set-up-drop-ship-in-one-place--and-choose-when-pos-go-out">Set up drop-ship in one place — and choose when POs go out<a href="https://www.sku.io/docs/release-notes/2026/07/21/drop-ship-automation/#set-up-drop-ship-in-one-place--and-choose-when-pos-go-out" class="hash-link" aria-label="Direct link to Set up drop-ship in one place — and choose when POs go out" title="Direct link to Set up drop-ship in one place — and choose when POs go out" translate="no">​</a></h2>
<p>Every supplier now has a dedicated <strong>Dropship</strong> section. Switch on <strong>Automate Dropship Fulfillment</strong> to create the purchase order automatically when an order routes to that supplier, and <strong>Automate Dropship PO Submission</strong> to send it to them.</p>
<p>You decide the timing. <strong>Submit immediately</strong> sends each PO to the supplier the moment it's created. <strong>Batch on a schedule</strong> holds new POs and sends them together at the times you set — handy when a supplier prefers one consolidated order a day.</p>
<p><img decoding="async" loading="lazy" alt="The supplier Dropship settings section with automate-fulfillment and automate-submission toggles and an immediate-vs-batch choice" src="https://www.sku.io/docs/assets/images/supplier-dropship-settings-fe6d006a4348877663469164a21dfa47.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="always-know-where-the-order-stands">Always know where the order stands<a href="https://www.sku.io/docs/release-notes/2026/07/21/drop-ship-automation/#always-know-where-the-order-stands" class="hash-link" aria-label="Direct link to Always know where the order stands" title="Direct link to Always know where the order stands" translate="no">​</a></h2>
<p>On an order's <strong>Fulfillment</strong> view, a drop-ship line clearly shows its supplier purchase order and whether it's been <strong>sent</strong>. Because the supplier is doing the shipping, the action reads <strong>Mark Shipped</strong> rather than a generic "fulfill" — so it's obvious what's happening and who's shipping.</p>
<p>And if a supplier is missing a purchase-order email, SKU.io flags it up front — on the supplier and on the PO — instead of silently failing to send, so a drop-ship order never sits waiting on a notification that was never going to arrive.</p>
<p><img decoding="async" loading="lazy" alt="A drop-ship fulfillment card showing the linked supplier PO marked &amp;quot;sent&amp;quot; and a &amp;quot;Mark Shipped&amp;quot; action" src="https://www.sku.io/docs/assets/images/fulfillment-mark-shipped-443b57850c89c8a27f37fbc916f23d95.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-to-find-it">Where to find it<a href="https://www.sku.io/docs/release-notes/2026/07/21/drop-ship-automation/#where-to-find-it" class="hash-link" aria-label="Direct link to Where to find it" title="Direct link to Where to find it" translate="no">​</a></h2>
<ul>
<li class=""><strong>Check what's needed (start here):</strong> open the supplier's product under <strong>Contacts → Suppliers → <em>(your supplier)</em> → Products</strong> — the <strong>Drop-ship Status</strong> panel shows the Eligible / Not eligible badge and ticks off each requirement, so you can see at a glance what's set and what's still missing.</li>
<li class=""><strong>Mark a product drop-shippable for a supplier:</strong> on that same supplier-product page, set the link's <strong>Drop-ship / Always</strong> option (this is the master switch — the product's own drop-ship flag and the supplier warehouse must also be enabled, and the status panel tells you if either isn't).</li>
<li class=""><strong>Turn on auto-routing:</strong> <strong>Settings → Fulfillment → Warehouses → Enable drop-ship auto-routing</strong>, then order your <strong>Warehouse Priority</strong> list.</li>
<li class=""><strong>Configure a supplier's automation:</strong> <strong>Contacts → Suppliers → <em>(your supplier)</em> → Settings → Dropship</strong> — automate fulfillment, automate submission, and choose immediate vs. batched sending.</li>
<li class=""><strong>Track an order:</strong> open any drop-ship sales order and switch to the <strong>Fulfillment</strong> tab.</li>
</ul>]]></content>
        <author>
            <name>SKU.io Product Team</name>
            <uri>https://sku.io</uri>
        </author>
        <category label="Major Feature" term="Major Feature"/>
        <category label="New" term="New"/>
        <category label="Purchasing" term="Purchasing"/>
        <category label="Fulfillment" term="Fulfillment"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Serial Number Tracking — full traceability, unit by unit]]></title>
        <id>https://www.sku.io/docs/release-notes/2026/07/21/serial-number-tracking/</id>
        <link href="https://www.sku.io/docs/release-notes/2026/07/21/serial-number-tracking/"/>
        <updated>2026-07-21T02:40:00.000Z</updated>
        <summary type="html"><![CDATA[Track individual serial numbers end to end — capture them at receipt, pick the exact units at fulfillment, print them on your documents, and trace any unit's full history.]]></summary>
        <content type="html"><![CDATA[<p>If you sell regulated, high-value, or warranty-backed goods — electronics, medical devices, cosmetics, anything with a recall or authenticity requirement — "how many do we have" was never enough. You needed to know <em>which one</em>, and where it went. Until now SKU.io tracked quantities but not the individual units behind them. <strong>Serial Number Tracking</strong> closes that gap — and now follows each unit end to end: opt in per product, capture a serial as stock arrives, choose the exact units when you fulfill, print them on your pick lists and packing slips, and trace any serial's full history.</p>
<p><strong>✨ What this means for you:</strong></p>
<ul>
<li class=""><strong>Opt in per product</strong> — enable serial tracking only where you need it, so the rest of your catalog stays simple.</li>
<li class=""><strong>Capture a serial for every unit</strong> as you receive stock — type, scan, or paste in bulk, with automatic uniqueness checks.</li>
<li class=""><strong>Choose the exact units at fulfillment</strong> — SKU.io suggests the oldest-received serials first and won't let you ship until every unit is confirmed.</li>
<li class=""><strong>See serials on your documents</strong> — pick lists and packing slips list the exact units to grab, each with a check-off box.</li>
<li class=""><strong>Trace any unit end to end</strong> — search by serial, follow its full Received → Shipped timeline, and quarantine a unit in one click when it has to come off the shelf.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="turn-it-on-only-where-you-need-it">Turn it on only where you need it<a href="https://www.sku.io/docs/release-notes/2026/07/21/serial-number-tracking/#turn-it-on-only-where-you-need-it" class="hash-link" aria-label="Direct link to Turn it on only where you need it" title="Direct link to Turn it on only where you need it" translate="no">​</a></h2>
<p>Serial tracking is a two-step opt-in, so it never gets in the way of products that don't need it. First an admin flips the tenant-wide switch in <strong>Settings → Inventory → Inventory Tracking</strong>; then each product that should be serialized gets its own <strong>Track Serials</strong> toggle on its <strong>Serial &amp; Lot Tracking</strong> tab. You also choose how serials are created — type or scan each one yourself, with SKU.io validating uniqueness for you.</p>
<p><img decoding="async" loading="lazy" alt="A product&amp;#39;s Serial &amp;amp; Lot Tracking tab, with Track Serials enabled and the generation mode set to manual entry with automatic uniqueness validation" src="https://www.sku.io/docs/assets/images/product-tracking-toggle-9bdaec59c0e46784ef4cc1005530173e.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="capture-serials-as-stock-comes-in">Capture serials as stock comes in<a href="https://www.sku.io/docs/release-notes/2026/07/21/serial-number-tracking/#capture-serials-as-stock-comes-in" class="hash-link" aria-label="Direct link to Capture serials as stock comes in" title="Direct link to Capture serials as stock comes in" translate="no">​</a></h2>
<p>Once a product is serialized, receiving stock asks for the detail that matters. Add inventory as usual and a <strong>Serial Numbers</strong> field appears, keeping a running count against the quantity — "3 of 3" — so you can't commit a receipt that's missing a unit. Scan them one at a time, type them, or paste a whole list at once; each serial becomes a chip you can review and remove before you commit.</p>
<p><img decoding="async" loading="lazy" alt="The Adjust Inventory dialog receiving three units of a serialized product, with all three serial numbers captured and a 3-of-3 counter" src="https://www.sku.io/docs/assets/images/serial-capture-79f9d4c24a2e7ed48fafa20234549b61.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="pick-the-exact-units-when-you-fulfill">Pick the exact units when you fulfill<a href="https://www.sku.io/docs/release-notes/2026/07/21/serial-number-tracking/#pick-the-exact-units-when-you-fulfill" class="hash-link" aria-label="Direct link to Pick the exact units when you fulfill" title="Direct link to Pick the exact units when you fulfill" translate="no">​</a></h2>
<p>When you ship a serialized product, SKU.io does the choosing for you — and lets you override. The fulfillment dialog suggests serials <strong>oldest-received-first</strong> and counts them against the quantity ("3 / 3"), so a serialized line can't ship a unit short. Need to send a specific one instead? Remove a suggestion and scan or type the serial you're actually pulling. The units you confirm are the ones recorded as shipped against the order — so the trail from receipt to customer is exact.</p>
<p><img decoding="async" loading="lazy" alt="The Fulfill Items dialog for a serialized product, with three FIFO-suggested serials confirmed and a 3-of-3 validity check" src="https://www.sku.io/docs/assets/images/fulfillment-serial-selection-e1416a255c9fae157daa6df005325b85.png" width="1210" height="800" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="serials-on-your-pick-lists-and-packing-slips">Serials on your pick lists and packing slips<a href="https://www.sku.io/docs/release-notes/2026/07/21/serial-number-tracking/#serials-on-your-pick-lists-and-packing-slips" class="hash-link" aria-label="Direct link to Serials on your pick lists and packing slips" title="Direct link to Serials on your pick lists and packing slips" translate="no">​</a></h2>
<p>Your warehouse paperwork now carries the detail that matters. Pick lists and packing slips print the specific serials for each line — each with a check-off box — so whoever's packing the box grabs exactly the right units and can tick them off as they go. It happens automatically for serialized products; documents for everything else look exactly as they do today.</p>
<p><img decoding="async" loading="lazy" alt="A packing slip line for a serialized product listing its three serial numbers, each with a scan-verify checkbox" src="https://www.sku.io/docs/assets/images/document-serials-cfe4c1d46c5d3fc799487231a3f186f8.png" width="860" height="175" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="trace-every-unit--and-pull-one-when-you-need-to">Trace every unit — and pull one when you need to<a href="https://www.sku.io/docs/release-notes/2026/07/21/serial-number-tracking/#trace-every-unit--and-pull-one-when-you-need-to" class="hash-link" aria-label="Direct link to Trace every unit — and pull one when you need to" title="Direct link to Trace every unit — and pull one when you need to" translate="no">​</a></h2>
<p>Every serial has its own page with a full <strong>Received → Shipped</strong> timeline, linked back to the product, warehouse, and order it moved through — so a warranty claim, a recall, or a "where did this one go?" question is a single lookup, not an investigation. Browse or search the whole list from <strong>Inventory → Serial Numbers</strong>, filter by status, and when a unit has to come off the shelf — damage, inspection, a recall — <strong>quarantine</strong> it in one click to hold it out of stock, then release it back once it's cleared.</p>
<p><img decoding="async" loading="lazy" alt="A serial number&amp;#39;s detail page showing its genealogy timeline — received then shipped — with links to its product, warehouse, and order" src="https://www.sku.io/docs/assets/images/serial-history-f549374257666d869a7e8eef4615c026.png" width="1400" height="360" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-to-find-it">Where to find it<a href="https://www.sku.io/docs/release-notes/2026/07/21/serial-number-tracking/#where-to-find-it" class="hash-link" aria-label="Direct link to Where to find it" title="Direct link to Where to find it" translate="no">​</a></h2>
<p>Switch it on under <strong>Settings → Inventory → Inventory Tracking</strong>, then enable <strong>Track Serials</strong> on any product from its <strong>Serial &amp; Lot Tracking</strong> tab. From there it flows on its own: every receipt captures serials, every fulfillment lets you choose them, and your pick lists and packing slips print them. Look up any unit anytime from <strong>Inventory → Serial Numbers</strong>. Lot and batch numbers work the same way for products that need expiry or batch traceability instead.</p>]]></content>
        <author>
            <name>SKU.io Product Team</name>
            <uri>https://sku.io</uri>
        </author>
        <category label="Major Feature" term="Major Feature"/>
        <category label="New" term="New"/>
        <category label="Inventory" term="Inventory"/>
        <category label="Fulfillment" term="Fulfillment"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[See the Impact Before You Adjust Stock — full visibility and control]]></title>
        <id>https://www.sku.io/docs/release-notes/2026/07/21/inventory-adjustment-impact/</id>
        <link href="https://www.sku.io/docs/release-notes/2026/07/21/inventory-adjustment-impact/"/>
        <updated>2026-07-21T02:10:00.000Z</updated>
        <summary type="html"><![CDATA[When you add or remove inventory, SKU.io now previews exactly which orders it will affect — filling backorders on a receipt, or backordering committed orders on a removal — before you commit.]]></summary>
        <content type="html"><![CDATA[<p>Adjusting stock used to be a leap of faith. When you removed units — for damage, loss, a recount, or a correction — you couldn't see what that stock was already promised to. Take a few units, and a customer's order could quietly slip into backorder with nobody the wiser. Add stock, and you had no idea which waiting orders it would unblock. <strong>Now every inventory adjustment shows its impact before you commit</strong> — the exact orders it will fill or backorder — so nothing happens behind your back.</p>
<p><strong>✨ What this means for you:</strong></p>
<ul>
<li class=""><strong>Removing stock?</strong> See every order that will drop back to backorder — with the customer and quantity — before you confirm.</li>
<li class=""><strong>Adding stock?</strong> See which backordered orders the new units can fill, and <strong>choose</strong> which ones get filled first.</li>
<li class=""><strong>Never stuck when stock is already committed</strong> — you can send the affected orders to backorder, or even <strong>void the shipping label with the carrier</strong> (when it's still eligible) to free the units.</li>
<li class="">A live <strong>On Hand / Available / Allocated</strong> readout on every adjustment, so you always know what's really free to move.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="removing-stock-see-exactly-who-it-affects">Removing stock? See exactly who it affects<a href="https://www.sku.io/docs/release-notes/2026/07/21/inventory-adjustment-impact/#removing-stock-see-exactly-who-it-affects" class="hash-link" aria-label="Direct link to Removing stock? See exactly who it affects" title="Direct link to Removing stock? See exactly who it affects" translate="no">​</a></h2>
<p>Pick a product and choose <strong>Decrease</strong>, and SKU.io shows an <strong>Allocation Demotion Preview</strong>: the specific orders whose stock you're about to reclaim, each with its customer and quantity, ordered so the least-urgent commitments are consumed first. Instead of discovering a backorder after the fact, you see it before you click — and you can dial the quantity down if the impact is more than you intended.</p>
<p><img decoding="async" loading="lazy" alt="The Adjust Inventory dialog in Decrease mode, showing an Allocation Demotion Preview that lists each order — with customer and quantity — whose stock the removal would send back to backorder" src="https://www.sku.io/docs/assets/images/demotion-preview-520d779ad8b22fcd6954653038517569.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="adding-stock-choose-which-orders-it-fills">Adding stock? Choose which orders it fills<a href="https://www.sku.io/docs/release-notes/2026/07/21/inventory-adjustment-impact/#adding-stock-choose-which-orders-it-fills" class="hash-link" aria-label="Direct link to Adding stock? Choose which orders it fills" title="Direct link to Adding stock? Choose which orders it fills" translate="no">​</a></h2>
<p>Switch to <strong>Increase</strong> (or receive against a purchase order) and the same panel flips to an <strong>Allocation Release Preview</strong>: it shows the backordered orders your incoming units can unblock, each with a checkbox. Fill them all, or hand-pick which orders get the stock first — you're in control of where the new inventory lands, right at the moment you add it.</p>
<p><img decoding="async" loading="lazy" alt="The Adjust Inventory dialog in Increase mode, showing an Allocation Release Preview with a checkbox list of backordered orders you can choose to fill from the incoming stock" src="https://www.sku.io/docs/assets/images/release-preview-e3ee1350f376e39f30c5d3ccaa23ab50.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="already-spoken-for-you-still-have-options--not-a-dead-end">Already spoken for? You still have options — not a dead end<a href="https://www.sku.io/docs/release-notes/2026/07/21/inventory-adjustment-impact/#already-spoken-for-you-still-have-options--not-a-dead-end" class="hash-link" aria-label="Direct link to Already spoken for? You still have options — not a dead end" title="Direct link to Already spoken for? You still have options — not a dead end" translate="no">​</a></h2>
<p>Sometimes the stock you're trying to remove is already allocated to orders, so a straight reduction isn't possible. Instead of a hard stop, SKU.io lays out your choices:</p>
<ul>
<li class=""><strong>Reserved-but-not-yet-shipped units</strong> can be sent straight back to backorder — you see exactly which sales orders are affected, and decide whether that trade-off is worth it.</li>
<li class=""><strong>Units already on a printed shipping label</strong> are protected: rather than pulling stock out from under a shipment, SKU.io offers to <strong>void the label with the shipping provider</strong> — when the carrier still allows a cancellation — and return those units to stock. If a label isn't eligible to be voided, you'll be told plainly, so nothing is taken by force and no order gets double-shipped.</li>
</ul>
<p>Either way, when the stock isn't freely available you always have a clear, deliberate path — backorder the order, or void the shipment — chosen by you, with the full consequences in view.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-to-find-it">Where to find it<a href="https://www.sku.io/docs/release-notes/2026/07/21/inventory-adjustment-impact/#where-to-find-it" class="hash-link" aria-label="Direct link to Where to find it" title="Direct link to Where to find it" translate="no">​</a></h2>
<p>It's built into the everyday adjustment flow — no new screen to learn. Go to <strong>Inventory → Adjustments → Add Adjustment</strong>, choose a product and a direction, and the impact preview appears as soon as your change would touch allocated stock. The same visibility follows you into receiving against a purchase order, so goods-in and goods-out both tell you what's about to happen before it does.</p>]]></content>
        <author>
            <name>SKU.io Product Team</name>
            <uri>https://sku.io</uri>
        </author>
        <category label="Major Feature" term="Major Feature"/>
        <category label="New" term="New"/>
        <category label="Inventory" term="Inventory"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Automatic Daily Exchange Rates — current multi-currency, hands-off]]></title>
        <id>https://www.sku.io/docs/release-notes/2026/07/20/exchange-rates/</id>
        <link href="https://www.sku.io/docs/release-notes/2026/07/20/exchange-rates/"/>
        <updated>2026-07-20T06:16:45.000Z</updated>
        <summary type="html"><![CDATA[SKU.io now fetches exchange rates every day and converts every currency to your base currency automatically — with a custom-rate override and a full rate history.]]></summary>
        <content type="html"><![CDATA[<p>If you buy or sell in more than one currency, keeping exchange rates accurate used to be a manual chore — someone had to remember to update the conversion for each currency, and a rate that quietly went stale skewed your margins, costs, and reports. <strong>Automatic Daily Exchange Rates</strong> takes that job off your plate: SKU.io now pulls fresh rates every day and keeps every currency current, converted to <em>your</em> base currency automatically — whatever that base currency is.</p>
<p><strong>✨ What this means for you:</strong></p>
<ul>
<li class="">Exchange rates update <strong>automatically every day</strong> — no more manual entry.</li>
<li class="">Every currency converts to <strong>your</strong> base currency (not just US Dollars), using live cross-rates.</li>
<li class=""><strong>Pin a custom rate</strong> on any currency when you need to — automation leaves it alone.</li>
<li class="">Always know <strong>how fresh</strong> your rates are, and <strong>refresh on demand</strong>.</li>
<li class="">A complete <strong>day-by-day history</strong> of every rate, so you can see how a currency moved over time.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="set-it-and-forget-it">Set it and forget it<a href="https://www.sku.io/docs/release-notes/2026/07/20/exchange-rates/#set-it-and-forget-it" class="hash-link" aria-label="Direct link to Set it and forget it" title="Direct link to Set it and forget it" translate="no">​</a></h2>
<p>The Currencies screen now shows a live conversion for every foreign currency, refreshed daily and converted to your base currency. A green <strong>Auto</strong> chip means that currency's rate is managed for you, and the header tells you exactly when rates were last updated and where they came from.</p>
<p><img decoding="async" loading="lazy" alt="The Currencies screen showing each currency&amp;#39;s live rate, the Auto-update toggle and chip, and the &amp;quot;Rates updated · Open Exchange Rates&amp;quot; status" src="https://www.sku.io/docs/assets/images/rates-5b51dd227e8d2979eb8ea5c9928b12ef.png" width="1600" height="1000" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="keep-a-custom-rate-when-you-need-one">Keep a custom rate when you need one<a href="https://www.sku.io/docs/release-notes/2026/07/20/exchange-rates/#keep-a-custom-rate-when-you-need-one" class="hash-link" aria-label="Direct link to Keep a custom rate when you need one" title="Direct link to Keep a custom rate when you need one" translate="no">​</a></h2>
<p>Automation is the default, but you stay in control. Turn a currency's <strong>Auto-update</strong> toggle off to pin your own rate — the daily refresh will never overwrite it (the Yen above is set manually). Flip it back on and it picks up the live rate again on the next update.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="refresh-on-demand-with-honest-status">Refresh on demand, with honest status<a href="https://www.sku.io/docs/release-notes/2026/07/20/exchange-rates/#refresh-on-demand-with-honest-status" class="hash-link" aria-label="Direct link to Refresh on demand, with honest status" title="Direct link to Refresh on demand, with honest status" translate="no">​</a></h2>
<p>Need the latest numbers right now? Click <strong>Refresh Rates</strong>. And if the rate source is ever unreachable, SKU.io tells you plainly and keeps using your last known rates — it never quietly passes off stale numbers as current.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-history-you-can-look-back-on">A history you can look back on<a href="https://www.sku.io/docs/release-notes/2026/07/20/exchange-rates/#a-history-you-can-look-back-on" class="hash-link" aria-label="Direct link to A history you can look back on" title="Direct link to A history you can look back on" translate="no">​</a></h2>
<p>The new <strong>History</strong> tab is a searchable, sortable table of every currency's rate to your base currency, day by day. Filter by currency or by date range to see exactly how a rate moved over time — handy for reconciling foreign‑currency orders, bills, and payouts.</p>
<p><img decoding="async" loading="lazy" alt="The Exchange Rate History tab: a filterable, sortable table of each currency&amp;#39;s daily rate to the base currency" src="https://www.sku.io/docs/assets/images/history-4bea5e3d5c3c215fb1ef26607935099d.png" width="1600" height="1000" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-to-find-it">Where to find it<a href="https://www.sku.io/docs/release-notes/2026/07/20/exchange-rates/#where-to-find-it" class="hash-link" aria-label="Direct link to Where to find it" title="Direct link to Where to find it" translate="no">​</a></h2>
<p>Head to <strong>Settings → General → Currencies</strong>. The live rates, Auto-update controls, and freshness status are on the <strong>Rates</strong> tab; the day‑by‑day rate history is on the <strong>History</strong> tab — which you can bookmark or open in its own tab.</p>]]></content>
        <author>
            <name>SKU.io Product Team</name>
            <uri>https://sku.io</uri>
        </author>
        <category label="Major Feature" term="Major Feature"/>
        <category label="New" term="New"/>
        <category label="Accounting" term="Accounting"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[eBay Payout Accounting — reconcile every eBay payout to your books in one entry]]></title>
        <id>https://www.sku.io/docs/release-notes/2026/07/19/ebay-payout-accounting/</id>
        <link href="https://www.sku.io/docs/release-notes/2026/07/19/ebay-payout-accounting/"/>
        <updated>2026-07-19T11:12:21.000Z</updated>
        <summary type="html"><![CDATA[Sync eBay Managed Payments payouts into SKU and post one clean, deposit-matched summary per payout to your accounting — split by sales, refunds, and fees.]]></summary>
        <content type="html"><![CDATA[<p>If you sell on eBay, you know the pain of month-end reconciliation. An eBay Managed Payments payout is a single net deposit that quietly bundles your gross sales, refunds, final value fees, ad fees, shipping-label costs, and adjustments — so the number that lands in your bank is <em>none</em> of your revenue figures. Matching it back to your books by hand takes hours, and coding the whole deposit to one income account quietly misstates your revenue, fees, and tax.</p>
<p><strong>eBay Payout Accounting</strong> fixes that. SKU now pulls your eBay Managed Payments payouts, breaks each one into its real components, and posts a single deposit-matched summary to your accounting — one entry that reconciles to your bank deposit to the cent.</p>
<p><strong>✨ What this means for you:</strong></p>
<ul>
<li class=""><strong>One summary per payout, not thousands of lines.</strong> Each eBay deposit becomes a single clean accounting entry that matches your bank feed exactly — reconcile in one click instead of rebuilding it from hundreds of orders.</li>
<li class=""><strong>Every component on the right account.</strong> Sales, refunds, final value fees, ad fees, shipping labels, and charges are each split onto the account you choose — no more lumping the deposit into one bucket.</li>
<li class=""><strong>Sync on your terms.</strong> Pull just the new payouts, a custom date range, or run a full re-sync — whatever you need.</li>
<li class=""><strong>Full drill-down.</strong> See exactly what makes up any payout, right down to the individual transaction lines, all searchable.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sync-your-ebay-payouts">Sync your eBay payouts<a href="https://www.sku.io/docs/release-notes/2026/07/19/ebay-payout-accounting/#sync-your-ebay-payouts" class="hash-link" aria-label="Direct link to Sync your eBay payouts" title="Direct link to Sync your eBay payouts" translate="no">​</a></h2>
<p>Head to the eBay <strong>Finance</strong> area and hit <strong>Sync Payouts</strong>. You choose how much to pull — fetch just what's new since your last sync, re-import from a start date, grab a custom date range, or run a full re-sync. SKU pulls each payout together with its underlying transactions.</p>
<p><img decoding="async" loading="lazy" alt="The Sync Payouts dialog with fetch options: new payouts, from start date, custom date range, or full re-sync" src="https://www.sku.io/docs/assets/images/sync-modal-4a826880b5aa2a98ceae59dd31307a06.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="see-exactly-what-each-payout-is-made-of">See exactly what each payout is made of<a href="https://www.sku.io/docs/release-notes/2026/07/19/ebay-payout-accounting/#see-exactly-what-each-payout-is-made-of" class="hash-link" aria-label="Direct link to See exactly what each payout is made of" title="Direct link to See exactly what each payout is made of" translate="no">​</a></h2>
<p>Open any payout to see its full breakdown — gross sales, refunds, fees, and any charges — alongside the line-level transactions behind it. The summary always ties out to the net deposit, so you can trust the number that hit your bank.</p>
<p><img decoding="async" loading="lazy" alt="An eBay payout detail page showing the summary split and its transaction lines" src="https://www.sku.io/docs/assets/images/payout-detail-6f77bbdefc90c0f9cb94f866b04cdfe0.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="map-each-component-to-your-accounts">Map each component to your accounts<a href="https://www.sku.io/docs/release-notes/2026/07/19/ebay-payout-accounting/#map-each-component-to-your-accounts" class="hash-link" aria-label="Direct link to Map each component to your accounts" title="Direct link to Map each component to your accounts" translate="no">​</a></h2>
<p>Decide once where every part of a payout should land in your chart of accounts. Map sales, refunds, and each fee type to the right nominal codes, set fallback accounts, and choose whether to book eBay revenue per order or as a payout-matched summary. From then on, every payout posts itself correctly.</p>
<p><img decoding="async" loading="lazy" alt="The Payout Mappings screen for assigning eBay charge types to accounts" src="https://www.sku.io/docs/assets/images/mappings-28bc0915b96d73d0007a10a75eae64ab.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="browse-every-payout-and-line">Browse every payout and line<a href="https://www.sku.io/docs/release-notes/2026/07/19/ebay-payout-accounting/#browse-every-payout-and-line" class="hash-link" aria-label="Direct link to Browse every payout and line" title="Direct link to Browse every payout and line" translate="no">​</a></h2>
<p>The Payouts list gives you every eBay deposit at a glance — status, accounting state, net amount, and a quick summary — all filterable and searchable. A dedicated Transactions view lets you drill into the individual lines across payouts whenever you need the detail.</p>
<p><img decoding="async" loading="lazy" alt="The eBay Payouts list showing deposits with status, accounting state, and amounts" src="https://www.sku.io/docs/assets/images/payouts-8d5ed782e461c9933b060b251cf0a13a.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-to-find-it">Where to find it<a href="https://www.sku.io/docs/release-notes/2026/07/19/ebay-payout-accounting/#where-to-find-it" class="hash-link" aria-label="Direct link to Where to find it" title="Direct link to Where to find it" translate="no">​</a></h2>
<p>Open <strong>Integrations → eBay → Finance</strong>. The <strong>Payouts</strong> and <strong>Payout Mappings</strong> tabs are right there — start with <strong>Sync Payouts</strong> to pull your history, then set your mappings once and let every future payout reconcile itself.</p>]]></content>
        <author>
            <name>SKU.io Product Team</name>
            <uri>https://sku.io</uri>
        </author>
        <category label="Major Feature" term="Major Feature"/>
        <category label="New" term="New"/>
        <category label="Accounting" term="Accounting"/>
        <category label="Integrations" term="Integrations"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Your customer page is now an AR command center — see what's owed, chase it, collect it]]></title>
        <id>https://www.sku.io/docs/release-notes/2026/07/18/customer-ar-command-center/</id>
        <link href="https://www.sku.io/docs/release-notes/2026/07/18/customer-ar-command-center/"/>
        <updated>2026-07-18T11:45:00.000Z</updated>
        <summary type="html"><![CDATA[The customer detail page is rebuilt around money owed: outstanding and overdue totals, an aging breakdown, statements, and one-click payment requests.]]></summary>
        <content type="html"><![CDATA[<p>You could always see a customer's orders — but never, in one place, how much
they <em>owed</em> you, how overdue it was, or how to go about collecting it. Chasing
payment meant exporting to a spreadsheet, hand-building a statement, and
sending it from your inbox, all outside SKU.io. <strong>The customer page is now an
accounts-receivable command center</strong> — it opens on money owed, breaks the
balance down by how overdue it is, produces a real statement of account, and
lets you email that statement or a payment request without leaving the page.</p>
<p><strong>✨ What this means for you:</strong></p>
<ul>
<li class=""><strong>Know exactly where a customer stands</strong> — outstanding balance, what's
overdue, open credits and net receivable, right at the top of the page.</li>
<li class=""><strong>See how late it really is</strong> — a current / 1–30 / 31–60 / 61–90 / 90+
aging bar, plus an overdue worklist ordered oldest-first.</li>
<li class=""><strong>A real statement of account</strong> — open-item or activity, as of any date,
ready to view, export to PDF/CSV, or email.</li>
<li class=""><strong>Chase payment in a click</strong> — send the statement or a payment request by
email straight from the customer page, with your credit terms and balance
filled in.</li>
<li class=""><strong>No more spreadsheets</strong> — the whole accounts-receivable workflow now lives
where the customer does.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="money-owed-at-a-glance">Money owed, at a glance<a href="https://www.sku.io/docs/release-notes/2026/07/18/customer-ar-command-center/#money-owed-at-a-glance" class="hash-link" aria-label="Direct link to Money owed, at a glance" title="Direct link to Money owed, at a glance" translate="no">​</a></h2>
<p>The customer page opens on the numbers that matter for collections:
<strong>Outstanding</strong>, <strong>Overdue</strong>, <strong>Open Credits</strong>, <strong>Net Receivable</strong> and the
customer's <strong>credit limit</strong> with headroom remaining. An aging bar splits the
balance into current and past-due buckets, and an overdue worklist lists the
late orders oldest-first — each with a <strong>Request Payment</strong> button right there.</p>
<p><img decoding="async" loading="lazy" alt="The customer AR overview — outstanding, overdue, net receivable and credit-limit tiles above an aging bar and an overdue-orders worklist with per-order Request Payment buttons" src="https://www.sku.io/docs/assets/images/overview-c996d815d475a2e9d5d63bc436fd6e1d.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-real-statement-of-account">A real statement of account<a href="https://www.sku.io/docs/release-notes/2026/07/18/customer-ar-command-center/#a-real-statement-of-account" class="hash-link" aria-label="Direct link to A real statement of account" title="Direct link to A real statement of account" translate="no">​</a></h2>
<p>Open the <strong>Receivables → Statement</strong> view to produce a proper statement — as
<strong>Open items</strong> (every unpaid order and its balance due, aged) or as an
<strong>Activity</strong> statement over a date range. Totals foot to net receivable, credits
are netted in, and you can <strong>export</strong> it to PDF or CSV for your records.</p>
<p><img decoding="async" loading="lazy" alt="The customer statement — open items as of today, each order with its due status and balance, footing to total outstanding, credits available and net receivable, with an aging summary" src="https://www.sku.io/docs/assets/images/statement-198e1b353235b82434235df16c866b37.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="chase-payment-without-leaving-sku">Chase payment without leaving SKU<a href="https://www.sku.io/docs/release-notes/2026/07/18/customer-ar-command-center/#chase-payment-without-leaving-sku" class="hash-link" aria-label="Direct link to Chase payment without leaving SKU" title="Direct link to Chase payment without leaving SKU" translate="no">​</a></h2>
<p>When it's time to collect, hit <strong>Send</strong> — email the statement, or a standalone
<strong>payment request</strong>, straight to the customer. The recipient is pre-filled from
the customer's billing email, and the subject and message support placeholders
like <code>{customer_name}</code>, <code>{total_due}</code> and <code>{payment_instructions}</code> so a
polished, personalized note goes out in seconds.</p>
<p><img decoding="async" loading="lazy" alt="The Send Statement dialog — statement type toggle, recipient pre-filled from the billing email, and optional subject and message fields with customer-name and balance placeholders" src="https://www.sku.io/docs/assets/images/send-statement-535c020c41dea367c5458e1fc5fe6672.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-to-find-it">Where to find it<a href="https://www.sku.io/docs/release-notes/2026/07/18/customer-ar-command-center/#where-to-find-it" class="hash-link" aria-label="Direct link to Where to find it" title="Direct link to Where to find it" translate="no">​</a></h2>
<p>Open any customer under <strong>Contacts → Customers</strong>. The <strong>Overview</strong> tab now
leads with accounts receivable, and the <strong>Receivables</strong> tab holds open orders,
credits, the statement and your sent communications.</p>]]></content>
        <author>
            <name>SKU.io Product Team</name>
            <uri>https://sku.io</uri>
        </author>
        <category label="Major Feature" term="Major Feature"/>
        <category label="New" term="New"/>
        <category label="Accounting" term="Accounting"/>
        <category label="Orders" term="Orders"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Unpaid orders, handled your way — reserve, draft or open, per sales channel]]></title>
        <id>https://www.sku.io/docs/release-notes/2026/07/18/unpaid-orders/</id>
        <link href="https://www.sku.io/docs/release-notes/2026/07/18/unpaid-orders/"/>
        <updated>2026-07-18T11:40:00.000Z</updated>
        <summary type="html"><![CDATA[Orders that arrive unpaid — bank transfer, purchase order, cash on delivery — can now be held as reserved or draft with an auto-expiry, per sales channel and payment method.]]></summary>
        <content type="html"><![CDATA[<p>When a customer checks out with an offline payment method — a bank transfer,
a purchase order, a "pay on delivery" — the order lands in SKU.io <em>unpaid</em>,
yet until now it behaved exactly like an order you'd already been paid for:
it allocated your stock immediately and could sail straight through to
fulfillment. So a wire that might never arrive could quietly tie up inventory
for weeks, and there was no way to say "hold this until the money's in."
<strong>The new Unpaid Orders settings let you decide, per sales channel, exactly
how an unpaid order is handled</strong> — bring it in as a held <em>reserve</em> with an
automatic expiry, park it as a <em>draft</em> for review, or treat it as <em>open</em> and
let it ship — with per-payment-method overrides and control over when it
reaches your accounting software.</p>
<p><strong>✨ What this means for you:</strong></p>
<ul>
<li class=""><strong>Stop unpaid orders from tying up stock</strong> — hold bank-transfer and PO
orders as <em>reserved</em> or <em>draft</em> instead of allocating and shipping them
like paid orders.</li>
<li class=""><strong>Reservations that clean themselves up</strong> — set an expiry (say, 7 days) and
an unpaid reserved order automatically releases its stock if the money
never comes, so availability stays honest across every channel.</li>
<li class=""><strong>Opens itself the moment you're paid</strong> — when payment lands, the order
flips to open and flows to fulfillment on its own.</li>
<li class=""><strong>Down to the payment method</strong> — cash-on-delivery can ship while a bank
transfer waits; set the rule per method, not just per channel.</li>
<li class=""><strong>Keep your ledger clean</strong> — choose whether unpaid orders push to your
accounting software as chase-ready invoices, or stay out until they're paid.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="decide-what-happens-to-an-unpaid-order">Decide what happens to an unpaid order<a href="https://www.sku.io/docs/release-notes/2026/07/18/unpaid-orders/#decide-what-happens-to-an-unpaid-order" class="hash-link" aria-label="Direct link to Decide what happens to an unpaid order" title="Direct link to Decide what happens to an unpaid order" translate="no">​</a></h2>
<p>Each connected store gets one row. Pick how unpaid orders arrive — <strong>Reserve</strong>
(allocate the stock and hold fulfillment), <strong>Draft</strong> (don't allocate until you
approve), or <strong>Open</strong> (treat it like a paid order) — and, for reserved orders,
how many days to hold before the reservation auto-releases. Turn on <strong>Auto-open
on payment</strong> and the order opens itself as soon as the payment is confirmed.</p>
<p><img decoding="async" loading="lazy" alt="The Unpaid Orders settings grid — one row per connected store showing when an unpaid order is imported, the reservation expiry, auto-open on payment, and accounting sync" src="https://www.sku.io/docs/assets/images/settings-grid-8d936052939b24c0502e25effe935126.png" width="1920" height="1080" class="img_ev3q"></p>
<p>These rules override your account-wide "Set unpaid orders as Reserved" setting
for any channel you configure here — and each row tells you whether it's using
its own rule or following the account default, so there's no guessing which
setting is in charge.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="down-to-the-payment-method">Down to the payment method<a href="https://www.sku.io/docs/release-notes/2026/07/18/unpaid-orders/#down-to-the-payment-method" class="hash-link" aria-label="Direct link to Down to the payment method" title="Direct link to Down to the payment method" translate="no">​</a></h2>
<p>Not every unpaid order should be treated the same. A cash-on-delivery order
<em>ships</em> unpaid by definition, while a bank transfer should be held until it
clears. Expand a channel to set an override per payment method — SKU.io
discovers the methods automatically from your imported orders — and decide,
for each, how the order lands and whether its invoice syncs to accounting.</p>
<p><img decoding="async" loading="lazy" alt="The per-method overrides panel — each payment method (bank transfer, cash on delivery, credit card, check) mapped to how its unpaid orders are handled and synced to accounting" src="https://www.sku.io/docs/assets/images/per-method-ce0b7481abac4fd1d35d69caa0e311fb.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="keep-your-accounting-clean">Keep your accounting clean<a href="https://www.sku.io/docs/release-notes/2026/07/18/unpaid-orders/#keep-your-accounting-clean" class="hash-link" aria-label="Direct link to Keep your accounting clean" title="Direct link to Keep your accounting clean" translate="no">​</a></h2>
<p>Unpaid orders and your books are two different questions. For each channel you
can choose to <strong>send unpaid orders as awaiting-payment invoices</strong> — so you can
chase them from Xero or QuickBooks — or <strong>hold them out of accounting until
they're paid</strong>, or simply follow the channel's usual setting. You get the
awaiting-payment invoices you want for collections without cluttering your
ledger with money you may never see.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="works-across-your-channels">Works across your channels<a href="https://www.sku.io/docs/release-notes/2026/07/18/unpaid-orders/#works-across-your-channels" class="hash-link" aria-label="Direct link to Works across your channels" title="Direct link to Works across your channels" translate="no">​</a></h2>
<p>The policy is channel-agnostic. It's available today for <strong>Magento 1, Magento
2, Shopify, and WooCommerce</strong> stores — so the offline-payment orders those
storefronts send you all land the way you intend.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-to-find-it">Where to find it<a href="https://www.sku.io/docs/release-notes/2026/07/18/unpaid-orders/#where-to-find-it" class="hash-link" aria-label="Direct link to Where to find it" title="Direct link to Where to find it" translate="no">​</a></h2>
<p>Go to <strong>Settings → Unpaid Orders</strong>. Edit the row for any connected store, set
how its unpaid orders should be handled, and click <strong>Save</strong> for that channel.
Changes apply to newly imported orders.</p>]]></content>
        <author>
            <name>SKU.io Product Team</name>
            <uri>https://sku.io</uri>
        </author>
        <category label="Major Feature" term="Major Feature"/>
        <category label="New" term="New"/>
        <category label="Orders" term="Orders"/>
        <category label="Integrations" term="Integrations"/>
        <category label="Accounting" term="Accounting"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Overhead costs now shape your Profitability Report — with a full margin ladder]]></title>
        <id>https://www.sku.io/docs/release-notes/2026/07/18/cost-entries-profitability/</id>
        <link href="https://www.sku.io/docs/release-notes/2026/07/18/cost-entries-profitability/"/>
        <updated>2026-07-18T11:17:13.000Z</updated>
        <summary type="html"><![CDATA[The marketing, fees and overhead you record as cost entries now flow into the Profitability Report, turning it into a full margin ladder from gross profit down to operating profit.]]></summary>
        <content type="html"><![CDATA[<p>You went to the trouble of entering your marketing spend, 3PL fees, software
subscriptions and Amazon storage costs, and allocating them to the right
products and brands — but your Profitability Report acted like none of it
existed. It stopped at gross profit, so a brand that looked healthy on paper
could be underwater once its share of overhead landed. <strong>The Profitability
Report now includes the cost entries you allocate</strong> — every marketing
campaign, fee and overhead cost folds into the report as a distinct,
auditable cost line, and the bottom line becomes a full <strong>margin ladder</strong>:
Revenue → Gross Profit → <strong>Contribution Margin</strong> → <strong>Operating Profit</strong>.</p>
<p><strong>✨ What this means for you:</strong></p>
<ul>
<li class=""><strong>See true profitability, not just gross margin</strong> — your allocated
marketing, fees and overhead are now subtracted right in the report, so
the profit number reflects what you actually keep.</li>
<li class=""><strong>An industry-standard margin ladder</strong> — Gross Profit, Contribution
Margin and Operating Profit are named exactly as your accountant expects,
with the percentages alongside each.</li>
<li class=""><strong>Every number explains itself</strong> — a click shows the exact cost entries
behind any figure, so there are no mystery numbers.</li>
<li class=""><strong>Overhead broken out by type</strong> — see marketing vs advertising vs
software as their own columns, per brand, SKU or supplier.</li>
<li class=""><strong>Compare against last period</strong> — each figure carries a change chip
versus the previous period or prior year.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-margin-ladder-from-revenue-to-operating-profit">A margin ladder, from revenue to operating profit<a href="https://www.sku.io/docs/release-notes/2026/07/18/cost-entries-profitability/#a-margin-ladder-from-revenue-to-operating-profit" class="hash-link" aria-label="Direct link to A margin ladder, from revenue to operating profit" title="Direct link to A margin ladder, from revenue to operating profit" translate="no">​</a></h2>
<p>The summary now reads as a ladder. Start with <strong>Revenue</strong>, subtract COGS to
get <strong>Gross Profit</strong>, subtract your direct and indirect costs to get
<strong>Contribution Margin</strong>, then subtract the overhead you haven't tied to a
specific product to get <strong>Operating Profit</strong> — the company-level bottom
line. Each tile shows the dollars and the margin percentage, and a small
change chip tells you how it moved versus the period before.</p>
<p><img decoding="async" loading="lazy" alt="The Profitability Report summary showing the margin ladder — Revenue, Gross Profit, Contribution Margin and Operating Profit — each with its margin percentage and a period-over-period change chip" src="https://www.sku.io/docs/assets/images/margin-ladder-e17a92e1f2dd75050e72fb48f0547963.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="overhead-broken-out-by-cost-type">Overhead, broken out by cost type<a href="https://www.sku.io/docs/release-notes/2026/07/18/cost-entries-profitability/#overhead-broken-out-by-cost-type" class="hash-link" aria-label="Direct link to Overhead, broken out by cost type" title="Direct link to Overhead, broken out by cost type" translate="no">​</a></h2>
<p>In the Cost Breakdown view, your allocated overhead appears as an <strong>Indirect
Costs</strong> column that folds into total cost and contribution margin. Expand it
and it splits into a column per cost type — Marketing, Amazon Advertising,
Software and any type you've created — for every brand, SKU or supplier.
Costs that can't be tied to a specific row (a brand-wide fee, or a cost
allocated to a product with no sales this period) roll into a clearly
labelled <strong>Non-Product / Unallocated</strong> line, so the totals always add up.</p>
<p><img decoding="async" loading="lazy" alt="The Cost Breakdown table with the Indirect Costs column expanded into per-type columns — Marketing, Amazon Advertising and Software — across each brand, with a Non-Product / Unallocated row and grand total" src="https://www.sku.io/docs/assets/images/cost-breakdown-by-type-137043b0600d73e294975e980f2be2aa.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="click-any-figure-to-see-exactly-where-it-came-from">Click any figure to see exactly where it came from<a href="https://www.sku.io/docs/release-notes/2026/07/18/cost-entries-profitability/#click-any-figure-to-see-exactly-where-it-came-from" class="hash-link" aria-label="Direct link to Click any figure to see exactly where it came from" title="Direct link to Click any figure to see exactly where it came from" translate="no">​</a></h2>
<p>No figure is a black box. Click the indirect cost on any row and you get the
exact cost entries behind it — the campaign or fee, its type, what it was
allocated to, the effective period and the amount — and the list totals to
the cell you clicked. The Operating Profit tile does the same for the
overhead that hasn't been allocated yet, each row linking straight to its
cost entry.</p>
<p><img decoding="async" loading="lazy" alt="A drill-down showing the individual cost entries behind a brand&amp;#39;s indirect costs — description, cost type, allocation target, effective period and amount — totalling to the figure in the report" src="https://www.sku.io/docs/assets/images/cost-drilldown-e8eb72767de20c306416445807dc339a.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="down-to-the-individual-order--and-your-profit-alerts">Down to the individual order — and your profit alerts<a href="https://www.sku.io/docs/release-notes/2026/07/18/cost-entries-profitability/#down-to-the-individual-order--and-your-profit-alerts" class="hash-link" aria-label="Direct link to Down to the individual order — and your profit alerts" title="Direct link to Down to the individual order — and your profit alerts" translate="no">​</a></h2>
<p>The same overhead is prorated down onto individual sales orders, so an
order's Profit tab now shows its <strong>contribution profit</strong> — the order's
profit after its share of allocated overhead — right beneath the usual
profit figure. And if you turn it on in your financial-alert settings,
profit alerts can watch contribution margin instead of raw profit, flagging
orders that only look profitable before overhead is applied.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-to-find-it">Where to find it<a href="https://www.sku.io/docs/release-notes/2026/07/18/cost-entries-profitability/#where-to-find-it" class="hash-link" aria-label="Direct link to Where to find it" title="Direct link to Where to find it" translate="no">​</a></h2>
<p>Open <strong>Insights → Reports → Profitability Report</strong>. Everything is on by
default — pick your date range and dimension and click Generate. Use the
<strong>Include indirect costs</strong> toggle to compare margins before and after
overhead, and the per-order contribution profit shows on any sales order's
<strong>Profit</strong> tab.</p>]]></content>
        <author>
            <name>SKU.io Product Team</name>
            <uri>https://sku.io</uri>
        </author>
        <category label="Major Feature" term="Major Feature"/>
        <category label="New" term="New"/>
        <category label="Reporting" term="Reporting"/>
        <category label="Accounting" term="Accounting"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tracking Categories — see your profit and loss by sales channel]]></title>
        <id>https://www.sku.io/docs/release-notes/2026/07/18/tracking-categories/</id>
        <link href="https://www.sku.io/docs/release-notes/2026/07/18/tracking-categories/"/>
        <updated>2026-07-18T03:27:09.000Z</updated>
        <summary type="html"><![CDATA[Tag the invoices and cost-of-goods journals SKU.io sends to Xero and QuickBooks with a tracking category or class per sales channel, so you can report profit and loss by channel.]]></summary>
        <content type="html"><![CDATA[<p>If you sell on more than one channel, your Xero or QuickBooks profit and
loss report probably can't tell you which channel actually makes money —
Amazon revenue, Shopify revenue and your wholesale orders all land in the
same sales and cost-of-goods accounts. Until now the only way to split
them out was to create a separate account for every channel, which bloats
your chart of accounts and makes month-end a chore. <strong>SKU.io now supports
Tracking Categories</strong> — map each of your sales channels to a Xero tracking
category option (or a QuickBooks class), and every invoice, credit and
cost-of-goods journal we post carries that tag. Run your provider's normal
P&amp;L-by-tracking-category report and your numbers are already split by
channel — no extra accounts required.</p>
<p><strong>✨ What this means for you:</strong></p>
<ul>
<li class=""><strong>Profit and loss by channel</strong> — see revenue <em>and</em> margin for Amazon
vs Shopify vs wholesale in your own Xero or QuickBooks reports, using
the tags SKU.io attaches automatically.</li>
<li class=""><strong>COGS by channel, not just revenue</strong> — the cost-of-goods journals
SKU.io generates from your real fulfilment costs carry the channel tag
too, so you get true gross margin per channel — not just top-line sales.</li>
<li class=""><strong>No account proliferation</strong> — one tracking category with an option per
channel replaces a whole column of duplicate sales and COGS accounts.</li>
<li class=""><strong>Set it once</strong> — map each channel to an option in a single settings
screen; from then on every synced document is tagged for you.</li>
<li class=""><strong>Works with what you already have</strong> — pulls your existing Xero
tracking categories (or QuickBooks classes) so you map to the ones your
accountant already uses.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="map-each-channel-to-a-tracking-category">Map each channel to a tracking category<a href="https://www.sku.io/docs/release-notes/2026/07/18/tracking-categories/#map-each-channel-to-a-tracking-category" class="hash-link" aria-label="Direct link to Map each channel to a tracking category" title="Direct link to Map each channel to a tracking category" translate="no">​</a></h2>
<p>Open the new <strong>Tracking Categories</strong> tab in your accounting settings.
Pick the Xero tracking category you want to segment by — most sellers use
one named "Sales Channel" — and match each of your connected channels to
one of its options. Anything left unmapped is flagged so nothing gets
tagged by accident, and you can set a fallback for channels you haven't
mapped yet.</p>
<p><img decoding="async" loading="lazy" alt="The Tracking Categories settings screen, mapping each sales channel to a Xero tracking category option" src="https://www.sku.io/docs/assets/images/tracking-categories-panel-fc4f8752662117c59e699f1fb7f13aa3.png" width="1920" height="1080" class="img_ev3q"></p>
<p>Choose exactly which documents get tagged — revenue, cost of goods, and
Amazon settlement postings — with a simple set of toggles, so the tagging
matches how you want to read your reports.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="create-options-without-leaving-skuio">Create options without leaving SKU.io<a href="https://www.sku.io/docs/release-notes/2026/07/18/tracking-categories/#create-options-without-leaving-skuio" class="hash-link" aria-label="Direct link to Create options without leaving SKU.io" title="Direct link to Create options without leaving SKU.io" translate="no">​</a></h2>
<p>Missing an option for a channel? You don't have to jump over to Xero and
back. Create the tracking option — or a whole new tracking category —
right from the settings screen, and SKU.io creates it in Xero for you and
maps it in one step. (SKU.io respects Xero's limit of two active tracking
categories, so it'll tell you when you've reached it.)</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="quickbooks-online-too">QuickBooks Online too<a href="https://www.sku.io/docs/release-notes/2026/07/18/tracking-categories/#quickbooks-online-too" class="hash-link" aria-label="Direct link to QuickBooks Online too" title="Direct link to QuickBooks Online too" translate="no">​</a></h2>
<p>On a QuickBooks connection the same screen maps your channels to
<strong>classes</strong> instead of tracking categories, so QuickBooks sellers get the
same profit-and-loss-by-channel view using class tracking.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-to-find-it">Where to find it<a href="https://www.sku.io/docs/release-notes/2026/07/18/tracking-categories/#where-to-find-it" class="hash-link" aria-label="Direct link to Where to find it" title="Direct link to Where to find it" translate="no">​</a></h2>
<p>Go to <strong>Accounting → Settings → Tracking Categories</strong> (it appears once
you've connected Xero or QuickBooks Online). Map your channels, save, and
your next synced invoices and cost-of-goods journals will be tagged.</p>]]></content>
        <author>
            <name>SKU.io Product Team</name>
            <uri>https://sku.io</uri>
        </author>
        <category label="Major Feature" term="Major Feature"/>
        <category label="New" term="New"/>
        <category label="Accounting" term="Accounting"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Shopify Payouts — accounting that matches your bank deposits]]></title>
        <id>https://www.sku.io/docs/release-notes/2026/07/18/shopify-payouts/</id>
        <link href="https://www.sku.io/docs/release-notes/2026/07/18/shopify-payouts/"/>
        <updated>2026-07-18T02:48:34.000Z</updated>
        <summary type="html"><![CDATA[SKU.io now syncs every Shopify Payments payout and posts one summarized accounting entry that matches the bank deposit to the cent — reconciliation in one click instead of hours.]]></summary>
        <content type="html"><![CDATA[<p>The number Shopify deposits into your bank account is never your sales
number. Every payout bundles sales, refunds, processing fees, and
adjustments into a single net amount — so at month end someone has to
reconstruct each deposit from dozens of individual invoices, or worse,
book the whole thing to one income account and quietly misstate revenue,
tax, and fees. <strong>SKU.io now syncs your Shopify Payments payouts</strong> and
can post one summarized accounting entry per payout — sales, refunds,
fees, and adjustments each routed to the right ledger account, with the
net matching your bank deposit to the cent. When the deposit appears in
your bank feed, it reconciles in one click.</p>
<p><strong>✨ What this means for you:</strong></p>
<ul>
<li class=""><strong>Every payout, synced</strong> — each Shopify Payments payout appears in
SKU.io with its status, net amount, and the full breakdown of what
made up the deposit.</li>
<li class=""><strong>Matches the bank to the cent</strong> — the summarized entry always equals
the deposited amount, so bank reconciliation is a match, not a
reconstruction.</li>
<li class=""><strong>Split, never lumped</strong> — sales, refunds, processing fees, and
adjustments each post to the account you choose, keeping revenue,
tax, and expenses accurate.</li>
<li class=""><strong>A clean ledger</strong> — one summary per payout instead of thousands of
per-order lines a month, with per-order posting still available if
that's how you work.</li>
<li class=""><strong>No double counting</strong> — switching between per-order and
payout-matched accounting is guarded, so revenue is only ever
recognized one way.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="see-every-payout-at-a-glance">See every payout at a glance<a href="https://www.sku.io/docs/release-notes/2026/07/18/shopify-payouts/#see-every-payout-at-a-glance" class="hash-link" aria-label="Direct link to See every payout at a glance" title="Direct link to See every payout at a glance" translate="no">​</a></h2>
<p>The new <strong>Finance</strong> area in your Shopify integration lists every payout
with its payout ID, date, status, net amount, and the charges, refunds,
and fees behind it. Filter by payout or accounting status, search by
payout ID, and sort any column — held payouts (still in transit at
Shopify) are clearly marked and never post until they're paid.</p>
<p><img decoding="async" loading="lazy" alt="The Shopify Payouts list showing payout IDs, statuses, net amounts, and accounting states" src="https://www.sku.io/docs/assets/images/payouts-list-14c87d1dba32c7a99a8a6f358fd75217.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="drill-into-any-deposit">Drill into any deposit<a href="https://www.sku.io/docs/release-notes/2026/07/18/shopify-payouts/#drill-into-any-deposit" class="hash-link" aria-label="Direct link to Drill into any deposit" title="Direct link to Drill into any deposit" translate="no">​</a></h2>
<p>Click a payout to open its detail page: the summary split shows exactly
how charges, fees, refunds, and adjustments add up to the deposit, with
a clear confirmation when the numbers balance. Below it, every balance
transaction in the payout is listed line by line, linked back to the
order it came from.</p>
<p><img decoding="async" loading="lazy" alt="A payout detail page with the summary split balancing exactly to the bank deposit" src="https://www.sku.io/docs/assets/images/payout-detail-27608d1632a9ae84c242df0fd141ae99.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="route-every-line-to-the-right-account">Route every line to the right account<a href="https://www.sku.io/docs/release-notes/2026/07/18/shopify-payouts/#route-every-line-to-the-right-account" class="hash-link" aria-label="Direct link to Route every line to the right account" title="Direct link to Route every line to the right account" translate="no">​</a></h2>
<p><strong>Payout Mappings</strong> is where you decide where the money goes. Group
payout line types into invoice and bill documents, map each financial
code to a ledger account, and set fallback accounts so nothing is ever
dropped — unmapped lines are flagged and routed to your fallback
revenue or expense account until you map them.</p>
<p><img decoding="async" loading="lazy" alt="The Payout Mappings screen with mapping groups, account assignments, and finance settings" src="https://www.sku.io/docs/assets/images/payout-mappings-6b0ef727f3368ab9222b450ee55d6e3a.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="choose-how-revenue-posts--safely">Choose how revenue posts — safely<a href="https://www.sku.io/docs/release-notes/2026/07/18/shopify-payouts/#choose-how-revenue-posts--safely" class="hash-link" aria-label="Direct link to Choose how revenue posts — safely" title="Direct link to Choose how revenue posts — safely" translate="no">​</a></h2>
<p>Prefer payout-matched summaries? Flip the accounting sync mode from
<strong>Per Order</strong> to <strong>Per Payout</strong> in the finance settings. Because that
changes how revenue is recognized, SKU.io asks for confirmation first
and explains exactly what will happen — per-order invoices are
suppressed while payout summaries carry your revenue, so nothing is
ever counted twice. A payout accounting start date lets you choose the
exact point the new mode takes effect.</p>
<p><img decoding="async" loading="lazy" alt="The confirmation dialog shown before changing the accounting sync mode" src="https://www.sku.io/docs/assets/images/mode-switch-modal-487f2ed189f305a57aec01e2a594ee03.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-to-find-it">Where to find it<a href="https://www.sku.io/docs/release-notes/2026/07/18/shopify-payouts/#where-to-find-it" class="hash-link" aria-label="Direct link to Where to find it" title="Direct link to Where to find it" translate="no">​</a></h2>
<p>Open <strong>Apps &amp; Integrations → Shopify → Finance</strong>. The <strong>Payouts</strong> tab
lists every synced payout (use <strong>Sync Payouts</strong> to pull the latest from
Shopify), and the <strong>Payout Mappings</strong> tab holds your account mappings
and accounting sync mode. Reconnect your Shopify store once to grant
the new payouts permission, and SKU.io takes it from there.</p>]]></content>
        <author>
            <name>SKU.io Product Team</name>
            <uri>https://sku.io</uri>
        </author>
        <category label="Major Feature" term="Major Feature"/>
        <category label="New" term="New"/>
        <category label="Integrations" term="Integrations"/>
        <category label="Accounting" term="Accounting"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Product Swatches — show colour and pattern, not just words]]></title>
        <id>https://www.sku.io/docs/release-notes/2026/07/18/product-swatches/</id>
        <link href="https://www.sku.io/docs/release-notes/2026/07/18/product-swatches/"/>
        <updated>2026-07-18T02:39:24.000Z</updated>
        <summary type="html"><![CDATA[Give a product attribute's options a colour chip or image, and SKU.io shows real swatches on your variant products and sends them to channels that support them.]]></summary>
        <content type="html"><![CDATA[<p>When a product comes in five colours, "Red", "Blue" and "Green" in a
dropdown tell you almost nothing — is that red a crimson or a brick? And
for anything with a pattern or texture, a word can't describe it at all.
Shoppers pick with their eyes, and so do the marketplaces you list on.
<strong>SKU.io now supports swatches</strong> — give each option of a product
attribute a colour chip or a small image, and that swatch shows up on
your variant products and flows out to the channels that support variant
swatches, like Walmart and Shopify. No more guessing which "Red" is
which.</p>
<p><strong>✨ What this means for you:</strong></p>
<ul>
<li class=""><strong>See the colour, not the word</strong> — every option can carry a hex
colour or an image, rendered as a real swatch chip.</li>
<li class=""><strong>Images for patterns and textures</strong> — a plain colour can't show a
floral print or a wood grain; point an option at an image URL and the
swatch shows the real thing.</li>
<li class=""><strong>Set it once, use it everywhere</strong> — a swatch lives on the option
itself, so every product that uses that option inherits it
automatically.</li>
<li class=""><strong>Flows to your channels</strong> — variant listings carry their per-variant
swatch images to marketplaces that support them, starting with Walmart
and Shopify.</li>
<li class=""><strong>One place to manage variants</strong> — declare which attributes vary
across a product's variations and edit their swatches together, in a
single dialog.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="turn-any-attribute-into-a-swatch">Turn any attribute into a swatch<a href="https://www.sku.io/docs/release-notes/2026/07/18/product-swatches/#turn-any-attribute-into-a-swatch" class="hash-link" aria-label="Direct link to Turn any attribute into a swatch" title="Direct link to Turn any attribute into a swatch" translate="no">​</a></h2>
<p>Every product attribute now has a <strong>Display as</strong> setting. Leave it as a
plain dropdown for descriptive attributes like Size, or switch it to
<strong>Swatch</strong> for anything visual like Colour or Material. Once it's a
swatch, each option gets two optional fields: a hex colour and an image
URL. Enter <code>#E53935</code> for a red chip, or paste an image URL to show a
pattern or texture — the preview updates as you type.</p>
<p><img decoding="async" loading="lazy" alt="Editing a Colour attribute in Settings, with Display-as set to Swatch and a colour and image set for each option" src="https://www.sku.io/docs/assets/images/swatch-editor-d1f7a55a4bd9bb7f53e2a6c7ce7565ee.png" width="1920" height="1080" class="img_ev3q"></p>
<p>You'll find this under <strong>Settings → Products → Attributes</strong> — open an
attribute, tick <em>Has Options</em>, and choose <em>Swatch</em> under <strong>Display as</strong>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="declare-your-variants-and-their-swatches-in-one-place">Declare your variants and their swatches in one place<a href="https://www.sku.io/docs/release-notes/2026/07/18/product-swatches/#declare-your-variants-and-their-swatches-in-one-place" class="hash-link" aria-label="Direct link to Declare your variants and their swatches in one place" title="Direct link to Declare your variants and their swatches in one place" translate="no">​</a></h2>
<p>On a product with variations, the <strong>Variant Axes &amp; Swatches</strong> dialog
does two jobs at once: it declares which attributes actually vary across
the variants (Colour, Size, or both), and it lets you edit that
attribute's swatches right there — no jumping back to Settings.</p>
<p><img decoding="async" loading="lazy" alt="The Variant Axes and Swatches dialog on a variant product, with Colour selected and its Red, Blue and Green swatches editable inline" src="https://www.sku.io/docs/assets/images/variant-axes-swatches-b3beebf3f0c94229e09b5dadb6bb627e.png" width="1920" height="1080" class="img_ev3q"></p>
<p>Open it from a variant product's <strong>Overview</strong> tab — in the <strong>Variations</strong>
panel, click <strong>Attributes to Compare</strong>. Tick the attributes that vary,
adjust their swatches, and hit <strong>Apply</strong>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="real-swatches-on-your-variant-products">Real swatches on your variant products<a href="https://www.sku.io/docs/release-notes/2026/07/18/product-swatches/#real-swatches-on-your-variant-products" class="hash-link" aria-label="Direct link to Real swatches on your variant products" title="Direct link to Real swatches on your variant products" translate="no">​</a></h2>
<p>Because the swatch lives on the option, every variant that selects that
option shows the same chip automatically — nothing to re-enter per child.
When you publish a variant product to a channel that supports variant
swatches, SKU.io sends each variant's swatch image along with it, so your
listing shows shoppers the actual colours and patterns.</p>
<p><img decoding="async" loading="lazy" alt="A variant product overview showing its variations and the Attributes to Compare button" src="https://www.sku.io/docs/assets/images/matrix-product-b207a39b277e2f9f2533e138a140f83e.png" width="1920" height="1080" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="where-to-find-it">Where to find it<a href="https://www.sku.io/docs/release-notes/2026/07/18/product-swatches/#where-to-find-it" class="hash-link" aria-label="Direct link to Where to find it" title="Direct link to Where to find it" translate="no">​</a></h2>
<ul>
<li class=""><strong>Set up swatches:</strong> Settings → Products → Attributes → open an
attribute → <em>Display as: Swatch</em>, then set a colour or image per
option.</li>
<li class=""><strong>Manage a product's variants:</strong> open a variant product → <strong>Overview</strong>
→ <strong>Variations</strong> panel → <strong>Attributes to Compare</strong>.</li>
</ul>]]></content>
        <author>
            <name>SKU.io Product Team</name>
            <uri>https://sku.io</uri>
        </author>
        <category label="Major Feature" term="Major Feature"/>
        <category label="New" term="New"/>
        <category label="Inventory" term="Inventory"/>
        <category label="Integrations" term="Integrations"/>
    </entry>
</feed>