> For the complete documentation index, see [llms.txt](https://help.dollarlabs.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.dollarlabs.io/dollarlabs-b2b-custom-pricing/migrating-from-bold-custom-pricing.md).

# Migrating from Bold Custom Pricing

This is the article to read first if you are moving from **Bold Custom Pricing: Wholesale B2B**. It maps Bold's vocabulary onto ours, explains what to do with the data you export from Bold, and gives you a cutover order that keeps retail pricing safe throughout.

The short version: your customer tags carry over untouched, your per-group prices become columns in one price list, and your quantity breaks become volume tiers.

## Concept mapping

<table><thead><tr><th width="270">Bold Custom Pricing</th><th>Dollarlabs equivalent</th></tr></thead><tbody><tr><td><strong>Customer tag</strong></td><td>Same thing — a <a href="/pages/ufQJYRjcyCtMkl16jeex">tag column</a> in the price list. Bold's tags are ordinary Shopify customer tags, so there is nothing to re-tag.</td></tr><tr><td><strong>Product Pricing Group</strong><br>(products grouped, then discounted per customer group)</td><td>No direct equivalent, and none needed. A group in Bold existed to apply one rule across many products; here you set the resulting value on each variant row, and generate those rows with a spreadsheet formula.</td></tr><tr><td><strong>Detailed Pricing</strong><br>(per product/variant, Complete plan only)</td><td>The default and only model — every row is a variant, every column a tag. Not gated behind a plan tier.</td></tr><tr><td><strong>Percent Discount</strong></td><td><a href="/pages/nNzkcH9LZulu3f4h8uF9">Discount type</a> <strong>Percentage</strong></td></tr><tr><td><strong>Price Discount</strong> (a set amount off)</td><td>Discount type <strong>Fixed amount</strong></td></tr><tr><td><strong>Set Fixed Price</strong></td><td>Discount type <strong>Specific price</strong> (the default)</td></tr><tr><td><strong>Quantity Breaks</strong></td><td><a href="/pages/s5fgd9clWB7JKTncibBz">Volume tiers</a>, set per tag on each variant</td></tr><tr><td>The quantity breaks grid on product pages</td><td>The <strong>Volume Tiers</strong> theme app block</td></tr><tr><td>Bulk CSV import/export <em>(Complete plan)</em></td><td><a href="/pages/8kUVx4pksfcXihFFQ1zW">CSV import &#x26; export</a>, on every plan</td></tr><tr><td>Auto-tagging by spend, order count, country or product purchased <em>(paid tiers)</em></td><td>Not built in. Use Shopify Flow, or take applications through a <a href="/pages/W7lAUgBM4kEv8JxB17go">wholesale form</a>, which can <a href="/pages/jZgRagXNgJjuAk4tb8C5">tag the customer on approval</a>.</td></tr><tr><td>—</td><td><a href="/pages/s5fgd9clWB7JKTncibBz">Case multiples</a>: forcing purchase in multiples of a carton size, enforced at checkout</td></tr><tr><td>—</td><td><a href="/pages/VnysOyx1ekQjO7IJhSTi">Loose unit pricing</a>: full cases at one price, leftover units at another, on the same line</td></tr><tr><td>—</td><td><a href="/pages/W7lAUgBM4kEv8JxB17go">Wholesale application forms</a> with an approval queue</td></tr><tr><td>—</td><td><a href="/pages/9xEyl3qYn2aGkVZX48Eb">Payment and delivery method rules</a>: make a tag's pricing conditional on payment method, delivery method or cart subtotal</td></tr></tbody></table>

{% hint style="info" %}
Rows marked "—" mean Bold does not document an equivalent, not that one certainly does not exist. Check your own Bold setup before assuming you are losing or gaining a behaviour.
{% endhint %}

## Two differences that matter

### Bold needs theme code to work. We need it only to display.

Bold's own installation guide is explicit that Custom Pricing must be installed into your theme to function, and that "updates need to be done on all theme files that output product prices on the store", typically three to five files.

Dollarlabs applies pricing through Shopify discount functions in the cart and at checkout. That happens whether or not you touch your theme. Our theme blocks exist only so buyers can see the wholesale price *before* they reach the cart.

The practical consequence during migration: after you remove Bold's theme code and before you add our blocks, your **checkout is already correct** while your product pages show retail prices. That is an expected intermediate state, not a broken one.

### One price list, not layered groups

In Bold, Detailed Pricing overrides Product Pricing Groups, which override storewide customer-tag pricing. Three layers, with a documented precedence order.

Dollarlabs has one price list, in which each variant row holds one value per tag. There are no layers to reason about. If a customer carries two tags that both have a price, [the lowest resulting price wins](/dollarlabs-b2b-custom-pricing/getting-started/how-pricing-works.md) — that is the only precedence rule in the product.

## Moving your pricing data

Both apps export a CSV keyed by SKU. The shapes are close, with one structural difference that matters.

### Get both files

1. In **Bold**, go to Import/Export and export your pricing.
2. In **Dollarlabs**, open the price list and choose **Export → Export entire catalog**. This is your target shape, and it carries both `variantId` and `sku` for joining.

### Know the two formats

Bold's export has a `Price Type` column whose value applies to the row. From Bold's documentation:

* `%` — a percentage discount
* `-` — a fixed amount off the original price
* `$` — a fixed price, the new lower price

Ours puts everything in the tag's cell. The complete grammar — prices, tiers, case multiples, loose pricing and discount modes — is documented in [CSV import & export](/dollarlabs-b2b-custom-pricing/price-list/csv-import-and-export.md). Read that first; it is the target you are converting to.

{% hint style="warning" %}
**The one thing that will trip you up.** Bold puts each quantity-break tier on its **own duplicated row**, with a `Qty` column holding that tier's minimum quantity. We put every tier for a variant in **one cell**.

So a SKU with three tiers is three rows in Bold and one row here, whose cell reads `1:10;12:9;24:7`. Converting is a pivot, not a find-and-replace.
{% endhint %}

### Convert it

With both formats in front of you, the conversion is a spreadsheet job: join on SKU, pivot Bold's per-tier rows into one cell per variant per tag, and translate `Price Type` into our discount mode.

There is no single recipe that fits every Bold setup, so we deliberately do not publish one — the number of tags, tiers and price types varies too much. Give your Bold export and our [format documentation](/dollarlabs-b2b-custom-pricing/price-list/csv-import-and-export.md) to a spreadsheet or an AI assistant and have it generate the target file, then check a sample of rows by hand before importing.

{% hint style="danger" %}
**An empty cell erases** that tag's pricing for that variant — it does not mean "leave unchanged". Export first, edit in place, re-import. Never import a partial file that has all tag columns present but blank.
{% endhint %}

Two more things worth knowing before you plan the timing:

* **Every variant needs a SKU.** Bold's import requires it, and it is what you will join on. Variants with no SKU will silently fail to match.
* **Bold's side is slow.** Their documentation puts pricing sync at about 1,000 variants per hour. On a large catalog, budget an overnight run for any Bold-side export-and-verify loop.

## Removing Bold's theme code

Bold installs Liquid into your theme, and uninstalling the app does not remove it. Leftover Bold markup fighting our blocks is a common cause of doubled or flickering prices.

What to look for depends on which version of Bold's install you have.

**V3 (their current install):**

* `snippets/bold-pr.liquid`
* In `theme.liquid`: `{%- render 'bold-pr' -%}` and a script tag loading `cspqb.js` from `/tools/shappify-csp/…`
* Price markup wrapped in `<span class="money" data-product-id="…">`
* `<script type="application/json" class="bold-product-json">` after product loops
* Cart markup carrying `data-line-index`, `data-line-total` or `data-cart-total`

**V1 and V2 (older installs):**

* Snippets: `bold-common.liquid`, `bold-includes.liquid`, `bold-product.liquid`, `bold-variant.liquid`, `bold-cart.liquid`, `bold-cart-item.liquid`, `bold-csp-metafield-variant.liquid`
* In `theme.liquid`: `{% render 'bold-common' %}{% render 'bold-includes' %}`, and a `shappify_customer_tags` variable
* A script tag loading `csp.js` from `cp.boldapps.net`
* Spans in the cart template marked `Bold-theme-hook-DO-NOT-DELETE`

Searching your theme for `bold-`, `shappify` and `boldapps` will surface most of it.

{% hint style="info" %}
Work on a duplicate, unpublished theme. Bold also offers to help strip their Liquid — if your install is old or heavily customised, ask them before you start deleting.
{% endhint %}

## Cutover checklist

Run both apps side by side while you verify. Dollarlabs discounts nothing until you enable the price list, so it is safe to install and configure long before you touch Bold.

1. **Install Dollarlabs** and let the initial catalog setup finish. See [Quick start](/dollarlabs-b2b-custom-pricing/getting-started.md).
2. **Add your tag columns**, spelled exactly as the Shopify customer tags are spelled. Tags are case-sensitive.
3. **Import your converted CSV**, leaving the price list **disabled**.
4. **Spot-check the grid.** Search for SKUs you know well and confirm each tag column reads what you expect. Check a tiered product and a case-quantity product specifically.
5. **Duplicate your theme.** Everything from here happens on the unpublished copy.
6. **Add our storefront blocks** to the duplicate: [Product Price V2](/dollarlabs-b2b-custom-pricing/show-final-prices-on/product-page.md), [Collection Pricing](/dollarlabs-b2b-custom-pricing/show-final-prices-on/collection-page.md), plus **Volume Tiers** and **Validation Message** if you use tiers or case quantities.
7. **Enable the price list** and test on the duplicate theme's preview link with a real tagged customer. Product page, cart and checkout should all agree.
8. **Remove Bold's theme code** from the duplicate, then re-test the same journey. Watch for prices rendering twice or flickering.
9. **Publish** the duplicate theme.
10. **Wind Bold down.** In Custom Pricing, pause your groups or clear pricing, then uninstall the app once you have watched real orders come through correctly for a day.

{% hint style="success" %}
Test with an untagged customer too. They should see normal retail prices, with no wholesale pricing and no leftover Bold markup.
{% endhint %}

## Frequently asked, coming from Bold

**Do I have to re-tag my customers?**\
No. Bold uses ordinary Shopify customer tags and so do we. Just make sure your column headers match the tag spelling exactly, including case.

**What replaces auto-tagging?**\
Shopify Flow can tag on order count or spend. For applications, a [wholesale form](/dollarlabs-b2b-custom-pricing/wholesale-forms/approvals-and-automations.md) can create and tag the customer when you approve them.

**Can a customer have more than one priced tag?**\
Yes. They pay the lowest resulting price — see [how pricing works](/dollarlabs-b2b-custom-pricing/getting-started/how-pricing-works.md).

**Will my quantity-breaks table look the same?**\
Not identical, but the **Volume Tiers** block is configurable: column labels, suffixes, whether to show savings, and custom CSS. See [Volume tiers & case multiples](/dollarlabs-b2b-custom-pricing/getting-started/volume-tiers-and-case-multiples.md).

**I have tens of thousands of variants.**\
Fine, but import in batches and let each one finish — watch [Jobs & history](/dollarlabs-b2b-custom-pricing/price-list/jobs-and-history.md) between batches.
