Affinity's core asset isn't the contact record—it's the relationship graph. Who introduced whom. Which investor sits on three boards. Which partner controls deal flow into a target account. A CSV export treats all of that as optional metadata. When you move to Orin, Pipedrive, or any platform with a real relationship engine, you face a choice: migrate flat and lose the map, or spend 60 days rebuilding influence networks so your team keeps the context that made Affinity valuable in the first place. This is not a limitation of the new platform. It's the cost of what Affinity stores—and what most CRM exports cannot carry. The good news: the data is all in your export. It just requires deliberate reconstruction. Why CSV export destroys relationship depth Affinity stores relationships as edges in a graph database. One contact can have multiple relationship types to another contact: introduced, invested, employed at, sits on board with, referred deal to. These edges carry metadata—introduction date, deal context, strength signal. A CSV row is flat. You get one row per contact, one row per deal. The relationships that made the network valuable become unstructured text in a single cell or vanish entirely. When you export from Affinity, you'll see fields like: Contact relationships – often a comma-separated text field, not a structured list Deal relationships – which contacts are tied to which deals, usually denormalized across rows Organization relationships – parent/subsidiary links, partnership status Interaction history – emails, meetings, calls (timestamps and participants) The problem: a new CRM's relationship feature expects structured data. A field that says "Introduced by Sarah Chen, works at Accel, CFO at Stripe" requires you to parse that text and create three separate relationship records, each with its own relationship type, strength signal, and context date. Multiply that across thousands of contacts, and you're looking at days of manual work or a custom data-cleaning script. Map Affinity's export fields to relationship types Before you export, know what you're looking for. Affinity's export includes fields that encode relationships. Here's what to extract: Primary relationship fields in Affinity export Related Contacts – the core relationship record. Export this as your source of truth. Usually includes relationship type and introduction context. Job History – a contact's past and present employers. Encode as "works at" or "worked at" relationships to the organization. Education – where a contact studied. Create "attended" relationships to educational institutions if your new CRM supports it. Deal involvement – which contacts are stakeholders in which deals. Critical for preserving deal flow context. Export deal ID + contact ID + role (lead, decision-maker, influencer). Interaction log – every email, meeting, call. Export timestamps, participants, and outcome. This becomes your activity history and relationship strength signal. Notes on relationships – custom fields that encode context. "Introduced by" fields, "referral source" fields. These are gold—they tell you the story of how the relationship formed. Export all of these as separate CSV tables or tabs. Do not try to flatten them into a single contacts.csv. You'll lose the structure you need to rebuild. The 60-day rebuild: Three phases Phase 1: Clean and denormalize (Days 1–15) You now have raw CSVs. The next step is transforming them into something your new CRM can digest. You have two paths: manual reconciliation or a data-cleaning script. At under 5,000 contacts, manual is faster. Over that, script it. For manual cleanup: Open the Related Contacts export in a spreadsheet. Create columns for: Source Contact ID | Source Contact Name | Target Contact ID | Target Contact Name | Relationship Type | Introduction Date | Deal ID (if applicable) | Notes. For each row, ensure both contact IDs exist in your new CRM's contacts list. Flag any orphaned relationships (contacts that don't exist in the migration). Standardize relationship type labels. Affinity might use "Invested" and "Angel Investor"—pick one for your new platform. Extract deal context. If the note field says "Introduced in context of Series B at Stripe," parse that to a deal ID and add it to your relationship record. For scripted cleanup: Use Python or a similar language to parse Affinity's JSON export (if available) or CSV and create a normalized relationship table. Check for referential integrity (both contacts exist). Deduplicate (same contact pair, same relationship type within 30 days = one record). Export as a clean CSV ready for bulk import. Phase 2: Import relationships into your new CRM (Days 16–30) Most CRMs—Orin, Pipedrive, HubSpot—support bulk relationship import via CSV or API. The mechanics differ, but the principle is the same: you provide a relationship table and the system links contacts and preserves metadata. Orin relationship import: Use the Orin CRM relationship API or bul