# leadrack > leadrack is a minimal CRM for leads: a kanban board where columns are pipeline stages and cards are leads, with freely configurable stages and typed custom fields across multiple pipelines. It differs from other CRMs in two ways. First, **agents**. A fleet of toggleable agents swarms public sources: job postings (Hacker News, Y Combinator, RemoteOK, public ATS boards), a Claude scout that proposes companies straight from the team's brief (optionally grounding each proposal with live web search), a market mapper that enumerates a whole market from directories and member lists and verifies each company, Reddit and Bluesky pain-point posts, Ask HN, Show HN / Product Hunt launches, funding announcements from venture RSS wires, fresh SEC Form D filings straight from EDGAR (every US raise, with named executives), GitHub signals (issues on watched repos, repos matching a technology), podcast guests (episode feeds naming founders on tour), company news across ~100k outlets via GDELT (expansions, exec hires, openings), a generic feed watcher for any RSS wire, search ads (the companies paying for Google ads on the team's keywords, paid plans), and a competitor watch (people complaining about, or asking for an alternative to, the competitors a team names under Settings → Competitors, across Hacker News, Bluesky and Reddit). Each agent scores each candidate 0-100 against a team's stated ideal customer profile and places the ones that clear a configurable threshold onto a board daily, each carrying a one-line reason and subject to a per-agent daily cap and a per-team monthly spend budget. A `custom` agent type covers leads pushed in from outside through the API. Second, outside agents are first-class operators on leads. Every operation on a lead (add it, enrich it, email it, move it between stages, read its timeline) that a human can do on the board, an agent can do over a REST API with an API key, because the UI and the API call the same service layer. Configuring pipelines, stages, and custom fields is a human-only surface in v1; the API doesn't expose it. ## Core Concepts - **The board**: Columns are pipeline stages, cards are leads. Drag a card between columns, or let an agent move it via the API: the same underlying operation. - **Pipelines**: Teams run multiple pipelines (e.g. outbound, partnerships), each with its own stages, freely renameable, reorderable, and deletable. Creating, renaming, and reordering pipelines, stages, and custom fields is human-only in v1, not exposed over `/api/v1`. - **Agents**: A per-team fleet of agents that fills a board without being asked. An agent has a type (`job_postings`, `agent` (the Claude scout), `deep_agent` (the market mapper), `reddit`, `ask_hn`, `launches`, `funding`, `github`, `podcasts`, `rss`, `sec_form_d`, `bluesky`, `gdelt`, `serp_ads`, `competitor_watch`, or `custom`), a target pipeline, an ICP in plain language plus optional structured knobs, per-type source config (subreddits to read, repos to watch, feeds to poll, search terms for Bluesky, a news query for GDELT, state/industry/amount filters for SEC filings, web search on/off for the scout, search phrases for search ads, a lookback window for the competitor watch), a score threshold, and a daily cap. Enabled agents run once a day: fetch, deterministic prefilter, LLM scoring against the ICP, dedup against everything that agent has seen before, cap, then the survivors become leads on the board with their score and reason on the card. Every run records what it looked at and what it rejected. `custom` has no fetcher by design: it is the attribution row for leads pushed in over `/api/v1`, so an outside agent's leads carry the same provenance as a built-in agent's. - **Typed custom fields**: Contact and card fields are typed (text, number, url, email, date, select, checkbox), not free text, so agent-written data lands in a predictable shape. - **Agents as operators**: Give an agent an API key scoped to your team and it can create and update leads, merge in enrichment fields it looked up elsewhere, send email through your verified domain, and move cards along stages: the same lead-level capabilities a human has in the UI, exposed as `/api/v1`. leadrack stores enrichment data agents push in; it does not itself enrich contacts or find emails. What an agent can't do: create a pipeline, add or edit a stage, or define a custom field. That configuration stays human-only for now. - **Email**: Outbound email sends through Resend on your team's verified domain, with Reply-To set to the sending user, so replies land in a normal inbox. There is no inbound email processing in v1; leadrack doesn't parse or ingest reply content. - **Activity timeline**: Every mutation, human or agent, is logged to a lead's timeline, so agent work stays legible. ## Agent API - Human-readable documentation lives at https://leadrack.io/help — setup guides, how agents hunt and score, email/templates, and API + MCP usage. - `Authorization: Bearer lr_<40-character lowercase hex>` on every request. Rate limit: 120 requests/minute per key, on a fixed one-minute window. - **MCP server**: the same lead operations are also exposed as a Model Context Protocol server (streamable HTTP) at `/api/mcp` on the app — paste the URL plus the same Bearer key into any MCP client (Claude Code, Claude API MCP connector, Managed Agents, Cursor) and the eleven tools (add_lead, move_card, search/enrich contacts, timeline, draft + send email, pipeline context) drive the board with identical auth, rate limits, and timeline attribution. - `POST /api/v1/leads` — the main entry point. Body: `{ pipelineId, stage?, contact: { email?, name?, title?, company?, domain?, source?, fields? }, fields? }`. `contact` needs at least an `email` or a `name`; `stage` is a stage key (e.g. `"contacted"`, never a UUID), defaulting to `"new"`. Returns `{ created, contact, card }`. Idempotent: the same `pipelineId` and `contact.email` converge on one contact and card; a repeat call returns `created: false` instead of duplicating. - `GET /api/v1/contacts` — list/search (`q`, `updatedSince`, `cursor`, `limit`; returns `{ items, nextCursor }`). - `PATCH /api/v1/contacts/:id` — partial update; `fields` merges rather than replaces, which is how an agent adds an enrichment. - `PATCH /api/v1/cards/:id` — move a card by stage key. - `POST /api/v1/emails`, `GET /api/v1/pipelines`, `GET /api/v1/schema`, `GET /api/v1/activities`. - Errors: `{ "error": { "code", "message", "details" } }`, with `details` keyed by field on validation failures. ## Pricing - Flat team pricing, no per-seat charge, metered on agent runs (one run = one agent's daily fetch-score-land sweep, Claude time included): Starter $49/mo (2 agents, 60 runs), Team $129/mo (10 agents, 300 runs), Scale $299/mo (unlimited agents, 1,500 runs). Leads stored are unlimited on every tier. All tiers include unlimited seats, unlimited pipelines, and the full REST API. Every team starts on a free plan (1 agent, 3 runs/mo, no card, no expiry); there are no trials on paid tiers. Annual billing gets 2 months free. See https://leadrack.io/pricing for current details and rate limits. ## Links - [Homepage](https://leadrack.io) - [App](https://app.leadrack.io) - [Pricing](https://leadrack.io/pricing) - [Blog](https://leadrack.io/blog) - [Blog feed (Atom)](https://leadrack.io/blog/feed.xml) - [Terms of Service](https://leadrack.io/terms) - [Privacy Policy](https://leadrack.io/privacy) ## Blog - [Why I built leadrack](https://leadrack.io/blog/why-i-built-leadrack): leadrack started as an internal tool because the prospecting tools I could buy were either bloated or dumb. It runs Workalong's lead gen today, and now it's open for everyone.