icp-scout
- 5 Devlogs
- 34 Total hours
AI assistant for finding B2B sales opportunities. It analyzes company data, identifies potential customers, and prepares contact recommendations for sales teams.
AI assistant for finding B2B sales opportunities. It analyzes company data, identifies potential customers, and prepares contact recommendations for sales teams.
Wired up actual deploy: push to main, and a minute later the demo is running that commit. git archive straight over ssh into a receive script — no registry, no git pull on the server, so the server never holds credentials for this repo. The one thing it refuses to do is kill a run in progress: /api/run spawns the pipeline as a subprocess, and a container restart takes it down with it. Now the script asks first, and if a run is going it stops and exits non-zero — red, on purpose, because a deploy that shipped code but didn’t put it into service has no business looking green.Rebuilding the whole thing from nothing on a clean machine found what months of running it on my own box never did. All five delivered companies 404’d after the first real run — the candidate list gets loaded once at import, a run rewrites the files under it, and the process just kept serving eight-hour-old data until somebody restarted it by hand. The “what’s missing” preflight check was lying in both directions: it called the API key missing on a machine that had it as an env var instead of a .env file, and it reported success on a machine where the industry codebook never downloaded — which doesn’t crash anything, it just prints every industry as a bare five-digit code and calls that fine.README got rewritten to lead with the one sentence the tool actually stands on, plus an ARCHITECTURE.md the code can point to instead of explaining itself in comments, a Czech translation, and an MIT licence with the honest caveat: what’s verified is that a sentence was on a page, not that it’s true.
Built a carousel for the week’s five cards - swipe through them one at a time, or flip to a plain grid
Ran two experiments trying to find better weights for the outreach-order score — a permutation test on our own signals, and a 1536-dim embedding of company sites — both landed at chance (AUC 0.39, p≈0.8). Turns out public site text just doesn’t say whether a company is buying planning software; that’s a ceiling in the source, not something more features would fix, so scoring got replaced with an order read straight off the client’s own ICP document instead of invented weights. Then reading five actual weekly cards by hand caught two things neither experiment did: a solar-panel subsidy misfiled as “scaling up production,” and the #1 company on the list whose own grant description said “we’re buying a complete information system” — already a lost lead, not a hot one. Fixed the classifier — it was only reading project titles, never descriptions — and one signal class jumped from 214 to 1014 matches, 415 of which used to be pitched as reasons to call. Two rigorous measurements found nothing; two hours of eyeballing cards found the bugs sitting at the top of the list.
The assistant now produces real company cards - every claim on one carries the exact quote it came from and a link to the source it was found in. To make sure that actually held, I wrote a check that re-verifies every stored fact against the archived page it supposedly came from, and ran it over the whole database.100 of 172 “facts” failed. Every single one came from my own code: the part that reads the state company register was writing claims marked “verified” without ever passing them through the verifier. The irony is that the register is the most trustworthy source in the entire project - it was just the only one asserting things instead of proving them. Now 177 of 177 pass.I also cut the weekly run from ~50 minutes to about 2, after finding an official API that lists which companies changed recently - 30 of mine in a week, instead of re-checking all 3,299.
I started working on icp-scout - an AI assistant that helps find potential B2B customers.
The idea behind the project is simple: instead of a salesperson spending hours searching for companies, opening different websites, and collecting information manually, the assistant should handle this routine work. The goal is not just to provide a list of companies, but to explain why each company could be a good fit and why now might be the right time to contact them.
Right now, I’m working on the basic project architecture and thinking about how to make AI results more reliable. The biggest challenge with systems like this is that AI can confidently generate information that is not true. That’s why it is important that every important statement can be verified and has a clear source.
Next, I plan to connect public company data sources, build the first analysis pipeline, and test it with real examples.