Alex KourmoulakisBook a call

Most marketplaces die empty. I build the ones that launch full.

White label engineering for US agencies. Think of an Airbnb that launches with every property owner in the country already inside. No supply chase, no empty category pages.

You name the vertical, I find the data and build the engine. You keep the client and the link strategy.

Latest build published 9,585 facilities across all 50 states. Every county the federal source reported as having zero was re-checked against a second source before publishing. 427 of 1,071 did not survive the check.

The cold start is what kills directory projects

It always goes the same way. Build the site, hand-enter fifty listings, then recruit operators one at a time. Fifty listings is not a directory. There is nothing for a search strategy to work with, nothing an operator recognises themselves in, and the recruiting never gets ahead of the churn.

Programmatic inverts the order. Ingest the whole market first and publish every operator as a page carrying real data, so the directory exists in full on day one. Claiming a listing becomes something you can offer an operator rather than something you have to talk them into creating.

That does not make it rank on its own, and I am not going to tell you it does. Ranking is your side of the table, and it runs on authority, links and the strategy you already sell. What I remove is the part you cannot buy your way out of, which is having nothing to rank in the first place.

An engine, not a website

Every item below is built and running on properties I own and operate. None of it is a capability list written for a proposal.

Data pipeline
Acquisition, cleaning, deduplication and geocoding, written as idempotent seeders with every source download cached, so a reseed is repeatable rather than a fresh scrape returning different rows. Reconciliation scripts default to a dry run and report what they would change before anything writes.
Page generation
Every page type generates off the one dataset, so you get the record itself, the city, the state, the service, the category, and whatever corridor or cluster the vertical actually has. Thousands of pages carrying unique data per page, never spun text around a template.
Geo search
Proximity runs in Postgres with PostGIS, not in application code over a full table read. Radius and nearest-neighbour queries, real distances, and compass bearings where they make a page more useful than a list of names.
Programmatic internal linking
An automated link lattice between generated pages, so crawl depth stays shallow across the whole set and no page is an orphan. Neighbours are chosen by proximity and relevance, and rendered as something a human would click.
Schema and technical SEO
Structured data per page type, canonical logic, pagination handled properly, and a sitemap index sharded into segments so Search Console reports indexation per segment instead of one opaque verdict over 30,000 URLs. IndexNow submission on publish.
Claim flow
Cold listing to verified operator dashboard. Rate-limited submission, verification against the domain on the operator's own site so an unrelated address cannot claim a listing, single-use activation tokens with an expiry, and an admin approval queue that gates what is allowed to overwrite the baseline record on a public page.
Operator dashboard
Once verified, the operator gets view and call analytics, captured leads, photo and content management, and credential upload. This is what makes a claim worth completing, and what a cold record has to become before it is worth anything to your client.
Monetization layer
Placement tiers, featured slots, lead capture and routing, plus a hosted badge served per operator with every render logged, so placements on operator sites are measurable and a partner tier is enforceable rather than aspirational.
Failure behaviour
The part nobody specs and everybody needs. Page reads fall back to a versioned snapshot when the database is unavailable, so an incident degrades a page instead of taking every page offline. Destructive jobs verify by fingerprint and refuse to run when the preconditions are wrong.

Stack

Next.js App Router, TypeScript, PostgreSQL with PostGIS, Supabase or Neon, Tailwind, Vercel.

Ownership

Deployed into your client’s accounts. Repos, database, and documentation transfer at handoff. No dependency on me afterwards and no license to renew.

Built and running

What you are actually buying

Anyone can generate pages. The job is knowing which pages deserve to exist, and that judgement only shows up in the data. Three engines, three verticals, one stack. Everything below I built and operate myself.

In production

drugrehabilitationnearme.com

A national addiction treatment directory built on the federal SAMHSA facility dataset. Every facility in that dataset, addressable by state, by city, by service, and by name, with a claim flow that lets an operator verify ownership and take over their own listing.

9,585
facilities live in the database
13,735
URLs in the production sitemap
4,180
city pages across 54 states and territories

The engine

Seven page types generate off one dataset, covering facility, city, state, service by state, treatment modality, accreditation, and long-form guides. Facility pages read Supabase first and fall back to a versioned JSON snapshot, so a database incident degrades the page instead of taking 9,585 of them offline.

The operator side is a full product. Claim submission is rate limited per IP and verified against the domain on the facility's own website, so an unrelated address cannot claim a listing. Verified claims land in an admin approval queue, and only approved claims are allowed to override the federal baseline on the public page. Approved operators get a dashboard with view and call analytics, lead capture, photo management, and accreditation upload.

Monetization runs through a hosted SVG badge served per facility from an API route, with every render logged to a table so badge placements on operator sites are measurable. A WordPress plugin is packaged and downloadable from the site to install it. Transactional email runs on Resend, new and updated URLs are pushed to IndexNow on publish rather than waiting for a recrawl, and Search Console data is pulled on a schedule for ranking ground truth.

The verification pass

Nothing on the site ships from the raw federal data alone. Every county the treatment deserts report names as having zero facilities is checked against the live findtreatment.gov locator first, searched from that county's 2020 Census population centroid at a radius covering the whole county, with ZIP overlap resolved through the Census ZCTA crosswalk.

1,071 counties checked. 640 published. 427 held back. 4 routed to manual review. Four in ten of the figures sitting in the raw government data did not survive an independent check.

The standard is simple. A number goes on the site when a second source confirms it, and not before.

The facilities table in Supabase showing 9,585 records across 96 pages
Supabase, facilities table. 9,585 records, one row per SAMHSA-listed facility, with the Google place identifier reconciled onto each.

In production

rigexit.com

A heavy-duty truck towing directory organised by interstate exit rather than by city. A driver broken down on the shoulder does not know what town they are near, they know the highway and the exit number, so the primary page type is the exit itself.

22,800+
interstate exits with coordinates
19,000+
towing companies with hours and coverage
7,900+
city pages, 50 states and DC

The engine

Proximity runs in the database. A PostGIS function returns the nearest exits to a coordinate inside a radius, and the site decodes the raw WKB point geometry to compute haversine distance and an eight-point compass bearing for every neighbour. That bearing is what makes the internal link lattice readable, because an exit page links to its neighbours as real directions and distances rather than as an undifferentiated list.

Corridor pages exist per interstate and per interstate within a state, on top of exit, city, state and provider pages, and the sitemap is sharded one segment per state so Search Console reports indexation state by state instead of one opaque 30,000 URL verdict. No page carries a lastmod, because stamping the build date on every URL teaches Google the field means nothing. Listings sort by straight-line distance from the exit, and paid placement changes the styling and the label but never the position, with a public methodology page saying so.

The locations table in Supabase showing 22,809 exit records with a PostGIS geography column
Supabase, locations table. 22,809 exits across 229 pages, each with its highway, exit number and generated slug. The geography column on the right holds the PostGIS point the radius queries run against.

In build

wayfarecars.com

A car rental comparison platform, built as a programmatic location directory with an on-site booking engine attached. The directory is the acquisition layer and the checkout is the business, which means the data underneath it has to be right before a single price is ever shown.

37,411
locations seeded and reconciled
3,269
airports, plus 34,025 cities, 62 islands, 55 ports
12
tables across 7 applied migrations

The engine

37,411 locations, reconciled rather than imported, seeded idempotently over OurAirports, GeoNames, published passenger volumes and OpenStreetMap. Greek car-ferry ports are a reviewed list of 55, because OpenStreetMap's vehicle-ferry tag is missing from 282 of Greece's 623 routes and filtering on it drops Crete's main gateway. Serving city is resolved once at ingestion by a gravity model over cities within 60km, because nearest distance alone parents Heathrow to Feltham and LAX to El Segundo. A Turborepo monorepo keeps the suppliers behind a canonical type so no supplier response shape reaches a page component, and every reconciliation script runs dry by default and reports what it would change before anything writes.

The locations table on Neon showing airport rows with IATA and ICAO codes, coordinates and admin regions
Neon, locations table. The read-only replica the deployed site queries. One row per place, airports carrying IATA and ICAO alongside coordinates, country and admin region.

The standard

That is the work, and it is not the templates or the framework. What you are paying for is the decision about which pages deserve to exist, and the proof behind the data on the ones that do.

Pricing

Fixed scope, fixed price

No hourly billing. You buy a defined artefact and you know the number before we start.

Start here

$1,500

Data and schema plan. Five business days, invoiced on delivery.

Sources named, record counts, field mapping, page types, URL structure, and a written go or no-go on whether the data can be acquired cleanly. Yours to keep, and credited in full against the build.

Core

$12,000

4 to 6 weeks

  • Up to 5,000 pages
  • One data source
  • Geo search
  • Standard templates
  • Claim flow

Full

$22,000

6 to 10 weeks

  • Up to 25,000 pages
  • Multi-source pipeline
  • Claim-to-dashboard
  • Lead capture
  • Monetization tiers

Custom

From $35,000

Scoped on the call

  • Multi-vertical
  • Complex data acquisition
  • Non-standard requirements

Terms

Nothing is ever billed in advance. Every invoice follows work that is already live on staging and reviewable before it goes out.

The plan is invoiced when it lands. The build runs in four payments of 25%, each raised once that phase is up and you have looked at it. Net 7.

  1. 1Schema live, data ingested, record counts verifiable on staging
  2. 2Page generation at scale, URLs live and crawlable
  3. 3Claim flow and operator dashboard working end to end
  4. 4Handoff, repo and database transfer

Retainer, from $3,500 per month

Optional and cancellable. Data refresh cycles, new page types, schema and internal link expansion, geo coverage extensions, template iteration against your SEO roadmap. Not hosting and not support. Your client owns their infrastructure accounts.

Monthly capacity

Or take the whole capacity

If you have a pipeline rather than a single project, the cheaper structure is to book me outright.

$8,000 per month

6 month minimum

Full development capacity on your projects, sequenced however you want them. Multiple engines, ongoing engine work across your client base, or a build queue that never has to be requoted. You set the priorities each month.

Same white label terms. I sit inside your team, under your name, and no client of yours knows I exist.

The rate is lower than the per-build price because the commitment is longer and I stop selling that time to anyone else. This suits agencies running three or more builds a year. For a single project, Core or Full works out cheaper.

The vertical is not the hard part. The data is.

Acquisition is multi-source. What makes a set trustworthy is the public record it gets reconciled against, and below is where that record sits for the verticals agencies ask about most.

Which of them are complete, downloadable rather than scrape-only, and current enough to build on gets confirmed for your vertical in the data and schema plan, before anything is committed.

VerticalPublic record
Short-term and luxury rentalsCity STR permit registries, many US cities publish licensed operator lists
Real estate agents and brokeragesState real estate commission licensing, public and complete per state
Property managementState real estate licensing plus county business registrations
Commercial real estateBroker licensing plus county assessor and deed records
Appraisers and home inspectorsThe federal ASC national registry plus state licensing boards
Yacht brokerage and salesUSCG vessel documentation plus Florida and California broker licensing
Marinas and charter operatorsUSCG documentation, state marina registries, dockage aggregators
Wedding venuesCounty business licensing plus aggregator scraping
AttorneysState bar member directories, public and complete
Med spas and aestheticsState medical and cosmetology board licensing
Contractors and home servicesState contractor licensing boards, public per state
Dentists and veterinariansState licensing boards plus NPI registry
Campgrounds and RV parksRecreation.gov, state park systems, private aggregators
Private schools and campsNCES, state education departments, ACA accreditation
Self storageBusiness registrations plus aggregator scraping
Car rentalAirport concession lists plus state business registrations

If your client’s niche is not listed, that is not a no. It is a thirty minute call.

Your name is the only one on it

I do not appear on client calls, in client documents, or in the codebase. No attribution, no backlink, no signature in the footer. If your client asks who built it, the answer is you.

I also do not take direct clients in a partner’s vertical while we are engaged. NDA and non-solicit signed on request, before the scope call if you prefer.

Alex Kourmoulakis

Founder

Alex Kourmoulakis

Solo full-stack developer. I build and operate programmatic directories in the US market as my own business, which is how I ended up building them for other people. When something breaks at 9,000 pages, I have already found it and fixed it on my own property.

Every line that ships is mine and I am accountable for all of it. One person wrote the architecture, one person answers for it, and there is no team to hand your bug to.

You are contracting a US registered company and paying a domestic vendor by ACH. No international wire, no procurement exception, no question about whether you can engage me at all.

Based
Athens, Greece
Hours
EET, overlapping US mornings
Self-employed
Roughly 10 years
Contracting
Through a US registered company
Invoicing
USD, by ACH or wire
Engines built and operated
Three, two in production

Process

How an engagement works

  1. 1Scope call, 30 minutesThe niche, the data source, the page count, what your client wants to sell. Straight go or no-go on whether the data exists before anyone signs anything.
  2. 2Data and schema plan, $1,500Five business days, written before a line of code, invoiced once it is in your hands. Sources, record counts, fields, page types, URL structure, and a straight go or no-go. Yours to keep, and it comes off the build price.
  3. 3Build in phasesFour phases, each one live on staging before it is invoiced. 25% a phase, net 7, and nothing billed in advance at any point.
  4. 4HandoffRepos, database, documentation and a walkthrough call, deployed into your client's accounts. Retainer optional from there.

Who this is for

Good fit

  • You sell SEO, content, or link building and clients ask for scale you cannot build in-house.
  • Your client's niche has structured public data.
  • You want to own strategy and outsource engineering rather than manage a dev shop.

Bad fit

  • The build has to run on WordPress. It cannot.
  • The niche has no data anywhere, and I will tell you that on the call for free.
  • You need a five-page brochure site. Wrong vendor.

FAQ

Questions agencies ask

How long does a build take?

Core 4 to 6 weeks, Full 6 to 10. The variable is data acquisition, never the front end.

What if the data for the niche does not exist?

I tell you on the scope call, at no charge, before anything is signed. Some niches have no usable source at all, and saying so early is cheaper for both of us than finding out in week three.

Where does the data come from?

Government registries, licensing boards, open data portals, public aggregators, direct scraping. Source is identified and documented in the week one plan.

Who owns the code?

Your client does, at handoff. Full repo transfer. No license, no lock-in, no ongoing fee.

Can you work with our existing stack?

If it is Next.js or similar, yes. If it is WordPress, no.

Do you sign an NDA?

Yes, and a non-solicit. Send yours or use mine.

What happens if you walk away mid-build?

Nothing is billed in advance and no phase runs longer than two weeks, so at any moment your exposure is a fortnight of work you have already reviewed on staging. Most vendors at this level ask for 40% up front, which is the opposite risk.

Time zones?

EET, overlapping US mornings. Async by default, calls scheduled to your hours.

Changes after handoff?

Either your team handles it, since you own everything, or you pick up a retainer. No penalty for the first.

Can we book you monthly instead of per project?

Yes, $8,000 per month on a 6 month minimum. Right structure for three or more builds a year. For one project the fixed tiers cost less.

Bring me the niche

Thirty minutes and I will tell you whether it can be built, what the data situation looks like, and what it costs. No deck, no discovery process, no charge.

Or write instead. Send the pages you are already running and I will come back with what I find on them.