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.
The roster looked like an asset and behaved like a wall
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. No contacts, no separators, no ICP fields. Recon also showed scraping was low-ROI and against the platform's terms.
- Prioritization is gut feel. Which of 5,407 companies fit, and in what order, is normally one person eyeballing a spreadsheet.
- Enrichment is a paid-tool lottery. Getting a real contact for a named person at a named company is hit-or-miss across vendors.
- Outreach gets rebuilt by hand. The cadence, the LinkedIn touch, the booked meeting. None of it connects back to the list without manual re-entry.
Acquire, prioritize, enrich, deliver, hand off
The cheap model labels at volume, the API attaches 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.
Access I already had as a paying attendee, read at machine speed. The attendee directory carried no term prohibiting it — unlike the public web scraping I had already ruled out — and the bot drove a real browser session the way a person would, and randomized pacing kept it well under any rate a human could hitDeepSeek 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 at all, 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” affordable at allOnly the priority set
Only prioritized accounts get enriched. 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. Coverage runs to the database ceiling, about 56%, which is expected and stated 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, and 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
The output ships as a clickable report. Click a company to see who from it is actually 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. A writer agent drafts one email against that specific person and their specific product. A de-AI pass strips the tells. A reviewer agent standing in as the SDR manager checks 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 characterising the result either way. The lesson I would carry anywhere: a generic cadence gets ignored now, and a message that could only have been written for one reader still gets answered.
Intelligence half and outreach half both ran for Ai4. The ordering was deliberate: no copy engine until there was something true to saySix calls behind the pipeline
Classification at 5,407-company volume needs a consistent model rather than an expensive one. 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.
Enrichment is metered. 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, no LLM can invent a real email, and scraping the open web for addresses was ruled out: low ROI, and against the terms of the sites it would have to touch.
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.
Cheap model for volume, API for what only it can do, human for the calls that matter. The pipeline proposes; I decide.
The 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 true ceiling of the enrichment database.
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 real conversations, people who stopped and went deep rather than took a sticker. The same treatment is queued for the roughly 1,000 companies we have yet to work, each getting a message written against its own product instead of a merge field.
What I'm not claiming
Reply and meeting figures for the 150-send pilot stay internal, so the outbound result here is unquantified 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
HubSpot
Salesloft
LinkedIn
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.