Most tools accept CSV, but they fail when column names are inconsistent or notes get dropped. This layout is intentionally simple.
The goal is not a perfect database. The goal is:
- clean import
- clear source attribution (“trade show”)
- preserved booth notes (so follow-up feels human)
CSV columns that import well
Recommended headers:
first_namelast_nameemailphonecompanysource(example:trade_show)event_namenotescaptured_at(ISO date/time)
Optional columns (nice to have)
These are useful if your CRM supports them:
timeline(Now / 30d / 90d+)interest(what they asked about)owner(sales rep / booth staff)status(Hot/Warm)utm_source/utm_campaign(if you also ran digital campaigns)
Mapping tips
- Put booth context into notes (what they asked for, timeline, budget).
- Keep
sourceconsistent so you can filter later. - If your CRM requires a single “name” column, merge first/last.
Notes formatting (makes follow-up easier)
Keep notes short and structured. Example:
- “Asked for pricing; timeline 30d; interested in X”
- “Wants quote; service area Y; prefers text”
- “Met at booth; wants demo; follow up next week”
Your future self will thank you.
Common import problems (and fixes)
Duplicate contacts
If the same lead appears twice:
- prefer the row with the best notes
- keep one row per email (email is usually your unique key)
Missing last names
It’s fine. Many CRMs can import with first_name only.
If you only have a full name, put it in first_name and leave last_name blank.
Phone formats
Strip weird punctuation and keep digits consistent. Don’t guess missing digits.
Import checklist (works for most CRMs)
Most CRMs follow the same pattern:
- Create/import a CSV
- Map columns to fields
- Decide how to handle duplicates
- Apply tags/source fields
- Import and spot-check 10 records
The biggest mistakes happen at step 3 (duplicates) and step 5 (not spot-checking).
Spot-check rules (10 records, 2 minutes)
After import, pick 10 contacts and confirm:
- email landed in the right field
- notes preserved
- source/event name is set
- you can filter by
source = trade_show
If one of those is wrong, fix the CSV and re-import before you build workflows on top of it.
Example CSV row (copy/paste)
Here’s a practical example of what one row can look like:
first_name,last_name,email,phone,company,source,event_name,notes,captured_at
Jamie,,jamie@example.com,5551234567,Acme Co,trade_show,HVAC Expo,"Asked for quote; timeline 30d; prefers text",2026-01-05T12:34:00Z
The “notes” column is the money column
If you only keep one “custom” field, keep notes. Notes are what allow you to follow up with context:
- “Interested in demo”
- “Asked for pricing”
- “Wants estimate, weekend preferred”
CRMs can store dozens of fields, but follow-up happens with context.
Captured-at timestamps (optional, useful)
If you can set captured_at, it helps you:
- sort leads by recency
- run “post-show” automations
- measure speed-to-first-touch
If you don’t have it, you can leave it blank.
Fast path: follow up first, CRM second
If your goal is revenue, don’t block follow-up behind the import. A good workflow is:
- Send follow-ups first (same day / next morning)
- Import to CRM once replies start coming in
Tagging / segmentation (simple approach)
Even if you don’t have a complex CRM setup, these basic tags help:
source = trade_showevent_name = {show name}status = hot/warm(even if you store it in notes)
Then you can filter and run a consistent cadence.
CRM vs email tool: what to store where
- If you use a CRM: store the lead, notes, and status there.
- If you use an email tool: store the list there, but keep notes somewhere else (or in the CRM).
- If you’re small and moving fast: follow up first, then import.
The “perfect system” is less important than sending the first follow-up quickly.
Basic dedupe rule (practical)
If two rows share the same email:
- keep the row with better notes
- merge missing fields (phone/company) into the kept row
If you only have phone numbers and not emails, phone can be your dedupe key—but only if formatting is consistent.
A simple status field (optional)
If your CRM supports it, a small status field helps:
hot(ready to book / asked for pricing)warm(interested, later)info(general interest)
If you don’t have a status field, put it in notes.
Where to put booth notes if your CRM is strict
Some systems have limited note fields. If that’s the case:
- Use a custom field like
trade_show_notes - Or store notes in the “description” field
- Or store notes as a “contact note” after import (if supported)
The key is: don’t lose the context you captured at the booth.
Simple post-import workflow (optional)
Once leads are in your CRM, the “minimum effective” workflow is:
- Filter:
source = trade_showandevent_name = {show} - Work Hot leads first (or the most recent leads first)
- Log outcomes: replied / scheduled / not now
Even this minimal structure prevents leads from disappearing into a list forever.
Permission / opt-outs (don’t skip this)
If someone asks you not to contact them:
- mark them as “do not contact” in your CRM
- keep a suppression list in your email tool
This is basic hygiene and keeps deliverability healthy.
If you also use an email newsletter tool
If you push leads into an email tool (Mailchimp, Klaviyo, etc.), keep the same basics:
- import with
source = trade_show - keep
event_name(or a tag) so you can segment - start with a short, human follow-up message (not a blast)
If you attend multiple shows per year, the event_name field is the difference between “a pile of leads” and a list you can actually work.
It also makes reporting simple: you can see which events produced revenue.
Ready to skip CSV entirely?
If you have photos of lead sheets, you can upload them and send follow-ups without building a spreadsheet first.