{"id":1680,"date":"2026-03-11T21:48:21","date_gmt":"2026-03-11T20:48:21","guid":{"rendered":"https:\/\/newcraft.dev\/posts\/\/"},"modified":"2026-03-11T21:51:54","modified_gmt":"2026-03-11T20:51:54","slug":"preserve-custom-product-options-in-shopify-b2b-orders","status":"publish","type":"marketing-post","link":"https:\/\/newcraft.dev\/nl\/posts\/preserve-custom-product-options-in-shopify-b2b-orders\/","title":{"rendered":"Preserve Custom Product Options in Shopify B2B Orders"},"content":{"rendered":"\n<p><strong>TL;DR: Custom product options (dimensions, cut sizes, personalization notes) entered by your customers must survive the entire <a href=\"https:\/\/newcraft.dev\/posts\/why-a-b2b-checkout-button-makes-vat-exemption-actually-work\/\">B2B checkout flow<\/a>.<\/strong> If they don&#8217;t, your warehouse gets an order without the specs it needs to fulfill it. This update fixes that gap for Shopify stores using draft-order-based B2B checkout.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>Works with any option app<\/strong> that stores values in Shopify line-item properties, not just VO Product Options.<\/li>\n\n\n<li><strong>Fewer fulfillment errors:<\/strong> custom specs travel from cart to draft order to the admin screen your ops team actually uses.<\/li>\n\n\n<li><strong>Built for B2B:<\/strong> VAT metadata and product option data now coexist cleanly on each line item.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Custom product data disappears during B2B checkout (and nobody notices until fulfillment)<\/h2>\n\n\n\n<p>Here&#8217;s a scenario that plays out more often than merchants realize. A buyer configures a product: height 2400mm, width 960mm, left-hand hinge, white oak finish. They add it to cart. Everything looks correct.<\/p>\n\n\n\n<p>Then they go through a B2B checkout flow. The draft order gets created, payment goes through, and the order lands in Shopify admin. But when the warehouse opens it, the custom dimensions are gone. Just a variant ID, a quantity, and a price.<\/p>\n\n\n\n<p>The product was &#8220;ordered.&#8221; The specs were not.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why line-item properties get dropped in draft-order flows<\/h2>\n\n\n\n<p>Standard Shopify checkout handles line-item properties natively. If a customer fills in a &#8220;Special instructions&#8221; field or selects a custom size, those values stick to the order.<\/p>\n\n\n\n<p>Draft-order-based checkout is different. The app building the draft order has to explicitly read each cart line item&#8217;s <code>properties<\/code> and pass them into the API payload. If the implementation only sends <code>variant_id<\/code>, <code>quantity<\/code>, and <code>price<\/code>, everything else is silently lost.<\/p>\n\n\n\n<p>No error. No warning. The order completes, the customer pays, and the data gap only surfaces when someone on your team tries to build or ship the product.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The real cost of missing product specs on B2B orders<\/h2>\n\n\n\n<p>This is not a cosmetic problem. For stores selling configurable, made-to-measure, or personalized products, missing option data hits margins directly.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>Material waste:<\/strong> wrong cuts from missing dimensions mean scrapped stock.<\/li>\n\n\n<li><strong>Manual follow-up:<\/strong> your team has to email or call the customer to re-confirm what they already entered at checkout.<\/li>\n\n\n<li><strong>Fulfillment delays:<\/strong> orders sit in a queue while someone chases specs that should have been there from the start.<\/li>\n\n\n<li><strong>Lost repeat business:<\/strong> B2B buyers place high-value orders. If the first one requires back-and-forth to get right, they won&#8217;t come back for a second.<\/li>\n\n<\/ul>\n\n\n\n<p>Business customers expect accuracy. One fumbled custom order can cost more than the sale itself.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How the fix works: preserving line-item properties end-to-end<\/h2>\n\n\n\n<p>The approach is straightforward. When creating a draft order from a Shopify cart, the checkout flow now:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>Reads each cart line item&#8217;s <code>properties<\/code> object.<\/li>\n\n\n<li>Normalizes values: trims whitespace, flattens arrays, serializes structured inputs.<\/li>\n\n\n<li>Passes those properties into the corresponding draft-order line item attributes.<\/li>\n\n\n<li>Merges them alongside existing tax and <a href=\"https:\/\/newcraft.dev\/posts\/automatic-vat-validation-shopify\/\">VAT validation<\/a> metadata, so neither set overwrites the other.<\/li>\n\n<\/ol>\n\n\n\n<p>The result: custom dimensions, notes, material choices, and any other line-item property your option app stores will appear on the final order in Shopify admin. Your warehouse sees exactly what the customer entered.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Not limited to VO Product Options<\/h2>\n\n\n\n<p>VO Product Options is one popular app, but this fix works with any product customization tool that writes to Shopify&#8217;s line-item <code>properties<\/code>. That includes apps like Infinite Options, Bold Product Options, and custom-built solutions.<\/p>\n\n\n\n<p>If the data shows up in <code>\/cart.js<\/code> under a line item&#8217;s <code>properties<\/code> key, it can be preserved through the draft-order checkout path.<\/p>\n\n\n\n<p><strong>One caveat:<\/strong> apps that store option data in cart attributes, order notes, or metafields instead of line-item properties use a different data path. Those require explicit mapping and aren&#8217;t covered by this update.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to verify your own store in 5 minutes<\/h2>\n\n\n\n<p>You don&#8217;t need to wait for a customer complaint to find out if your setup has this gap. Here&#8217;s a quick audit:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li><strong>Add a configurable product to cart.<\/strong> Use realistic values: height, width, a note, a dropdown selection. Whatever your customers actually fill in.<\/li>\n\n\n<li><strong>Open <code>\/cart.js<\/code> in your browser.<\/strong> Check the line item&#8217;s <code>properties<\/code> array. All your option values should be listed there.<\/li>\n\n\n<li><strong>Trigger the B2B checkout.<\/strong> Use the same path your buyers use, typically the <a href=\"https:\/\/newcraft.dev\/posts\/how-to-show-tax-exempt-prices-to-b2b-customers-before-checkout-in-shopify\/\">B2B checkout button<\/a> on your storefront.<\/li>\n\n\n<li><strong>Inspect the draft-order payload.<\/strong> In your browser&#8217;s network tab, find the draft-order API call. Confirm each <code>items[]<\/code> entry includes the properties you expect.<\/li>\n\n\n<li><strong>Check the order in Shopify admin.<\/strong> Open the draft order and verify the custom values are visible on each line item.<\/li>\n\n<\/ol>\n\n\n\n<p>If the properties appear in cart but are missing from the draft order, you have a pass-through gap.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Compatibility checklist for custom-product B2B stores<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Option data is present in cart line-item <code>properties<\/code> (not cart attributes or metafields)<\/li>\n\n\n<li>Draft-order creation payload includes line-item properties for each item<\/li>\n\n\n<li>Properties survive draft-order updates and reuse (not wiped on subsequent API calls)<\/li>\n\n\n<li>Tax\/VAT metadata and product option metadata coexist without key collisions<\/li>\n\n\n<li>Your ops team can see the custom values in the admin view they actually work from<\/li>\n\n<\/ul>\n\n\n\n<p>Run through this list once. It catches the failures that actually affect customers.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Part of a broader B2B checkout reliability strategy<\/h2>\n\n\n\n<p>Product option data preservation is one piece of a reliable B2B checkout. It should sit alongside:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><a href=\"https:\/\/newcraft.dev\/posts\/automatic-vat-validation-shopify\/\">Automatic VAT number validation<\/a> via the EU VIES database<\/li>\n\n\n<li>Correct <a href=\"https:\/\/newcraft.dev\/posts\/shopify-vat-reverse-charge\/\">VAT-exempt pricing and reverse charge<\/a> logic<\/li>\n\n\n<li>Market-aware checkout routing (so buyers stay on their local domain)<\/li>\n\n\n<li><a href=\"https:\/\/newcraft.dev\/posts\/save-vat-details-shopify-order-note\/\">Invoice-ready VAT ID and order metadata<\/a><\/li>\n\n<\/ul>\n\n\n\n<p>Tax correctness and product-spec correctness are not separate problems. If your B2B checkout handles one but drops the other, orders will still break.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Frequently asked questions<\/h2>\n\n\n\n<p><strong>Does this only work for dimension-type options?<\/strong><br>\nNo. Any value stored in line-item properties gets preserved: text fields, dropdown selections, checkbox values, file upload references. The logic is generic.<\/p>\n\n\n\n<p><strong>What about hidden or private properties?<\/strong><br>\nIf a property exists on the cart line item, it gets forwarded. Whether it&#8217;s visible in Shopify admin depends on the property&#8217;s naming convention and your admin setup.<\/p>\n\n\n\n<p><strong>Does this change anything for non-B2B checkout?<\/strong><br>\nThis update targets the draft-order-based B2B flow specifically. Standard Shopify checkout already handles line-item properties natively. But the same data-continuity principle applies everywhere.<\/p>\n\n\n\n<p><strong>Can VAT metadata and product options exist on the same line item?<\/strong><br>\nYes. The implementation merges both sets of properties cleanly. VAT compliance data and product customization data live side by side without collisions.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Bottom line<\/h2>\n\n\n\n<p>For merchants selling custom products through B2B checkout, &#8220;the order went through&#8221; is not enough. The real test: did every dimension, every note, every configuration choice entered by the customer make it to the line item your team uses to fulfill the order?<\/p>\n\n\n\n<p>That&#8217;s what this update guarantees.<\/p>\n\n\n\n<p><strong><a href=\"https:\/\/apps.shopify.com\/tax-exemption\" target=\"_blank\" rel=\"noopener\">Install EU Tax Exemption for Shopify<\/a><\/strong><\/p>\n\n\n\n<p><em>Need help verifying that your custom product options survive the full checkout path? <a href=\"https:\/\/newcraft.dev\/contact\">Get in touch<\/a>.<\/em><\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>Custom product specs get lost in B2B checkout. Here is how to fix it.<\/p>\n","protected":false},"featured_media":0,"template":"","meta":{"_acf_changed":false,"_breakdance_hide_in_design_set":false,"_breakdance_tags":""},"class_list":["post-1680","marketing-post","type-marketing-post","status-publish","hentry"],"acf":{"related_apps":null},"_links":{"self":[{"href":"https:\/\/newcraft.dev\/nl\/wp-json\/wp\/v2\/marketing-post\/1680","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/newcraft.dev\/nl\/wp-json\/wp\/v2\/marketing-post"}],"about":[{"href":"https:\/\/newcraft.dev\/nl\/wp-json\/wp\/v2\/types\/marketing-post"}],"wp:attachment":[{"href":"https:\/\/newcraft.dev\/nl\/wp-json\/wp\/v2\/media?parent=1680"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}