The board / Operating

StudFinder

Live · September 2025 Lead lists for trade businesses leads.ei.au

Lead lists for trade businesses, scraped fresh instead of bought stale.

Rails

  • aloneReadsThe open web: discovery, query expansion, scrape.
  • aloneWritesContacts into HubSpot, on a schedule.
  • not allowedMoneyNothing is priced or charged inside a run.
  • not allowedPublicNever contacts a lead. The list lands in the customer's CRM.
  • aloneUnattendedSourcing runs on a schedule as queued jobs.
  • a person, on exceptionsDecidesA person writes the brief. The rest is the machine's.

Problem

Trade businesses buy stale lists or pay someone to copy details off the web. Both are slow, and the data is wrong by the time it reaches the CRM.

The fix is a scraper that runs on a schedule and a model small enough to read every page it finds.

System

A person writes a brief. Discovery finds candidate businesses, query expansion widens the net, the scraper reads their sites, a small model extracts contact details, quota and dedupe filter the set. By default the list is exported to HubSpot. Over quota, the results are held until the plan allows.

Decisions

  1. Extraction uses Claude Haiku 4.5 and GPT-5 nano: small models that can afford to read every page.
  2. The scraper is hardened against SSRF. Private ranges and redirects are refused before any fetch.
  3. Organisations and subscriptions from day one, with quotas enforced on the server, not in the UI.
  4. Long runs are Inngest jobs with Pusher progress. The browser is never the worker.

Stack

Next.js, TypeScript, Postgres (Neon), Inngest, Clerk, Stripe, Cheerio, Claude Haiku 4.5