{"id":5441,"date":"2026-05-08T01:10:58","date_gmt":"2026-05-08T09:10:58","guid":{"rendered":"https:\/\/wholesalehelper.io\/blog\/?p=5441"},"modified":"2026-05-08T01:19:48","modified_gmt":"2026-05-08T09:19:48","slug":"dezlin-reveals-tried-shopifys-free-native-b2b-heres-what-actually-happened","status":"publish","type":"post","link":"https:\/\/wholesalehelper.io\/blog\/dezlin-reveals-tried-shopifys-free-native-b2b-heres-what-actually-happened\/","title":{"rendered":"Dezlin Reveals Tried Shopify&#8217;s Free Native B2B. Here&#8217;s What Actually Happened.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"5441\" class=\"elementor elementor-5441\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-f3e8fba elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f3e8fba\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-379fcf6\" data-id=\"379fcf6\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1b807e7 elementor-widget elementor-widget-html\" data-id=\"1b807e7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>DezLin Reveals Case Study \u2014 Wholesale Pricing Discount B2B<\/title>\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Fraunces:ital,wght@0,300;0,500;0,700;0,800;1,300;1,500;1,700&family=Nunito+Sans:wght@300;400;500;600;700&display=swap\" rel=\"stylesheet\">\n<style>\n*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }\n\n:root {\n  --purple: #6434d1;\n  --purple-dark: #532daa;\n  --purple-bright: #7735f6;\n  --purple-light: #f0e7fa;\n  --purple-lighter: #f4f4ff;\n  --purple-mid: #ededf7;\n  --pink: #ff709d;\n  --magenta: #f00069;\n  --dark: #0f0e17;\n  --dark-text: #141522;\n  --mid-text: #364153;\n  --light-text: #758696;\n  --border: #dddde8;\n  --white: #ffffff;\n  --bg: #f8f8fb;\n}\n\nbody {\n  font-family: \"Nunito Sans\", -apple-system, sans-serif;\n  font-size: 16px;\n  line-height: 1.7;\n  color: var(--dark-text);\n  background: var(--bg);\n}\n\n\/* PROGRESS BAR *\/\n#progress-bar {\n  position: fixed;\n  top: 0; left: 0;\n  height: 3px;\n  width: 0;\n  background: linear-gradient(90deg, #6434d1, #7735f6);\n  z-index: 9999;\n  transition: width 0.08s linear;\n}\n\n\/* HERO *\/\n.hero {\n  background: var(--dark);\n  background-image: radial-gradient(ellipse at 75% 40%, rgba(100,52,209,0.4) 0%, transparent 60%),\n                    radial-gradient(ellipse at 15% 85%, rgba(119,53,246,0.2) 0%, transparent 50%);\n  color: white;\n  padding: 72px 52px 60px;\n}\n.hero-eyebrow {\n  display: inline-flex; align-items: center; gap: 8px;\n  background: rgba(100,52,209,0.25); border: 1px solid rgba(100,52,209,0.5);\n  color: #c4a8ff; font-size: 11px; font-weight: 700; letter-spacing: 0.14em;\n  text-transform: uppercase; padding: 5px 14px; border-radius: 20px; margin-bottom: 28px;\n}\n.hero-eyebrow::before { content: \"\"; width: 6px; height: 6px; border-radius: 50%; background: #c4a8ff; }\n.hero h1 {\n  font-family: \"Fraunces\", Georgia, serif;\n  font-size: clamp(28px, 4.2vw, 50px); font-weight: 800; line-height: 1.1;\n  color: white; max-width: 840px; margin-bottom: 18px; letter-spacing: -0.025em;\n}\n.hero h1 em { font-style: italic; color: #c4a8ff; }\n.hero-sub {\n  font-size: 18px; color: rgba(255,255,255,0.65); max-width: 640px;\n  margin-bottom: 48px; font-weight: 400; line-height: 1.65;\n}\n.hero-stats { display: flex; gap: 14px; flex-wrap: wrap; margin-bottom: 40px; }\n.hero-stat {\n  background: rgba(255,255,255,0.05); border: 1px solid rgba(255,255,255,0.1);\n  border-top: 2px solid var(--purple); border-radius: 0 0 10px 10px;\n  padding: 18px 22px 16px; min-width: 140px; flex: 1;\n}\n.hero-stat .hs-num {\n  display: block; font-family: \"Fraunces\", serif; font-size: 32px; font-weight: 700;\n  color: #c4a8ff; line-height: 1; margin-bottom: 6px;\n}\n.hero-stat .hs-label { font-size: 12.5px; color: rgba(255,255,255,0.5); line-height: 1.4; }\n.hero-attribution {\n  padding-top: 28px; border-top: 1px solid rgba(255,255,255,0.08);\n  font-size: 13px; color: rgba(255,255,255,0.4);\n  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;\n}\n.hero-attribution a { color: rgba(255,255,255,0.7); text-decoration: none; border-bottom: 1px solid rgba(255,255,255,0.2); }\n.hero-attribution a:hover { color: #c4a8ff; }\n\n\/* EXEC SUMMARY *\/\n.exec-summary {\n  background: linear-gradient(135deg, var(--purple-lighter) 0%, #ebe8ff 100%);\n  border-bottom: 1px solid #d5ccf5; padding: 48px 52px;\n}\n.exec-inner { max-width: 880px; margin: 0 auto; display: grid; grid-template-columns: 1fr 280px; gap: 40px; align-items: start; }\n.exec-label { font-size: 10.5px; font-weight: 800; letter-spacing: 0.16em; text-transform: uppercase; color: var(--purple); margin-bottom: 10px; }\n.exec-summary h2 { font-family: \"Fraunces\", serif; font-size: 22px; font-weight: 700; color: var(--dark-text); margin-bottom: 16px; letter-spacing: -0.02em; line-height: 1.25; }\n.exec-summary p { color: var(--mid-text); font-size: 15px; margin-bottom: 12px; line-height: 1.65; }\n.exec-summary p:last-child { margin-bottom: 0; }\n.exec-summary strong { color: var(--dark-text); }\n.exec-bullets { background: white; border: 1px solid #d5ccf5; border-radius: 12px; padding: 20px 22px; }\n.exec-bullets .eb-label { font-size: 10px; font-weight: 800; letter-spacing: 0.14em; text-transform: uppercase; color: var(--purple); margin-bottom: 14px; }\n.exec-bullets ul { list-style: none; padding: 0; }\n.exec-bullets li { font-size: 13.5px; color: var(--mid-text); padding: 8px 0; border-bottom: 1px solid var(--border); display: flex; gap: 10px; align-items: flex-start; line-height: 1.45; }\n.exec-bullets li:last-child { border-bottom: none; }\n.exec-bullets li::before { content: \"\u2192\"; color: var(--purple); font-weight: 700; flex-shrink: 0; margin-top: 1px; }\n\n\/* LAYOUT *\/\n.section { padding: 60px 52px; background: var(--white); }\n.section.alt { background: var(--bg); }\n.section.lavender { background: var(--purple-lighter); }\n.section-inner { max-width: 880px; margin: 0 auto; }\n.section-label { font-size: 10.5px; font-weight: 800; letter-spacing: 0.16em; text-transform: uppercase; color: var(--purple); margin-bottom: 10px; }\n.section h2 { font-family: \"Fraunces\", serif; font-size: clamp(22px, 2.8vw, 30px); font-weight: 700; color: var(--dark-text); margin-bottom: 22px; line-height: 1.22; letter-spacing: -0.02em; }\n.body-text p { margin-bottom: 16px; color: var(--mid-text); font-size: 16px; }\n.body-text p:last-child { margin-bottom: 0; }\n.body-text strong { color: var(--dark-text); font-weight: 700; }\n\n\/* SNAPSHOT *\/\n.snapshot-grid { display: grid; grid-template-columns: 320px 1fr; gap: 36px; align-items: start; }\n.snapshot-card { background: var(--dark); border-radius: 14px; padding: 28px; color: white; }\n.brand-name { font-family: \"Fraunces\", serif; font-size: 24px; font-weight: 700; color: white; margin-bottom: 2px; }\n.brand-url { font-size: 13px; color: #c4a8ff; text-decoration: none; border-bottom: 1px solid rgba(196,168,255,0.3); }\n.snap-divider { height: 1px; background: rgba(255,255,255,0.1); margin: 16px 0; }\n.snap-row { display: flex; justify-content: space-between; gap: 10px; padding: 5px 0; font-size: 13px; }\n.snap-row .sk { color: rgba(255,255,255,0.45); font-weight: 500; flex-shrink: 0; }\n.snap-row .sv { color: rgba(255,255,255,0.9); font-weight: 600; text-align: right; }\n.snap-since { margin-top: 16px; padding: 10px 12px; background: rgba(100,52,209,0.25); border: 1px solid rgba(100,52,209,0.4); border-radius: 8px; font-size: 12px; color: #c4a8ff; text-align: center; font-weight: 700; letter-spacing: 0.04em; }\n.snapshot-context p { font-size: 15.5px; color: var(--mid-text); margin-bottom: 13px; line-height: 1.65; }\n.snapshot-context p:last-child { margin-bottom: 0; }\n\n\/* BY THE NUMBERS *\/\n.numbers-intro { font-size: 15px; color: var(--mid-text); margin-bottom: 28px; line-height: 1.6; }\n.numbers-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }\n.num-card {\n  background: white; border: 1px solid var(--border);\n  border-top: 3px solid var(--purple); border-radius: 0 0 12px 12px;\n  padding: 20px 16px;\n}\n.num-card.accent { border-top-color: var(--magenta); }\n.num-card.slate { border-top-color: #6b7fa0; }\n.num-card .nc-n {\n  display: block; font-family: \"Fraunces\", serif; font-size: 38px; font-weight: 700;\n  color: var(--purple); line-height: 1; margin-bottom: 8px;\n}\n.num-card.accent .nc-n { color: var(--magenta); }\n.num-card.slate .nc-n { color: #4a5d7a; }\n.num-card .nc-title { font-size: 12px; font-weight: 800; color: var(--dark-text); text-transform: uppercase; letter-spacing: 0.06em; margin-bottom: 6px; }\n.num-card .nc-sub { font-size: 13px; color: var(--mid-text); line-height: 1.45; }\n\n\/* INFO BOX *\/\n.info-box { background: var(--purple-light); border: 1px solid #d4b8f7; border-left: 4px solid var(--purple); border-radius: 0 10px 10px 0; padding: 18px 22px; margin: 20px 0; }\n.info-box p { color: #3d1e80; font-size: 15px; margin-bottom: 8px; }\n.info-box p:last-child { margin-bottom: 0; }\n\n\/* CRISIS BOX *\/\n.crisis-box { background: #fff0f4; border: 1px solid #ffb3cb; border-left: 4px solid var(--magenta); border-radius: 0 10px 10px 0; padding: 22px 26px; margin: 22px 0; }\n.crisis-label { font-size: 10.5px; font-weight: 800; letter-spacing: 0.14em; text-transform: uppercase; color: var(--magenta); margin-bottom: 12px; }\n.crisis-box p { color: #6b0f30; font-size: 15px; margin-bottom: 10px; }\n.crisis-box p:last-child { margin-bottom: 0; }\n\n\/* TAB SYSTEM *\/\n.ticket-tab-wrapper { margin-top: 0; }\n.tab-summary {\n  background: var(--dark); color: rgba(255,255,255,0.6); font-size: 12px;\n  font-weight: 700; text-align: center; padding: 9px 20px;\n  border-radius: 10px 10px 0 0; letter-spacing: 0.06em; text-transform: uppercase;\n}\n.tab-controls {\n  display: flex; gap: 0; background: var(--purple-lighter);\n  border: 1px solid #d5ccf5; border-top: none; border-bottom: none;\n  padding: 12px 16px; align-items: center; justify-content: space-between;\n}\n.tab-pills { display: flex; gap: 8px; }\n.tab-btn {\n  display: inline-flex; align-items: center; gap: 8px; padding: 8px 20px;\n  border-radius: 20px; border: 1.5px solid var(--purple); background: transparent;\n  color: var(--purple); font-size: 13.5px; font-weight: 700; cursor: pointer;\n  font-family: \"Nunito Sans\", sans-serif; transition: all 0.18s;\n}\n.tab-btn.active { background: var(--purple); color: white; }\n.tab-btn:hover:not(.active) { background: var(--purple-lighter); }\n.tab-count {\n  background: rgba(100,52,209,0.12); color: var(--purple);\n  border-radius: 10px; padding: 1px 8px; font-size: 11.5px; font-weight: 800;\n}\n.tab-btn.active .tab-count { background: rgba(255,255,255,0.2); color: white; }\n.expand-controls { display: flex; gap: 6px; }\n.expand-btn {\n  font-size: 11.5px; font-weight: 700; color: var(--purple); background: none;\n  border: 1px solid var(--border); border-radius: 6px; padding: 5px 12px;\n  cursor: pointer; font-family: \"Nunito Sans\", sans-serif; transition: all 0.15s;\n}\n.expand-btn:hover { background: white; border-color: var(--purple); }\n.tab-panel {\n  display: none; border: 1px solid #d5ccf5; border-top: none;\n  border-radius: 0 0 10px 10px; background: var(--bg); padding: 14px;\n}\n.tab-panel.active { display: block; animation: slideIn 0.22s ease; }\n@keyframes slideIn { from { opacity: 0; transform: translateY(5px); } to { opacity: 1; transform: translateY(0); } }\n\n\/* SUPPORT CARDS *\/\n.support-cards { display: flex; flex-direction: column; gap: 10px; }\n.support-card {\n  background: white; border: 1px solid var(--border); border-radius: 10px;\n  overflow: hidden; display: grid; grid-template-columns: 110px 1fr; cursor: pointer;\n  transition: box-shadow 0.15s, border-color 0.15s;\n}\n.support-card:hover { border-color: #bbb8e0; box-shadow: 0 2px 12px rgba(100,52,209,0.08); }\n.sc-left {\n  background: var(--purple); padding: 16px 12px;\n  display: flex; flex-direction: column; align-items: center;\n  justify-content: center; text-align: center;\n}\n.sc-left.slate { background: #2e3148; }\n.sc-left.integration { background: linear-gradient(160deg, #4a28a8, #6434d1); }\n.sc-date { font-size: 10px; font-weight: 800; color: rgba(255,255,255,0.65); text-transform: uppercase; letter-spacing: 0.1em; line-height: 1.4; }\n.sc-ticket-id { font-size: 9px; font-weight: 800; color: rgba(255,255,255,0.4); letter-spacing: 0.06em; margin-bottom: 4px; }\n.sc-icon { font-size: 22px; margin-bottom: 6px; }\n.sc-badge { font-size: 9px; font-weight: 800; color: #c4a8ff; text-transform: uppercase; letter-spacing: 0.08em; margin-top: 6px; background: rgba(255,255,255,0.12); padding: 3px 7px; border-radius: 8px; line-height: 1.5; }\n.sc-right { padding: 14px 18px; }\n.sc-title { font-size: 14.5px; font-weight: 800; color: var(--dark-text); margin-bottom: 0; line-height: 1.35; }\n.sc-body { font-size: 13.5px; color: var(--mid-text); line-height: 1.6; margin: 10px 0; }\n.sc-outcome {\n  display: inline-flex; align-items: center; gap: 5px; font-size: 11.5px; font-weight: 700;\n  color: #1e7a42; background: #eafaf1; border: 1px solid #b7eacb;\n  padding: 3px 10px; border-radius: 20px; margin-top: 6px;\n}\n.sc-outcome::before { content: \"\u2713\"; }\n.sc-expand-hint {\n  display: block; font-size: 11px; color: var(--purple); font-weight: 700;\n  margin-top: 8px; opacity: 0.7;\n}\n.support-card.collapsed .sc-body { display: none; }\n.support-card.collapsed .sc-expand-hint::after { content: \" \u25be click to expand\"; }\n.support-card:not(.collapsed) .sc-expand-hint::after { content: \" \u25b4 click to collapse\"; }\n\n\/* DISASTER STEPS *\/\n.disaster-steps { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; margin: 26px 0; }\n.ds-step { background: white; border: 1px solid var(--border); border-top: 3px solid var(--magenta); border-radius: 0 0 10px 10px; padding: 18px 16px; position: relative; }\n.ds-num { font-family: \"Fraunces\", serif; font-size: 34px; font-weight: 700; color: var(--magenta); opacity: 0.18; position: absolute; top: 10px; right: 14px; line-height: 1; }\n.ds-title { font-size: 12px; font-weight: 800; color: var(--dark-text); margin-bottom: 8px; text-transform: uppercase; letter-spacing: 0.07em; }\n.ds-body { font-size: 13.5px; color: var(--mid-text); line-height: 1.5; }\n\n\/* ERROR MESSAGE *\/\n.error-msg { background: #1a0a10; border: 1px solid #4a1428; border-radius: 8px; padding: 16px 20px; margin: 18px 0; font-family: \"SF Mono\", \"Fira Code\", monospace; font-size: 13.5px; color: #ff8fab; line-height: 1.5; }\n.error-msg::before { content: \"\u26a0  Shopify error message\"; display: block; font-family: \"Nunito Sans\", sans-serif; font-size: 10px; letter-spacing: 0.1em; text-transform: uppercase; color: rgba(255,143,171,0.4); margin-bottom: 8px; }\n\n\/* GAP GRID *\/\n.gap-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin: 22px 0; }\n.gap-item { background: white; border: 1px solid var(--border); border-left: 3px solid var(--pink); border-radius: 0 8px 8px 0; padding: 14px 16px; }\n.gap-item .gi-title { font-size: 13px; font-weight: 700; color: var(--dark-text); margin-bottom: 4px; }\n.gap-item .gi-body { font-size: 13px; color: var(--mid-text); line-height: 1.45; }\n\n\/* PULL QUOTE *\/\n.pull-quote-section { background: var(--dark); background-image: radial-gradient(ellipse at 30% 60%, rgba(100,52,209,0.3) 0%, transparent 65%); padding: 72px 52px; }\n.pq-inner { max-width: 860px; margin: 0 auto; display: grid; grid-template-columns: 1fr 200px; gap: 48px; align-items: center; }\n.pq-mark { font-family: \"Fraunces\", serif; font-size: 80px; line-height: 0.7; color: var(--purple); opacity: 0.5; display: block; margin-bottom: 20px; }\n.pq-text { font-family: \"Fraunces\", serif; font-size: clamp(17px, 2.3vw, 24px); font-weight: 500; font-style: italic; color: rgba(255,255,255,0.92); line-height: 1.55; letter-spacing: -0.01em; margin-bottom: 24px; }\n.pq-attr { font-size: 14px; color: rgba(255,255,255,0.45); }\n.pq-attr strong { color: rgba(255,255,255,0.8); }\n.pq-attr a { color: #c4a8ff; text-decoration: none; }\n.pq-photo { text-align: center; }\n.pq-photo img { width: 160px; height: 160px; border-radius: 50%; object-fit: cover; border: 3px solid var(--purple); display: block; margin: 0 auto 12px; }\n.pq-photo .ph-name { font-size: 13px; font-weight: 700; color: rgba(255,255,255,0.8); margin-bottom: 2px; }\n.pq-photo .ph-title { font-size: 12px; color: rgba(255,255,255,0.4); }\n.pq-photo .ph-link a { font-size: 12px; color: #c4a8ff; text-decoration: none; }\n\n\/* RESULTS STATS *\/\n.stats-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; margin: 28px 0; }\n.stat-box { background: var(--white); border: 1px solid var(--border); border-top: 3px solid var(--purple); border-radius: 0 0 12px 12px; padding: 24px 18px; text-align: center; }\n.stat-box .sn { display: block; font-family: \"Fraunces\", serif; font-size: 44px; font-weight: 700; color: var(--purple); line-height: 1; letter-spacing: -0.02em; margin-bottom: 8px; }\n.stat-box .sn.warning { color: var(--magenta); }\n.stat-box .sd { font-size: 13px; color: var(--mid-text); line-height: 1.5; }\n.stat-box .sc { margin-top: 6px; font-size: 11px; color: var(--purple); font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; }\n.stat-box .sc.warning { color: var(--magenta); }\n\n\/* SAVINGS CALCULATOR *\/\n.calc-widget { background: var(--dark); border-radius: 14px; padding: 28px 32px; margin: 28px 0; }\n.calc-title { font-family: \"Fraunces\", serif; font-size: 18px; font-weight: 700; color: white; margin-bottom: 6px; }\n.calc-sub { font-size: 13px; color: rgba(255,255,255,0.5); margin-bottom: 22px; }\n.calc-slider-row { display: flex; align-items: center; gap: 16px; margin-bottom: 18px; }\n.calc-slider-label { font-size: 13px; font-weight: 600; color: rgba(255,255,255,0.6); white-space: nowrap; }\ninput[type=\"range\"] {\n  flex: 1; -webkit-appearance: none; height: 4px; border-radius: 2px;\n  background: rgba(255,255,255,0.15); outline: none; cursor: pointer;\n}\ninput[type=\"range\"]::-webkit-slider-thumb {\n  -webkit-appearance: none; width: 22px; height: 22px; border-radius: 50%;\n  background: var(--purple); cursor: pointer; border: 3px solid white;\n  box-shadow: 0 2px 10px rgba(100,52,209,0.5);\n}\n.calc-year-val { font-size: 15px; font-weight: 800; color: #c4a8ff; min-width: 68px; text-align: right; }\n.calc-result {\n  background: rgba(100,52,209,0.18); border: 1px solid rgba(100,52,209,0.35);\n  border-radius: 10px; padding: 18px 22px; display: flex; align-items: center; gap: 18px; flex-wrap: wrap;\n}\n.calc-result-label { font-size: 14px; color: rgba(255,255,255,0.65); line-height: 1.4; flex: 1; min-width: 180px; }\n.calc-result-num { font-family: \"Fraunces\", serif; font-size: 36px; font-weight: 700; color: #c4a8ff; white-space: nowrap; }\n\n\/* TABLES *\/\n.cost-table, .comp-table { width: 100%; border-collapse: collapse; margin: 24px 0; font-size: 14.5px; border-radius: 12px; overflow: hidden; border: 1px solid var(--border); }\n.cost-table th, .comp-table th { background: var(--dark); color: white; padding: 13px 18px; text-align: left; font-size: 11.5px; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase; }\n.comp-table th.highlight { background: var(--purple); }\n.cost-table td, .comp-table td { padding: 13px 18px; border-bottom: 1px solid var(--border); vertical-align: top; color: var(--mid-text); font-size: 14px; }\n.cost-table tr:last-child td, .comp-table tr:last-child td { border-bottom: none; }\n.cost-table tr:nth-child(2) td { background: var(--purple-lighter); }\n.comp-table tr:nth-child(even) td { background: #fafafa; }\n.cost-price { font-family: \"Fraunces\", serif; font-size: 20px; font-weight: 700; color: var(--dark-text); display: block; }\n.cost-table tr:nth-child(2) .cost-price { color: var(--purple); }\n.cost-note { font-size: 12.5px; color: var(--light-text); margin-top: 3px; line-height: 1.4; }\n.check { color: var(--purple); font-weight: 800; }\n.cross { color: #ccc; }\n.wpd-col { color: var(--dark-text); font-weight: 600; }\n\n\/* CLOSE *\/\n.close-section { background: linear-gradient(135deg, var(--purple-dark) 0%, var(--purple-bright) 100%); padding: 64px 52px; text-align: center; color: white; }\n.close-section h2 { font-family: \"Fraunces\", serif; font-size: 30px; font-weight: 700; color: white; margin-bottom: 16px; letter-spacing: -0.02em; }\n.close-section p { font-size: 17px; color: rgba(255,255,255,0.72); max-width: 580px; margin: 0 auto 36px; line-height: 1.7; }\n.cta-btn { display: inline-block; background: white; color: var(--purple); font-size: 15px; font-weight: 800; padding: 14px 36px; border-radius: 8px; text-decoration: none; transition: transform 0.15s, box-shadow 0.15s; }\n.cta-btn:hover { transform: translateY(-2px); box-shadow: 0 10px 28px rgba(0,0,0,0.25); }\n.close-byline { margin-top: 40px; padding-top: 28px; border-top: 1px solid rgba(255,255,255,0.15); font-size: 13px; color: rgba(255,255,255,0.4); }\n.close-byline a { color: rgba(255,255,255,0.65); text-decoration: none; }\n\n\/* FAQ *\/\n.faq-section { background: var(--white); }\n.faq-list { margin-top: 8px; }\n.faq-item { border-bottom: 1px solid var(--border); }\n.faq-item:first-child { border-top: 1px solid var(--border); }\n.faq-q {\n  display: flex; align-items: center; justify-content: space-between; gap: 16px;\n  padding: 20px 4px; cursor: pointer; list-style: none; user-select: none;\n  font-size: 16px; font-weight: 700; color: var(--dark-text); line-height: 1.4;\n}\n.faq-q::-webkit-details-marker { display: none; }\n.faq-q::after { content: \"+\"; font-size: 22px; font-weight: 300; color: var(--purple); flex-shrink: 0; transition: transform 0.2s; }\ndetails[open] .faq-q::after { transform: rotate(45deg); }\n.faq-a { padding: 0 4px 20px; font-size: 15px; color: var(--mid-text); line-height: 1.7; }\n.faq-a p { margin-bottom: 12px; }\n.faq-a p:last-child { margin-bottom: 0; }\n.faq-a strong { color: var(--dark-text); }\n.faq-a ul { padding-left: 20px; margin: 8px 0 12px; }\n.faq-a ul li { margin-bottom: 6px; }\n\n\/* PULL QUOTE photo logo *\/\n.ph-logo { margin-bottom: 16px; background: white; border-radius: 10px; padding: 8px 10px; display: block; }\n.ph-logo svg { width: 130px; height: auto; display: block; margin: 0 auto; }\n\n\/* RESPONSIVE *\/\n@media (max-width: 760px) {\n  .hero, .section, .exec-summary, .pull-quote-section, .close-section { padding-left: 20px; padding-right: 20px; }\n  .snapshot-grid, .exec-inner, .pq-inner, .disaster-steps, .gap-grid, .stats-row, .numbers-grid { grid-template-columns: 1fr; }\n  .hero-stats { flex-direction: column; }\n  .support-card { grid-template-columns: 1fr; }\n  .sc-left { padding: 12px 20px; flex-direction: row; gap: 12px; justify-content: flex-start; }\n  .pq-photo { order: -1; }\n  .pq-photo img { width: 100px; height: 100px; }\n  .tab-controls { flex-direction: column; gap: 10px; align-items: flex-start; }\n  .calc-slider-row { flex-direction: column; align-items: flex-start; }\n}\n<\/style>\n<\/head>\n<body>\n\n<div id=\"progress-bar\"><\/div>\n\n<!-- HERO -->\n<section class=\"hero\">\n  <div class=\"hero-eyebrow\">Customer Case Study<\/div>\n  <h1 id='dezlin-reveals-tried-shopify-s-free-native-b2b-here-s-what-actually-happened'  id=\"boomdevs_1\">DezLin Reveals Tried Shopify's <em>Free<\/em> Native B2B.<br>Here's What Actually Happened.<\/h1>\n  <p class=\"hero-sub\">After 6 years on Wholesale Pricing Discount B2B, the founder decided to move on and save $50 a month. What followed was a saga nobody saw coming.<\/p>\n  <div class=\"hero-stats\">\n    <div class=\"hero-stat\">\n      <span class=\"hs-num\" data-count=\"6\" data-suffix=\" yrs\">6 yrs<\/span>\n      <span class=\"hs-label\">WPD customer since 2019 \u2014 through every Shopify platform shift<\/span>\n    <\/div>\n    <div class=\"hero-stat\">\n      <span class=\"hs-num\" data-count-fraction=\"10\/10\">10\/10<\/span>\n      <span class=\"hs-label\">Tickets resolved \u2014 7 support issues + 3 theme integrations. Six years. Zero left open.<\/span>\n    <\/div>\n    <div class=\"hero-stat\">\n      <span class=\"hs-num\" data-count=\"2346\">2,346<\/span>\n      <span class=\"hs-label\">Undeletable Shopify Company records still in admin \u2014 from a 30-day test<\/span>\n    <\/div>\n    <div class=\"hero-stat\">\n      <span class=\"hs-num\" data-count=\"159\" data-prefix=\"$\" data-suffix=\"K+\">$159K+<\/span>\n      <span class=\"hs-label\">Estimated savings vs. Shopify Plus over 6 years on the WPD stack<\/span>\n    <\/div>\n  <\/div>\n  <div class=\"hero-attribution\">\n    Marc Hopper, Founder &nbsp;\u00b7&nbsp;\n    <a href=\"https:\/\/dezlinreveals.com\" target=\"_blank\" rel=\"noopener\">DezLin Reveals (dezlinreveals.com)<\/a>\n    &nbsp;\u00b7&nbsp; Los Angeles, CA\n  <\/div>\n<\/section>\n\n<!-- EXECUTIVE SUMMARY -->\n<section class=\"exec-summary\">\n  <div class=\"exec-inner\">\n    <div>\n      <div class=\"exec-label\">Why You're Reading This<\/div>\n      <h2 id='if-you-re-a-shopify-merchant-running-wholesale-or-thinking-about-canceling-your-wholesale-app-read-this-first'  id=\"boomdevs_2\">If you're a Shopify merchant running wholesale \u2014 or thinking about canceling your wholesale app \u2014 read this first.<\/h2>\n      <p>Shopify added native B2B to all paid plans. It's free. It's built-in. If you're paying for a third-party wholesale app, you've probably asked: <strong>do I still need this?<\/strong><\/p>\n      <p>Marc Hopper, founder of DezLin Reveals, asked the same question. After 6 years on Wholesale Pricing Discount B2B, he decided to find out \u2014 not just browse the feature set, but actually migrate. He was looking to cut $50 a month. Logical. Practical. Reasonable.<\/p>\n      <p>What followed was locked-out customers, 150+ wholesale buyers emailing about being unable to access their accounts, an Admin GraphQL API cleanup project, 2,346 company records he still cannot delete, and an open Shopify backend engineering ticket with no resolution date.<\/p>\n      <p>This case study covers two things: what happened when he tried to leave Wholesale Pricing Discount B2B, and \u2014 just as importantly \u2014 <strong>why the support record over six years made leaving feel like a mistake even before the Shopify disaster.<\/strong><\/p>\n    <\/div>\n    <div class=\"exec-bullets\">\n      <div class=\"eb-label\">What you'll learn<\/div>\n      <ul>\n        <li>What Shopify native B2B actually does when you test it for real<\/li>\n        <li>Why the 3-catalog limit matters more than the headline suggests<\/li>\n        <li>10 documented support interactions \u2014 how WH handled every one<\/li>\n        <li>The cost comparison that holds even now that Shopify B2B is \"free\"<\/li>\n        <li>Why Marc is still on WPD after 6 years and one expensive experiment<\/li>\n      <\/ul>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- COMPANY SNAPSHOT -->\n<section class=\"section alt\">\n  <div class=\"section-inner\">\n    <div class=\"snapshot-grid\">\n      <div>\n        <div class=\"snapshot-card\">\n          <div class=\"brand-name\">DezLin Reveals<\/div>\n          <a href=\"https:\/\/dezlinreveals.com\" target=\"_blank\" class=\"brand-url\" rel=\"noopener\">dezlinreveals.com<\/a>\n          <div class=\"snap-divider\"><\/div>\n          <div class=\"snap-row\"><span class=\"sk\">Industry<\/span><span class=\"sv\">Live Commerce \/ Gift<\/span><\/div>\n          <div class=\"snap-row\"><span class=\"sk\">Products<\/span><span class=\"sv\">Surprise reveal items<\/span><\/div>\n          <div class=\"snap-row\"><span class=\"sk\">Platform<\/span><span class=\"sv\">Shopify Basic<\/span><\/div>\n          <div class=\"snap-row\"><span class=\"sk\">Channels<\/span><span class=\"sv\">Retail + Wholesale\/Reseller<\/span><\/div>\n          <div class=\"snap-row\"><span class=\"sk\">Location<\/span><span class=\"sv\">Los Angeles, CA<\/span><\/div>\n          <div class=\"snap-since\">WPD customer since 2019 &nbsp;\u00b7&nbsp; 6+ years<\/div>\n        <\/div>\n      <\/div>\n      <div class=\"snapshot-context\">\n        <p>DezLin Reveals sells surprise reveal products \u2014 jewelry in oysters, bath bombs with hidden gems, candles with mystery items \u2014 to both retail consumers and wholesale resellers. The brand built a loyal following through TikTok Live, where the real-time reveal format turned unboxing into entertainment and created a community around the products.<\/p>\n        <p>As the brand grew, a reseller program became central to the business \u2014 not a side channel. Thousands of wholesale buyers across the country source DezLin Reveals products for boutiques, gift shops, and online stores. Wholesale now accounts for roughly half of all revenue. One Shopify store needed to automatically show completely different prices to different buyer types \u2014 without Plus.<\/p>\n        <p>Marc started solving that in 2019 with Wholesale Pricing Discount B2B. Six years, ten support tickets, three theme migrations, and one very expensive experiment with Shopify's native tools later \u2014 he's still on it.<\/p>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- BY THE NUMBERS -->\n<section class=\"section\">\n  <div class=\"section-inner\">\n    <div class=\"section-label\">By the Numbers<\/div>\n    <h2 id='the-dezlin-reveals-wholesale-operation-at-a-glance'  id=\"boomdevs_3\">The DezLin Reveals Wholesale Operation \u2014 At a Glance<\/h2>\n    <div class=\"numbers-grid\">\n      <div class=\"num-card\">\n        <span class=\"nc-n\" data-count=\"50\" data-prefix=\"~\" data-suffix=\"%\">~50%<\/span>\n        <div class=\"nc-title\">Revenue from Wholesale<\/div>\n        <div class=\"nc-sub\">Roughly half of all DezLin Reveals revenue flows through the wholesale channel. This is not an afterthought \u2014 it's core to the business.<\/div>\n      <\/div>\n      <div class=\"num-card\">\n        <span class=\"nc-n\">Thousands<\/span>\n        <div class=\"nc-title\">Wholesale Buyers<\/div>\n        <div class=\"nc-sub\">Thousands of wholesale buyers \u2014 boutiques, gift retailers, independent resellers \u2014 source DezLin Reveals products through the program.<\/div>\n      <\/div>\n      <div class=\"num-card\">\n        <span class=\"nc-n\" data-count=\"159\" data-prefix=\"$\" data-suffix=\"K+\">$159K+<\/span>\n        <div class=\"nc-title\">Saved vs. Shopify Plus<\/div>\n        <div class=\"nc-sub\">$2,211\/mo difference \u00d7 72 months = $159,192 in estimated savings over 6 years on the WPD + Basic stack vs. Plus.<\/div>\n      <\/div>\n      <div class=\"num-card accent\">\n        <span class=\"nc-n\" data-count=\"2000\" data-suffix=\"+\">2,000+<\/span>\n        <div class=\"nc-title\">Draft Orders in One Crisis<\/div>\n        <div class=\"nc-sub\">Abandoned wholesale checkouts silently piling up in Shopify admin. Marc was up past midnight deleting them 50 at a time. WH fixed the root cause.<\/div>\n      <\/div>\n      <div class=\"num-card accent\">\n        <span class=\"nc-n\" data-count=\"233\">233<\/span>\n        <div class=\"nc-title\">API Contacts Removed<\/div>\n        <div class=\"nc-sub\">Contacts manually removed via Shopify's Admin GraphQL API after the native B2B experiment locked real customers out of checkout.<\/div>\n      <\/div>\n      <div class=\"num-card slate\">\n        <span class=\"nc-n\" data-count=\"50\">50<\/span>\n        <div class=\"nc-title\">Shopify's Manual Delete Limit<\/div>\n        <div class=\"nc-sub\">Maximum draft orders Shopify allows you to delete at one time \u2014 manually, one page at a time. The reason Marc was at his desk past midnight.<\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- HOW IT STARTED -->\n<section class=\"section alt\">\n  <div class=\"section-inner\">\n    <div class=\"section-label\">How It Started \u2014 2019<\/div>\n    <h2 id='retail-and-wholesale-from-one-store-without-paying-for-plus'  id=\"boomdevs_4\">Retail and Wholesale from One Store. Without Paying for Plus.<\/h2>\n    <div class=\"body-text\">\n      <p>The wholesale problem on Shopify hasn't changed in six years: standard plans don't show customer-specific pricing. If you want a reseller to see their negotiated wholesale price and a retail customer to see the regular price \u2014 from the same storefront, automatically \u2014 you either need Shopify Plus or a specialized app.<\/p>\n      <p>Wholesale Pricing Discount B2B solved it with a tag-based approach: tag a customer as a wholesaler, assign them to a pricing group, and they see their prices every time they log in. No separate store, no workaround, no developer required. Self-service wholesale registration meant resellers could apply directly on the site, get approved, and have pricing unlocked automatically.<\/p>\n    <\/div>\n    <div class=\"info-box\">\n      <p><strong>The math since 2019:<\/strong> Shopify Basic ($39\/mo) + Wholesale Pricing Discount ($50\/mo) = $89\/mo. Full multi-tier wholesale operation, self-service registration, unlimited pricing tiers, cart-level discounts. Shopify Plus for equivalent native capabilities: $2,300\/mo. That gap \u2014 $2,211\/month \u2014 has compounded to over $159,000 over six years.<\/p>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- CUSTOMER SERVICE \u2014 ALL TICKETS -->\n<section class=\"section\">\n  <div class=\"section-inner\">\n    <div class=\"section-label\">Six Years of Customer Service<\/div>\n    <h2 id='every-issue-raised-every-issue-resolved'  id=\"boomdevs_5\">Every Issue Raised. Every Issue Resolved.<\/h2>\n    <div class=\"body-text\" style=\"margin-bottom: 28px;\">\n      <p>This isn't just a story about Shopify vs. a third-party app. It's a story about what a vendor relationship looks like when the support team actually shows up. Over six years, DezLin Reveals brought real problems to Wholesale Helper \u2014 operational crises, technical conflicts, theme migrations, third-party app incompatibilities. The record is simple: <strong>every single issue was resolved.<\/strong> No deflection. No \"that's a Shopify problem.\" No unresolved tickets.<\/p>\n    <\/div>\n\n    <div class=\"ticket-tab-wrapper\">\n      <div class=\"tab-summary\">10 Documented Interactions &nbsp;\u00b7&nbsp; 6+ Years &nbsp;\u00b7&nbsp; Every Issue Closed<\/div>\n      <div class=\"tab-controls\">\n        <div class=\"tab-pills\">\n          <button class=\"tab-btn active\" onclick=\"switchTab('support', this)\">\n            Support Issues <span class=\"tab-count\">7<\/span>\n          <\/button>\n          <button class=\"tab-btn\" onclick=\"switchTab('integration', this)\">\n            Theme Integrations <span class=\"tab-count\">3<\/span>\n          <\/button>\n        <\/div>\n        <div class=\"expand-controls\">\n          <button class=\"expand-btn\" onclick=\"expandAll()\">Expand All<\/button>\n          <button class=\"expand-btn\" onclick=\"collapseAll()\">Collapse All<\/button>\n        <\/div>\n      <\/div>\n\n      <!-- SUPPORT ISSUES TAB -->\n      <div id=\"tab-support\" class=\"tab-panel active\">\n        <div class=\"support-cards\">\n\n          <!-- Card 1: Dec 2022 Draft Orders \u2014 pre-expanded -->\n          <div class=\"support-card\" onclick=\"toggleCard(this)\">\n            <div class=\"sc-left\">\n              <div class=\"sc-icon\">\ud83d\udce6<\/div>\n              <div class=\"sc-date\">Dec 2022<\/div>\n              <div class=\"sc-badge\">Crisis<\/div>\n            <\/div>\n            <div class=\"sc-right\">\n              <div class=\"sc-title\">2,000+ Draft Orders Accumulating \u2014 Up Past Midnight to Delete Them<\/div>\n              <div class=\"sc-body\">Every abandoned wholesale checkout was silently generating a draft order in Shopify admin. Shopify only allows deletion of 50 at a time, manually. Marc was up past midnight cycling through pages \u2014 the queue grew faster than he could clear it. He escalated to the WH team. They explained the root cause in full (abandoned checkout sessions generating draft orders as a byproduct of how Shopify processes wholesale cart sessions), introduced an order tagging system immediately \u2014 WholesaleHelperManualOrder vs. WholesaleHelperRegularOrder \u2014 to differentiate and manage queues, and committed to building automatic draft order deletion as a permanent fix. That fix was built and shipped.<\/div>\n              <span class=\"sc-outcome\">Root cause explained + immediate tagging workaround + long-term auto-deletion built<\/span>\n              <span class=\"sc-expand-hint\"><\/span>\n            <\/div>\n          <\/div>\n\n          <!-- Card 2: Dec 2022 Email Config \u2014 collapsed -->\n          <div class=\"support-card collapsed\" onclick=\"toggleCard(this)\">\n            <div class=\"sc-left\">\n              <div class=\"sc-icon\">\ud83d\udce7<\/div>\n              <div class=\"sc-date\">Dec 2022<\/div>\n              <div class=\"sc-badge\">Config<\/div>\n            <\/div>\n            <div class=\"sc-right\">\n              <div class=\"sc-title\">Wholesale Customers Receiving Retail-Worded Abandoned Checkout Emails<\/div>\n              <div class=\"sc-body\">When wholesale customers abandoned their carts, Shopify's standard abandoned checkout emails \u2014 written for retail buyers \u2014 were going out to resellers. The messaging didn't match the B2B relationship and created confusion. Marc raised it alongside the draft order issue. WH worked through the email configuration specifics so that abandoned checkout behavior aligned correctly with the wholesale customer experience going forward.<\/div>\n              <span class=\"sc-outcome\">Email configuration corrected \u2014 no more retail messaging to wholesale buyers<\/span>\n              <span class=\"sc-expand-hint\"><\/span>\n            <\/div>\n          <\/div>\n\n          <!-- Card 3: Jan 2023 Cart Bug \u2014 collapsed -->\n          <div class=\"support-card collapsed\" onclick=\"toggleCard(this)\">\n            <div class=\"sc-left\">\n              <div class=\"sc-icon\">\ud83d\udd27<\/div>\n              <div class=\"sc-date\">Jan 2023<\/div>\n              <div class=\"sc-badge\">Bug Fix<\/div>\n            <\/div>\n            <div class=\"sc-right\">\n              <div class=\"sc-title\">Cart Pricing Bug Traced to Infinite Product Options Conflict<\/div>\n              <div class=\"sc-body\">A product in Marc's catalog wasn't reflecting wholesale pricing at the cart stage \u2014 the discount showed on the product page but didn't carry through to checkout. After investigation, WH traced it to a compatibility conflict with a third-party app DezLin Reveals was using for custom product options (Infinite Product Options). WH documented the incompatibility clearly, explained why it was happening at a technical level, and recommended a fully compatible alternative. Resolved within days of the conflict being identified. No finger-pointing \u2014 just a diagnosis and a fix.<\/div>\n              <span class=\"sc-outcome\">Conflict identified, documented, alternative app recommended \u2014 resolved within days<\/span>\n              <span class=\"sc-expand-hint\"><\/span>\n            <\/div>\n          <\/div>\n\n          <!-- Card 4: TEC-8130 \u2014 collapsed -->\n          <div class=\"support-card collapsed\" onclick=\"toggleCard(this)\">\n            <div class=\"sc-left slate\">\n              <div class=\"sc-ticket-id\">TEC-8130<\/div>\n              <div class=\"sc-icon\">\ud83d\udd0d<\/div>\n              <div class=\"sc-badge\">Investigation<\/div>\n            <\/div>\n            <div class=\"sc-right\">\n              <div class=\"sc-title\">\"Source: Wholesale Pricing Discount\" Text Appearing on Packing Slips<\/div>\n              <div class=\"sc-body\">Marc noticed that customer packing slips were showing a line reading \"Source: Wholesale Pricing Discount\" \u2014 text that didn't belong in customer-facing documents and raised questions from buyers. He brought it to WH to have it removed. WH investigated the full order pipeline and traced the source: the note originates from Shopify's own order import process, injected by Shopify itself \u2014 not by the WPD app. WH couldn't remove a Shopify-originated system note, but they documented the root cause clearly and helped Marc understand exactly where it was coming from. Marc had posted a critical review during the frustration. Once WH walked him through the finding, he updated it to 5 stars.<\/div>\n              <span class=\"sc-outcome\">Root cause traced to Shopify (not WPD) \u2014 full explanation provided \u2014 review updated to 5 stars<\/span>\n              <span class=\"sc-expand-hint\"><\/span>\n            <\/div>\n          <\/div>\n\n          <!-- Card 5: TEC-24471 \u2014 collapsed -->\n          <div class=\"support-card collapsed\" onclick=\"toggleCard(this)\">\n            <div class=\"sc-left slate\">\n              <div class=\"sc-ticket-id\">TEC-24471<\/div>\n              <div class=\"sc-icon\">\ud83d\udcb0<\/div>\n              <div class=\"sc-badge\">Bug Fix<\/div>\n            <\/div>\n            <div class=\"sc-right\">\n              <div class=\"sc-title\">WPD Discounts Not Applying Correctly Across the Catalog<\/div>\n              <div class=\"sc-body\">Wholesale discount pricing was failing to apply as expected for certain products or customer segments \u2014 tiers that should have triggered weren't showing correctly, making the pricing inconsistent across the catalog. The behavior was difficult to reproduce reliably, which added complexity to the diagnosis. WH investigated the discount chain systematically, identified the source of the inconsistency, and worked through a fix to restore correct wholesale pricing behavior across all affected customers and product lines.<\/div>\n              <span class=\"sc-outcome\">Discount application restored \u2014 all customer tiers displaying accurate pricing<\/span>\n              <span class=\"sc-expand-hint\"><\/span>\n            <\/div>\n          <\/div>\n\n          <!-- Card 6: TEC-23079 \u2014 collapsed -->\n          <div class=\"support-card collapsed\" onclick=\"toggleCard(this)\">\n            <div class=\"sc-left slate\">\n              <div class=\"sc-ticket-id\">TEC-23079<\/div>\n              <div class=\"sc-icon\">\ud83c\udff7\ufe0f<\/div>\n              <div class=\"sc-badge\">Theme \/ UI<\/div>\n            <\/div>\n            <div class=\"sc-right\">\n              <div class=\"sc-title\">Wholesaler-Specific Banner Not Displaying for Wholesale Customer Accounts<\/div>\n              <div class=\"sc-body\">A banner configured to display exclusively for wholesale buyers \u2014 promotional or informational messaging intended specifically for that customer segment \u2014 was not rendering correctly within the DezLin Reveals storefront. Wholesale customers who should have seen it weren't, creating an inconsistency in the B2B experience. WH investigated the theme-level rendering and the conditional display logic tied to customer tags, identified where the display was breaking down, and corrected it.<\/div>\n              <span class=\"sc-outcome\">Banner display restored for wholesale customer segment<\/span>\n              <span class=\"sc-expand-hint\"><\/span>\n            <\/div>\n          <\/div>\n\n          <!-- Card 7: TEC-Mobile \u2014 collapsed -->\n          <div class=\"support-card collapsed\" onclick=\"toggleCard(this)\">\n            <div class=\"sc-left slate\">\n              <div class=\"sc-ticket-id\">TEC-Mobile<\/div>\n              <div class=\"sc-icon\">\ud83d\udcf1<\/div>\n              <div class=\"sc-badge\">Mobile<\/div>\n            <\/div>\n            <div class=\"sc-right\">\n              <div class=\"sc-title\">Wholesale Cart Checkout Broken on Mobile Devices<\/div>\n              <div class=\"sc-body\">Wholesale buyers attempting to complete checkout from mobile devices were unable to proceed from the cart page. The flow would fail specifically at the mobile checkout stage \u2014 retail checkout was unaffected, and desktop wholesale checkout worked normally. Real customers were hitting the wall during live purchasing sessions. WH identified the mobile-specific failure within the wholesale cart handling and resolved it across device types.<\/div>\n              <span class=\"sc-outcome\">Mobile cart checkout restored for all wholesale customer accounts<\/span>\n              <span class=\"sc-expand-hint\"><\/span>\n            <\/div>\n          <\/div>\n\n        <\/div><!-- end support-cards -->\n\n        <div style=\"margin-top: 12px; padding: 12px 14px; background: var(--purple-lighter); border: 1px solid #d5ccf5; border-radius: 8px; font-size: 12.5px; color: var(--mid-text);\">\n          <strong style=\"color: var(--purple);\">Note on ticket dates:<\/strong> Three of these issues (Dec 2022 draft orders, Dec 2022 email config, Jan 2023 cart bug) are documented from email-based support interactions. Four carry formal TEC ticket numbers from the WH support system. All resolved.\n        <\/div>\n      <\/div><!-- end tab-support -->\n\n      <!-- INTEGRATION TAB -->\n      <div id=\"tab-integration\" class=\"tab-panel\">\n        <div class=\"support-cards\">\n\n          <div class=\"support-card\" onclick=\"toggleCard(this)\">\n            <div class=\"sc-left integration\">\n              <div class=\"sc-ticket-id\">TEC-6649<\/div>\n              <div class=\"sc-icon\">\ud83c\udfa8<\/div>\n              <div class=\"sc-date\">Jan 2023<\/div>\n              <div class=\"sc-badge\">Enterprise<\/div>\n            <\/div>\n            <div class=\"sc-right\">\n              <div class=\"sc-title\">Theme Integration #1 \u2014 Fee Waived Without Being Asked<\/div>\n              <div class=\"sc-body\">DezLin Reveals updated their Shopify theme and the wholesale pricing functionality needed to be re-integrated into the new storefront design. WH handled the full integration. Standard rate: $40\/hour. What WH charged: nothing. The fee was waived as a goodwill gesture \u2014 no negotiation, no request from Marc. It wasn't in a contract. They made the call and did it. This is the moment that shifted the relationship from vendor-customer to something that felt like a real working partnership.<\/div>\n              <span class=\"sc-outcome\">Full integration completed \u2014 $40\/hr fee waived proactively, no request needed<\/span>\n              <span class=\"sc-expand-hint\"><\/span>\n            <\/div>\n          <\/div>\n\n          <div class=\"support-card collapsed\" onclick=\"toggleCard(this)\">\n            <div class=\"sc-left integration\">\n              <div class=\"sc-ticket-id\">TEC-23055<\/div>\n              <div class=\"sc-icon\">\ud83c\udfa8<\/div>\n              <div class=\"sc-date\">Late 2023<\/div>\n              <div class=\"sc-badge\">Enterprise<\/div>\n            <\/div>\n            <div class=\"sc-right\">\n              <div class=\"sc-title\">Theme Integration #2 \u2014 Wholesale Pricing Running Through Every Design Change<\/div>\n              <div class=\"sc-body\">As DezLin Reveals continued evolving their storefront through 2023, another theme update required another WPD re-integration. This was the second integration the WH team had handled. No pushback, no extra friction, no \"you'll need to submit a new request.\" They handled it, wholesale pricing kept working, and the customer experience didn't miss a beat. For a brand actively refining its storefront, knowing that the wholesale infrastructure moves with it is not a small thing.<\/div>\n              <span class=\"sc-outcome\">Second integration completed \u2014 zero interruption to wholesale operations<\/span>\n              <span class=\"sc-expand-hint\"><\/span>\n            <\/div>\n          <\/div>\n\n          <div class=\"support-card collapsed\" onclick=\"toggleCard(this)\">\n            <div class=\"sc-left integration\">\n              <div class=\"sc-ticket-id\">TEC-37646<\/div>\n              <div class=\"sc-icon\">\u26a1<\/div>\n              <div class=\"sc-date\">May 2024<\/div>\n              <div class=\"sc-badge\">Same-Day<\/div>\n            <\/div>\n            <div class=\"sc-right\">\n              <div class=\"sc-title\">Theme Integration #3 \u2014 Same-Day Turnaround on Full Refresh<\/div>\n              <div class=\"sc-body\">DezLin Reveals migrated to an updated version of their theme (Be Yours). The WH team completed the WPD re-integration the same day the request came in. By the time Marc confirmed everything was working, his first question was: <em>\"Where do I go to leave you a review?\"<\/em> \u2014 unprompted, in the same message where he confirmed the integration was done. That question doesn't come from a vendor relationship. It comes from three integrations handled without friction, a fee waived without being asked, and six years of the support record documented above.<\/div>\n              <span class=\"sc-outcome\">Same-day turnaround on full theme integration \u2014 Marc immediately asked where to leave a review<\/span>\n              <span class=\"sc-expand-hint\"><\/span>\n            <\/div>\n          <\/div>\n\n        <\/div>\n      <\/div><!-- end tab-integration -->\n    <\/div><!-- end ticket-tab-wrapper -->\n  <\/div>\n<\/section>\n\n<!-- SHOPIFY DISASTER -->\n<section class=\"section lavender\">\n  <div class=\"section-inner\">\n    <div class=\"section-label\">The Decision to Leave \u2014 and What Happened<\/div>\n    <h2 id='shopify-made-b2b-free-marc-decided-to-save-$50-month-boy-was-that-wrong'  id=\"boomdevs_6\">Shopify Made B2B Free. Marc Decided to Save $50\/Month.<br>Boy Was That Wrong.<\/h2>\n    <div class=\"body-text\">\n      <p>When Shopify extended native B2B features to all paid plans \u2014 company profiles, pricing catalogs, payment terms, no extra charge \u2014 Marc did what made complete sense: he decided to move over. Not just browse the feature set. Actually migrate. He was paying $50\/month for WPD and Shopify was offering something that looked equivalent for free. The decision seemed obvious.<\/p>\n      <p>He created <strong>2,346 Company profiles<\/strong> in Shopify admin \u2014 one for each wholesale customer. At 3\u20135 minutes per profile to find the customer, enter company details, add a contact, assign a catalog, and save, that's roughly <strong>195+ hours of manual admin work<\/strong>. Clean, structured, native. Exactly what Shopify should handle natively.<\/p>\n      <p>Then real customers started logging in.<\/p>\n    <\/div>\n\n    <div class=\"disaster-steps\">\n      <div class=\"ds-step\">\n        <span class=\"ds-num\">01<\/span>\n        <div class=\"ds-title\">The Setup<\/div>\n        <div class=\"ds-body\">2,346 Company profiles created \u2014 one per wholesale customer. At 3\u20135 min each, roughly 195+ hours of manual admin work. The $50\/month saving looked real and imminent.<\/div>\n      <\/div>\n      <div class=\"ds-step\">\n        <span class=\"ds-num\">02<\/span>\n        <div class=\"ds-title\">The Lockout<\/div>\n        <div class=\"ds-body\">Real customers started hitting a hard permissions error on login. Not a test account. Not an edge case. Actual wholesale buyers, locked out of checkout.<\/div>\n      <\/div>\n      <div class=\"ds-step\">\n        <span class=\"ds-num\">03<\/span>\n        <div class=\"ds-title\">The Permanent Mess<\/div>\n        <div class=\"ds-body\">Fixing the lockout was possible. Cleaning up the 2,346 Company records afterward was not. They're still there. They cannot be deleted. They will be there indefinitely.<\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"body-text\"><p>The error customers received when they tried to log in and place an order:<\/p><\/div>\n    <div class=\"error-msg\">\"You don't have permission to place B2B orders for DezLin Reveals. Log out to place a personal order.\"<\/div>\n\n    <div class=\"body-text\">\n      <p>Marc used Shopify's Admin GraphQL API (<code>companyContactRemoveFromCompany<\/code>) to remove all customer contacts from the company profiles \u2014 233 contacts removed, 0 failures. That fixed the checkout lockout. But all 2,346 Company records still live in his Shopify admin. And before the lockout was even resolved, <strong>150+ wholesale customers had emailed<\/strong> about being unable to access their accounts \u2014 a downstream effect of Shopify's geographic location rules that prevent two resellers in the same region from seeing different prices without Shopify Plus.<\/p>\n    <\/div>\n\n    <div class=\"crisis-box\">\n      <div class=\"crisis-label\">Why the Records Can't Be Deleted \u2014 And Never Will Be<\/div>\n      <p>Error when attempting to delete: <strong>\"This company can't be deleted because it has orders.\"<\/strong><\/p>\n      <p>Shopify confirmed: this is a server-side platform restriction. It cannot be bypassed via the API. Third-party tools like Matrixify call the same mutation and hit the same wall. Marc escalated formally to Shopify's backend engineering team. As of publication, the escalation is unresolved. The 2,346 records remain permanently in his admin \u2014 polluting B2B views, customer segmentation, and company-level reporting. The 195+ hours of setup labor is unreclaimable. The experiment to save $50\/month is now a permanent fixture in the store.<\/p>\n    <\/div>\n\n    <div class=\"body-text\">\n      <p>And that was before getting to the feature gaps that would have made the migration impractical even if the Companies mess had never happened.<\/p>\n    <\/div>\n\n    <div class=\"section-label\" style=\"margin-top:32px;\">Feature Gaps \u2014 Even Without the Disaster<\/div>\n    <div class=\"body-text\" style=\"margin-bottom:16px;\"><p>Even in a clean scenario where the Companies mess never happened, the native B2B tools don't cover what DezLin Reveals actually uses:<\/p><\/div>\n    <div class=\"gap-grid\">\n      <div class=\"gap-item\">\n        <div class=\"gi-title\">3-catalog ceiling \u2014 across all markets combined<\/div>\n        <div class=\"gi-body\">Three catalogs total, not per market. One US market using all three leaves nothing for a second region or a fourth pricing tier.<\/div>\n      <\/div>\n      <div class=\"gap-item\">\n        <div class=\"gi-title\">No cart-level discounts of any kind<\/div>\n        <div class=\"gi-body\">\"Spend $1,000, get 10% off your order\" has no native mechanism. Volume pricing only works per product, not across the full cart.<\/div>\n      <\/div>\n      <div class=\"gap-item\">\n        <div class=\"gi-title\">No real self-service registration<\/div>\n        <div class=\"gi-body\">Shopify Forms collects applications \u2014 but doesn't auto-tag, auto-approve, or create company profiles. Every application is a manual admin task.<\/div>\n      <\/div>\n      <div class=\"gap-item\">\n        <div class=\"gi-title\">Discount codes activate for all customers<\/div>\n        <div class=\"gi-body\">Once enabled for B2B, they activate across all customers by default. B2B-only discount codes require additional configuration outside the native tools.<\/div>\n      <\/div>\n      <div class=\"gap-item\">\n        <div class=\"gi-title\">No POS wholesale pricing<\/div>\n        <div class=\"gi-body\">B2B pricing doesn't carry into Shopify POS. Trade shows, showrooms, in-person wholesale \u2014 none of it works natively.<\/div>\n      <\/div>\n      <div class=\"gap-item\">\n        <div class=\"gi-title\">Per-customer pricing routes through Markets<\/div>\n        <div class=\"gi-body\">Below Plus, two resellers in the same region cannot see different prices. The only workaround: Shopify Plus at $2,300\/month.<\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- PULL QUOTE -->\n<section class=\"pull-quote-section\">\n  <div class=\"pq-inner\">\n    <div class=\"pq-text-col\">\n      <span class=\"pq-mark\">&ldquo;<\/span>\n      <p class=\"pq-text\">Shopify made their B2B features free, so I decided to move over and save fifty bucks a month. I created 2,346 company profiles \u2014 one per wholesale customer. Within days, real customers were getting locked out of checkout with a permissions error, and over 150 customers emailed me about not being able to access their accounts. It took weeks of API work, I filed an escalation with Shopify engineering that's still open, and I'm permanently stuck with 2,346 records in my admin that can't be deleted. The worst part? The support I got from Wholesale Helper over six years made all of that feel even more embarrassing. When people ask why I'm still paying for the app, that's the story I tell.<\/p>\n      <div class=\"pq-attr\">\n        <strong>Marc Hopper<\/strong> &nbsp;\u00b7&nbsp; Founder, <a href=\"https:\/\/dezlinreveals.com\" target=\"_blank\" rel=\"noopener\">DezLin Reveals<\/a> &nbsp;\u00b7&nbsp; <a href=\"https:\/\/linkedin.com\/in\/timothymarchopper\" target=\"_blank\" rel=\"noopener\">LinkedIn<\/a>\n      <\/div>\n    <\/div>\n    <div class=\"pq-photo\">\n      <div class=\"ph-logo\">\n        <svg width=\"463\" height=\"133\" viewBox=\"0 0 463 133\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n          <rect width=\"463\" height=\"133\" fill=\"white\"\/>\n          <rect width=\"112\" height=\"112\" transform=\"translate(20 10)\" fill=\"#E8456A\"\/>\n          <path d=\"M68.6584 93.8328H37V42.6964H46.2641V84.5552H68.6584C79.2355 84.5552 90.542 78.711 90.542 65.9269C90.542 53.1429 79.1625 47.2987 68.6584 47.2987V38.0211C89.0831 38.0211 99.8061 52.0471 99.8061 65.9269C99.8061 79.8068 89.0831 93.8328 68.6584 93.8328Z\" fill=\"white\"\/>\n          <path d=\"M57.3518 111V101.576H65.3758C93.8246 101.576 106.736 83.0942 106.736 65.9269C106.736 48.7597 93.8246 30.2776 65.3758 30.2776H62.0203V75.6429H52.7562V21H65.3758C80.8403 21 93.8975 25.8214 103.089 34.9529C111.404 43.1347 116 54.1656 116 66C116 77.8344 111.404 88.7922 103.089 97.0471C93.8246 106.179 80.7673 111 65.3758 111H61.0538H57.3518Z\" fill=\"white\"\/>\n          <path d=\"M142.332 65V10.4H166.2C172.128 10.4 177.328 11.544 181.8 13.832C186.272 16.12 189.756 19.292 192.252 23.348C194.748 27.404 195.996 32.188 195.996 37.7C195.996 43.16 194.748 47.944 192.252 52.052C189.756 56.108 186.272 59.28 181.8 61.568C177.328 63.856 172.128 65 166.2 65H142.332ZM152.472 56.42H165.732C169.788 56.42 173.324 55.64 176.34 54.08C179.356 52.52 181.67 50.336 183.282 47.528C184.946 44.72 185.778 41.444 185.778 37.7C185.778 33.904 184.946 30.628 183.282 27.872C181.67 25.064 179.356 22.88 176.34 21.32C173.324 19.76 169.788 18.98 165.732 18.98H152.472V56.42ZM233.215 65.546C228.587 65.546 224.531 64.636 221.047 62.816C217.615 60.944 214.937 58.396 213.013 55.172C211.141 51.948 210.205 48.282 210.205 44.174C210.205 40.014 211.115 36.348 212.935 33.176C214.807 29.952 217.355 27.43 220.579 25.61C223.855 23.79 227.573 22.88 231.733 22.88C235.789 22.88 239.403 23.764 242.575 25.532C245.747 27.3 248.243 29.796 250.063 33.02C251.883 36.244 252.793 40.04 252.793 44.408C252.793 44.824 252.767 45.292 252.715 45.812C252.715 46.332 252.689 46.826 252.637 47.294H217.927V40.82H247.489L243.667 42.848C243.719 40.456 243.225 38.35 242.185 36.53C241.145 34.71 239.715 33.28 237.895 32.24C236.127 31.2 234.073 30.68 231.733 30.68C229.341 30.68 227.235 31.2 225.415 32.24C223.647 33.28 222.243 34.736 221.203 36.608C220.215 38.428 219.721 40.586 219.721 43.082V44.642C219.721 47.138 220.293 49.348 221.437 51.272C222.581 53.196 224.193 54.678 226.273 55.718C228.353 56.758 230.745 57.278 233.449 57.278C235.789 57.278 237.895 56.914 239.767 56.186C241.639 55.458 243.303 54.314 244.759 52.754L249.985 58.76C248.113 60.944 245.747 62.634 242.887 63.83C240.079 64.974 236.855 65.546 233.215 65.546ZM266.146 65V58.838L291.808 27.794L293.602 31.148H266.614V23.348H301.402V29.51L275.74 60.554L273.79 57.2H302.104V65H266.146ZM319.828 65V10.4H329.968V56.42H358.516V65H319.828ZM373.385 65V23.348H383.135V65H373.385ZM378.299 16.484C376.479 16.484 374.971 15.912 373.775 14.768C372.631 13.624 372.059 12.246 372.059 10.634C372.059 8.97 372.631 7.592 373.775 6.5C374.971 5.356 376.479 4.784 378.299 4.784C380.119 4.784 381.601 5.33 382.745 6.422C383.941 7.462 384.539 8.788 384.539 10.4C384.539 12.116 383.967 13.572 382.823 14.768C381.679 15.912 380.171 16.484 378.299 16.484ZM403.732 65V23.348H413.014V34.58L411.376 31.148C412.832 28.496 414.938 26.468 417.694 25.064C420.502 23.608 423.726 22.88 427.366 22.88C430.694 22.88 433.658 23.53 436.258 24.83C438.91 26.13 440.99 28.132 442.498 30.836C444.006 33.488 444.76 36.92 444.76 41.132V65H435.01V42.38C435.01 38.688 434.126 35.932 432.358 34.112C430.642 32.292 428.224 31.382 425.104 31.382C422.816 31.382 420.788 31.85 419.02 32.786C417.252 33.722 415.874 35.126 414.886 36.998C413.95 38.818 413.482 41.132 413.482 43.94V65H403.732Z\" fill=\"#113C50\"\/>\n          <path d=\"M142.486 123V74.7H162.289C168.729 74.7 173.766 76.218 177.4 79.254C181.08 82.29 182.92 86.499 182.92 91.881C182.92 95.423 182.092 98.482 180.436 101.058C178.78 103.588 176.411 105.543 173.329 106.923C170.293 108.257 166.636 108.924 162.358 108.924H147.454L151.456 104.853V123H142.486ZM174.088 123L161.875 105.474H171.466L183.748 123H174.088ZM151.456 105.819L147.454 101.541H161.944C165.9 101.541 168.867 100.69 170.845 98.988C172.869 97.286 173.881 94.917 173.881 91.881C173.881 88.799 172.869 86.43 170.845 84.774C168.867 83.118 165.9 82.29 161.944 82.29H147.454L151.456 77.874V105.819ZM216.347 123.483C212.253 123.483 208.665 122.678 205.583 121.068C202.547 119.412 200.178 117.158 198.476 114.306C196.82 111.454 195.992 108.211 195.992 104.577C195.992 100.897 196.797 97.654 198.407 94.848C200.063 91.996 202.317 89.765 205.169 88.155C208.067 86.545 211.356 85.74 215.036 85.74C218.624 85.74 221.821 86.522 224.627 88.086C227.433 89.65 229.641 91.858 231.251 94.71C232.861 97.562 233.666 100.92 233.666 104.784C233.666 105.152 233.643 105.566 233.597 106.026C233.597 106.486 233.574 106.923 233.528 107.337H202.823V101.61H228.974L225.593 103.404C225.639 101.288 225.202 99.425 224.282 97.815C223.362 96.205 222.097 94.94 220.487 94.02C218.923 93.1 217.106 92.64 215.036 92.64C212.92 92.64 211.057 93.1 209.447 94.02C207.883 94.94 206.641 96.228 205.721 97.884C204.847 99.494 204.41 101.403 204.41 103.611V104.991C204.41 107.199 204.916 109.154 205.928 110.856C206.94 112.558 208.366 113.869 210.206 114.789C212.046 115.709 214.162 116.169 216.554 116.169C218.624 116.169 220.487 115.847 222.143 115.203C223.799 114.559 225.271 113.547 226.559 112.167L231.182 117.48C229.526 119.412 227.433 120.907 224.903 121.965C222.419 122.977 219.567 123.483 216.347 123.483ZM257.975 123L242.174 86.154H251.144L264.737 118.653H260.321L274.397 86.154H282.677L266.876 123H257.975ZM311.276 123.483C307.182 123.483 303.594 122.678 300.512 121.068C297.476 119.412 295.107 117.158 293.405 114.306C291.749 111.454 290.921 108.211 290.921 104.577C290.921 100.897 291.726 97.654 293.336 94.848C294.992 91.996 297.246 89.765 300.098 88.155C302.996 86.545 306.285 85.74 309.965 85.74C313.553 85.74 316.75 86.522 319.556 88.086C322.362 89.65 324.57 91.858 326.18 94.71C327.79 97.562 328.595 100.92 328.595 104.784C328.595 105.152 328.572 105.566 328.526 106.026C328.526 106.486 328.503 106.923 328.457 107.337H297.752V101.61H323.903L320.522 103.404C320.568 101.288 320.131 99.425 319.211 97.815C318.291 96.205 317.026 94.94 315.416 94.02C313.852 93.1 312.035 92.64 309.965 92.64C307.849 92.64 305.986 93.1 304.376 94.02C302.812 94.94 301.57 96.228 300.65 97.884C299.776 99.494 299.339 101.403 299.339 103.611V104.991C299.339 107.199 299.845 109.154 300.857 110.856C301.869 112.558 303.295 113.869 305.135 114.789C306.975 115.709 309.091 116.169 311.483 116.169C313.553 116.169 315.416 115.847 317.072 115.203C318.728 114.559 320.2 113.547 321.488 112.167L326.111 117.48C324.455 119.412 322.362 120.907 319.832 121.965C317.348 122.977 314.496 123.483 311.276 123.483ZM365.47 123V115.548L364.987 113.961V100.92C364.987 98.39 364.228 96.435 362.71 95.055C361.192 93.629 358.892 92.916 355.81 92.916C353.74 92.916 351.693 93.238 349.669 93.882C347.691 94.526 346.012 95.423 344.632 96.573L341.251 90.294C343.229 88.776 345.575 87.649 348.289 86.913C351.049 86.131 353.901 85.74 356.845 85.74C362.181 85.74 366.298 87.028 369.196 89.604C372.14 92.134 373.612 96.067 373.612 101.403V123H365.47ZM353.878 123.483C351.118 123.483 348.703 123.023 346.633 122.103C344.563 121.137 342.953 119.826 341.803 118.17C340.699 116.468 340.147 114.559 340.147 112.443C340.147 110.373 340.63 108.51 341.596 106.854C342.608 105.198 344.241 103.887 346.495 102.921C348.749 101.955 351.739 101.472 355.465 101.472H366.16V107.199H356.086C353.142 107.199 351.164 107.682 350.152 108.648C349.14 109.568 348.634 110.718 348.634 112.098C348.634 113.662 349.255 114.904 350.497 115.824C351.739 116.744 353.464 117.204 355.672 117.204C357.788 117.204 359.674 116.721 361.33 115.755C363.032 114.789 364.251 113.363 364.987 111.477L366.436 116.652C365.608 118.814 364.113 120.493 361.951 121.689C359.835 122.885 357.144 123.483 353.878 123.483ZM391.581 123V71.802H400.206V123H391.581ZM429.811 123.483C426.729 123.483 423.762 123.092 420.91 122.31C418.104 121.482 415.873 120.493 414.217 119.343L417.529 112.788C419.185 113.846 421.163 114.72 423.463 115.41C425.763 116.1 428.063 116.445 430.363 116.445C433.077 116.445 435.032 116.077 436.228 115.341C437.47 114.605 438.091 113.616 438.091 112.374C438.091 111.362 437.677 110.603 436.849 110.097C436.021 109.545 434.94 109.131 433.606 108.855C432.272 108.579 430.777 108.326 429.121 108.096C427.511 107.866 425.878 107.567 424.222 107.199C422.612 106.785 421.14 106.21 419.806 105.474C418.472 104.692 417.391 103.657 416.563 102.369C415.735 101.081 415.321 99.379 415.321 97.263C415.321 94.917 415.988 92.893 417.322 91.191C418.656 89.443 420.519 88.109 422.911 87.189C425.349 86.223 428.224 85.74 431.536 85.74C434.02 85.74 436.527 86.016 439.057 86.568C441.587 87.12 443.68 87.902 445.336 88.914L442.024 95.469C440.276 94.411 438.505 93.698 436.711 93.33C434.963 92.916 433.215 92.709 431.467 92.709C428.845 92.709 426.89 93.1 425.602 93.882C424.36 94.664 423.739 95.653 423.739 96.849C423.739 97.953 424.153 98.781 424.981 99.333C425.809 99.885 426.89 100.322 428.224 100.644C429.558 100.966 431.03 101.242 432.64 101.472C434.296 101.656 435.929 101.955 437.539 102.369C439.149 102.783 440.621 103.358 441.955 104.094C443.335 104.784 444.439 105.773 445.267 107.061C446.095 108.349 446.509 110.028 446.509 112.098C446.509 114.398 445.819 116.399 444.439 118.101C443.105 119.803 441.196 121.137 438.712 122.103C436.228 123.023 433.261 123.483 429.811 123.483Z\" fill=\"#113C50\"\/>\n        <\/svg>\n      <\/div>\n      <img decoding=\"async\" src=\"https:\/\/wholesalehelper.io\/blog\/wp-content\/uploads\/2026\/05\/Dezlin-copy.png\" alt=\"Marc Hopper, Founder of DezLin Reveals\">\n      <div class=\"ph-name\">Marc Hopper<\/div>\n      <div class=\"ph-title\">Founder, DezLin Reveals<\/div>\n      <div class=\"ph-link\"><a href=\"https:\/\/dezlinreveals.com\" target=\"_blank\" rel=\"noopener\">dezlinreveals.com<\/a><\/div>\n      <div class=\"ph-link\" style=\"margin-top:4px;\"><a href=\"https:\/\/linkedin.com\/in\/timothymarchopper\" target=\"_blank\" rel=\"noopener\">LinkedIn Profile<\/a><\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- RESULTS -->\n<section class=\"section alt\">\n  <div class=\"section-inner\">\n    <div class=\"section-label\">The Bottom Line<\/div>\n    <h2 id='six-years-one-platform-every-support-request-resolved'  id=\"boomdevs_7\">Six Years. One Platform. Every Support Request Resolved.<\/h2>\n\n    <div class=\"stats-row\">\n      <div class=\"stat-box\">\n        <span class=\"sn\" data-count=\"6\">6<\/span>\n        <div class=\"sd\">Years as a WPD customer. Through an operational crisis, 3 theme migrations, and a full competitive test against Shopify's native tools.<\/div>\n        <div class=\"sc\">Zero platform switches<\/div>\n      <\/div>\n      <div class=\"stat-box\">\n        <span class=\"sn warning\" data-count=\"2346\">2,346<\/span>\n        <div class=\"sd\">Permanent Shopify Company records in admin from a 30-day test. ~195 hours of setup labor. Cannot be deleted. Shopify escalation still open.<\/div>\n        <div class=\"sc warning\">The cost of \"free\"<\/div>\n      <\/div>\n      <div class=\"stat-box\">\n        <span class=\"sn\" data-count-fraction=\"10\/10\">10\/10<\/span>\n        <div class=\"sd\">Tickets raised over 6 years. 7 support issues + 3 theme integrations. Fully resolved: ten. Unresolved: zero.<\/div>\n        <div class=\"sc\">7 support \u00b7 3 integrations \u00b7 all closed<\/div>\n      <\/div>\n    <\/div>\n\n    <!-- SAVINGS CALCULATOR -->\n    <div class=\"calc-widget\">\n      <div class=\"calc-title\">Side-by-Side Cost Comparison<\/div>\n      <div class=\"calc-sub\">Drag the slider to see what each stack costs over time<\/div>\n      <div class=\"calc-slider-row\">\n        <span class=\"calc-slider-label\">Years:<\/span>\n        <input type=\"range\" min=\"1\" max=\"10\" value=\"6\" id=\"calc-slider\" oninput=\"updateCalc(this.value)\">\n        <span class=\"calc-year-val\" id=\"calc-years\">6 years<\/span>\n      <\/div>\n      <div style=\"display:grid; grid-template-columns:1fr 1fr 1fr; gap:12px; margin-top:4px;\">\n        <div style=\"background:rgba(100,52,209,0.18); border:1px solid rgba(100,52,209,0.35); border-radius:10px; padding:16px 18px;\">\n          <div style=\"font-size:11px; font-weight:800; color:rgba(255,255,255,0.5); text-transform:uppercase; letter-spacing:0.1em; margin-bottom:6px;\">Shopify + WPD<\/div>\n          <div style=\"font-size:11px; color:rgba(255,255,255,0.4); margin-bottom:8px;\">$89\/mo \u2014 Basic + WPD<\/div>\n          <div style=\"font-family:'Fraunces',serif; font-size:28px; font-weight:700; color:#c4a8ff;\" id=\"calc-wpd-total\">$6,408<\/div>\n        <\/div>\n        <div style=\"background:rgba(240,0,105,0.12); border:1px solid rgba(240,0,105,0.3); border-radius:10px; padding:16px 18px;\">\n          <div style=\"font-size:11px; font-weight:800; color:rgba(255,255,255,0.5); text-transform:uppercase; letter-spacing:0.1em; margin-bottom:6px;\">Shopify Plus<\/div>\n          <div style=\"font-size:11px; color:rgba(255,255,255,0.4); margin-bottom:8px;\">$2,300\/mo native B2B<\/div>\n          <div style=\"font-family:'Fraunces',serif; font-size:28px; font-weight:700; color:#ff709d;\" id=\"calc-plus-total\">$165,600<\/div>\n        <\/div>\n        <div style=\"background:rgba(255,255,255,0.05); border:1px solid rgba(255,255,255,0.12); border-radius:10px; padding:16px 18px;\">\n          <div style=\"font-size:11px; font-weight:800; color:rgba(255,255,255,0.5); text-transform:uppercase; letter-spacing:0.1em; margin-bottom:6px;\">You Save<\/div>\n          <div style=\"font-size:11px; color:rgba(255,255,255,0.4); margin-bottom:8px;\">with WPD over <span id=\"calc-years2b\">6 yrs<\/span><\/div>\n          <div style=\"font-family:'Fraunces',serif; font-size:28px; font-weight:700; color:#a3e4b0;\" id=\"calc-savings\">$159,192<\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"section-label\" style=\"margin-top:8px; margin-bottom:16px;\">Cost Comparison \u2014 The Full Picture<\/div>\n    <table class=\"cost-table\">\n      <thead>\n        <tr><th>Setup<\/th><th>Monthly Cost<\/th><th>What You Actually Get<\/th><\/tr>\n      <\/thead>\n      <tbody>\n        <tr>\n          <td><strong>Shopify Basic \u2014 Native B2B Only<\/strong><\/td>\n          <td><span class=\"cost-price\">$39<\/span><div class=\"cost-note\">Plus the Companies cleanup risk if you ever test native B2B and need to reverse course<\/div><\/td>\n          <td>3 catalogs combined across all markets, company profiles, volume pricing, net terms. No cart discounts, no auto-registration, no POS, no advanced shipping. Discount codes and abandoned checkout emails off by default.<\/td>\n        <\/tr>\n        <tr>\n          <td><strong>Shopify + Wholesale Helper Apps<\/strong><br><small style=\"color:var(--purple); font-weight:700;\">What DezLin Reveals uses<\/small><\/td>\n          <td><span class=\"cost-price\">~$89<\/span><div class=\"cost-note\">Everything works. 10 years of support precedent. No cleanup risk.<\/div><\/td>\n          <td>Unlimited pricing tiers, self-service registration with auto-approval, cart-total and cart-quantity discounts, per-tier shipping, wholesale discount codes, content locking by customer tag, full order form, PDF invoices with net terms, Shopify POS integration.<\/td>\n        <\/tr>\n        <tr>\n          <td><strong>Shopify Plus<\/strong><\/td>\n          <td><span class=\"cost-price\">$2,300<\/span><div class=\"cost-note\">58\u00d7 the price of Shopify Basic for capabilities WPD covers at $50<\/div><\/td>\n          <td>All native features + unlimited catalogs, deposits, EDI. Still missing: content locking, order forms, self-service registration, payment reminders, POS wholesale pricing.<\/td>\n        <\/tr>\n      <\/tbody>\n    <\/table>\n\n    <div class=\"section-label\" style=\"margin-top:8px; margin-bottom:16px;\">Feature Comparison<\/div>\n    <table class=\"comp-table\">\n      <thead>\n        <tr><th>Capability<\/th><th>Shopify Native B2B<\/th><th class=\"highlight\">Wholesale Pricing Discount<\/th><\/tr>\n      <\/thead>\n      <tbody>\n        <tr><td>Pricing tiers<\/td><td>3 catalogs max \u2014 across all markets combined<\/td><td class=\"wpd-col\"><span class=\"check\">\u2713<\/span> Unlimited via customer tags<\/td><\/tr>\n        <tr><td>Cart-level discounts<\/td><td><span class=\"cross\">\u2717<\/span> Not available at any plan<\/td><td class=\"wpd-col\"><span class=\"check\">\u2713<\/span> Cart total &amp; quantity rules<\/td><\/tr>\n        <tr><td>Self-service registration<\/td><td><span class=\"cross\">\u2717<\/span> Every application is a manual admin task<\/td><td class=\"wpd-col\"><span class=\"check\">\u2713<\/span> Built-in form + auto-tagging<\/td><\/tr>\n        <tr><td>Per-customer pricing (non-Plus)<\/td><td>Via Markets only \u2014 geographic restrictions apply<\/td><td class=\"wpd-col\"><span class=\"check\">\u2713<\/span> Direct tag assignment, any plan<\/td><\/tr>\n        <tr><td>POS wholesale pricing<\/td><td><span class=\"cross\">\u2717<\/span> Not available<\/td><td class=\"wpd-col\"><span class=\"check\">\u2713<\/span> Full POS integration<\/td><\/tr>\n        <tr><td>Per-tier shipping rates<\/td><td><span class=\"cross\">\u2717<\/span> Not B2B-aware<\/td><td class=\"wpd-col\"><span class=\"check\">\u2713<\/span> Configurable per tier<\/td><\/tr>\n        <tr><td>Content locking by customer segment<\/td><td><span class=\"cross\">\u2717<\/span> Not available<\/td><td class=\"wpd-col\"><span class=\"check\">\u2713<\/span> Hide products\/collections by tag<\/td><\/tr>\n        <tr><td>Company record cleanup risk<\/td><td>Permanent if you test and reverse \u2014 no deletion API<\/td><td class=\"wpd-col\"><span class=\"check\">\u2713<\/span> No company profiles to manage<\/td><\/tr>\n        <tr><td>Support track record<\/td><td>General Shopify support \u2014 1 escalation, unresolved<\/td><td class=\"wpd-col\"><span class=\"check\">\u2713<\/span> 10 issues raised, 10 resolved<\/td><\/tr>\n        <tr><td>Requires Shopify Plus<\/td><td>For most advanced features<\/td><td class=\"wpd-col\"><span class=\"check\">\u2713<\/span> Works on Shopify Basic<\/td><\/tr>\n      <\/tbody>\n    <\/table>\n  <\/div>\n<\/section>\n\n<!-- FAQ -->\n<section class=\"section faq-section\">\n  <div class=\"section-inner\">\n    <div class=\"section-label\">Frequently Asked Questions<\/div>\n    <h2 id='what-merchants-ask-before-switching-answered-honestly'  id=\"boomdevs_8\">What Merchants Ask Before Switching \u2014 Answered Honestly<\/h2>\n    <div class=\"body-text\" style=\"margin-bottom:28px;\">\n      <p>These are the questions merchants typically ask before changing their wholesale setup \u2014 whether considering WPD, evaluating Shopify's native B2B, or thinking about switching off an existing app. Answered based on six years of documented real-world use.<\/p>\n    <\/div>\n\n    <div class=\"faq-list\">\n\n      <details class=\"faq-item\">\n        <summary class=\"faq-q\">Does Wholesale Pricing Discount B2B work on Shopify Basic, or do I need Shopify Plus?<\/summary>\n        <div class=\"faq-a\">\n          <p>WPD works on <strong>all Shopify paid plans<\/strong> \u2014 Basic, Shopify, Advanced, and Plus. This is the central value proposition. DezLin Reveals has run a wholesale program serving thousands of resellers and generating roughly half of all company revenue on Shopify Basic at $39\/month. Shopify's own native B2B tools, by contrast, require Plus for most advanced features (unlimited catalogs, per-customer pricing beyond Markets restrictions, advanced payment terms). WPD closes that gap without the $2,300\/month price tag.<\/p>\n        <\/div>\n      <\/details>\n\n      <details class=\"faq-item\">\n        <summary class=\"faq-q\">What happens to my existing wholesale customers if I install WPD? Do they need to do anything?<\/summary>\n        <div class=\"faq-a\">\n          <p>Your customers don't notice the change. WPD works by assigning <strong>customer tags<\/strong> in Shopify \u2014 tags your customers already have on their accounts, or tags you apply during onboarding. There are no new login systems, no new customer portals, and no migration emails to send. Customers log in to your store exactly as they always have, and their wholesale pricing activates automatically based on their tag.<\/p>\n          <p>If you're migrating from Shopify's native B2B (Company profiles), the migration is more involved \u2014 see the next question. If you're installing WPD fresh or migrating from another tag-based app, it's generally a matter of tagging customers and setting up pricing tiers.<\/p>\n        <\/div>\n      <\/details>\n\n      <details class=\"faq-item\">\n        <summary class=\"faq-q\">What if I tested Shopify native B2B and now want to switch to WPD? Can I get rid of the Company profiles?<\/summary>\n        <div class=\"faq-a\">\n          <p>This is the most important question in this case study. <strong>Short answer: you can remove contacts from the Company profiles, but you cannot delete the Company records themselves once they have orders attached.<\/strong><\/p>\n          <p>Marc's experience: He created 2,346 Company profiles while testing Shopify's native B2B. He used the Admin GraphQL API (<code>companyContactRemoveFromCompany<\/code>) to successfully remove all 233 contacts \u2014 which resolved the checkout lockout for his customers. But the 2,346 Company records themselves remain permanently in his admin. Shopify confirmed this is a server-side platform restriction with no API bypass. Matrixify hits the same wall. Marc escalated to Shopify's backend engineering team and the ticket remains unresolved as of publication.<\/p>\n          <p>The records pollute B2B admin views, customer segmentation filters, and company-level reporting. They're permanent \u2014 representing in Marc's case 195+ hours of setup work that produced a fixture he can never remove.<\/p>\n          <p><strong>Recommendation:<\/strong> If you're testing Shopify native B2B before committing, use a small number of test Company profiles (ideally with no real orders attached). Once a company has orders, it's permanent.<\/p>\n        <\/div>\n      <\/details>\n\n      <details class=\"faq-item\">\n        <summary class=\"faq-q\">How do wholesale pricing and retail pricing coexist on the same storefront? Do customers see each other's prices?<\/summary>\n        <div class=\"faq-a\">\n          <p>No \u2014 WPD's tag-based system shows pricing based on who's logged in. A retail visitor sees retail prices. A logged-in wholesale buyer sees their negotiated wholesale price \u2014 and only their price. No code is required to separate the views; it's handled by the tag assignment.<\/p>\n          <p>You can run <strong>unlimited pricing tiers<\/strong> this way: Silver resellers, Gold resellers, Distributors, VIPs \u2014 each sees only their tier's pricing. There's no cap on tiers. Shopify's native B2B, by contrast, caps at 3 catalogs across all markets combined. If your US market uses all three, there's nothing left for a second region or a fourth tier.<\/p>\n        <\/div>\n      <\/details>\n\n      <details class=\"faq-item\">\n        <summary class=\"faq-q\">Can wholesale customers register themselves, or does someone have to manually approve every reseller?<\/summary>\n        <div class=\"faq-a\">\n          <p>WPD includes a <strong>built-in self-service registration flow<\/strong>. Resellers apply directly on your storefront, and you can configure automatic approval with automatic tag assignment \u2014 meaning approved resellers get their wholesale pricing activated without anyone touching the admin. You can also set up manual review if you want to vet each applicant.<\/p>\n          <p>Shopify's native B2B has no equivalent. The Shopify Forms app can collect registration applications, but it does not auto-tag, auto-approve, or create Company profiles. Every application requires a human to go into Shopify admin, create a Company, add the contact, assign a catalog, and save. At the scale DezLin Reveals operates, that's not a process \u2014 it's a full-time job.<\/p>\n        <\/div>\n      <\/details>\n\n      <details class=\"faq-item\">\n        <summary class=\"faq-q\">Can I offer cart-level discounts \u2014 like \"spend $500 and get 10% off your whole order\" \u2014 for wholesale buyers?<\/summary>\n        <div class=\"faq-a\">\n          <p>Yes. WPD supports both <strong>cart-total discounts<\/strong> (spend threshold triggers a discount) and <strong>cart-quantity discounts<\/strong> (buy X units of anything to unlock pricing). These are separate from per-product volume pricing and work across the full cart. You can set different thresholds per pricing tier.<\/p>\n          <p>Shopify's native B2B has no cart-level discount mechanism at any plan level. Volume pricing works per-product, not across the cart. There's no native \"spend $1,000, get 10% off\" \u2014 period. This is one of the most commonly cited gaps among merchants evaluating Shopify's native tools.<\/p>\n        <\/div>\n      <\/details>\n\n      <details class=\"faq-item\">\n        <summary class=\"faq-q\">Does WPD work with Shopify POS for in-person wholesale orders (trade shows, showrooms)?<\/summary>\n        <div class=\"faq-a\">\n          <p>Yes \u2014 WPD integrates with Shopify POS, so wholesale pricing carries through to in-person orders. A wholesale buyer at a trade show or showroom can be rung up at their tier's price using POS without any workaround.<\/p>\n          <p>Shopify's native B2B does not support POS wholesale pricing. B2B catalogs and pricing are online-only. Any merchant doing in-person wholesale \u2014 trade shows, rep showrooms, market days \u2014 has to handle pricing manually or use a workaround. For DezLin Reveals, which participates in trade events, this was a dealbreaker for native B2B even before the Company profile disaster.<\/p>\n        <\/div>\n      <\/details>\n\n      <details class=\"faq-item\">\n        <summary class=\"faq-q\">Two of my resellers are in the same state. Can they see different prices, or does Shopify's location rule force them to the same catalog?<\/summary>\n        <div class=\"faq-a\">\n          <p>With WPD: yes, two resellers in the same location can see completely different prices \u2014 pricing is based on the customer's tag, not their geography. A Silver reseller and a Gold reseller in Los Angeles see their respective tier's pricing with no conflict.<\/p>\n          <p>With Shopify's native B2B (below Plus): no. Pricing catalogs are assigned through Shopify Markets, which are geographic segments. Two customers in the same market see the same catalog. The only way to give two resellers in the same region different prices is Shopify Plus at $2,300\/month. This geographic restriction is what caused 150+ DezLin Reveals customers to email about being unable to access their accounts during the native B2B test \u2014 they were being served the wrong pricing context based on location rather than their individual wholesale relationship.<\/p>\n        <\/div>\n      <\/details>\n\n      <details class=\"faq-item\">\n        <summary class=\"faq-q\">What about net terms and wholesale-specific invoices \u2014 can WPD handle B2B payment terms?<\/summary>\n        <div class=\"faq-a\">\n          <p>Yes. WPD supports <strong>PDF invoices with net terms<\/strong> \u2014 Net 30, Net 60, or custom terms you define. Wholesale buyers can receive invoices formatted for B2B purchasing rather than retail receipts, and you can configure payment terms per customer tier.<\/p>\n          <p>Shopify's native B2B also offers payment terms, but only on Shopify Plus. On Basic through Advanced plans, payment terms are not available natively. WPD makes this functionality accessible without a Plus upgrade.<\/p>\n        <\/div>\n      <\/details>\n\n      <details class=\"faq-item\">\n        <summary class=\"faq-q\">Will WPD conflict with other apps I'm running \u2014 like product customization apps, page builders, or review apps?<\/summary>\n        <div class=\"faq-a\">\n          <p>Generally no, but app conflicts are the most common support issue any wholesale app encounters \u2014 and they're usually resolvable. DezLin Reveals documented two third-party app conflicts with WPD over six years: one with Infinite Product Options (pricing didn't carry through at the cart stage) and one with PageFly (pricing display on PageFly-built pages). In both cases, <strong>WH diagnosed the conflict, documented it clearly, and recommended a fix<\/strong> \u2014 in the Infinite Product Options case, recommending a compatible alternative app.<\/p>\n          <p>The key is support responsiveness when a conflict does happen. WH's track record \u2014 10 issues raised over 6 years, 10 resolved \u2014 includes both of those conflicts. Conflicts happen; what matters is who shows up to fix them.<\/p>\n          <p>For app compatibility specifically: WH maintains documentation on known conflicts and recommends apps that work cleanly with WPD. If you're running a complex app stack, it's worth checking with WH support before committing to a migration.<\/p>\n        <\/div>\n      <\/details>\n\n      <details class=\"faq-item\">\n        <summary class=\"faq-q\">How long does setup take, and does WH help with theme integration?<\/summary>\n        <div class=\"faq-a\">\n          <p>Initial WPD setup \u2014 pricing tiers, customer tags, registration form \u2014 typically takes a few hours for a straightforward store. If you have a complex pricing structure or a heavily customized theme, it may take longer.<\/p>\n          <p>Theme integration (making sure WPD displays correctly within your storefront's design) is something WH handles as a service. DezLin Reveals went through <strong>three theme integrations over six years<\/strong> as the brand's design evolved \u2014 all handled by WH, one same-day. The first integration's fee was waived entirely without Marc asking.<\/p>\n          <p>Compare this to the setup burden on the Shopify native B2B side: Marc spent an estimated 195+ hours manually creating 2,346 Company profiles \u2014 and that's before any of the lockout issues emerged. Setup effort matters. WPD's tag-based system scales without proportional admin overhead.<\/p>\n        <\/div>\n      <\/details>\n\n      <details class=\"faq-item\">\n        <summary class=\"faq-q\">Shopify keeps adding native features. At what point does WPD stop being necessary?<\/summary>\n        <div class=\"faq-a\">\n          <p>This is the right question to ask, and the honest answer is: it depends on what features you actually use.<\/p>\n          <p>Shopify's native B2B has genuinely improved. If your wholesale program is simple \u2014 one pricing tier, one market, no self-service registration, no cart discounts, no POS \u2014 Shopify's native tools may be sufficient today. The 3-catalog limit matters less if you only have one tier.<\/p>\n          <p>For programs that look like DezLin Reveals \u2014 multiple pricing tiers, self-service registration, cart-level discounts, POS sales, resellers in overlapping geographic regions \u2014 Shopify's native B2B still falls short even after the 2024\u20132025 feature expansions. The specific gaps documented in this case study (catalog ceiling, no cart discounts, no registration automation, no POS, geographic pricing restrictions) are structural, not bugs waiting to be patched.<\/p>\n          <p>What changed with the \"free\" expansion was that the headline got better. The underlying capabilities didn't catch up to what a real multi-tier wholesale operation needs. And the Company records cleanup problem means the cost of testing and reversing is now permanent and irreversible \u2014 a risk that didn't exist before Company profiles became part of the non-Plus product.<\/p>\n        <\/div>\n      <\/details>\n\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- CLOSE -->\n<section class=\"close-section\">\n  <div style=\"max-width:600px; margin:0 auto;\">\n    <h2 id='dezlin-reveals-is-still-running-on-wpd'  id=\"boomdevs_9\">DezLin Reveals Is Still Running on WPD.<\/h2>\n    <p>Six years in, wholesale accounts for roughly half of all DezLin Reveals revenue. Thousands of resellers across the country carry the products. The entire program runs on an $89\/month stack. The 2,346 Shopify Company records sitting permanently in the admin \u2014 representing 195+ hours of setup labor that can never be undone \u2014 are a concrete reminder of what \"free\" actually cost. And why six years of customer service made the decision to come back very easy.<\/p>\n    <a href=\"https:\/\/apps.shopify.com\/wholesale-pricing-discount?utm_source=wsh-blog&amp;utm_medium=wpd-cta-button&amp;utm_campaign=wpd-app\" target=\"_blank\" class=\"cta-btn\" rel=\"noopener\">See How WPD Works for Your Store \u2192<\/a>\n \n  <\/div>\n<\/section>\n\n<script>\n\/\/ \u2500\u2500 ANIMATED COUNTERS \u2500\u2500\nvar animated = new Set();\nvar countEls = document.querySelectorAll('[data-count], [data-count-fraction]');\n\nvar counterObserver = new IntersectionObserver(function(entries) {\n  entries.forEach(function(entry) {\n    if (entry.isIntersecting && !animated.has(entry.target)) {\n      animated.add(entry.target);\n      var el = entry.target;\n      if (el.dataset.countFraction) {\n        animateFraction(el, el.dataset.countFraction);\n      } else {\n        var target = parseInt(el.dataset.count);\n        var prefix = el.dataset.prefix || '';\n        var suffix = el.dataset.suffix || '';\n        animateCount(el, target, prefix, suffix);\n      }\n    }\n  });\n}, { threshold: 0.4 });\n\ncountEls.forEach(function(el) { counterObserver.observe(el); });\n\nfunction animateCount(el, target, prefix, suffix) {\n  var duration = target > 100 ? 1800 : 1200;\n  var start = performance.now();\n  var originalText = el.textContent;\n  function update(now) {\n    var elapsed = now - start;\n    var progress = Math.min(elapsed \/ duration, 1);\n    var eased = 1 - Math.pow(1 - progress, 3);\n    var current = Math.floor(eased * target);\n    el.textContent = prefix + current.toLocaleString() + suffix;\n    if (progress < 1) requestAnimationFrame(update);\n    else el.textContent = originalText;\n  }\n  requestAnimationFrame(update);\n}\n\nfunction animateFraction(el, fraction) {\n  var parts = fraction.split('\/');\n  var num = parseInt(parts[0]);\n  var den = parseInt(parts[1]);\n  var duration = 1200;\n  var start = performance.now();\n  function update(now) {\n    var elapsed = now - start;\n    var progress = Math.min(elapsed \/ duration, 1);\n    var eased = 1 - Math.pow(1 - progress, 3);\n    var current = Math.floor(eased * num);\n    el.textContent = current + '\/' + den;\n    if (progress < 1) requestAnimationFrame(update);\n    else el.textContent = num + '\/' + den;\n  }\n  requestAnimationFrame(update);\n}\n\n\/\/ \u2500\u2500 TAB TOGGLE \u2500\u2500\nfunction switchTab(tabId, btn) {\n  document.querySelectorAll('.tab-panel').forEach(function(p) { p.classList.remove('active'); });\n  document.querySelectorAll('.tab-btn').forEach(function(b) { b.classList.remove('active'); });\n  document.getElementById('tab-' + tabId).classList.add('active');\n  btn.classList.add('active');\n}\n\n\/\/ \u2500\u2500 EXPANDABLE CARDS \u2500\u2500\nfunction toggleCard(card) {\n  card.classList.toggle('collapsed');\n}\n\nfunction expandAll() {\n  document.querySelectorAll('#tab-support .support-card').forEach(function(c) {\n    c.classList.remove('collapsed');\n  });\n}\n\nfunction collapseAll() {\n  document.querySelectorAll('#tab-support .support-card').forEach(function(c) {\n    c.classList.add('collapsed');\n  });\n}\n\n\/\/ \u2500\u2500 SAVINGS CALCULATOR \u2500\u2500\nfunction updateCalc(years) {\n  var y = parseInt(years);\n  var wpdTotal = 89 * 12 * y;\n  var plusTotal = 2300 * 12 * y;\n  var savings = plusTotal - wpdTotal;\n  var label = y + ' year' + (y > 1 ? 's' : '');\n  document.getElementById('calc-years').textContent = label;\n  if (document.getElementById('calc-years2')) document.getElementById('calc-years2').textContent = label;\n  document.getElementById('calc-years2b').textContent = y + ' yr' + (y > 1 ? 's' : '');\n  document.getElementById('calc-wpd-total').textContent = '$' + wpdTotal.toLocaleString();\n  document.getElementById('calc-plus-total').textContent = '$' + plusTotal.toLocaleString();\n  document.getElementById('calc-savings').textContent = '$' + savings.toLocaleString();\n}\n<\/script>\n<\/body>\n<\/html>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>DezLin Reveals Case Study \u2014 Wholesale Pricing Discount B2B Customer Case Study DezLin Reveals Tried Shopify&#8217;s Free Native B2B.Here&#8217;s What Actually Happened. After 6 years on Wholesale Pricing Discount B2B, the founder decided to move on and save $50 a month. What followed was a saga nobody saw coming. 6 yrs WPD customer since 2019<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":2,"featured_media":5359,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"elementor_header_footer","format":"standard","meta":{"postBodyCss":"","postBodyMargin":[],"postBodyPadding":[],"postBodyBackground":{"backgroundType":"classic","gradient":""},"_ayudawp_aiss_exclude":false,"footnotes":""},"categories":[6],"tags":[],"class_list":{"0":"post-5441","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-case-studies"},"featured_image_src":"https:\/\/wholesalehelper.io\/blog\/wp-content\/uploads\/2026\/04\/DezLin-case-study-by-Wholesale-Helper.png","author_info":{"display_name":"Wholesale Helper","author_link":"https:\/\/wholesalehelper.io\/blog\/author\/wholesale-helper\/"},"gt_translate_keys":[{"key":"link","format":"url"}],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/wholesalehelper.io\/blog\/wp-json\/wp\/v2\/posts\/5441","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wholesalehelper.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wholesalehelper.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wholesalehelper.io\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/wholesalehelper.io\/blog\/wp-json\/wp\/v2\/comments?post=5441"}],"version-history":[{"count":12,"href":"https:\/\/wholesalehelper.io\/blog\/wp-json\/wp\/v2\/posts\/5441\/revisions"}],"predecessor-version":[{"id":5458,"href":"https:\/\/wholesalehelper.io\/blog\/wp-json\/wp\/v2\/posts\/5441\/revisions\/5458"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wholesalehelper.io\/blog\/wp-json\/wp\/v2\/media\/5359"}],"wp:attachment":[{"href":"https:\/\/wholesalehelper.io\/blog\/wp-json\/wp\/v2\/media?parent=5441"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wholesalehelper.io\/blog\/wp-json\/wp\/v2\/categories?post=5441"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wholesalehelper.io\/blog\/wp-json\/wp\/v2\/tags?post=5441"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}