The board / Operating
StudFinder
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
Decisions
- Extraction uses Claude Haiku 4.5 and GPT-5 nano: small models that can afford to read every page.
- The scraper is hardened against SSRF. Private ranges and redirects are refused before any fetch.
- Organisations and subscriptions from day one, with quotas enforced on the server, not in the UI.
- 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