Finding stockists & retail buyers
A buyer database is the place your wholesale channel lives between orders. Not your inbox, not your memory, and not the order history in Shopify, because none of those can answer the question that runs the channel: which shops have not been spoken to recently, and which ones are due to reorder.
For a brand with fewer than fifty accounts, that database is a spreadsheet. For a brand with more, it is the same spreadsheet with a few automations bolted on. The tooling matters much less than whether the thing gets updated, so build the smallest version that survives a busy month.
The two record types, kept separate
Most brands make one table and then discover it is doing two jobs badly.
A prospect record answers: should I write to this shop, what do I say, and when did I last try. It exists before any money changes hands, and most rows in it will never become customers.
An account record answers: what did they buy, when, on what terms, and are they due. It exists after the first invoice and every row in it matters.
Keep them as two tabs. When a prospect orders, move the row across and stop maintaining it in the first tab. The prospect fields — the evidence line, the outreach dates — stop mattering the day they become a customer, and the account fields would be dead weight on two hundred prospects.
What goes in the prospect tab
Six columns, no more, or you will stop filling them in: shop name, town, category fit in your own words, one line of evidence about why they fit, buyer name, contact route. Then two working columns: status and last touched.
The evidence column is the one that earns its place. "Carries three ceramics brands, nothing scented" is the sentence that becomes your opening line six weeks later when you have forgotten why you added the row. Without it you will write a generic email, and generic emails are the reason most wholesale outreach produces nothing. The reasoning behind those fields is in retail leads.
Add a tier column if you like — A, B, C — so you can sort the list by how much personalisation each row deserves.
What goes in the account tab
Once a shop has ordered, you need a different set of facts, and they are the ones that produce reorders.
Shop name and buyer name, obviously, plus the delivery address and the invoice address when they differ. First order date and what was in it, because "you took the amber and the cedar in March" is the opening line of every reorder email you will ever write. Order values and dates for every subsequent order. Payment terms and whether they actually pay on them. And a reorder-due date, which you set yourself.
That last field is the engine. When a shop takes two cases of twelve and you think a case lasts about six weeks in a shop that size, put a date eight weeks out in the column and work the column weekly. It converts wholesale from a channel you remember to check into one that tells you what to do on Monday morning.
Two more columns worth having: a notes field for the human things — they mentioned a refit in spring, they hate phone calls — and a field for what sold through, once you start asking. The habit of asking is covered in wholesale sales.
Tooling, honestly
A spreadsheet handles everything described above and costs nothing to learn. Sort, filter, colour the overdue rows. Two hundred prospects and forty accounts fit comfortably.
A database tool with views and reminders is worth moving to when you find yourself wanting the same filtered view every week and rebuilding it by hand, or when a second person starts touching the data. Do not move for features you might use.
Shopify itself holds part of the picture once your accounts buy through the store rather than by invoice. Company profiles and per-company price lists mean the order history and the terms live where the orders are placed, which removes a lot of double entry — Shopify company profiles explains how that side works. Even then, keep the prospect tab outside Shopify, because a shop that has never ordered is not a customer record.
What to avoid is a full sales platform bought before there is anything to put in it. The admin of an empty system is the most reliable way to stop doing outreach.
Getting contact data that is actually correct
A database is only as good as whether the emails arrive.
For small independents, the shop's own site and posts give you the owner's name most of the time, and a general shop address reaches a phone the owner checks. For groups, a phone call asking who looks after buying for the category is faster and more accurate than any amount of searching. The step-by-step is in how to find retail buyers.
Whatever you collect, record where it came from and when. Contact data decays quickly: shops close, buyers move, and an address that worked in spring may not in autumn. A source-and-date column lets you know which rows to re-check before a seasonal push instead of re-checking all of them.
Keep the list clean in the other direction too. Anyone who asks not to be contacted comes off permanently, with a row marking that they did, so a future you does not re-add them from a fresh sourcing round. Hard bounces get removed rather than retried, because repeatedly sending to dead addresses is how a small brand's domain stops reaching inboxes.
Segments worth having
Three or four segments cover almost every reason you will want to filter.
By tier, so your best-fit shops get the hand-written treatment and the rest get a shorter seasonal note. By region, so you can reference a nearby stockist in the first line, or plan a day of walk-ins. By stage, so contacted-and-silent, engaged-and-quiet and ordered-once are separate piles with separate messages. And by what they bought, once you have accounts, so a new scent announcement goes to the shops that already sell scented things.
Segments are the difference between a seasonal update that reads as news and one that reads as a newsletter. The same message sent to everyone gets ignored by everyone.
Where a bought database fits
Purchased buyer databases sell you rows, not relationships. The names may be real and the addresses may even be current, but there is no evidence of fit attached, which means every row still needs the ninety-second check before it is worth an email.
If you are weighing one up, work out how many rows you would actually qualify by hand and compare that with what the same hours of sourcing would produce. Usually the sourcing wins. The longer version of that comparison is in retail buyers list.
A better use of a paid tool is finding the shape of the market rather than the rows. Paste your store or product link into WholesalePilot and look at the preview of retailers and distributors that stock comparable products, then build your own prospect tab against that pattern. What you keep afterwards is a database you understand, which is the only kind anybody maintains.
Keeping it alive
A database dies from two directions: nothing goes in, or nothing gets updated.
Fix the first by making sourcing a fixed weekly block rather than a thing you do when inspired. Fifteen to twenty-five new qualified rows a week is enough to keep a pipeline fed for a year.
Fix the second by updating the row at the moment of the action, not later. Send an email, set the date. Get a reply, change the status. It takes four seconds and it is the only version of this habit that lasts, because a weekly catch-up session never happens twice.
Once a season, spend twenty minutes on the top tier: confirm the shops are trading, the buyers are still there, the addresses still work. That is cheaper than discovering mid-campaign that your warmest list is a year out of date.
Questions DTC founders ask about a buyer database
How many rows should I have before I start emailing? Twenty. Start writing while you keep sourcing, or you will spend a month building a list and never send anything.
Should I put my marketplace accounts in it? Yes, as accounts. A shop that found you on a platform is still a relationship you can grow directly over time.
Do I need a separate list for distributors? Keep them in the same tab with a type column. The pitch is different, the record is not.
What about shops that said no? Keep them, with the reason and a date. "No, we are full on candles until the January reset" is a diary entry, not a rejection, and it is the easiest email you will send that year — the cadence is in how to get stockists.