Relational RevOps Build
A venture fund needed a CRM that could model the real relationships between investors, portfolio companies and deal stages — and keep itself up to date. We built it from scratch in Attio as a full RevOps platform, not just a contact database.
Client overview
A seed-to-Series-B venture fund with a dozen active partners and roughly 60 portfolio companies. Deal flow, LP relationships and portfolio check-ins were split across a Notion database, a shared spreadsheet, and individual partners' inboxes and memory.
The challenge
The fund was tracking deals in a mix of Notion databases and spreadsheets. Relationships between LPs, portfolio companies, co-investors and deal stages existed mostly in people's heads. There was no automated enrichment, no live pipeline reporting, and no way to see cross-object relationships — who introduced whom, which partner owned which relationship — at a glance.
Objectives
- Model the fund's real relationships (companies, people, deals, investors, funds) as a connected graph, not flat contact rows
- Migrate all deal and portfolio history out of spreadsheets and Notion with zero data loss
- Automate enrichment so no company record goes stale between partner check-ins
- Replace quarterly manual reporting decks with live, per-partner dashboards
The solution
Relational data model & migration
Mapped all entities — Companies, People, Deals, Investors, Funds — and designed Attio's object graph to reflect real relationships: a deal links to a company, multiple people and a fund, each with typed attributes and bi-directional associations. Migrated every record out of Notion and spreadsheets with a Node.js script that preserved deal history and note timestamps.
Enrichment & data normalization
Wired Clearbit enrichment via Attio webhooks — every new company record auto-fills headcount, funding stage, tech stack and LinkedIn URL within 30 seconds of creation. Built normalization rules enforcing consistent company naming, domain formatting and industry tagging so records stay comparable across the portfolio.
Pipeline automation & activity tracking
Built stage automations that move deals through the pipeline based on logged activity: a call logged moves a deal to Due Diligence, a signed document moves it to Portfolio. Two-way email sync means partner inbox activity — replies, intros, follow-ups — logs against the correct deal automatically, no manual note-taking required.
Reporting, permissions & AI-assisted summaries
Set up filtered views per partner, a fund-level pipeline report, and a weekly digest. Added a constrained OpenAI step that drafts a one-paragraph summary of each active deal from its logged emails and call notes — summarization only, scoped to logged CRM activity, never generating new claims about a company. Partner-level permissions keep LP-sensitive data restricted to deal leads and the GP.
Technical architecture
Key features delivered
- Full relational object graph: Companies ↔ People ↔ Deals ↔ Investors ↔ Funds
- Automated enrichment (headcount, funding stage, tech stack) within 30 seconds of company creation
- Two-way email sync logging partner inbox activity against the correct deal automatically
- Activity-triggered stage automations (call logged → Due Diligence, document signed → Portfolio)
- AI-assisted deal summaries drafted from logged notes and emails for weekly partner review
- Per-partner and fund-level live reporting views, replacing quarterly manual decks
- Data normalization rules enforcing consistent naming, domains and industry tagging portfolio-wide
Results
- Deal record updates dropped from a weekly manual process to real-time, activity-triggered updates.
- Full bi-directional relationship graph across all entities — no relationship data stranded in someone's memory.
- Partners saved an average of 8 hours per week on CRM admin and manual reporting.
- Pipeline reporting moved from quarterly decks to live, per-partner and fund-level dashboards.
Challenges
Migrating relationships that only existed as tribal knowledge
Spreadsheets captured deal status but not who was connected to whom. Solved this with a structured intake pass alongside each partner before migration — capturing relationship context once, in the new schema, rather than trying to infer it from unstructured notes.
Keeping AI-generated summaries trustworthy
An LLM drafting deal summaries risks quietly inventing details. Constrained the prompt to summarize only logged CRM activity (calls, emails, notes) already in the deal record, with the source items linked — no external claims, nothing partners couldn't verify in one click.
API rate limits during the enrichment backfill
Backfilling enrichment for 60+ existing portfolio companies at once hit Clearbit rate limits. Queued the backfill through the same webhook-driven pipeline used for new records instead of a one-off bulk script, so it throttled gracefully.
Lessons learned
- The relationship model is the product here — reporting and automation both fell out naturally once Companies/People/Deals/Funds were modeled as a real graph instead of flat records.
- Constraining the AI step to summarization-only (never decision-making, never unverified claims) kept it genuinely useful without introducing new risk.
- Reusing the same webhook pipeline for backfill and live updates avoided building and maintaining a separate one-off migration path.
The fund now runs its entire deal and portfolio workflow inside one relational system that updates itself — enrichment, activity logging and reporting all happen without a partner opening a spreadsheet. It reads less like a CRM rollout and more like the fund's operating system for deal flow.
Self-Hosted Automation Hub
Need something like this built?
Need help implementing Attio, AI automation or custom integrations? Tell me where the friction is — I'll map the system and hand it back clean.