AI-powered lead scoring, data enrichment, and automatic meeting scheduling. 90% less time on pre-meeting prep.
A design agency came to us with a problem that's painfully common: they had more leads than their small sales team could handle, and the good ones were getting buried under the noise.
Every day, a mix of inquiries would land in their inbox. Some were from serious companies with real budgets. Some were people fishing for free advice. And the team had no way to tell them apart without manually researching every single one. So they'd respond to everyone in the same order, at the same speed, and hope they didn't lose the big ones while dealing with the small ones.
We built them a system that changed all of that. It reads every inbound message, figures out who's behind it, scores them based on their entire online presence, and decides what to do next — all before anyone on the team even opens the email. The best leads get meeting times sent to them within minutes. The maybes get smart follow-up questions. The long shots get filtered out without eating anyone's afternoon.
Their sales team now spends about 90% less time on pre-meeting prep, and they actually know who they're talking to before every call.
Here's how the whole thing works.
Why We Treat Every Email Like a Data Source
Most agencies handle their inbox the same way — someone reads the email, Googles the company, makes a gut call, and fires off a reply. It works when you're getting five leads a week. It falls apart at twenty.
The thing is, there's way more information available than what's sitting in the body of that email. The sender's domain tells you the company. The company tells you headcount, revenue, industry, funding. Their LinkedIn tells you whether you're talking to an intern or a VP. Their website tells you whether they've invested in design before or if they're starting from scratch.
All of that data exists. It's just scattered across the internet, and no one has time to pull it together manually for every single lead.
So the whole system is built on a simple idea: grab all of that context automatically, turn it into a score, and use that score to decide what happens next. No guesswork, no gut feelings, and no one has to Google anything.
Three rules we followed the whole way through:
- Score before you respond. Every lead gets rated before a human touches it. The score is based on real data, not vibes.
- Route based on value. Big opportunities don't wait in line behind small ones. They get premium treatment immediately.
- Use every data point twice. Everything we collect for scoring also feeds into meeting briefs, CRM records, and call prep. We never collect something just to throw it away.
The Scoring and Enrichment Engine
Watching the Inbox
We set up a self-hosted service that listens for incoming emails via webhooks. No middleman platforms, no third-party tools sitting between us and the data. When an email comes in, we grab the sender's identity — email address, domain, anything in the signature — and the message content.
Pulling the Full Picture
Once we know who sent the email, we go wide. All of these lookups happen at the same time, not one after another:
Company signals — We check the domain and pull back whatever we can find: revenue range, employee count, industry, funding stage, tech stack. A 300-person SaaS company that just closed a Series B looks nothing like a 4-person shop, and the score reflects that.
Their website — We look at their actual site. Is it well-designed already? Are they clearly investing in their brand? Do they have case studies, a real blog, signs that they take marketing seriously? This tells us whether they're looking for a refresh or building from zero, and roughly what they might be willing to spend.
Social profiles — Who's reaching out? What's their title? How active are they? Are there other decision-makers at the company engaging in design or branding conversations? This helps us gauge seniority and buying authority.
Pattern matching — Over time, we learned which signal combinations lined up with the agency's best past clients. Leads that match those patterns get a boost.
All of this collapses into one score with a confidence level: high, medium, or low.
Here's roughly what the data looks like for each lead:
{
"lead_id": "ld_2025_0847",
"sender": {
"email": "[email protected]",
"name": "Sarah Chen",
"title": "VP of Marketing",
"seniority": "executive"
},
"company": {
"name": "Acme Corp",
"domain": "acmecorp.com",
"industry": "B2B SaaS",
"employee_count": 340,
"estimated_revenue": "$25M-$50M",
"funding_stage": "Series C",
"design_maturity": "moderate"
},
"scoring": {
"overall_score": 87,
"confidence": "high",
"signals": {
"company_size": 22,
"seniority": 20,
"web_presence": 18,
"social_engagement": 15,
"industry_fit": 12
}
},
"routing": {
"action": "schedule_direct",
"assigned_to": "senior_account_exec",
"priority": "immediate"
}
}How Leads Get Routed to the Right Outcome
This is the part that saved the team the most hours. Instead of someone reading every email, deciding who should take it, and then going back and forth to schedule a call — the system just handles it.
Big fish: send them times immediately
When we're confident a lead is high-value — big company, senior person, clear intent — we don't mess around with "let me get back to you." The system figures out their most likely time zone from their company HQ and social data, picks three open slots in the next three business days, and sends them over in a response that sounds like a real person wrote it.
The whole thing fires within minutes. For a small agency competing against bigger shops, being the first to respond with actual availability is a huge advantage.
Looks good but we're not sure: qualify while scheduling
Sometimes the company looks right but something's off. Maybe the person's role isn't clear. Maybe the message is vague about what they actually need. The data says "probably good" but not "definitely good."
In these cases, the system sends a calendar link but also asks two or three specific questions — and they're not generic. If we couldn't figure out their budget from the company data, we ask about budget. If the scope was unclear, we ask about scope. The questions are tailored to fill in whatever gaps exist in our enrichment data.
By the time the sales team actually gets on the call, they already have answers.
Not a clear fit: ask more before investing time
For leads that don't match the ideal profile — small company, generic inquiry, unclear intent — we send a friendly reply asking for more details about what they're looking for, their timeline, and their budget. It's not a rejection. Some of these leads turn out great. But no one on the team has to burn twenty minutes on a discovery call to find out.
Everything lives in Coda
All of the routing logic and lead tracking runs through Coda, which the agency was already using as their operational hub. Every lead, every score, every routing decision shows up in real time. When a status changes — say, a lead gets marked as "send" — downstream actions fire automatically. Calendar invites go out, CRM records get created, the assigned person gets notified with full context.
Nobody has to jump between tools to know what's going on.
What Happens After the Meeting Is Booked
This is where things really start to compound. All the data we collected for scoring and routing doesn't just sit there once the meeting is on the calendar. It keeps working.
CRM gets filled in automatically
The second a lead is scored and routed, everything we know about them gets pushed into the CRM. Company details, contact info, how they scored, the original email, any answers they gave during the qualifying step. No one types anything into a contact record. It's just there.
Pre-meeting briefs write themselves
Before every call, the team member assigned to the meeting gets a brief. It covers the company background, who they're meeting with, how the lead scored and why, what the initial inquiry was about, and whatever qualifying information came in during the routing phase.
Before we built this, people were going into calls with basically nothing — a name and a vague email. Now they sound prepared because they actually are.
Calls get transcribed
We plugged in a transcription tool that sits on every client call. The recording and full transcript flow back into the same system, so you get a complete thread: how the lead found them, what we knew before the call, and what was actually said during it.
Post-call briefs (work in progress)
We're building out the next layer right now — automatic briefs generated after the call that combine the transcription with the pre-meeting data. What the prospect needs, what got discussed, next steps, recommended follow-up.
Honestly, this part still needs a human touch. The system produces a solid first draft, but someone reviews and cleans it up before it goes anywhere. Even so, what used to be a thirty-to-forty-minute exercise in consolidating notes is now three to five minutes of light editing. That's the 90% time savings the team keeps talking about.
The Technical Nuts and Bolts
How it all connects
The architecture is pretty straightforward — a hub-and-spoke model. The inbox webhook listener is the entry point. Data flows through enrichment, into scoring, through routing logic, and out to the endpoints: email responses, calendar, CRM, Coda, and the transcription service.
Everything is self-hosted and modular. Want to swap the CRM? One connection changes. Want to add a new data source for enrichment? It plugs into the scoring engine without touching anything else.
The flow, visually
If you want to build something like this yourself
- Figure out your ideal client first. Before writing a single line of code, get clear on what a great client actually looks like. Revenue range, industry, company size, who usually reaches out, typical project type. This becomes the scoring rubric.
- Map where the signals live. Company data comes from business databases. Web presence comes from crawling. Social data from professional networks. Intent signals from the message itself. Know where to look before you start building.
- Define your data structure. Decide exactly what fields you want for every lead. The JSON schema we showed earlier is a decent starting point. Be specific about what you're scoring and how much weight each category gets.
- Run enrichment in parallel. Speed is everything. If all your lookups run one after another, you're looking at 30+ seconds per lead. Run them all at the same time and you're down to a few seconds.
- Start with simple scoring. Weighted points for each signal category, threshold cutoffs for your three tiers. You can get fancy later. The first version just needs to be directionally right.
- Wire up the three response paths. Direct scheduling for high confidence. Calendar link plus qualifying questions for medium. Information gathering for low. Each one needs templated responses that don't sound like a robot wrote them.
- Connect everything downstream. Push enrichment data to your CRM, your operational tools, and your briefing templates. The goal is that nobody copies and pastes anything, ever.
One thing people overlook
When email threads have multiple people on them, the system tracks who said what. So if a junior person sends the initial inquiry but a VP jumps in later, the score updates. Routing decisions shift based on who's actually in the conversation, not just who started it.
How We Actually Rolled This Out
There was no grand deployment plan. No "Phase 1, Phase 2" timeline. Here's what actually happened.
We started with a call
We got on a call with the agency's team and just listened. How do leads come in today? Who handles them? How long does it take? Where do things fall through the cracks? We asked about their best clients, their worst ones, and the deals they wished they hadn't lost. That conversation gave us everything we needed to know about what to build and what to prioritize.
We got access and talked to everyone
We got into their inbox, their Coda setup, their CRM, their calendar tools. But the more valuable part was talking to every person who touched the sales process — the AEs, the person triaging the inbox, the founder who still hopped on certain calls. Everyone had a slightly different idea of what made a lead "good," and we needed to reconcile all of those views before the scoring model would feel right to anyone.
Enrichment ran in the background first
We built the scoring engine and let it run alongside their normal process. Every time a real lead came in, our system scored it quietly in the background while the team kept doing things the way they always had. They could see the scores, compare them against their own instincts, and tell us where we were off. We tweaked the weights until the team looked at the output and said "yeah, that's how I would have ranked these."
Then we turned on the emails — carefully
Once scoring felt solid, we moved to actually sending responses. This was the sensitive part. We started with every email being reviewed and confirmed by the team before it went out. They checked tone, timing, and whether the routing decision made sense. Over time, fewer corrections came back. Eventually, high-confidence leads were being handled fully automatically, and the team was only reviewing the medium and low tiers.
Then everything got wired together
With enrichment running and emails going out reliably, we connected the full pipeline: scoring, routing, CRM, calendar, Coda — all in one flow. At that point, the majority of leads went from inbox to booked meeting without anyone lifting a finger.
Briefs came last
The pre-meeting brief was the final layer. By then, all the data was already flowing through the system — we just had to package it up and deliver it before each call. We connected the transcription tool around the same time and started building the post-call brief capability. That's still a work in progress, but even the rough version is saving the team a massive amount of time.
Why This Matters for Small Teams
Here's the reality for most agencies: your sales team is probably two or three people. Maybe it's one person plus the founder jumping in for the big ones. You don't have the bandwidth to research every lead, and you definitely don't have time to be slow about it.
The agencies that win new business aren't always the most talented or the cheapest. They're often just the fastest to respond and the most prepared when they show up. That's it.
This system gave a small team the ability to respond to high-value leads in minutes, walk into every meeting knowing exactly who they're talking to, and spend their actual working hours on selling instead of Googling company names and typing up meeting notes.
The data is already sitting in your inbox. The signals are already out there. You're just not collecting them fast enough to use them.
If your sales team is drowning in leads and losing the good ones because everything moves too slowly, this is fixable. We've done it. And it's a lot less complicated than it sounds.