New to Attio?Get 10% off when you sign up through Craftt.Try Attio free →
← All case studies

Capital raising / Placement agent · Ensor Partners

137,000 records, and the same deal saved five times.

Ensor Partners raise capital for hedge fund and private markets managers. They had taken Attio further in-house than most teams ever do, with introductions at the centre and dated source snapshots kept under each investor. They asked one question: does this hold as we grow? The design did. Three things underneath it did not, and all three were quick to fix.

137,536

Records audited

114,747

People records

7

Objects reviewed

16

Client questions answered

3

Claude skills shipped

Whole workspace

Backup coverage

The problem.

The foundation was right. Putting Introductions at the centre, with managers, mandates and investors around them, is the correct shape for a placement business. Keeping every source report as its own dated snapshot under the investor is a design most teams never reach. Domains and emails were already set to unique, so the worst duplicates were stopped at the door.

One number framed everything else. The workspace held about 137,000 records, not the 20,000 to 25,000 estimated on the call. People alone was 114,747, 84% of the workspace, mostly bulk-imported prospects never linked to a live introduction. That, and not the number of introductions, was the real cause of the latency the team felt every day.

The same deal was stored several times. One investor and one mandate was being saved as a new record at each meeting stage, instead of one record moving through the stages. A single deal was therefore counted four or five times in every count and every value report, so introductions made, capital raised and weighted pipeline were all overstated.

Ownership was stored as initials. Two- and three-letter codes sat as text options across six different fields, the option lists did not agree with each other, and some of the codes were not people in the workspace at all. You could not filter a view to your own pipeline, and reassigning a leaver meant find-and-replace across thousands of rows.

And the calculated fields were not calculations. The expected-ticket figure was an ordinary currency field that a workflow wrote into, so anyone could type over it and it only refreshed the next time the workflow ran.

Objectives.

  • Answer the real question, does this model hold at scale, with evidence rather than an opinion.
  • Stop one deal being counted five times in every report.
  • Replace initials with workspace-member owners, so "my pipeline" is a filter and a handover is one click.
  • Give the ticket maths one home, on the object, and let the client trackers display it rather than store their own copy.
  • Close the gap Attio leaves open: there is no self-serve record recovery.
  • Produce the computed, time-aware reports that native dashboards cannot express.

What we shipped.

An audit first, then a fixed-scope build. Everything runs on the firm's own Claude account, with no Python to install and no host to maintain.

Ownership and ticket maths

The agreed multi-selects became single-selects, so each field holds one clean value and automations can target it reliably. Ticket and money logic moved onto the Introduction object, where the deal actually lives, alongside probability of investment.

Import deduper and CSV import

Two skills, deliberately split. The first cleans a market-data feed and matches it against the live workspace, writing files only, never to Attio. The second loads the clean file, creating companies before people and upserting on email and domain, so running the same file twice never creates a second copy. Keeping them apart means cleaning a file can never cause an accidental write.

Backup runner

Attio has no user-facing record recovery, so a deleted record has no undo inside the product. A scheduled cloud routine exports every object, every list, plus notes, tasks, meetings, members and every call transcript to the firm's own OneDrive daily, and posts a one-line summary to Slack. Record data goes straight from Attio to storage without passing through Claude, so cost stays near a dollar a month however large the workspace grows. It reads with a read-only key, so it physically cannot change live data.

Report generator and hosted cockpit

Five computed reports native dashboards cannot express: a quarter-by-quarter fee forecast, stage conversion with median time-in-stage read from status history, stale and at-risk introductions weighted by ticket, a trail-elapse calendar for the next 90 days, and duplicate reconciliation. Delivered as a tabbed cockpit, rebuilt to the client's own layout after review, behind an edge login so no investor data reaches the browser before sign-in.

Three platform answers, given straight.

Sixteen questions came with the engagement. Three of the honest answers were "that is a platform limit, and here is the way around it".

There is no self-serve restore

Attio was right about that. The answer is a weekly full export, a daily export of the three objects that change most, and a monthly test that the backup actually restores. Untested backups are not backups.

A relationship dropdown cannot filter on another field

Which is why picking an investor's contact still listed all 114,000 people. A platform limit, not a setup mistake. Solved with a workflow that links the right records plus filtered views, and much easier once the People object is split.

There are no per-field permissions

So move anything derivable to a real calculation, which is read-only by nature, keep the field people type into separate from the field the system writes, and rely on views and team habit rather than trying to lock single cells.

Results.

  • A verdict on the model backed by numbers: the design holds, and the three things that would have broken it first were named, ranked and fixed.
  • Multi-selects collapsed to single-selects where agreed, so dropdowns and automations target one clean value.
  • Ticket-size logic homed on the Introduction object instead of split between the object and the client trackers, where the two could quietly drift apart.
  • A deduper that verifies the matched record's actual email or domain before calling anything a duplicate, and matches on the distinctive token rather than the full name, so a 5,000-row feed does not drown the team in false alarms. Anything it cannot confirm goes to review, never a silent merge.
  • A daily whole-workspace backup, call transcripts included and never pruned, running unattended in the cloud with no host machine to keep on.
  • Five computed reports and a hosted cockpit behind a login that fails closed: no credentials configured means nothing is served.
  • Every skill runs on the firm's own Claude account, with writes going through defined skills rather than free text, and a named token per skill so every write is traceable. The safe pattern for regulated data.
George was professional throughout the process and delivered a quality service.

Tareq Abou Nasr

Ensor Partners