Field notes · AI & Automation · Aug 7, 2026 · 6 min

The trade-show follow-up system: badges to CRM

Most trade-show leads die in a pocket. Our fix at AI4 this week: we run four capture paths at the booth, photograph badges that will not scan, have AI read the photos into a table, and reconcile against HubSpot while the show is still running.

33booth leads in HubSpot since Aug 3
46badges scanned or photographed

Every trade show produces the same artifact: a pile of contacts spread across four places and a plan to merge them later. Later rarely comes. The badge scans stay in the vendor app, the photos stay in a camera roll, and the one person who booked a meeting gets a follow-up while everyone else gets silence. ThinkingAI is exhibiting at AI4 this week, and I own the follow-up list. The rule I set for myself: I reconcile against the CRM during the show, so I finish the list before the booth comes down. As of Aug 6, with the show open since Aug 3, that list holds 33 booth leads in HubSpot and 46 badges collected at the booth, 11 of them already matched to CRM records and 35 still waiting to be added.

Decide the capture paths before the show opens

A booth conversation can end in exactly four places, and I designed all four with sales before the first attendee walked in. A meeting booked on a live calendar at the booth. A signup on the iPad kiosk. The demo-incentive form, which offers $50 for a proper demo request, a number I set and funded out of the marketing budget. And a badge scan, imported into the CRM after hours. Each path produces a HubSpot contact whose source says booth.

That last clause is the design constraint. A capture path counts only if it ends in the CRM without anyone retyping a full contact. Three do it live; badge scans go to a vision model first, then to me, which is the price of catching the conversations the scanner missed. Set up this way, there is no export to run after the show.

Photograph the badge when the scan fails

Badge scanning breaks more often than anyone admits. QR codes refuse to read under booth lighting. The scanning app demands a filled-out form while the person is mid-sentence, and some conversations end before anyone reaches for the scanner. Three or four of us worked the booth in shifts, split about evenly between marketing and sales, and our fallback rule was one sentence: if you cannot scan it, photograph it. A badge photo takes a second and preserves everything printed on the badge: name, title, company, attendee tier.

The camera roll became a capture path of its own. By Aug 6 we had 46 badges collected, scans and photos together. The badge itself was the record, so nobody at the booth had to remember anything afterward.

Have AI read the photos the same day

A camera roll full of badge photos is where most systems stall, because someone has to type them out. We skipped the typing. The photos went to GPT-4o vision, batched through a script I wrote, which read each badge and returned name, title, company, and badge tier as rows, deduplicated on name plus company. Each row stays linked to its photo, so I can check a doubtful read against the source image in seconds.

I spot-check the reads. OCR on a photographed badge mangles the occasional company name, and dedup on name plus company can miss a person who appears twice with slightly different employer strings. I read the edge cases by hand, all 46 rows, and corrected three to five of them, every one a mangled company name. The old alternative was an intern and an afternoon, and the intern made errors too.

Cross-reference everything against HubSpot

A list of 46 names is trivia until you know which the CRM already knows. So I match the badge table against HubSpot with fuzzy matching I wrote myself, on name plus company. The result splits the list: 11 of the 46 badge people already exist as contacts, usually because they also booked a meeting or signed up at the kiosk, and 35 exist only as a badge.

The 11 matched people keep their existing record and pick up the badge as supporting context. The 35 unmatched people become the follow-up backlog, each one a real conversation that would otherwise have evaporated by the flight home. Fuzzy matching earns its own qualifier: it matches on name and company, so I spot-checked the edge cases by hand before anyone acted on the split.

Badges to CRM, while the show runsfour capture paths, one destinationFour capture pathsmeeting, kiosk, form, scanPhotograph the badgewhenever the scan refusesVision model readsname, title, company, tierSpot-check the readsedge cases, read by handMatch to HubSpotfuzzy on name plus company11 matched, 35 to add46 badges, split cleanlythe human pass, because OCR mangles the occasional company nameThree paths land in HubSpot on the spot and badge scans arrive as a later import, all with a source of booth.
Camera roll in, HubSpot-matched rows out, before anyone leaves the venue.

Filter until the booth list is honest

I clean the CRM side too. “Contacts created since the show opened” is a tempting definition of booth leads and a wrong one. In the same window since Aug 3, our CRM also collected paid-search signups, organic newsletter and ebook signups, and test rows created by our own team while checking that the kiosk worked. I cut thirteen rows from the booth list, and every row I cut sits in an audit list with the reason next to it.

The audit list matters as much as what I cut. A booth-lead count is what justifies next year's booth, and a count padded with paid-search signups tells the company the show performed better than it did. Keeping the excluded rows visible means anyone can challenge a call, and the 33 that remain are defensible.

The caveat that stays glued to the numbers

Badge scans at this show carry no email address. That sentence is written on the list itself, because it changes what the list is for. Email exists only where the person gave it. The 35 badge-only people start as a name, a title, and a company, so we enrich them before any sequence sends. Those rows feed the same pipeline as the AI sales intelligence system I run. Writing the limitation on the list keeps someone from pointing an email tool at rows that never had an address.

Keeping the list honest
Booth leads kept33
Rows excluded13
The data caveat
0 emails on a badge scan by itself
The caveats travel with the data: an audit list of everything excluded, and the badge-scan limitation written where the next reader will see it.

A snapshot with the show still running

These numbers are a snapshot, generated Aug 6 with the show still running, and that timing is the point: when the booth comes down, the follow-up list is already done. Since then the 35 badge-only rows have been enriched and one follow-up round has gone out. What it booked stays internal.

Suggested posts