NDA

Seven years of fund records, moved without pausing the quarter

A private-markets manager was switching fund administrators. Seven years of capital accounts, investor terms and transactions had to move across before the annual audit — from a platform that could export reports, but not data. We built the bridge that carried the records over, and an intake layer that ended manual re-keying at every close.
The client
A European private-markets manager with €1.4bn under management
A European private-markets manager with around €1.4bn under management across 14 fund entities, about 180 limited partners, and offices in London and Luxembourg. Sixty people, nine of them in finance.

Fund accounting is outsourced: the administrator keeps the books and produces the NAV, and the in-house team reviews it before anything reaches investors. When the manager moved to a new administrator, we worked on the manager's side of the move.

The challenge

Like most platforms of its generation, the outgoing one could only produce reports: Excel, PDF or CSV formatted for people, with no API and no documented schema. The new administrator had to rebuild a continuous ledger from that package before the audit.

Three things made it harder:
  • The audit set the clock. Cutover was fixed to a quarter-end, with one reporting period run in parallel by both administrators. Missing it meant migrating mid-audit.
  • Investor terms lived outside the ledger. For 38 of 180 LPs, side letters in a data room changed commitments, notice periods or fees. Nobody had a single reliable investor register.
  • The same documents came back every cycle. Subscription packets of 15 to 60+ pages were reviewed by hand before each close. Capital call notices were built in Excel and emailed one by one — nearly two days per call, with a real risk of a wrong figure or a wrong recipient.
The challenge wasn't moving files. The outgoing platform had no data to hand over, only reports.

Our approach

First a clean investor register, because everything else depended on it. The migration took 11 weeks from the first data request to cutover, followed by a full quarter of parallel running before the intake layer went live.
01 — The migration bridge
We started from what the old platform could actually export and mapped it, field by field, to the new administrator's import format: chart of accounts, entities, investors, transaction types. Every rule lives in versioned scripts that anyone can read and challenge.

Side letters became fields. We extracted terms from side letters and subscription documents and checked them against the commitment schedule. Mismatches went to the CFO and counsel.

Everything was reconciled. 100% of LP positions and distribution events, entity by entity, closing balances against opening ones. We rehearsed the cutover four times before doing it for real.
02 — The document intake layer
One pipeline handles subscription packets and side letters as they really arrive: scanned, watermarked, every counterparty formatting things differently. It returns structured fields — investor, commitment, settlement instructions, notice period, fee basis — each linked to its source page.

It also works the other way: from the drawdown schedule, it generates each LP's capital call notice on their own terms and prepares the emails as one batch for review.

A person makes the call. Low-confidence fields, mismatches and every side-letter term go to a review queue, so the associate checks differences instead of retyping documents.

What we checked

  • Balances. Closing-to-opening reconciliation per entity on every rehearsal, with a clear exit criterion for the parallel period.
  • Audit trail. Every extracted value links to its document, page and position, ready for the auditor's questions.
  • Blind test. Documents the pipeline never saw, scored by the associate who does the work.
  • Rehearsals. The first one failed on multi-currency rounding in three entities — exactly what rehearsals are for.

The migration also caught older errors: 11 commitments that didn't match their side letters, six duplicated transactions and FX drift in three entities. Better found by us than by the auditor.

The solution

An investor register inside the new administrator's platform, with every LP's terms stored as fields. On top of it, a pipeline that extracts, reconciles and flags exceptions for a person to review — at every close and every capital call.

Outcome

The new administrator's first NAV matched the old closing balances, and the year's audit ran on a continuous book.

Capital calls went from nearly two days of assembly to one review pass over generated notices. At the next close, subscription review went page by page only where the pipeline flagged something.

The administrator still keeps the books and produces the NAV. We removed the re-keying and left the judgement to people. The engagement continues: the register and the pipeline are now production systems that we support.

Tech Stack

Data & pipelines: Python (pandas, pydantic), SQL, PostgreSQL, dbt, Apache Airflow | Extraction: report exports (CSV/XLSX/PDF), OCR | Document AI: LLM extraction with a strict schema, per-field confidence, human review queue | Reconciliation: rule-based checks, per-entity balance assertions, versioned exception log | Integration: SFTP, CSV/XLSX in the administrator's import format, templated notices, batched email | Infrastructure: AWS, Docker, audit-logged Postgres, role-based access, per-entity data residency

Feel like your project would win from our work? Let's talk!
sales@smartificial-ai.com