Alexandros Kourmoulakis

The hard part is the data. Everything else is a template.

Most guides on building a directory website start with themes and plugins, which is the last decision that matters and the first one everybody makes. This is the actual method, in the order the work happens, including the four ways these builds fail.

The method

Seven steps, and the first three decide the outcome

  1. 01

    Find the register before you design anything

    The build is decided here and nowhere else. Regulated trades publish licence registers per state. Federal agencies publish facility and provider lists. Counties publish business registrations and assessor records. If a vertical has no public register, a directory in it will be assembled by hand and will stay small. Check this first, because every later decision depends on what the source actually contains.

  2. 02

    Pull every source and keep the raw copy

    Download and cache the untouched file before anything transforms it. Sources change format without warning and get taken down, and a cached copy is the difference between rerunning a build and rebuilding it. Seeders should be idempotent, so running twice produces the same rows rather than duplicates.

  3. 03

    Reconcile sources against each other

    Two registers describing the same operator will disagree on name, address and status. Decide which source wins per field rather than per record, because the licensing board is usually right about status and usually wrong about the trading name. Run reconciliation as a dry run first and read what it intends to change before letting it write.

  4. 04

    Deduplicate on something stable

    Never on name. Branch offices, legal entities and trading names all collide. Licence number where one exists, otherwise a composite of normalised address plus geocoded coordinates within a tolerance. Expect this step to be the one that takes longest and produces the most surprises.

  5. 05

    Geocode, then decide what earns a page

    Coordinates are what make city, region and proximity page types possible, so a record without them is nearly useless in a directory. Once geocoded, count operators per city and set a floor. A city with two records does not get a page, it gets folded into its region. This single rule prevents most thin content problems.

  6. 06

    Generate page types off one schema

    Operator, city, region, state, service, and whatever cross the vertical genuinely supports. All of them read from the same tables, so a schema change propagates rather than needing six template edits. If two page types would show substantially the same records, you have one page type and a filter.

  7. 07

    Link the set together automatically

    A generated lattice by proximity and relevance, so crawl depth stays shallow and nothing is orphaned. Manual internal linking does not survive contact with nine thousand pages. Then a sharded sitemap, split into segments so indexation can be read per segment instead of as one number over the whole set.

How they fail

Four failures, and all four are structural

Empty categories
The category exists because the taxonomy has it, not because there are records in it. Generate the taxonomy from the data instead of designing it first.
The same three listings everywhere
Different URLs showing an overlapping record set. Google folds them and indexation stalls somewhere under a third of the sitemap.
Canonical drift
City pages canonicalising to a state page, usually added to fix a duplication problem, which then guarantees none of the city pages can rank.
Crawl waste
Filters, sorts and pagination generating tens of thousands of crawlable combinations against a few thousand real pages. Budget goes to the permutations.

The common cause

All four come from generating pages the data cannot support.

A directory that publishes only what it can fill has no duplication problem to solve with canonicals and no crawl waste to clean up later. The floor rule at step five prevents three of these four before they exist.

What it looks like done

One built this way, in production

9,585 addiction treatment facilities across all 50 states, 13,735 URLs across 4,180 cities, with a claim portal, operator dashboards and a hosted badge served per operator.

Every county the federal source reported as having zero facilities was re-checked against a second source before publishing. 427 of 1,071 did not survive that check. That step is step three above, and it is the one that gets skipped.

FAQ

Directory build questions

How do you build a directory website from scratch?

Source first, software last. Find the public register, pull and cache it, reconcile multiple sources against each other, deduplicate on a stable key, geocode, set a floor for what earns a page, then generate page types off one schema. The build is mostly data engineering. The front end is the small part and it is the part everyone starts with.

What is a directory website?

A site whose pages are generated from a record set rather than written individually. Every operator, location and category page exists because there is data behind it. That is what separates it from a listing site someone maintains by hand, and it is why the interesting work is in the pipeline rather than the design.

Can I use a directory website template or a WordPress plugin?

For a few hundred hand-entered listings, yes, and it will be far cheaper than anything custom. Templates and plugins fall over when the record set is in the thousands and has to be refreshed from a source, because they assume a human is typing the listings in. The failure is gradual, which is what makes it expensive.

How many pages should a directory have?

However many the data supports and not one more. A national register of a licensed trade typically supports several thousand once cities below the floor are folded into regions. Generating every theoretical combination is how sites end up with forty thousand URLs and four thousand indexed.

How long does it take?

Two to three weeks for a static build on one clean source. Four to six weeks with geo search and a claim flow. Six to ten for multi-source with monetization. Data acquisition is the variable every time. The front end has never been what moved a date.

What does it cost to have one built?

Static from $5,000, Core $12,000, Full $22,000 here. Built in house, the real cost is a developer who has done data reconciliation before, which is the part that is hard to hire for and easy to underestimate.

How do you make money from a directory?

Claim flows converting cold listings into verified operators, then placement tiers, featured slots and lead routing on top. The claim flow is the part that matters, because an unclaimed listing is worth nothing and a verified operator with a dashboard is a subscriber.

If you would rather not build it

Name the vertical and I will check the register

Free, and it stays free whether or not anything comes of it. You get the record count, how clean the source is, which states are painful, and an honest answer on whether the vertical supports a directory at all. Builds start at $5,000 if it does.