Imports break for tiny reasons: wrong casing, duplicate emails, states spelled out, phones formatted weirdly.
Here’s a lightweight recipe + templates that make CSV → Airtable/Notion painless.
1) Define the mapping
Use a 5-column mapping template:
source_field | destination_field | type_hint | required | notes |
---|---|---|---|---|
first_name | First Name | text | no | PROPER case |
last_name | Last Name | text | no | |
yes | unique key | |||
phone | Phone | phone | no | normalize E.164 |
state | State | select | no | USPS 2-letter |
tags | Tags | multi-select | no | split on , or ; |
2) Normalize before import
Rules that catch 80% of pain:
- email → LOWER
-
phone → E.164 (
+15551234567
), infer country if needed -
state → USPS (
Illinois
→IL
) - first/last → PROPER
- tags → split on
[,;]
then trim
3) Deduplicate
Start with email (lowercased) as the primary key.
If missing, use first_name + last_name + company
exact match and keep the row with the latest updated_at
(or most complete).
Save the losers to duplicates.csv
with a winner_id
column for traceability.
4) Test import (50–100 rows)
- Airtable: create select options first, then import → map fields → verify counts
- Notion: set property types first (select/multi-select/email/phone), then import
5) Final import + rollback plan
- Export a backup of the destination table/database
- Rename the current table to
_bad_<timestamp>
if needed, restore the backup, re-import
Grab my templates
I packaged the mapping CSV, normalization rules, dedupe rules, import checklist, and rollback plan.
👉 https://colbycardell.gumroad.com/l/jlxau?utm_source=devto&utm_medium=post&utm_campaign=migration_launch&utm_content=body_cta
- Starter $199 (≤5k) · Plus $399 (≤25k) · Pro $799 (≤100k)
Top comments (0)