Narrowing the funnel

In an earlier post I described the shape of our firm: partner-led, a lean tech team, no associates or analysts. We will now dive deeper into the individual parts of the stack. This post is about the top of the funnel: how the partners filter for companies that are worth attention in the first place. Later posts will cover the workflow automation that moves information around the firm, and the agents that run on top of it.

At a small, early-stage firm, by definition the top of the funnel is wide and partner time is limited. There are tens of thousands of companies in the broad universe that, at first glance, could be a fit.  The traditional approach is to leverage humans: associates/analysts who read, meet lots of founders and investors for coffee, and pitch their ideas internally to the partnership. An analyst can properly review several hundred companies per year while screening out a few thousand. Software isn't limited in the same way. Mosaic’s system reconsiders around tens of thousands of startups every two weeks, takes in new evidence as it arrives, and interprets it through a subtly different lens for each of Toby, Simon and Chandar. This is work the old model was not able to do.

The easiest way to show what that means in practice is with an example.

Cortea

In March 2025, Cortea was one of roughly 50,000 companies in our data set. It first entered the ranking on a single external signal: a seed round from a fund we rate highly.

At the time, Toby and Chandar were building conviction in AI tools for audit. For spaces like this, we map the market and track every in-scope startup by geo and stage. Companies in a conviction space get a heavier weighting. Other signals then compound on top of it: traffic, hires, media and social attention.

That is what happened with Cortea. By the end of May it had moved from roughly 1,300th to inside the top 300 overall, and to around 200th on Toby's list. That is when we decided to engage. The first email went through a warm intro, ten weeks after the company first scored. After the first meeting it kept climbing and peaked at 20th on Chandar's list, out of around 44,000. We invested in the seed extension in 2026, led by Chandar.

The system didn't replace the partners' judgement. It applied it across the whole market, and told us when to act.

Cortea is one example. Over the last twelve months we held a first meeting with hundreds of companies, and the system was the primary catalyst for about 15-20% of those. Interestingly, most of these companies were known to us for months, and some for more than a year, before we reached out and met them (typically due to a score improvement: focusing on a space/market, a traffic uptick, key hire(s) from LinkedIn and so forth). A handful reached this threshold on purely outside signals alone, before we had any record of them ourselves. The system complements traditional network-based sourcing, which will always remain an integral part of how we operate.

How the score works

Every company in our universe gets a score. The score is an amalgamation of signals, with evolving weightings. A signal is a piece of evidence that a company is becoming more interesting, or moving closer to what we might typically want to back. The score is recalculated as new data lands so the ranking stays current.

There are two kinds of signal.

External signals are what the outside world tells us. A company shows up in one of our saved searches (standing queries on our data vendors' platforms for things like a hiring spike, a particular growth pattern, or a website that matches a thesis). Or it raises a round from an investor we rate highly. At any given instant, the system will be tracking several dozen of these signals.

Internal signals are breadcrumbs we know that are not public. A company moved status in our CRM. Someone in the network made a warm intro. An angel investor shared an indication of traction. At any given instant, there are typically one to two dozen of these, pulled straight from Mosaic OS, our internal system of record, which connects the CRM to everything around it.

This second kind of signal matters more. The external data is available to every firm with the same vendor contracts. Our own history is not. A company that three of our partners have met, and flagged to actively track months ago, would score lower in a system built only on vendor data.

One score per partner

What makes a company interesting depends on who you ask. Toby, Chandar and Simon have different weightings for some signals.

So each signal carries a per-partner weight. The weights are held in a config table rather than in code, which means the model encodes several distinct theses at once. The same company can rank highly for one partner and lower for another. When we surface a ranked list, we can say whose list it is.

The goal was not one objective score. It was to make each partner's own taste queryable.

In the first post I used the distinction between codified and tacit knowledge: the associate's job was mostly codified, the partner's job is mostly tacit. Most of what makes a great investor is still tacit. The weights are not a partner's judgement. They are signals that correlate with what a partner tends to find interesting. What we have codified is enough of the things around the judgement to surface the right company in front of the right partner at the right moment. The score is a suggestion, or flag – but does not “tell” anyone whether the company is compelling. Only that it might be and is worth considering.

Discovery and prioritisation

The score does two different jobs.

The first is discovery: surfacing companies we were less likely to have found by hand. A name climbs the ranking because signals are firing, and lands in front of a partner who had no prior reason to be aware of it. This is the part that most directly replaces the historic associate role.

The second is prioritisation: ranking the companies that we already know about. The CRM is large and attention is finite. The same score, filtered to the existing pipeline, is sorted such that the higher-signal names rise to the top.

From the list to the meeting

A ranked list of thousands of companies is not something a partner can digest. For a long time this was the weak link. The score was indicative more often than not, but still needs interpretation and contextualisation.

So we added a second layer between the ranking and the partner. When the new data lands, the top of the list goes through an AI screening pass. Each candidate is checked against the things a partner would check in the first thirty seconds: is this a market we have conviction to invest in / does it fit a thesis we have articulated, is it the right stage, does the team appear backable? It reports a judgement with reasoning. What reaches the top-of-funnel meeting is a short-list, each name carrying the signals that put it there and the screen's view of why it belongs. Time to review the top of the funnel is then spent on specific companies, not on the act of filtering.

The same scores and screens are what our agents read when they triage inbound, prepare a partner for a meeting, or decide whether something is worth flagging. Each use takes the same score and filters it its own way. The score becomes an input to the rest of the stack.

How it works

The pipeline underneath is simple. Signals land in our systems, a set of models turns them into the weighted scores, and the output is pushed to where the rest of our tooling can read it with low latency. A dashboard sits on top for when someone wants to see the whole field at once. The data model has been frozen for a while now.

The change that mattered most was putting the score where partners actually work. We exposed it inside our internal assistant, so a partner can ask "what do we know about this company" in plain language and get the total score, each partner's score, who has already invested, and the specific signals behind the number, without touching a dashboard or knowing any SQL. The score stopped being a report you go and look at and became something you can ask about in the middle of a conversation. That changed how the system gets used more than any improvement to the model did.

What hasn't worked

We experimented with a machine-learning layer that learns from our actual decisions on which companies to engage with and produces a recommender score alongside the rules-based one. It's deployed. We are still feeding it the full feature set it needs to earn its keep.

We have also tried semantic matching between our own thesis writing and company descriptions. It is useful when it works and wrong more often than it is right. It finds companies that describe themselves the way our manifesto is written, rather than companies that do what the manifesto is about.

The biggest challenges have been in the plumbing. Every serious failure we've had was a signal that stopped meaning what the model thought it meant. A company we'd emailed for years counted as untouched because a sync between two systems missed it. A job stopped running and left a dashboard that looked healthy. A weighted sum is only as good as its inputs, so most of the ongoing work is checking that the data arrived and still means what it did last month.

Data integrity and institutional knowledge have been constraints, but in the end the advantage came from getting what we know into a structure software can use, and keeping it true. I suspect that holds well beyond venture.

Taste

We haven't encoded what makes a great venture investor great, and I don’t believe we are close. What we have encoded is enough of the pattern around that judgement to get (at least some of) the right companies to the right investor at the right moment.

The open question is how much more of taste can be made legible to a machine without averaging away the idiosyncrasy that makes it valuable. Keeping one set of weights per partner was our first answer.

Next
Next

Why we invested in Integral