Interfaze Signal Agent
Nightly scan for companies hiring to build document extraction, with one-click demos.
Python 3.13asyncio + httpxSQLiteGemini (structured JSON classifier)OpenRouter (DeepSeek V4 Pro, demo design)ExaGitHub REST APINext.js 16React 19TypeScriptInterfaze APIVercellaunchd
Problem
Interfaze sells OCR and structured extraction as an OpenAI-compatible endpoint, and it wins in one place: where a wrong field costs real money and a human is still checking the output. Companies in that spot give themselves away by hiring engineers to build extraction in-house, a public, time-sensitive signal nobody was watching systematically. Built unsolicited as proof-of-work for a GTM role at Interfaze: an agent that runs on its own and hands over a ranked, evidenced queue every morning.
What I built
A Python pipeline runs nightly under launchd. It sweeps YC's public company API and five VC portfolio job boards on top of a fixed ICP universe, resolves each company to its ATS board (Greenhouse, Ashby, Lever, Workable, SmartRecruiters, or a careers-page fallback that reads the embedded board link out of the HTML), snapshots open reqs, and runs a regex prefilter before a Gemini classifier reports observable features only. A deterministic weighted sum in Python produces the score and records which signals fired; enrichment picks a decision maker by headcount band and pulls Exa research; a pitch stage drafts an email of 120 words or fewer under a positioning prompt that forbids claiming Interfaze is cheaper or faster. A GitHub radar attaches companies to verified orgs and scans recent repos and dependencies for evidence the build has started, putting companies with code but no scoreable req in a separate 'building quietly' lane with no invented score. The run publishes a scrubbed JSON snapshot that a static Next.js console renders on Vercel, with an env-gated action bar (Gmail compose or draft, Slack, Salesforce, Jira; nothing sent automatically) and an on-demand demo builder: DeepSeek designs a company-specific document, the browser draws it as SVG and rasterises it to PNG, and the real Interfaze API extracts it with word-level bounding boxes and a separate format check.
Highlights
- The model never produces the score. Gemini reports what a posting says (role tier, mentions OCR, named vendors); Python computes the weighted sum and stores the breakdown, so every number is auditable and re-tunable without a new LLM call.
- Recency is a hard gate, not a bonus: a req older than 60 days cannot trigger a lead, after the first run's top hit turned out to be a 361-day-old evergreen posting. Copy says 'posted N days ago, still open', the only claim the ATS data supports.
- Every signal is checked against something the model cannot invent: SmartRecruiters answers 200 for any slug, so a board needs at least one posting to count; LLM-claimed vendor names must match a known list; GitHub orgs attach only via a homepage link or website match, never name similarity; companies that sell extraction are excluded with a recorded reason.
- Cost discipline by construction: a zero-cost regex prefilter runs before every LLM call, a per-run budget meter stops classification when spent, failed classifications are marked for retry rather than cached as zeros, and one failed stage never kills the run.
- Public-safety coded in: the published snapshot drops contact emails and is regex-scrubbed of every address as a second pass; the paid demo routes sit behind a shared token, same-origin check and per-IP rate limit that fail closed; confidence and bounding boxes are read only from the OCR precontext, never from schema fields; and a format check runs separately from confidence because a 0.99-confident '$1,200, 000' is still a malformed number.
Numbers
- First run: 586 companies watched, 183 job boards resolved (31%), 1,949 open reqs swept, 56 sent to the classifier, 9 companies scoring above 55
- Prefilter cut 97% of open reqs before any LLM call (1,949 reqs became 56 classify calls); first nightly run cost $0.028 and the nightly stages finished in under 2 minutes
- Hand audit of the first run: 8 of 9 surfaced leads judged worth an email
- Without the non-empty-posting check, 16 of the first 30 'resolved' boards were fabricated by SmartRecruiters' always-200 API
- Latest published run: 1,221 companies watched, 411 boards found, 18,879 open reqs swept, 219 classified, 7 leads surfaced, $0.013 in LLM cost
- GitHub radar's first sweep attached 284 of 1,221 companies (23%) to verified public GitHub orgs
- 61 tests, no network required; the regression suite covers eight defects from an adversarial review, four of which would have put false claims into outbound email
Screenshots
