How do wholesale/B2B customer net-terms payment history and credit-limit data migrate as customer metadata during a platform switch?
Shopify B2B has no native credit-limit field, so credit limits and payment history migrate as metafields on the company or company location (per Shopify's Admin API docs, September 2026). CompanyLocation exposes billing address, catalogs, payment terms and tax settings, but nothing that stores a limit or an aging balance. Enforcement is custom work or an app.
What Shopify actually gives you to migrate into
Before you map a single field, look at what the destination object holds. The CompanyLocation object in Shopify's Admin API carries billingAddress, shippingAddress, buyerExperienceConfiguration, catalogs, currency, externalId, locale, metafields, note, orders, roleAssignments, staffMemberAssignments, storeCreditAccounts, taxSettings and totalSpent (per Shopify developer docs, September 2026).
Read that list for what is missing. There is no creditLimit. There is no credit-hold flag. There is no payment-history object beyond the orders themselves. Shopify's own B2B company documentation describes payment terms, deposits, tax IDs, tax exemptions, catalogs (maximum 25 per company location), notes and metafields, and says nothing about credit limits (per Shopify Help Center, September 2026).
So the honest mapping is short:
| Legacy field | Shopify destination | Native? |
|---|---|---|
| Payment term (net 30, net 60) | Company location payment terms | Yes, from a fixed template list |
| Deposit requirement | Payment terms deposit | Yes |
| Credit limit | Metafield on company or company location | No |
| Credit hold / account on stop | Metafield plus custom enforcement | No |
| Aging balance (current, 30, 60, 90) | Nothing. Stays in the accounting system | No |
| Payment history (invoices paid, days-to-pay) | Nothing native. Order history is a proxy | No |
| Tax exemption status | Company location tax settings | Yes |
| Tax exemption certificate document | Nothing. Stays in your document store | No |
| Customer ID from the old system | externalId on the company location | Yes |
The part that catches teams out: a metafield does nothing
A credit limit written to a metafield is a number sitting in the admin. It does not stop an order. Shopify will happily let a company location on net 30 with a $50,000 limit and $61,000 outstanding place another order, because nothing in the platform is reading that metafield at checkout.
That is the whole shape of the problem. Migrating the data is the easy half and takes days. Making the data enforce anything is the expensive half, and it is a build or an app purchase. Our B2B credit limit and order hold decision record scores this BUILD on exactly that basis.
There is a buy option. Upro B2B & Wholesale on the Shopify App Store advertises credit limits "by company, customer, location" with order restrictions and checkout alerts when limits are exceeded, at $30, $60, $150 and $299 per month across four plans, rated 5.0 across 21 to 23 reviews depending on which page you read (per Shopify App Store, September 2026). That review base is small. Treat it as a pilot candidate, not a proven mid-market dependency.
How the data physically moves
Shopify's customer CSV import does not handle companies. For B2B objects you need the API or a bulk tool. Matrixify handles B2B Companies in its import and export set, with per-plan record caps of 10 (Demo), 50 (Basic), 500 (Big) and unlimited (Enterprise), at $20, $50 and $200 per 30 days for the paid tiers (per Matrixify pricing and the Shopify App Store listing, September 2026). It is rated 4.9 across 1,616 reviews.
The sequence we insist on:
- Freeze the legacy credit file and export it with a timestamp. Not a live query. A frozen file, because you will reconcile against it twice.
- Create companies and company locations first, with
externalIdset to the legacy account number. Everything else joins on that. - Assign payment terms from Shopify's template list before you touch metafields, because terms are native and cheap to get right.
- Write credit limit and credit status to metafields with a defined namespace and a defined type. Not a note field.
- Decide who enforces. ERP at order entry, a Shopify Function at checkout, an app, or a human reviewing a daily report. Pick one before launch, not after.
- Reconcile the frozen file against the live company list and sign it off with finance, by name.
What does not come with you
- Aging buckets. Shopify has no accounts-receivable aging report. See the follow-up on outstanding invoices.
- Days-to-pay history. If credit decisions at your company are made on "this account always pays at 52 days," that judgment lives in a spreadsheet or an ERP, and Shopify is not where it goes.
- Collection notes. Company
noteis a single free-text field. It is not a case history. - Credit applications and guarantees. Documents. Document store.
When NOT to migrate credit data into Shopify at all
- When an ERP already owns credit. Then Shopify should hold a read-only mirror at most, and the enforcement stays where the source of truth is. Two systems that both think they own a credit limit will diverge inside a quarter.
- When the limit list is short. Twenty accounts with negotiated limits do not need a metafield architecture. They need a named human and a report.
- When finance has not agreed what the limit means. Order value at placement, or open balance including unfulfilled? That question has to be answered before it can be modelled.
The Deploi point of view
Our own position, from building on Shopify. Separate from the facts above.
- Our take: We scored B2B credit limit and order hold management BUILD. The reason is not that Shopify's apps are bad. It is that the data migrates in an afternoon and then does nothing, and every merchant who treats the migration as the project discovers the enforcement gap in week three of live trading (Deploi verdict, September 2026).
- What we’ve seen: The field mapping is never what delays these projects. What delays them is the meeting where finance and sales discover they have been using the words "credit limit" to mean two different things, and that the legacy system was enforcing neither consistently. Run that meeting before the mapping workshop, not after.
- What we refuse to quote: a fixed price for credit-limit enforcement before we know where the enforcement lives. ERP-side, checkout-function-side and app-side are three different projects with three different cost shapes, and the answer depends on a decision the client has usually not made yet.
- Where we disagree: The standard replatforming answer is "credit limits go in metafields." That sentence is true and useless. A metafield is storage, not a control. We would rather a client migrate no credit data at all and keep enforcement in the ERP than ship a Shopify metafield that looks like a control and is not one.
Reviewed by Martin Dejnicki, Director of SEO & AI Search. Facts verified 2026-09-14.
Where we worked this out
Our decision records
Follow-up questions
Do custom payment-term agreements (e.g., net-45 negotiated for one specific account) migrate correctly to Shopify B2B's payment-terms feature, or default to standard terms?
Net 45 is a native Shopify payment term, not an exception. Shopify's payment terms templates cover net 7, net 15, net 30, net 45, net 60 and net 90, plus due on fulfillment and fixed date for draft orders (per Shopify Help Center, September 2026). Terms outside that list need a Payment Customization function or an app.
How do customer referral-program records (who referred whom, referral rewards owed) migrate as customer metadata during a platform switch?
Referral records do not migrate to Shopify, because Shopify has no referral object to migrate them into. Who referred whom lives in the referral app, and outstanding rewards are a liability on your books, not a Shopify balance. Export the ledger before you cancel the app, then decide whether to honor, pay out or convert.
How do customer support ticket history and case notes (from the old helpdesk) get linked to migrated customer records in the new Gorgias/Zendesk-Shopify setup?
Helpdesk history links to migrated Shopify customers by email address, with phone as a fallback. Gorgias matches incoming contacts against the Shopify customer record on email, and can also match on the phone number from the default shipping address (per Gorgias docs, September 2026). A Zendesk import carries up to two years of data.
How do customer tags and segments built up over years on the old platform migrate to Shopify's customer tagging and segmentation system?
Customer tags migrate through Shopify's customer CSV import as a comma-separated Tags column. Saved segments do not migrate. Shopify segments are rebuilt as ShopifyQL queries, and metafield-based filters work only for four data types: date and time, number, text, and true or false (per Shopify Help Center, September 2026).
What happens to abandoned-cart records and their associated recovery-email history when migrating customer/cart data to Shopify?
Abandoned-cart records do not migrate to Shopify, and Shopify deletes its own after three months. Shopify states that abandoned checkouts older than three months are automatically deleted from the admin, and converting a checkout to a draft order is the only way to keep it (per Shopify Help Center, September 2026). In-flight recovery sequences stop at cutover.