Documentation Index
Fetch the complete documentation index at: https://support.affinity.co/llms.txt
Use this file to discover all available pages before exploring further.
Immediate Value
After this tutorial, you’ll have a written migration plan that prevents the most common import failures: duplicate contacts, mismatched fields, broken character encoding, and the dreaded “now I have to redo this” moment.Prerequisites
- You’ve completed Tutorial 0.2.
- You have export access to your current CRM, spreadsheet, or whatever system holds your data.
Quick-Start Roadmap
- Decide what you’re actually importing
- Audit your source data for duplicates and inconsistent formats
- Identify primary keys and matching strategy
- Plan your field structure
- Prep your CSV: encoding, formats, special characters
- Decide your undo strategy
Why Planning Your Migration Matters
Once data is imported, untangling mistakes is significantly harder than preventing them. A botched import creates duplicate profiles, mismatched fields, and orphaned records that you’ll spend weeks cleaning up. Affinity offers an undo for imports, but undo only works cleanly if you catch the problem fast — and undo doesn’t fix bad source data, only the import itself. Spend the time here.See Data migration for an end-to-end overview of how Affinity handles imports.
Task 1: Decide What You’re Actually Importing
Context
Affinity supports four primary entity types in lists: Companies, People, Opportunities, and generic List Entries. You’ll likely need a mix. Start by writing down what you have and what shape it should take in Affinity.Action
- List out your data sources: prior CRM (Salesforce, HubSpot, etc.), spreadsheets, LinkedIn export, manual lists, email exports.
- For each source, decide:
- What entity type does this map to? (Companies? People? Both? Opportunities?)
- What list does it belong in? (One per source, or merged into a master list?)
- What’s the priority? Import high-signal data first — your active pipeline, key relationships. Skip historical clutter.
- Write the plan down. A spreadsheet works fine: one row per source, columns for “entity type,” “destination list,” “priority,” “row count.”
Expected Outcome
A clear, written list of what’s being imported, in what order, and into which lists.Task 2: Audit Your Source for Duplicates and Inconsistent Formats
Context
The biggest cleanup work happens before you import, not after. Affinity will create duplicate profiles if the same person exists in your source with different email addresses, different name spellings, or different company associations.🎬 Watch
Action
- Sort your source data by email address and look for the same person appearing with different addresses (e.g., personal Gmail vs. work email).
- Sort by name and look for spelling variations (“Bob” vs “Robert”, “St.” vs “Saint”).
- Sort by company and standardize naming (“Acme, Inc.” vs “Acme Inc” vs “Acme”).
- Decide your canonical value for each duplicate set and update the source before importing.
Expected Outcome
Your source data is internally consistent: one canonical name, email, and company per real-world entity.📚 Help Center
Task 3: Identify Primary Keys and Matching Strategy
Context
When Affinity imports, it needs to decide: is this row a new profile, or does it match an existing one? The answer is determined by your primary key — the field Affinity uses for matching. For people, it’s email address. For companies, it’s domain. Other fields are secondary.Action
- For every person row, confirm there’s an email address populated.
- For every company row, confirm there’s a domain populated (e.g.,
acme.com, not “Acme Inc.”). - Rows missing the primary key will be created fresh and won’t match existing profiles. Decide whether to skip those rows or backfill the primary key before importing.
Expected Outcome
Every row has a primary key, and you understand exactly which rows will match existing data vs. create new profiles.📚 Help Center
- How to import by Affinity Row ID — for advanced cases where you want to update existing records by Affinity’s internal ID instead of email/domain matching.
Task 4: Plan Your Field Structure
Context
Every column in your CSV will map to a field in Affinity. You have two choices for each column: map it to an existing field (recommended whenever possible), or create a new list-specific field for it.Action
- Open the list you’ll be importing into. Click ”+ New Column” in the header and review what fields already exist.
- For each column in your source CSV, write down: “map to existing field [name]” or “create new field [name + type]”.
- For new fields, decide:
- Field type: Text, Number, Date, Dropdown, Person, Company, Status, etc.
- Global or list-specific? Global fields appear across all lists; list-specific fields only on this one.
- Create the new fields in Affinity before the import. Then they’ll be available in the mapping step.
Expected Outcome
Every column in your source maps cleanly to an existing or planned field in Affinity.📚 Help Center
Task 5: Prep Your CSV — Encoding, Formats, Special Characters
Context
CSVs look simple but fail in subtle ways: wrong encoding, mixed delimiters, currency symbols in number fields, dates in ambiguous formats.Action
- Encoding: Save your CSV as UTF-8. Excel sometimes defaults to Latin-1, which mangles accents and Asian characters.
- Delimiters: Use comma (
,) as the column delimiter. Don’t mix with semicolons. - Dates: Use ISO format (
YYYY-MM-DD) — unambiguous across regions. AvoidMM/DD/YYYYif you have international data. - Numbers: Strip currency symbols, commas, percent signs.
$1,234.56becomes1234.56. Affinity will format on display. - Booleans: Use
true/falseoryes/no. Be consistent. - Test row: Save just the first 5–10 rows as a separate test CSV. Run that through Affinity first to catch encoding issues before committing to the full import.
Expected Outcome
Your CSV is properly encoded, formatted, and tested with a small sample.📚 Help Center
- Troubleshooting CSV file formats
- Preparing your import when it contains Asian characters
- Supported File Types for Upload
Task 6: Decide Your Undo Strategy
Context
Affinity supports undoing imports — but only cleanly if you catch the problem fast and haven’t manually edited records since the import. Plan your safety net up front.Action
- Decide who’s running the import (you, or an admin partner).
- Plan to run the import during a quiet period — not in the middle of a busy week.
- Agree on a verification window: “We’ll spot-check within 1 hour, decide undo-or-keep within 4 hours.”
- Make sure your source CSV is saved and version-controlled. If you have to redo the import, you’ll thank yourself.
Undo is not unlimited. Affinity’s undo works best for recent imports. Older imports — especially if records have been edited since — may not undo cleanly.