You've spent 18 months building a network inside your CRM—tracking who knows whom, which contacts influence which deals, who sits on multiple boards. Then you hit export. A CSV lands in your inbox. You open it. Every relationship is gone. What you have now is a flat contact list. This is not a hypothetical problem. We tested four CRMs at scale: Affinity, HubSpot, Pipedrive, and Orin. Here's what the relationship graph looks like after export, which platform loses the least, and how much work it takes to rebuild. What a relationship graph actually stores Most CRMs that handle relationship mapping track: Entities : contacts, companies, funds, board seats, advisors Connections : Person A works for Company B; Person C sits on the board of Fund D Relationship weight : primary contact vs secondary; active vs historical Directionality : Person A referred Deal X to Person B (flow matters) Context : how the relationship was discovered, when it was last touched, confidence score The moment you flatten this into a CSV, you lose layers. A spreadsheet row is one entity. Connections between rows require either a common key (foreign key) or denormalization—both of which break at scale. The test: 500-contact Affinity graph with 2000 relationships We exported a real Affinity workspace. 500 contacts, 2000 mapped relationships (4 per contact on average), 120 companies, 45 active deals. The export process in Affinity: Contacts export: CSV with name, email, phone, company name (text field, not an ID) Relationships: there is no "export relationships" option in Affinity's standard export Workaround: export individual relationship JSON via API, which requires custom scripting Result: Without API work, zero relationships exported . The 2000 relationships exist only in Affinity's graph UI. If you use the API (which most mid-market users don't), you get JSON with relationship types and entity IDs. But once that lands in a CSV or any destination, you've denormalized the graph into a lookup table—500 rows exploding to 2000 rows, one row per relationship, with duplicate contact data in every row. What you actually get 500 contacts as 500 rows 2000 relationships as 2000 additional rows (one relationship per row) Company names as text, not linked records No directionality or confidence scores No historical timestamps (only the export date) HubSpot's associations: they flatten into lookup tables HubSpot's standard export (Settings → Export) gives you contacts and companies as separate CSVs. Associations (the links between records) are not directly exportable. HubSpot stores them internally, but you can: Export via the UI : Only the contact record itself exports; associations stay in HubSpot Use the API : Pull contact-to-company associations as separate data, then denormalize into a lookup table What survives: Primary company association per contact (one field in the CSV) Custom association types: require API + custom fields; the relationship type (partner, investor, etc.) does not export No weighted strength or confidence We ran this with 300 contacts and 200 companies. The CSV export showed one company per contact. The 50 contacts with multiple company associations? Those appeared as duplicates or in custom fields—no standard relationship export. HubSpot's export model assumes relationships are metadata attached to a primary record, not a first-class entity worth preserving. Pipedrive: weighted relationships vanish in CSV Pipedrive's strength comes from its pipeline visualization and linked records (companies, persons, deals). It also stores "importance" fields and custom relationship types. Export behavior: Standard CSV export: persons and organizations as separate files Links between records: shows up as a single company ID per person record Importance/weight: not included in the CSV Multiple associations: not handled in the standard export (one-to-many relationships denormalized into separate rows or lost) We tested with 200 persons, 80 organizations, and weighted relationships (e.g., "primary partner" vs "past partner"). The CSV export dropped the weight entirely. The destination system has no way to know which relationship mattered most. What actually survives: honest comparison Platform Relationships in Export Directionality Weight/Importance Relationship Type Affinity API only (2000+ rows) Yes (preserved) No Yes HubSpot API only; primary assoc. in CSV No No No (custom fields only) Pipedrive Primary org only No No Partial (in API, not CSV) Orin Linked records + context tables Yes Yes (custom fields) Yes The real cost: rebuilding in 60 days If you export a relationship graph and want to rebuild it somewhere else, here's what the timeline actually looks like: Weeks 1–2: Data audit and mapping Compare source export to destination schema Identify which relationships made it, which didn't Map denormalized rows back to entity records (if using a destination that supports linked records) Estimate: 40–60 hours for a 500-contact graph Weeks