The list was dead. I made it rankable
Ai4 handed us ~11,700 attendees with no emails, no LinkedIn, no way to tell buyers from competitors. I built a pipeline that labels every company with a cheap LLM, enriches the priority set through Apollo, and then writes one email per person against that person's own product, sent as a normal cadence.
Ai4 handed us a roster we could not contact
The event API deliberately withholds email, LinkedIn and ICP fields, so what you actually hold is thousands of rows of name, title and company mashed together. Every team that targets a list hits some version of this.
- The raw list is unusable. The rows carry name, title and company, and nothing you can act on. Recon also showed scraping was low-ROI and against the platform's terms.
- You pick by gut. Which of 5,407 companies fit, and in what order, is normally one person eyeballing a spreadsheet.
- You gamble on paid tools. Getting a real contact for a named person at a named company is hit-or-miss across vendors.
- You rebuild outreach by hand. The cadence, the LinkedIn touch, the booked meeting. None of it connects back to the list without manual re-entry.
The cheap model does the volume, and I keep the judgment
The cheap model labeled at volume, the API attached the contacts, and the judgment calls stayed with me.
The directory was readable, so I read all of it
The event runs an attendee portal for booking meetings with other attendees, and as a registered attendee I could see everyone in it, more than ten thousand people. What I could not do was work that list by hand at the browsing speed the portal allows. So I had an agent write a bot that drove my own logged-in session through the directory, opened each attendee in turn, recorded what the page showed, and saved it locally. The API exposed none of these fields.
From there it is a parsing problem. A script splits on the platform's markup and DeepSeek untangles the run-together title and company strings into clean columns. Out the other side: ~11,700 attendees across 5,407 companies, then every person joined to their company, so the same data reads two ways. Per person: name, title, employer. Per company: who they sent, how many, and at what level.
Permission came first. The portal was already putting those people in front of me, on a ticket I had paid for. I read the portal's own terms and found no clause against reading the directory this way. The open web is a different matter: those sites forbid scraping in their own terms, so that route was closed before this one started. The bot drove a real browser session the way I would have driven it by hand, and randomized pacing held it under any rate a person could reach by clicking. It recorded only the fields the portal had already shown me.
I paid to attend, so I read the directory at machine speedDeepSeek labels every account
This is the core move. DeepSeek labels every company against a has-a-mobile-app gate (the prerequisite to be our buyer) and assigns a role: target, channel partner, or competitor. Where it can't be sure, it writes “unknown” instead of guessing.
The same pass tags the rest of what a rep would want to filter on: industry, whether the company ships an application, whether that application is mobile, Fortune 500 versus startup. By the time anyone flew out, the whole event was already sorted along the axes we actually sell on.
Cheap model at 5,407-company scale is what makes “see the targets” affordableOnly the priority set
I enrich only what passes the gate. Apollo's bulk match, reached through its MCP endpoint, takes name plus company and returns work email plus LinkedIn. Of the tools I tested, it was the only one that would take a bare name plus company. Apollo matched about 56%. That is the ceiling I observed, and I state it as-is.
Two DeepSeek tracks run beside it, because contact details alone give you nobody to talk about. One track works the company: what kind of business it is, what it actually sells, any recent AI news worth referencing. The other goes to the app stores and pulls the product itself: the icon, the listing basics, the product shots. It also takes the reviews on both sides, the praise and the complaints. That last one matters most. A complaint in a public review is a problem the company already knows it has, which makes it the honest opening line for a first email.
157 startup-with-app contacts matched with email + LinkedIn, each carrying company and app context into the next stepA clickable report
I shipped it as a clickable report. Click a company to see who from it is in the room; each enriched attendee shows LinkedIn and work email, an envelope badge marks companies with contacts, and every category exports to CSV in one click.
Export columns: first / last / company / title / email / LinkedInOne email written per person, at cadence scale
A normal sequencing tool gives you personalization tokens. You can drop in a first name and a company name, and everyone receiving it can tell. I had already built the SDR outreach automation for our inbound motion, carrying over how we ran cadences at PingPong, so the sending machinery existed. What was missing was copy worth sending.
By this point every contact arrived with real material attached: what the company does, what its app is, what its users praise and complain about. So I added a small agent workflow on the end. I run three passes on every draft: write it against that person's own product, strip the AI tells, then read it back as an SDR manager would, checking that the claim is fair and the ask is reasonable. Then the API pushes each finished email back into Apollo, matched to its own recipient, and the cadence sends them as a normal sequence.
We ran 150 as a test before the show. Reply and meeting figures stay with the company, so I am not characterizing the result.
Intelligence half and outreach half both ran for Ai4. I ordered it on purpose: no copy engine until I had something true to sayThe Ai4 funnel, count by count
Coverage is the number that looks weak, and it's the one I'd defend hardest, because it's the match rate Apollo returned on this list, and a different list would return a different rate.
Hunt list
Ranked by delegation size, a proxy for how seriously each company took the event: CVS Health 21 · Navy Federal 15 · Thrivent 13 · U.S. Bank 11.
At the booth, and after
Two days on the floor produced 64 conversations, people who stopped and went deep. The same treatment is queued for the 787 targets we have not worked yet, each getting a message written against its own product.
What I'm not claiming
Reply and meeting figures for the 150-send pilot stay internal, so I am leaving the outbound number out on purpose. And ~56% contact coverage is Apollo's database ceiling; no tool or model gets to 100% on a name list, and pretending otherwise would mean inventing emails.
Related work
DeepSeek
Apollo
LinkedIn
Where I spent money, and where I kept the judgment
Labeling 5,407 companies rewards consistency over price. DeepSeek does the labeling; the expensive judgment stays with me.
When the model can't tell whether a company has an app, it says so. A wrong “yes” wastes an enrichment credit and a salesperson's morning; an honest “unknown” costs nothing.
Every Apollo match spends a credit. Running Apollo against all 5,407 companies would burn budget on competitors and no-fits, so only accounts that pass the gate get enriched, starting with the startup-with-app cut.
The other enrichment vendors failed the recon: one matches only on company and job title, another needs an email as its primary key. Neither can enrich a list of names, and no LLM can invent a real email. I ruled out scraping the open web: low ROI, and against those sites' terms.
Nobody at a booth opens a 5,000-row CSV. Click a company, see who's in the room, export just the slice you need.
DeepSeek takes the volume, Apollo takes the one thing only it can do, and I take the accounts worth a call.
Sitting on a list nobody works?
Ai4 was one instance. The same acquire → prioritize → enrich → hand-off motion works on any BD or sales list.