Affinity does one thing well: it maps relationship networks. Who knows whom, how deep the connection runs, what opportunities flow through which relationships. Then you hit export, and the graph collapses into rows and columns. The network that took months to build becomes a contact list. This is not a Affinity failure—it's how most CRMs handle exports. But it means your migration strategy cannot be "dump CSV, import CSV." You need to understand exactly what flattens, what orphans, and which target platforms can actually rebuild the depth. What Affinity's export actually contains (and what it doesn't) Affinity exports to CSV give you the contact table: names, titles, email, organization. You also get custom fields and, if you configure the export carefully, basic interaction counts. What you do not get: Relationship vectors. Affinity stores "Jane introduced me to Tom" as a directional link. CSV exports list both contacts but obliterate the introduction. You export Jane. You export Tom. The fact that Jane was the bridge vanishes. Interaction detail. Affinity logs email open rates, meeting duration, note content, and call context. The export gives you a count ("5 interactions") but not the transcript, the linked calendar event, or the sentiment. Orphaned context. Opportunity linkage. In Affinity, deals attach to relationship nodes. On export, you get the deal record separate from the contact. The thread connecting "this deal exists because of this relationship" snaps. You now own two unlinked datasets. Relationship strength scores. Affinity's algorithm ranks relationships by frequency, recency, and path distance. Export gives you a contact. The score, the "this is a warm intro" flag, the "relationship dormant for 8 months" warning—all gone. Multi-party relationships. Affinity handles "all four of these people know each other through this company" elegantly. CSV export flattens it to individual dyads. The group topology dissolves. You can recover some of this if you plan ahead. Affinity allows custom fields: add a "Introduced By" field, tag relationship type, store relationship strength as a number. But most teams migrate with the default export—and lose most of the value. Why the flattening happens (and why it matters) Affinity built a graph database. Relationships are nodes , not attributes. A person record in Affinity is not just a contact; it's a vertex in a relationship mesh. When you export to CSV, you're asking a graph database to speak a table format. Tables have rows. Rows are flat. The translation always loses the topology. This is not unique to Affinity. Any CRM built around deal pipelines (HubSpot, Pipedrive, Orin) stores relationships as properties of contacts or deals, not as first-class objects. So if you export from Affinity to a traditional CRM, you're not just changing software—you're changing the fundamental data model. The graph becomes a hierarchy. Rich relationships become tagged fields. Why does it matter? Because relationship data is your competitive moat in deal-driven businesses—especially in venture, commercial real estate, and executive recruiting. If you lose the introduction path, you lose the ability to ask "who can warm-introduce me to the CEO?" If you lose interaction context, your team cold-calls again. If you lose the strength score, you spend the first month in the new CRM re-learning which relationships are actually warm. Which CRMs retain the most depth (and which don't) Not all target platforms are equally bad. Here's what survives a migration to each: HubSpot: Handles basic relationship tags well. You can map Affinity "Introduced By" to a HubSpot associated contact. Interaction history ports to the CRM activity log if you use HubSpot's API import (not CSV). Opportunity linkage is native—deals connect to contacts. Relationship strength does not have a direct field; you'll store it as a custom property (number 1-10). HubSpot does not model multi-party relationships elegantly; you work around it with deal contacts. Data depth loss: ~35%. Recovery effort: 40 hours for a 1,000-contact book. Pipedrive: Simpler than HubSpot. No native relationship tracking ("Person A introduced Person B"). You can link contacts to deals, and you can create custom fields for relationship type and strength. The interaction log is sparse—Pipedrive does not natively sync email history. If you use a third-party integration (like Zapier or Make), you can append meeting notes to deal records. Multi-party relationships: not modeled. Data depth loss: ~50%. Recovery effort: 50 hours. Orin: Purpose-built for relationships. Its CRM module treats contacts, deals, and interactions as interconnected records. You can model "Person A introduced Person B" as a contact relationship. Interaction history is native (emails, calls, notes linked to both contact and deal). Relationship type and strength are custom fields. The graph is not as sophisticated as Affinity's, but it's designed to hold relationship depth. API