Trawl is a local-first desktop app that finds real businesses, researches their websites with AI, scores the best-fit leads, and tees up outreach without turning your pipeline into SaaS sprawl.
Most outbound tools give you a list.
Trawl gives you a point of view.
It is a desktop command center for B2B prospecting: discover businesses in a target market, crawl their sites, extract useful intelligence, rank who actually fits, and generate personalized draft outreach from a single local app.
No hosted CRM maze. No browser-tab archaeology. No lead spreadsheet that dies the second it gets exported.
- Local-first by default. Your app, your database, your workflows, your machine.
- Distributed as a desktop app. Install it like a product, run it like an operator console.
- Research-backed prospecting. Trawl uses Playwright and LLMs to read the actual website, not just metadata.
- Built for action. Discovery, enrichment, scoring, and draft creation live in one pipeline.
- Human-close friendly. AI does the heavy prep; humans step in when judgment matters.
- Discover businesses by market and geography.
- Enrich each lead with website content and business signals.
- Score fit against your own company profile.
- Queue personalized draft emails for review and sending.
- Work the warmest leads instead of babysitting a list.
Trawl ships as an Electron desktop application with:
- A bundled Next.js UI
- A bundled Node runtime for packaged builds
- Local SQLite storage
- Bundled Playwright Chromium for web research tasks
Release artifacts are produced into dist-electron/ when you run a desktop build, and the GitHub Actions workflow publishes installers on demand.
pnpm install
pnpm desktop:install-playwright
pnpm desktop:devpnpm desktop:distThat build path packages the desktop app and writes distributables to dist-electron/.
A manual-only GitHub Actions workflow lives at /.github/workflows/desktop-release.yml.
It does three things every time you trigger it from Actions:
- Builds fresh desktop distributables for macOS, Windows, and Linux.
- Collects the generated installers and metadata.
- Creates a brand new GitHub release with a unique timestamped tag and attached assets.
There are no push or pull request triggers. Releases only happen when you explicitly click Run workflow.
- Electron
- Next.js 15 App Router
- React 19
- Tailwind CSS
- SQLite via
node:sqlite - Playwright
- Vercel AI SDK
- B2B founders who want a private outbound machine instead of another SaaS seat
- Agencies and service businesses working narrow local markets
- Operators who want researched leads, not raw exports
- Teams that prefer shipping desktop software over maintaining backend infrastructure
- Primary desktop entry:
electron/main.cjs - Desktop build scripts:
scripts/desktop/dist.mjs - Runtime bundling:
scripts/desktop/prepare-node-runtime.mjs
If outbound software should feel more like a mission-control app than a spreadsheet with a logo, that is the lane Trawl is trying to own.