Refolk
TeardownSales and go-to-market

From Badge-Scan Export to a Ranked Outreach Queue

You can take a raw registrant CSV and produce a deduped, ICP-filtered, contact-resolved queue ranked by fit and intent with a count at every stage.

17 min readLast reviewed August 14, 2026Read as Markdown

Key takeaways

  • The contactable-record filter, not the ICP filter, is usually the biggest drop: with B2B appends resolving 25 to 60%, up to three-quarters of rows can fail enrichment before fit is ever judged.
  • Ranking is a race against a measured decay curve: reply-rate index falls from 92 at 24 hours to 47 by 72 hours, roughly halving in two days, so same-day rows jump the queue over higher-fit but slower ones.
  • Rigid title strings manufacture false scarcity: Refolk's index held 389 US Director-level RevOps people, yet an exact 'VP Revenue Operations' query at VP seniority returned 0.
  • US Director-level RevOps outnumber the UK 3.0x and cluster in New York, Austin, and San Francisco, so route territory by supply concentration before a single email sends.
  • Compliance is a routing rule, not a footer: GDPR demands immediate opt-out and documented legitimate interest while CAN-SPAM allows 10 days, so one queue needs two send policies split by geography.
  • Up to 80% of trade show leads never receive meaningful follow-up, so a same-day queue is itself an edge over most competitors in the room.

You just got back from a show with a CSV. It has a few hundred rows across dozens of companies, some emails, some blanks, some fields in the wrong columns, and a decay clock already running against you. This guide is for founders selling their own product, account executives, SDR leads, and partnerships teams who need to turn that artifact into a ranked, safe-to-send outreach queue before the momentum fades. It carries one real list through resolution, dedup, fit-match, and ranking with the counts shown at each fork, including the wrong turns.

Most published follow-up advice starts from a clean ICP or a single named account. That is not what you hold. You hold a messy, multi-company registrant export, and the interesting work is the funnel math: how many rows survive each stage, which stage does the real damage, and how to defend the final number to whoever asks why the queue is smaller than the badge count.

What a badge-scan export actually contains

A registrant or badge-scan export reliably carries identity and event context, and reliably lacks verified contact and firmographics. That gap is the whole job.

Badge-scan and registrant exports from platforms like Cvent, Whova, and ATIV EventPilot typically carry full name, company, job title, ticket or attendee type, role, a unique QR or barcode value, and often email and phone. What they miss or corrupt is the part you actually send against: verified business email, direct dial, firmographics, and current-employer confirmation.

Several conditions degrade the data before you touch it. Registrants who used personal rather than business emails, small businesses with thin online presence, self-employed individuals, badges that belong to event staff, sprawling sub-company networks, and security-sensitive industries all resolve poorly. And column-shift corruption is real and common: raw badge CSVs silently place email in the last-name field or company in the title field, so a row that looks clean is not.

The practical read: treat the export as a list of identities to resolve, not a list of contacts to mail. Everything downstream is about converting identity into a deliverable, current, compliant, ranked contact.

The funnel and where it actually leaks

A single canonical drop-off percentage for event lists is not established publicly, so build your funnel from your own counts and label the illustrative stages as illustrative. What is established is which stage leaks most.

The biggest drop is usually the contactable-record filter, not the ICP filter. With B2B deliverable appends resolving at 25 to 60%, up to three-quarters of rows can fail enrichment before fit is ever judged. So when your final queue looks thin, suspect data resolution first and targeting second. The two are easy to confuse and expensive to confuse.

Here is the worked example this guide follows. I start with a raw export of 500 badge scans from a single B2B software conference. The counts below are illustrative, derived from the published match-rate and follow-up bands in the dossier, not a benchmark you should quote as fact. The point is the shape and the arithmetic, which you can reproduce on your own list.

One 500-row attendee export through the queue

  1. Raw scans
    500

    immutable original logged

  2. Deduped
    430

    email-first, then name+company fuzzy

  3. Contactable
    215

    ~50% deliverable append

  4. ICP fit
    120

    seniority + keyword families

  5. Safe to send
    108

    compliance gate, geo-split

The steepest narrowing happens at contact resolution, not at the ICP filter.

Read the funnel as diagnosis. Dedup took 70 rows, a normal 14% for a multi-day show where people get scanned twice. Enrichment halved the survivors, which is the single largest cut and sits squarely in the published 25 to 60% band. The ICP filter then dropped fewer rows than enrichment did, because a conference audience is pre-qualified: 81% of trade show attendees have buying authority and 67% are net-new prospects. The compliance gate trims a handful more. If your enrichment stage is the leak, no amount of tighter targeting fixes it.

80%
Trade show leads that never get meaningful follow-up
A same-day, ranked queue is itself an edge over most of the room.

The decay clock that sets your ranking

Ranking event leads is a race against a measured decay curve, not a matter of preference. Reply rates fall fast enough that a slower, higher-fit row can be worth less than a faster, lower-fit one.

The dossier's clearest evidence is a reply-rate index tracked across BoothMaven customers at North American trade shows, with same-day set to 100. It falls to 92 within 24 hours, then collapses to 47 by 48 to 72 hours, roughly halving in two days.

Timing after show closeReply-rate index
Same day100
Within 24h92
48 to 72h47
4 to 7 days31
8 to 14 days18

Two consequences. First, the window is 24 to 48 hours; leads followed up within 7 to 10 days convert to opportunities at 20 to 30%, but at 5-plus days response rate falls to 2 to 5%, at which point you are cold-emailing a person you already paid to meet in person. Second, ranking must let a hot same-day row jump ahead of a higher-fit but slower row, because the curve halves faster than any fit advantage compounds.

The reply-rate index halves in two days, so speed is a scoring input, not a nicety.

The payoff for moving fast is real: it takes about 3.5 sales calls to close a qualified trade show lead versus 4.5 for a cold lead. You bought that advantage with the booth fee. The decay curve is how you keep it.

Enrichment: what resolves and what lies

Enrichment converts identity into a deliverable contact, and it is where you should expect the honest majority of your rows to fall away. Plan the whole queue around the match rate, not the raw count.

The bands vary by source and method. The table below is built from the vendor figures in the dossier, described abstractly because the method matters more than the name.

SourceMethodMatch rate
Deliverable B2B appendname + company25 to 60%
Domain + name emailsingle provider50 to 70%
Business appendgeneral10 to 30%
General enrichmentmulti-field40 to 80%

Two rules follow from this table. A vendor quoting 90% is counting matches, not deliverable matches, so verify deliverability after the append and track bounce rate. And a multi-provider waterfall lifts match rates 20 to 40% over a single provider, which is the cheapest way to move the biggest leaking stage.

There is a real ordering fork here. Some teams enrich first, then dedup on the enriched identity, because a verified email is the best dedup key. Others dedup before any sync to avoid paying to enrich duplicate rows. Both are defensible. Pick one, document which, and keep the choice consistent across shows so your stage counts stay comparable.

Before enrichment, resolve stale employers. Average tenure at high-growth firms is about two years, so the company on the badge is often last quarter's job. Enrichment tools flag when a contact is no longer at a company; CRM practice is to keep the old record, mark it "No Longer At Company," and create a new record at the current employer. A champion who moved is not a dead lead, it is a job-change trigger at a new account.

This resolve-and-find-the-mover step is exactly where a plain-English search beats a rigid append. Instead of guessing which badge companies went stale, you can ask directly.

Refolk resolves an identity to a current, reachable person across public LinkedIn, the public GitHub graph, and the open web, which is the friction this stage otherwise imposes one row at a time.

Fit and intent: scoring without manufacturing scarcity

Score each row on two axes: a fit score from firmographics and persona, and an intent score from what the person actually did at the event. A common split caps fit at 50 and intent at 50, then routes once the combined total crosses your threshold.

Event data is unusually rich on the intent axis because it fuses fit and intent in a single hour. One prospect can visit the booth, request a demo, exchange a card, and book a follow-up in sixty minutes, giving you a complete fit-and-intent profile that a digital lead never hands over. That is why event leads justify a lower qualification threshold than digital ones.

Weight the intent signals from weakest to strongest. A published model gives concrete numbers you can adopt directly.

Intent signalPublished weightWhat it proves
Registrant only, never logged innear zerointent to attend, not to buy
Badge scan at booth+20physical presence and mild interest
Q&A question asked+15topic-specific engagement
Session or workshop attended+30sustained, self-selected interest
Post-event follow-up engagement+15active continuation

The gap between a registrant-only no-show and a session attendee is the single most useful distinction on the list, and a traditional attendee export flattens it: both appear identical. Separate registrant-only from badge-scanned from session-attended before you score, or a registered no-show will score like a booth visitor.

On the fit axis, the failure to avoid is rigid title matching. Exact-string title filters manufacture false scarcity. In Refolk's index, an exact "VP Revenue Operations" query at VP seniority returned 0, while Director-level Revenue Operations in the US returned 389 real people. The same population hides behind variant titles, so filter on seniority plus keyword families, never one literal string.

389
US Director-level RevOps people in Refolk's index
The exact string "VP Revenue Operations" at VP seniority returned 0 for the same population.

Supply concentration also belongs in scoring, because it reshapes territory before a single email sends. US Director-level RevOps outnumber the UK 3.0x, which changes how you route the same job title across two geographies.

MetricUnited StatesUnited Kingdom
Director-level RevOps count389130
Supply ratio (derived)3.0x1.0x
Top hubNew York / AustinLondon

A US conference list will over-index New York, Austin, and San Francisco; a UK list will over-index London. Knowing that before you sequence lets you set realistic per-territory targets instead of expecting UK volume to match US volume.

The procedure, with a count at every stage

Run the export through nine stages in order, logging the row count and drop at each so the final number is defensible. Owners and rough times are given so you can staff it against the 24-hour clock.

Attendee export to ranked queue

  1. Freeze and back up the raw export
    Save the untouched CSV, record the row count, and check for column-shift corruption. Keep an immutable original plus a working copy with the raw count logged. (~10 min)
  2. Normalize and standardize fields
    Consolidate into one schema with standardized event name, lead source, company, title, and conversation summary, one row per scan. (~30 min)
  3. Deduplicate
    Match on verified email first, then name-plus-company fuzzy match, and record the deduped count and drop percentage. (~20 min)
  4. Resolve to current employer
    Reconcile misspelled, stale, and sub-brand company names against public profiles and job-change data, flagging movers. (~30 to 60 min)
  5. Enrich and contact-resolve
    Append verified business email, phone, and firmographics in a batch, expecting 25 to 70% to resolve, and log the deliverable match rate. (batch)
  6. Apply the ICP fit filter
    Filter on firmographics and persona using seniority plus keyword families, then log the fit-qualified count and drop. (~30 min)
  7. Score intent and rank
    Layer intent weights on top of fit so demo request beats session attended beats booth scan beats registrant-only, producing one sortable score per row. (~30 min)
  8. Run the compliance gate
    Confirm documented source, role relevance, opt-out, postal address, and no prior unsubscribe, segmented by geography, and set a safe-to-send flag. (~15 min)
  9. Queue against the clock
    Rank so hot, contactable, compliant rows send same-day while the decay curve is steep. (immediate)

Log every stage in one place, because the counts are your defense. When someone asks why 500 scans became a 108-row queue, you point to the 50% enrichment resolution, not a vague claim about quality.

The count you carry forward

  1. Raw
    log the immutable count
  2. Deduped
    record drop from duplicate scans
  3. Contactable
    record deliverable match rate
  4. Fit + intent
    record score distribution
  5. Safe to send
    record geo split and suppressions
Each stage records a count and a drop so the final queue is auditable, not asserted.

A row is safe to send when its source is documented, the contact is relevant to their role, a postal address and one-click opt-out are present, headers are not deceptive, and no prior opt-out exists. Because the legal standard differs by recipient geography, the same queue needs two send policies.

Conference lists sit in a defensible zone. Industry conference attendee lists whose data sharing is covered in the event's privacy policy are legitimate sources for building prospect lists, because you are not obtaining data through deception or from private sources. For EU and UK recipients, GDPR usually leans on legitimate interest: you can send without prior consent if the outreach is relevant to the recipient's professional role, you document a genuine business purpose, you are transparent about data use, and you offer easy opt-out.

The split that matters operationally is timing. GDPR requires immediate opt-out processing and a documented legal basis; CAN-SPAM in the US allows emailing anyone unless they opt out and lets you honor opt-outs within 10 business days. So segment by recipient geography and apply the stricter standard to EU and UK rows. Treating a US opt-out-only policy as sufficient for an EU contact is a false-safe, and the downside is asymmetric: CAN-SPAM fines reach up to $51,744 per non-compliant email, while GDPR fines reach up to €20 million or 4% of global revenue.

Compliance gate, per row
recipient_geo: US | EU/UK        # sets which opt-out standard applies
source_documented: yes/no        # event privacy policy covers data sharing
role_relevant: yes/no            # outreach matches their professional role
postal_address_present: yes/no   # required for both regimes
opt_out_present: yes/no          # one-click; immediate for EU/UK, 10 days US
prior_optout_checked: yes/no     # suppress if previously unsubscribed
headers_truthful: yes/no         # no deceptive from/subject lines
safe_to_send: yes/no             # true only if all above pass

Set every flag before a row is eligible to send. Split the geography check first; it changes the opt-out rule.

How this goes wrong

The failure modes below are the highest-value part of this guide, because each produces a queue that looks fine and is not. For each, I give the false positive it creates and the check that catches it.

  • Column-shift corruption. Raw badge CSVs put email in the last-name field and company in the title field. The false positive is a "clean" import that scores personal provinces as companies. Check by eyeballing ten random rows against the QR source before enriching.
  • Match-rate inflation. A vendor quoting 90% is counting matches, not deliverable ones. The false positive is a full-looking email column that hard-bounces. Check by verifying deliverability post-append and tracking bounce rate.
  • Wrong-person append. Loose matching on name plus city hands you a different person's email. Check by requiring company-domain agreement, not just name similarity.
  • Stale employer. Two-year average tenure means the badge company is often last quarter's job. The false positive is outreach to a champion who already left. Check by running job-change flags and re-resolving before you sequence.
  • Registrant-only mistaken for intent. A registered no-show scores like a booth visitor if the model only counts "attended event." Check by separating registrant-only from badge-scanned and session-attended before scoring.
  • Rigid title filter drops real fit. Exact-string title filters return zero where variant titles exist; the "VP Revenue Operations" query returning 0 is the proof. Check by filtering on seniority plus keyword families, not one literal string.
  • Compliance false-safe. A US-style opt-out-only send to an EU contact breaches GDPR. Check by segmenting on recipient geography and applying the stricter standard.

The pattern across all seven: a stage that silently passes bad rows is worse than one that visibly drops them. Your logged counts are the instrument that makes silent failures visible.

Before you hit send

Run this checklist against the queue, not against the process. Every item is something you can verify by looking at the final file.

Queue-ready checklist

  • The raw row count is logged and the original CSV is untouched and backed up.
  • Ten random rows were checked against the QR source for column-shift before enrichment.
  • Dedup ran on email first, then name+company, with the drop percentage recorded.
  • Every surviving row maps to a verified current employer, with movers flagged.
  • The deliverable match rate is logged and bounces were verified, not assumed.
  • The ICP filter used seniority plus keyword families, not a single literal title string.
  • Registrant-only rows are separated from badge-scanned and session-attended before scoring.
  • Each row carries one combined fit-plus-intent score and is sortable.
  • Every row has a safe-to-send flag, with EU/UK rows held to the immediate opt-out standard.
  • The top same-day segment is dispatched within 24 hours of show close.

Keeping the queue current between shows

The queue is not a one-time artifact; it decays on two clocks and both are re-checkable. The reply-rate clock decays in hours, and the employer clock decays over roughly two years of average tenure. Build the re-check into your cadence rather than treating the export as finished.

For the reply clock, dispatch the top segment same-day and re-rank the remainder every morning of the follow-up window, because a row that was 48 hours cold yesterday is worse today. For the employer clock, re-resolve stale companies before every send campaign and treat a champion's move as a fresh trigger at the new account rather than a lost row. A plain-English search for the people who moved off your list, at their new employer, turns the weakest part of the export into new pipeline.

Finally, keep your stage counts across shows so you can tell whether a thin queue is a data problem or a targeting problem. If enrichment resolution keeps landing at the bottom of the 25 to 60% band, add a second provider before you touch the ICP filter, because the waterfall lift of 20 to 40% moves the leak you actually have.

Questions practitioners ask

How many days do I have to follow up on conference leads before it stops working?

The consensus window is 24 to 48 hours with steep decay after. On the BoothMaven reply-rate index, same-day sits at 100, within 24 hours at 92, but 48 to 72 hours later drops to 47, roughly halving in two days. By 5-plus days response rate falls to 2 to 5%, which means you are cold-emailing a person you already paid to meet in person. Rank so the hottest rows send same-day.

What match rate should I expect when I enrich an event attendee list?

Expect a wide, honest band of 25 to 60% for deliverable B2B appends from a name-plus-company row, or 50 to 70% appending email from company domain plus name with a single provider. A multi-provider waterfall lifts this 20 to 40% over one provider. Anyone promising 90% is counting matches, not deliverable matches, so verify deliverability and track bounce rate after the append.

Which stage of the funnel drops the most rows?

Usually the contactable-record filter, not the ICP filter. With B2B appends resolving at 25 to 60%, up to three-quarters of rows can fail enrichment before you ever judge fit. That is why a small final queue often reflects data resolution rather than poor targeting. Log the count and drop at every stage so you can tell which one is actually costing you.

Can I legally cold-email conference attendees in the EU?

Usually yes, under legitimate interest, if the outreach is relevant to the recipient's professional role, you can document a genuine business purpose, you offer easy opt-out, and you are transparent about data use. Industry conference attendee lists whose data sharing is covered in the event's privacy policy sit in a defensible zone. GDPR requires immediate opt-out; CAN-SPAM in the US allows honoring opt-outs within 10 days, so segment by geography.

Why did my exact title filter return nobody who clearly exists?

Rigid title strings manufacture false scarcity. In Refolk's index, an exact 'VP Revenue Operations' query at VP seniority returned 0, while Director-level RevOps in the US returned 389 real people. The same population hides behind variant titles. Filter on seniority plus keyword families rather than one literal string, and re-run to confirm the population reappears.

Try it on your own search

Stop building boolean strings. Just describe the person.

Type one sentence and I plan the search, read GitHub, public LinkedIn and Crunchbase records, and the open web live, then hand back a ranked shortlist with the reasoning behind every name. No filters to learn, no export to clean up, no sales call to sit through.

  • One sentence in, a ranked shortlist out. No boolean, no filters, no seat to buy.
  • Read live at search time, not from a database that went stale last quarter.
  • Watch every step as it runs, and see why each name made the list.

500 free credits on sign-up. No card, no demo call. See real searches.

Read next