Affinity and HubSpot solve different sales problems. Affinity excels at relationship depth—threading emails, LinkedIn activity, deal notes into a graph of who knows whom. HubSpot excels at deal velocity and team enforcement—pipeline visibility, automated follow-ups, quota tracking. When you outgrow one for the other, migration feels straightforward until you actually export your data and realize what doesn't translate. The reality: deals migrate cleanly. Contact names, email addresses, and deal amounts port in hours. But the relationship metadata that made Affinity valuable—the hidden connections, interaction history, deal context notes—requires a deliberate extraction, transform, and rebuild cycle. Expect three months from first export to full operational parity, not three weeks. What moves cleanly: contacts, deals, and linear history Affinity exports to CSV in two core tables: organizations and people. HubSpot imports both as companies and contacts, with deal records as a third layer. The basic fields align: Contact names, email, phone, LinkedIn URL — port directly with zero loss. Company name, domain, revenue estimate — map to HubSpot company fields without friction. Deal records: title, amount, stage, close date — import as deals with stage mapping (you define Affinity stage → HubSpot stage). Deal history: created date, last activity, owner — preserved in the deal record and activity timeline. If your Affinity instance has 50 active deals and 200 contacts, you can have all of that in HubSpot within 48 hours. The CSV export is reliable; HubSpot's import tool is battle-tested. No data loss here if you map fields correctly on import. The catch: this clean migration only works if your data is clean. If you have duplicate contacts (person appears under three different email addresses), HubSpot will create three separate records unless you deduplicate first. Affinity's relationship graph often papers over duplicates because the system is optimized for human browsing, not bulk operations. Before you export, run a dedup pass in Affinity or manually reconcile known duplicates in your export file. What gets lost: relationship metadata and interaction depth Affinity's core value is the relationship graph. You see not just "Alice at Acme" but "Alice → Bob (Acme VP) → Carol (Acme CMO)", plus every email thread, calendar invite, and LinkedIn interaction Alice and Bob have exchanged. That graph is Affinity's intellectual property and does not export. What you lose: Relationship edges (who knows whom) — Affinity's relationship strength scoring and connection paths do not export. You get a flat list of contacts per company, not the webs between them. Email thread association — If you synced your Gmail or Outlook inbox to Affinity, those email threads live inside Affinity. They do not export. HubSpot has email sync, but you'll need to reconnect your mailbox post-migration and lose the pre-migration thread history. Interaction scoring and recency — Affinity tracks touch frequency, response time, and last interaction at a granular level. HubSpot tracks interactions too, but only after migration; pre-migration activity is a number in a field, not a living record. Custom multi-select fields and nested metadata — If you used Affinity custom fields to tag relationships (e.g., "warm intro from", "budget confirmed", "champion-level access"), those export as CSV columns. But if they're multi-select or conditional, you'll need to rebuild the logic in HubSpot's custom field structure. The honest truth: you lose 30–40% of the relational intelligence. That sounds worse than it is. Most of that intelligence was context for your memory, not data you acted on systematically. HubSpot forces you to be more deliberate: instead of relying on relationship graphs to remind you that "Alice and Bob know each other," you'll use HubSpot's task automation and email sequences to ensure follow-ups happen regardless of who's connected to whom. Account hierarchies and parent-child relationships need manual rebuild If you structured Affinity with parent organizations and subsidiaries, that hierarchy exported as a flat CSV. HubSpot has a parent company field, but you'll need to manually map each child company to its parent post-import. Example: You're migrating a portfolio with Acme Corp (parent), Acme EU (subsidiary), and Acme Asia (subsidiary). Affinity's export gives you three company rows with no structural relationship. In HubSpot, you must: Import all three as separate companies. Manually populate the "parent company" field on Acme EU and Acme Asia, linking them back to Acme Corp. Test that the roll-up reporting (e.g., "show all deals under Acme Corp and its children") works as expected. For portfolios with 10+ subsidiary relationships, this is a 2–4 hour task. For portfolios with 50+, it's 2 days. If you need this automated, you'll write a small script (Python + HubSpot API) or hire a Zapier/n8n flow to do the mapping, but the source data (the pa