-> back to projects

Case Study

open-source project

Evidence-backed GTM research agent

A local-first FastAPI service that turns a company URL and seller ICP into a cited account qualification brief. A bounded LLM agent investigates prioritized crawl data alongside web, hiring, SEC, and optional Clay signals, then delivers structured JSON, markdown, or a Notion page.

STAR framing

Situation

Account research was spread across company sites, search results, hiring pages, filings, enrichment tools, and seller-specific qualification criteria.

Task

Build a repeatable system that could gather those signals, preserve source evidence, and evaluate an account against a reusable ICP.

Action

Built a priority crawler, tool-using LLM loop, provider integrations, qualification schema, async job lifecycle, and markdown and Notion delivery.

Result

Shipped a public local POC with a verified Disney-to-Cursor workflow, deterministic SEC enrichment, and a 371-test suite.

Problem

  • Naive crawlers spend limited page budgets on low-signal navigation and content.
  • Website copy alone rarely contains enough evidence to qualify a complex account.
  • Generic summaries do not explain whether an account fits a specific seller's ICP.
  • LLM research needs bounded cost, structured output, citations, and explicit failure states.
  • Public-company research should resolve stock tickers deterministically, not guess names.

Architecture

The crawler builds a prioritized local index first. The agent can inspect that index and selectively add public web, hiring, filing, or Clay evidence. Qualification maps those signals to the seller's ICP before a schema-validated report is accepted.

Example transformation

Seller context and an account URL in, cited qualification brief out.

input

account_url: thewaltdisneycompany.com
seller: Cursor
offering: AI code editor
target_personas:
  - CTO
  - VP Engineering
ticker: DIS
page_budget: 8

output

fit: strong
company: The Walt Disney Company
signals:
  - substantial in-house engineering
  - active technology hiring
  - 400+ digital and physical products
evidence:
  - SEC 10-K
  - company careers pages
  - technology leadership pages
delivery:
  - markdown brief
  - notion page

What I built

  • Prioritized same-origin crawling with sitemap discovery, URL scoring, content extraction, deduplication, and page budgets.
  • A provider-agnostic agent loop with crawl inspection, web search, URL fetch, job-board, SEC EDGAR, and optional Clay tools.
  • Reusable ICP profiles with strong, moderate, and weak fit ratings, rationale, matched pains, personas, outreach angles, and citations.
  • Clay-first prospecting for finding and enriching people independently of deep account research.
  • SQLite repositories and queued, running, complete, and failed job lifecycles behind FastAPI endpoints.
  • Readable markdown reports and explicit Notion export with normalized account naming.

Safeguards

  • Blocks private, loopback, link-local, reserved, and cloud-metadata destinations before outbound requests.
  • Revalidates every redirect hop and enforces request-size, redirect, crawl, agent-iteration, and enrichment-cost limits.
  • Respects robots.txt and runs as an unauthenticated, loopback-bound local POC rather than a public service.
  • Uses explicit request tickers, a curated domain map, or Clay enrichment for SEC pre-fetching—never fuzzy domain-name guessing.
  • Requires cited evidence for ICP qualification and validates final reports through a structured submit tool.

Validation and source

The repository includes 371 unit and integration tests, GitHub Actions CI, a sanitized Disney-to-Cursor output, local demo automation, and setup documentation. View the source code, sample brief, or CI runs.