A boutique owner in Columbus finds your line at a trade show on a Friday afternoon. That evening she fills out the wholesale application on your site: store name, website, resale certificate number, the volume she has in mind. It takes her four minutes. Then nothing happens, because the form posted into a queue that nobody looks at until Monday.

She did not spend the weekend waiting. She applied to three brands that afternoon, the way wholesale buyers always do, and one of them wrote back the same evening with a login and a price list. Her opening budget landed there on Saturday morning. When your approval email finally goes out on Tuesday, it reads less like a welcome and more like an apology.

Nothing in that story involves a difficult decision. Her shop is real, her certificate checks out, her website matches her email domain. Any person who looked at the application for ninety seconds would have said yes. The problem is that on Shopify, a person looking at it for ninety seconds is the entire system.

What Shopify actually gives you

Credit first, because the intake half of this got meaningfully better. On Shopify Plus, the B2B feature set is real: companies with locations, catalogs with their own price lists, payment terms, and buyers who log in and order against all of it. And since Shopify added company account requests, a prospect can apply through a Shopify Forms form on your storefront, and the submission automatically creates the company, a company location, and a customer record in your admin. The requests line up in a review queue, the raw submissions are kept as metaobject entries, and you approve or decline each one with a click. If you are on Plus and still routing applications through a contact form into a shared inbox, switch today. That part costs nothing.

Now look closely at what the click does not do. Nothing on the way to the approve button verifies anything. The tax ID is a text field. The website is a text field. Shopify does not check that the email domain matches the site, that the site exists, that the certificate number has the right shape for its state, or that the applicant is not one of your own retail customers fishing for forty percent off. Every application, from the obvious yes to the obvious scam, waits for the same human read. Shopify built the queue and left the judgment out.

Shopify will collect the wholesale application for you. It will not read it.

The login page with no door

It gets stranger on stores that are wholesale only. Shopify offers a setting called Restrict access to B2B customers only, and switching it on replaces your storefront with a Shopify hosted login screen containing exactly one field: an email box for customers who already exist. No registration form. No application link. No way for a new buyer to ask to become a customer. A merchant opened a community thread about it titled, in full, Massive Oversight - Account registration/approval form feature missing on B2B login screen, and another titled New B2B Site - No Way To Approve Wholesale Applications. The replies are merchants comparing workarounds, because there is no setting to compare.

The obvious move, switching the restriction off, opens a different hole. With the restriction off, the login box happily creates a customer record for any email address that asks for a six digit code. Anyone who finds the URL can make an account. Merchants testing exactly this setup reported retail shoppers wandering into a wholesale-only store and placing orders at whatever prices were exposed. So the toggle offers a choice between a door with no handle and no door at all.

You cannot patch it yourself, either. The new customer accounts that B2B requires are hosted by Shopify and accept no Liquid customization and no app embeds on the login screen, so there is no hook where an approval step could be built. And on non-Plus plans the situation is simpler and worse: there are no companies, no catalogs, and no native concept of wholesale at all, so approval means a form app, a wholesale tag applied by hand, and a gating app that hides prices from everyone without the tag. Three apps, stitched together, to represent one sentence: this buyer is allowed to see trade prices.

What approving actually involves

The click is called approval, but the work around it is vetting, and vetting is specific. Is the business real: does the certificate match the business name, does the email domain match the website, does the website actually sell to consumers or is it a parked domain registered on Tuesday. Does the buyer fit: is the volume plausible, is their city already covered by a stockist you promised a territory to, is the applicant a competitor whose team wants your price list. Have you met them before: an existing retail profile with three returns and a chargeback, or the same person under a second email after you declined them in March. None of this is deep detective work. All of it is twenty tabs per application, which is why it happens in batches, late.

And a yes is not the end of the job. The moment you approve, the account needs its catalog and price list, its payment terms, its tax exemption if the certificate supports one, and a welcome email that says the door is open. Miss the catalog assignment and your new buyer logs in to retail prices and emails you, politely confused. Miss the tax setup and her first invoice is wrong, which on net terms you may not notice until the invoice conversation happens a month later. Approval is not a decision with a click attached. It is a decision with provisioning attached, and Shopify only automates the part between them, which is the part that was already easy.

◆ NOTE The trap is treating approval as a yes/no click rather than the middle of a workflow. The click takes one second. The vetting before it and the provisioning after it are the actual work, and because neither is automated, the click gets batched into Monday, and the weekend applicant becomes another brand's account.

Why the manual version fails quietly

At two applications a week, reading them by hand is correct, and you should not automate it. The failure arrives with volume and with timing. Wholesale interest is spiky: a trade show, a press mention, a TikTok from a store that stocks you, and the queue goes from two a week to nine on a Friday. The nine arrive exactly when nobody has time to open twenty tabs each, so they wait. Shopify keeps no clock on any of this. There is no report for time from application to answer, which is the only number that predicts whether the account ever places its first order.

The decline side rots even more quietly. Most stores never send declines at all, because writing a rejection to a stranger is the easiest task in the world to skip. So the fake applications sit in the queue next to the real ones, the retail discount hunters are never told no, and six months later the queue is a mix of ghosts and people you have already decided against who keep reapplying because nobody ever answered.

What the automation actually has to do

The working version is not a faster click. It is the read a good sales ops person does with each application, done the moment the form is submitted. As a Dugong playbook, in plain prose:

# trigger
On wholesale application submitted, from any form

# steps
1. Read the application: business name, tax ID,
   website, channel, requested volume
2. Verify what can be verified: email domain
   matches the site, the site is live and retails,
   the tax ID has the right shape
3. Check your own records: past applications,
   retail history, territory overlap, competitors
4. Sort into three bins: approve, decline,
   human review with the evidence attached
5. Provision on approval: catalog, price list,
   payment terms, tax status, in the same pass
6. Answer the same day, yes or no, while the
   applicant still remembers your brand
7. Nudge approved accounts with no first order
   after two weeks

Steps two and three are where a rules engine gives out. A rule can require that the tax ID field is not empty. It cannot notice that the ID belongs to a nail salon while the application claims a gift shop, or that the website is a template with placeholder text, or that the applicant's domain belongs to the brand two booths down from you at the last show. That is reading, not filtering, and it is the same species of judgment as deciding what a high risk flag actually means: context against context, not field against threshold.

Step four matters because the honest answer for some applications is a human look, and the automation's job there is to shrink the work, not to pretend confidence. A review item should arrive as one message: the application, what checked out, what did not, and what looks odd, so the human decision takes the ninety seconds it always deserved instead of twenty tabs.

Step five is the half that saves your reputation with the buyers you say yes to. Catalog, terms, and tax status assigned at the moment of approval means the welcome email and the working login arrive together. The buyer's first experience of your brand as a partner is the same hour she was approved, which is exactly the experience the brand that beat you to her order was selling.

Why this is a compiler problem, not an app problem

There are approval apps, and on non-Plus stores one of them is probably in your stack already. They all share a shape: they gate, but they do not judge. The app can hold every account until you click, which moves the queue from your inbox into its dashboard and changes nothing about the work. The policy you actually run is not a gate. It is a paragraph: boutiques in regions we do not cover get approved at trade terms if the certificate and site check out, known stockist territories get flagged for the rep who owns them, pure marketplaces get declined politely, competitors get declined impolitely, and anything strange gets a human. That paragraph changes with your seasons and your stockist map. An app cannot hold it. A compiler that turns the paragraph into the running workflow can, which is the same argument behind the automations no one builds: the valuable workflow is the one shaped like your business, not like a settings page.

Picture a ceramics brand doing thirty applications a month after a good press cycle. Nineteen are boutiques that check out end to end: approved within the hour, catalog and net 30 assigned, welcome sent, no human involved. Four are marketplaces and dropshippers the brand never sells to: declined the same day, kindly. Two are existing retail customers asking for wholesale pricing on personal volume: declined with a link to the volume discount tier that actually fits them. One is an application whose email domain matches a competitor: declined, and noted. And four genuinely need eyes: a boutique two towns from an existing stockist, an overseas buyer with an unfamiliar tax format. Those four arrive in the founder's inbox as four short briefs, and the whole month of wholesale admissions took her twenty minutes.


The workflow worth building this week

Start with the number you do not have: time to answer. Pull your last twenty applications, wherever they live, and write down the gap between submitted and answered, counting never as infinity. Most stores find a median measured in days and a tail measured in silence. That is the number the automation exists to move, and it is worth knowing before and after.

Then automate the reading before you automate the deciding. A workflow that meets every application with the checks already run, domain, site, tax ID shape, history, territory, and posts the result where you already work captures most of the value with none of the risk, because the click is still yours. Once you notice that you have agreed with the workup fifty times in a row, let it carry the clear cases end to end and keep the ambiguous ones. That is the same trust curve you would run with a floor on your checkout or any other guardrail: watch it, then let it work.

Describe it the way you would brief a new sales ops hire on their first morning. When a wholesale application comes in, check the certificate, the site, and the domain, see if we know them, and make sure they do not step on an existing stockist. Approve the clear yeses with the right catalog and terms and welcome them the same day. Decline the marketplaces and the discount hunters, politely, the same day. Bring me anything strange with your notes attached. And if someone we approved has not ordered in two weeks, check in. That is the brief. The compiler handles the fields, the lookups, the provisioning, and the timing, and the boutique who applies on Friday evening gets her price list while her budget is still yours to win.

◆ READING Two companion pieces if this one landed: the repeat customer your store treats like a stranger, on why customer records need judgment and not just tags, and the invoice you send by hand, which is where every approved wholesale account sends you next.

If you are a Shopify merchant with a wholesale queue that gets answered in batches, a B2B login page your prospects bounce off, or a stack of three apps pretending to be an approval flow, the inbox is open: field-notes@dugong.live. We are collecting case studies for the next issue.