4,483 possible investors sorted into a shortlist of 185
Wavelength, an early-stage startup, needed investors for a seed raise, an early funding round. A working prototype turned a database it already paid for into a shortlist it could filter. Each match is explained by the companies the investor had funded.
CreditDesigned and built by our founder, as lead developer for a partner agency.
From list to evidence
Each filter shortens the list, and every name keeps its evidence
Follow the filters, then open the reason behind one match.
Every name was read.
All candidates were read, not a sample.
Each match can be checked.
The evidence comes from companies they funded.
Some have led a round.
A narrower list within the 185 matches.
Fund A
Seed investor · Has led a round
Company A carries an AI industry tag.
This is evidence, not a forecast.
185 → 100: “Has led a round” narrows the recorded shortlist. It does not mean those investors will lead this raise. No outreach is sent.
About Wavelength
The CTO needed names to write to, and a reason to choose them.
Wavelength was preparing a $4–5M seed raise. Most investors do not reply, so its CTO needed a long enough list of relevant investors, including some who had led a funding round before.
- Client
- WavelengthAn early-stage European startup preparing a seed raise
- Industry
- Startup fundraisingThe same method applies to choosing business customers to approach.
- Starting point
- A database the client already licensed
- What worked
- A filterable prototypeEvidence of investment in AI companies was built. A ranking that gives some criteria more weight was planned.
The targeting problem
The first filter looked at what investors said, not what they had funded
Thousands of possible names
A large database did not tell the CTO which investors fit the raise. Reading every profile was not a useful starting point.
The first filter found only 6 matches
The first filter read investors' own tags. A hand check found far more AI investors by looking at the companies they had funded.
A name alone was not enough
Without evidence behind each match, the CTO would have to research the same investor again before writing.
What was built
The shortlist is based on the companies each investor funded
Some matches come from a category tag. Others sit in the company description. Keeping both sources made the shortlist more complete.
across the full candidate file
Build record · These counts cover all funding stages. The seed-stage shortlist contains 185.
Portfolio tagsA category on the company
One of 14 AI industry tags on a portfolio company can establish a match.
Company A
Industry tag: Artificial intelligenceThe tag belongs to the company the investor funded, not the investor's own profile.
Portfolio descriptionsA mention in the company text
Description text found 542 additional investors whose portfolios did not match on tags.
Company B
“AI software for support teams.”The card marks this as text evidence. It does not turn a mention into an investment recommendation.
Read the full candidate file
All 4,483 investors with a portfolio company in the home market were read in full. The result was not based on a sample.
Keep the source of each match
Rules check portfolio-company tags and descriptions. Every matching investor carries the kind of evidence that put them on the list.
Let the CTO narrow the list
Stage, portfolio category, investor kind, region and past lead rounds are filters. The page runs in the browser.
Control and safety
The software finds possible investors, and a person decides whom to contact
The page filters and sorts. It sends nothing. The CTO chooses the investors to approach and tracks outreach separately.
- No AI model makes the match. Plain rules check portfolio tags and descriptions, so each card can show exactly why an investor matched.
- Missing data stays visible. If the category file is missing, the builder warns and marks portfolio filters as pending instead of returning a misleading empty list.
- Estimates are separate from facts. The design labels inferred figures, such as cheque size, as estimates.
- Hiding the page from search engines is not a login. The record describes a private link and no-index headers. Those do not establish an authenticated sign-in or prevent someone with the link from opening it.
For technical readers
How the system works
Investor records and portfolio-company evidence are joined by investor ID. A Python builder packages the cleaned records and category matches into one HTML page. Filtering then happens in the browser.
In more detail
Technology used (4 parts)Each part of the system, and why it was chosen.
| Layer | Technology | Why it was chosen |
|---|---|---|
| Matching | Rules over portfolio tags and text | An explainable match without an AI model adding guesses. |
| Catalogue | Python · compressed data · self-contained HTML | Builds a page whose filters run entirely in the browser. |
| Hosting | Vercel static hosting · no-index headers | A shareable page excluded from search indexing; authentication is not established by the record. |
| Checks | Vitest · Biome · TypeScript · GitHub Actions | Lint, the build and automated tests run for each pull request and push to main. |
3 engineering decisions that matteredThe problem, what was done, and what it changed.
Match what an investor funded
The first filter found six investors because it read their own profiles. An audit found no portfolio data in those fields. A new step reads portfolio companies and joins the evidence by investor ID.
ResultUsing only portfolio-company tags found 125 seed investors, in line with the hand check. Adding description evidence brought the shortlist to 185.
Make a missing category file obvious
The builder still writes a page when category data is absent. It emits a warning and disables those filters as pending, so a data problem cannot look like a valid zero-result search.
Keep matching inspectable
Rules use 14 AI industry tags and text mentions in portfolio descriptions. Each card distinguishes tag evidence from text evidence. Weighted scoring was left for a later iteration.
Testing and build recordHow it was tested, and the build by the numbers.
Quality and reliability
- 82 automated tests across 14 files cover the data pipeline, crash recovery and category membership rules.
- A test checks that an investor's own profile does not create portfolio-category membership.
- GitHub Actions checks lint, TypeScript and tests on every pull request and push to main.
By the numbers (build)
- About 2.5 days to the first working shortlist page.
- 33 commits from 22 to 25 August.
- 6 category definitions; only AI implemented, using 14 industry tags.
Is it a fit?
Could this work for your team?
- You already have a target database. Founders and business-development teams need to choose who to approach from a defined set of accounts.
- Your current filters miss what matters. You want to know who has done something, not just who says they do it.
- Your team keeps repeating research. A shortlist should carry the reason for each match into the next conversation.
- You want to keep the decision. Adapt the data source, fit rules and evidence for your team. People choose who to contact.
Do you have a large database but no clear shortlist?
Conducted by Apurva · Not a sales call
Or write to care@brownmind.com