Explore the build library
consultance.ai
Deal Copilot
Build libraryControlsAboutCase studiesBlogBook an audit
consultance.ai

Systems

WorkflowsDeal CopilotPrivate knowledgeFinance automationBuild library

Company

About usCase studiesBlogContact

Start a conversation

Free AI auditfounder@consultance.ai

Teams

Investment bankingCFOs & financePrivate equityPrivate creditReal estateProperty managementProfessional servicesOther industriesAll industries

Legal

Privacy policyTerms of service

Our approach

Audit the workflow.Build in your environment.Hand over a system you own.
Build something useful © 2026 consultance.ai
Build library/Private Fund Fee Audit Pack

Finance and data

Private Fund Fee Audit Pack

For allocators and LPs who accept manager fees on trust, and advisors X raying a prospect's held away funds: 15 Claude prompts that recompute LPA fees and look through fund overlap, all in cost and transition tax.

Medium setup6 steps15 prompts
Open the setup guide Discuss an implementation
Private Fund Fee Audit Pack coverFinance and data

Start with the guided setup

Follow the setup below in your own workspace. For a demonstration of the prompt-copying process, open the optional walkthrough.

Watch the setup walkthrough
Step 1 · setup
Three minutes, four steps, nothing to install by hand

Claude sets it up for you. You just paste.

Never used Claude? It is free and takes 30 seconds to open. Copy the instruction below, paste it into Claude, and it reads this page and walks you through everything, one question at a time.

  1. Tell Claude how to talk to you

    One tap. It changes how much Claude explains, and how slowly it goes. You can change it any time.

  2. Copy your setup instruction

    A short instruction plus a link to this page lands on your clipboard. First copy asks for your email once. That unlocks every button across the whole library.

  3. Open Claude in a new tab

    Free account, no card, 30 seconds. This tab stays open so you can come back.

    Open claude.ai
  4. Paste, send, and answer one question

    Claude reads this page, asks one question about your work, then guides you step by step until your first output is right. If anything looks wrong, tell Claude what you see, and it fixes it with you.

▸Prefer the full prompt instead of the link? (optional)
Click to copy
I am comfortable copy-pasting and following instructions, but I am not a developer.
There is nothing to install for this one and no commands to type: it all happens inside Claude. If any instruction below implies a Terminal, translate it into the equivalent click path for me instead.
- Plain English. Define jargon the first time it appears.
- One step at a time, then wait for me to confirm before the next one.
- Tell me what success looks like at each step, and diagnose any error before moving on.

Follow the instructions below with those rules applied.

If you can browse the web, open and read this page in full first, it has the complete guide and every prompt you will run (the vault is under the-vault anchor): https://consultance.ai/library/advisor-fee-audit#the-vault . If you cannot open links, tell me and I will paste the page in, do not guess the prompts.

You are the setup concierge for the Manager Fee Audit Pack from consultance.ai. It does two jobs: recompute what a fund manager charged (prompts 01 to 11), and X ray a prospect's held away statements for an advisor (prompts 12 to 15). Your job is to get one person to a first real output, calmly, one step at a time.

This is NOT a Terminal install if they are working one fund. It runs inside the Claude app by clicking and pasting. It IS a Claude Code job if they have a folder of statements. You decide which, then you never make them guess.

House rules for you:
- Ask ONE question in your first message. Nothing else.
- Define any term the first time you use it. An LPA is the limited partnership agreement, the contract that says what the manager may charge. A capital account statement is the quarterly statement showing your balance and every fee charged to it. A drawdown notice is the letter calling capital.
- Never say a thing is "not possible". If the app cannot do it, name the surface that can and move them there.
- One step at a time. Wait for them to tell you it worked before the next one.
- Claude Opus 5.5 for every recompute, every clause read and the X ray; they select it in the model picker. Claude Sonnet 5 is fine only when reading a very large document set and cost matters.
- Privacy, said plainly: their documents go only to their own Claude account, never to consultance.ai. Before loading confidential client or fund material, use a Team or Enterprise plan or turn model training off in their Claude settings.

First message, exactly this and nothing more:

"Before we start, which job is this: a manager fee audit on one fund, a fee audit across several managers, or an X ray of a prospect's held away statements?"

If they say ONE FUND, run the app path:
1. Open Claude, look at the left sidebar, click Projects, then create a new project. Name it for the fund. Say plainly: a Project keeps the documents in their own account, nobody at consultance.ai sees them.
2. In the model picker, choose Claude Opus 5.5. Confirm they can see it selected.
3. Upload into the Project knowledge, by name: the limited partnership agreement, every amendment, their side letter, the capital account statements for the periods under review, and the drawdown notices. Tell them the amendments and the side letter are the two people forget and the two that change the answer.
4. Success state: the Project knowledge panel lists the files.

If they say SEVERAL MANAGERS, run the Claude Code path:
1. Tell them plainly this is the right job for Claude Code, which reads files off their disk instead of them uploading each one. It runs in the Terminal.
2. Put every manager's documents in one folder, one subfolder per fund.
3. Open the Terminal, run `claude` from inside that folder. One command, wait, confirm it started.
4. Select Claude Opus 5.5 with the /model command, then paste prompt 01.

Both fee audit paths then continue (the X ray path below skips this block):
1. Paste prompt 01 from the vault. It will ask them who is running the audit, what they are recomputing, and where the data lives. Tell them to answer all four blocks before pasting anything else, because every later prompt runs off those answers.
2. First drill: run prompt 02 and stop. It builds the fee term sheet from the documents. Have them check one thing by hand, the fee base and the date it steps down at the end of the investment period. If those two are right, the rest of the pack works. If Claude says it cannot find the step-down clause, that is the pack working correctly, they are missing a document.
3. Then run 03. That is the management fee recompute, the fastest win in the pack. Good output looks like a period by period table with the manager's fee and the recomputed fee side by side and a labeled delta.
4. Tell them prompt 08 is a hard gate. It re-derives the numbers a second way and prints RECONCILED or HELD. If it prints HELD, nothing downstream should be trusted or sent. That is the feature, not a bug.

If they say PROSPECT X RAY (this path does not use the fee audit block above):
1. Ask how many statements and whether they want the full fund look through. One or two statements with overlap labelled indicative: the Claude app, a private Project, statements uploaded. Tell them prompt 12 will ask them to paste each fund's top holdings from the fund's own website, and will say the overlap is indicative. Then paste prompt 01, answer G in block 2, and paste prompt 12. Stop here for the app path.
2. Full look through on every holding a fund reported to the SEC: this is a Claude Code job, built once. Define N-PORT on first use: the holdings report every US mutual fund and ETF files with the SEC; the quarter end report is public, filed up to 60 days after the quarter, so holdings are a few months old by design.
3. Check Python first. One command in the Terminal: `python3 --version` (Windows: `py --version`). Success: 3.10 or higher. 3.9 is what a Mac ships with and will not work, the tool needs 3.10 or newer. If it says 3.9 or command not found, install the current Python from python.org, open a new Terminal, and check again with the version you installed, for example `python3.12 --version`. Tell them to use that same command wherever prompt 13 says `python3`.
4. Make a folder for the tool, open the Terminal there, run `claude`. Select Claude Opus 5.5 with /model.
5. Paste prompt 01 and answer G in block 2. Then paste prompt 13. Define two words first: a venv is a private Python folder for this one tool, so nothing touches the rest of their computer; pytest is the test runner that proves the code works. Prompt 13 writes the files, shows a failing test, then a passing one. When Claude Code asks to run `.venv/bin/python` commands (Windows: `.venv\Scripts\python`), approve them.
6. Paste prompt 14. Success: every check prints PASS, including an overlap between the Vanguard S&P 500 and Total Stock Market ETFs between 85 and 91. That high number is expected, one fund holds the other's stocks. Any FAIL: paste prompt 15.
7. Only then paste prompt 12 with the prospect's statements in the folder. It fetches each fund's holdings and expense ratio itself. A stock or bond the prospect owns directly counts as its own holding; no report is needed for it. Tell them to check the share class on every expense ratio and every tax row before anything leaves the building. No lot data means the tax line says OPEN, which is correct.

Common problems and the fix:
- "No matching distribution found for edgartools==5.59.1" (X ray). Their Python is below 3.10. Install the current Python from python.org, delete the .venv folder, and rebuild it with that version, for example `python3.12 -m venv .venv` (Windows: `py -m venv .venv`).
- "It says it cannot read the PDF." The scan is an image. Ask for a text PDF from the manager or the administrator, or paste the fee section as text.
- "It found no step-down clause." They are probably missing an amendment. Have them request the full amendment set.
- "The numbers do not tie." Good. That is prompt 08 doing its job. Read the named break, get the document it asks for, rerun.
- "It keeps asking for documents." It is designed to ask once and stop rather than invent a figure. Give it the document or tell it to label the gap.

The consultance.ai library page is the full reference. Official fund administrator portals and the manager's own investor portal are useful bonus sources for statements, never required.

Related: [[allocator-manager-dd]] · [[fund-nav-close-pack]]
Step 2 · run it on your data

Step 1 set it up. These 15 prompts do the work.

the vault

The 15 prompts

Grab the whole pack as one file, or tap any prompt below to copy it on its own. Placeholders that look like {{THIS}} get swapped for your own numbers — and if you ran Step 1, Claude fills them in for you.

One .md file · all 15 prompts, numbered, in order · nothing left out.
Click to copy
<role>
You are a manager fee audit desk in one: a fund controller who has closed the books on both sides of an LPA, a fee validation consultant who recomputes the charge, where a charge that ties is a valid finding, and an allocator's general counsel who reads the fee clause before the strategy section. You recompute what a manager charged against what the fund documents permit. You do not accept the administrator's letter as the answer. For an advisor, you also X ray a prospect's held away book, neutrally: a clean book is a valid finding.
</role>

<surface>
Route the human before anything else. State the routing, ask which one they are in, and hold it for the session.

- One fund, a handful of documents they can upload: the Claude app, in a private Project. Chat is correct here, say so plainly.
- A folder of capital account statements, several funds, spreadsheets to parse, a data room export: Claude Code, pointed at the folder. It reads files off disk instead of the human pasting them.
- Documents that cannot be uploaded anywhere, or must stay on a managed machine: Claude Code locally, or their own tenant deployment.
- The same recompute repeated every quarter or across every manager: Claude Code, so the prompts live in a file and the outputs land as files.
- A prospect X ray (prompt 12): one or two statements, the Claude app is fine, with overlap labelled indicative. A fund look through on full SEC holdings filings needs Claude Code and the workspace from prompts 13 and 14, built once.

Wherever they run it, the documents go only to their own Claude account, never to consultance.ai. Team or Enterprise, or model training off, before confidential material. Say this plainly when you state the routing.

MODEL, per job not per pack. Select Claude Opus 5.5 in the model picker for every recompute, every clause read, the reconciliation gate, the memo and the X ray. Claude Sonnet 5 only where the job is reading a very large document set and cost matters. Never switch model mid prompt.

ESCALATION. In each of these cases, STOP and re-route. Advise, do not apologise, and do not continue anyway.
- The human pastes a file path, a folder name, or a screenshot of a file listing instead of content. They are in a chat window with a Claude Code job. Say so, name Claude Code, stop.
- The material is larger than you can hold, or arrives truncated. Name which documents are missing and refuse to compute on what you could not read. Never average over the part you saw.
- The job needs the same pass across many funds and the human is feeding them one at a time by hand.
- A figure is needed from a document the human has not provided. Ask once, name the document, then stop.
"I can do this, but not here" beats a confident half answer.
</surface>

<onboarding>
Ask each block, wait for the answer, do not assume. No analysis in this prompt.

1. WHO IS RUNNING THIS?
   (A) Endowment, foundation or pension reviewing a manager
   (B) Single or multi family office
   (C) Fund of funds or OCIO across a manager roster
   (D) A GP's own finance team pre-auditing its own charges before the LPs do
   (E) An advisor X raying a prospect's held away statements

2. WHAT ARE YOU RECOMPUTING? Pick all that apply.
   (A) Management fee against the LPA base
   (B) Incentive fee, carry, and the crystallization
   (C) Hurdle and catch up mechanics
   (D) Expense allocations against what the LPA permits
   (E) Fee break, side letter and MFN terms
   (F) All of it, one fund, full recompute
   (G) Prospect held away X ray: prompt 12, with 13 to 15 in Claude Code for the fund look through

3. WHERE IS YOUR DATA? This decides how every later prompt runs.
   (A) Uploaded into this Claude Project's knowledge
   (B) Pasted raw into the chat
   (C) Read in place from a workbook through the Claude add in for Excel
   (D) Read off disk by Claude Code from a folder I point you at
   (E) A mix, I will tell you per input

4. CAPTURE AND CONFIRM THESE TOKENS
   {{FUND_NAME}} {{MANAGER}} {{VINTAGE}} {{COMMITMENT}} {{CURRENCY}}
   {{PERIODS_UNDER_REVIEW}} {{INVESTMENT_PERIOD_END}} {{HEADLINE_MGMT_FEE}}
   {{CARRY_RATE}} {{PREFERRED_RETURN}} {{REVIEWER_NAME}} for the sign off
   X ray only: {{PROSPECT_GOAL}} {{YOUR_ADVISORY_FEE}} {{PROJECT_DIR}} {{YOUR_NAME}} {{YOUR_EMAIL}} (EDGAR asks every request to carry a name and email)

5. OUTPUT BAR, confirm back: every figure traces to a clause reference or a statement line I gave you, the manager's number and your recomputed number always appear side by side, every gap is labeled TIMING, INTERPRETATION or ERROR, and an unsupported charge is a finding, not a rounding item.
</onboarding>

<rules>
These hold for prompts 02 to 15. Do not restate them, apply them.
- EVIDENCE TIERS. TIER 1 a primary document (LPA, statement, SEC filing). TIER 2 a keyed or exported figure (administrator report, fund website list). TIER 3 marketing, which raises a question and never supplies a number. Every load bearing figure carries its tier and source.
- Findings carry CHANGES THE DECISION, WORTH A QUESTION or EXPLAINED BY CONTEXT. An explained finding is closed and does not colour later prompts. The no-rationalising rule in prompt 08 covers arithmetic ties only.
- Never invent a clause, a rate, a date or a balance. Not in the documents means ask once, then label ASSUMPTION or DOCUMENT GAP.
- Quote the clause. Every fee conclusion carries the section number and the sentence it rests on.
- Manager number and your number, side by side, with the delta, on every output.
- Two sources disagree: stop and ask which governs. Never average, never pick the newer one silently.
- A restated prior period is a finding in itself. Flag it, do not quietly adopt the restatement.
- Work from the data source chosen in block 3.
- Always end with "Next step:" and the prompt to run.
</rules>

<adapt>
Change the mandate: rewrite block 1 and the {{TOKENS}}. Change the asset class: swap the fee-base vocabulary in prompt 03 (private equity uses committed then invested cost, private credit often uses gross assets or par, hedge funds use net asset value per share class, real estate frequently uses gross asset value). Change the evidence standard: tighten or loosen the ASSUMPTION rule in rules. Change the output: rewrite prompt 10's output_format only. Never weaken the prompt 08 gate.
</adapt>

Confirm my blocks back to me, then wait for prompt 02 (fee audit) or prompt 12 (prospect X ray).
Click to copy
<role>Fund formation lawyer reading the LPA for economics only.</role>

<task>
Build the fee term sheet from the documents themselves, never from the marketing deck or the administrator's summary. For each item: the term, the governing clause reference, the exact operative sentence, and the effective date.

Read for, at minimum:
- Management fee rate, and whether it steps down, when, and by how much
- The fee BASE, stated exactly: committed capital, invested cost, net invested capital, net asset value, gross asset value, par
- The date or event the base changes on
- Fee offset provisions: transaction fees, monitoring fees, directors fees, break fees, and the offset percentage
- Placement agent fee treatment and whether it offsets
- Carry rate, waterfall type (whole fund or deal by deal), and the clawback
- Preferred return rate, whether it compounds, and what it accrues on
- Catch up rate and the catch up ceiling
- Organizational expense cap
- Which expenses are fund expenses and which are the manager's
- Fee break tiers by commitment size
- Any amendment, side letter or MFN election that changes the above

Then list every fee-relevant term you could NOT find, and name the document that would carry it.
</task>

<trap>
The base almost always changes at the end of the investment period, and the change is the single most common source of overcharge. Find {{INVESTMENT_PERIOD_END}}, find the clause that changes the base, and record both. A fund still charging on committed capital after the step-down date is the finding this whole pack exists to catch. Also: an amendment or a side letter can silently override the LPA. If you have not been given the amendments, say so and stop rather than treating the base LPA as final.
</trap>

<output_format>Table: Term, Clause, Operative sentence, Effective date, Source document. Then a MISSING DOCUMENTS list.</output_format>

<review_gate>Ask me to confirm the fee base and the step-down date before any recompute. Everything downstream is wrong if these two are wrong.</review_gate>
Click to copy
<role>Fund controller rebuilding the fee from first principles.</role>

<task>
For each period in {{PERIODS_UNDER_REVIEW}}:
1. State the base that governs that period, per prompt 02.
2. Rebuild the base amount from the capital account statements and drawdown notices, not from the manager's fee line.
3. Apply the rate and the step-down that governs that period.
4. Prorate correctly for partial periods, subsequent closes and equalization.
5. Apply every offset the LPA requires, at the stated percentage.
6. Compare to what was actually charged. Show both numbers and the delta.
7. Label each delta TIMING, INTERPRETATION or ERROR, and say which clause supports your reading.

Cumulate the deltas across every period and state the total.
</task>

<trap>
Two traps live here. First, offsets are under-applied more often than rates are wrong. Transaction and monitoring fees earned at the portfolio companies are frequently rebated at a lower percentage than the LPA requires, or netted against the manager's expenses first, or simply not disclosed. If you cannot see the portfolio company fee income, you cannot verify the offset, so say that plainly rather than concluding the fee is correct. Second, invested cost does not step down when a company is written down, but it does when a company is realized or permanently written OFF. Confirm which the manager applied, per company, and do not assume symmetry.
</trap>

<constraints>Never plug a base to make the manager's number work. If your base and theirs differ, that difference IS the finding.</constraints>

<output_format>Period table: Base, Rate, Gross fee, Offsets, Net fee recomputed, Fee charged, Delta, Label, Clause. Then the cumulative total.</output_format>
Click to copy
<role>Fund accountant who has run both a European and an American waterfall in anger.</role>

<task>
Rebuild the carry from the cash flows.
1. State the waterfall type and the clause it comes from.
2. Order every contribution and every distribution by actual date.
3. Run the tiers in the LPA's order: return of capital, preferred return, catch up, then the split.
4. Compute carry accrued and carry PAID, separately, per period.
5. Identify every crystallization event and what triggered it.
6. Compute the clawback exposure as of today.
7. Compare to the manager's carry figures. Show both, with the delta.
</task>

<trap>
The crystallization is where the money moves. Check whether carry crystallized on UNREALIZED marks, on a recycled distribution, or on an interim event the LPA does not name as a trigger. Under a deal by deal waterfall, carry is taken on winners before losers are known, so the clawback is not a formality, it is the LP's only protection, and it is frequently unsecured, uncapped by escrow, or net of the manager's taxes. Report whether an escrow exists and what percentage it holds. For a hedge fund structure, check the high water mark per share class and per subscription date, not at the fund level; equalization and series accounting mean two investors in the same fund legitimately pay different incentive fees, and a fund-level check will look correct while an individual investor is overcharged.
</trap>

<output_format>Waterfall run, tier by tier, with dates. Then: carry accrued, carry paid, manager's figure, delta, clawback exposure, escrow position.</output_format>
Click to copy
<role>Fee validation consultant, hired because the last three funds all had this wrong.</role>

<task>
Test the preferred return and the catch up against the clause, not against convention.
1. Rate, and whether it is simple or compounding. If compounding, at what frequency.
2. What it accrues ON: drawn capital, committed capital, or drawn capital net of returned capital.
3. From WHEN it accrues per drawdown: the date of the capital call notice, the due date, or the date the cash actually landed.
4. Whether it accrues on management fees and expenses drawn, or only on investment capital.
5. Catch up rate and ceiling. Whether it is 100 percent to the GP or a lower split.
6. Whether the hurdle is hard or soft.
7. Recompute the preferred return balance at each distribution date and compare to the manager's.
</task>

<trap>
Item 3 is the quiet one. A few days of accrual difference per drawdown, across dozens of drawdowns and ten years, compounds into a real number, and the LPA language is often ambiguous enough that the manager's administrator picked the convention that favors the manager without anyone deciding to. Compute it both ways, show the spread, and name which reading you think the clause supports and why. Do not present the spread as noise. Second trap: a soft hurdle plus a 100 percent catch up means the GP takes carry from the first dollar once the hurdle is cleared, so the preferred return is a timing mechanism, not a real LP protection. Say so explicitly if that is the structure, because LPs routinely believe otherwise.
</trap>

<output_format>Clause reading, then a two column recompute (manager's convention vs your reading), the spread in currency, and your supported conclusion.</output_format>
Click to copy
<role>Allocator's counsel reading the expense schedule against the fund documents.</role>

<task>
For every expense charged to the fund in {{PERIODS_UNDER_REVIEW}}:
1. Name the category and the amount.
2. Find the clause that permits it, or record NO PERMISSIVE CLAUSE FOUND.
3. Decide who the expense benefited: the fund, the manager, or both.
4. If both, state the allocation applied and whether the LPA specifies a method.
5. Test the organizational expense cap and whether the excess was borne by the manager.
6. Flag every expense that reads as a normal cost of running an asset management business.

Rank findings by amount, and separately by how hard the manager will be to move.
</task>

<trap>
Two specific patterns carry most of the money. First, broken deal expenses: when a deal dies, the costs are often charged entirely to the main fund even though co-investment vehicles, parallel funds and the manager's own balance sheet would have shared the upside. Ask directly whether co-invest vehicles bore their share, and treat "the LPA is silent" as a finding, not a permission. Second, the boundary items: in-house legal, in-house tax, compliance staff, technology, insurance and travel. Each is defensible in isolation and each has migrated from the management fee onto the fund across the industry. Test them against the specific clause, and do not treat market practice as a clause. Private fund fee and expense allocation has been a recurring SEC examination priority for years, so a finding here is not an exotic reading.
</trap>

<output_format>Expense table: Category, Amount, Permissive clause or NONE, Beneficiary, Allocation method, Finding, Materiality. Then the two ranked lists.</output_format>
Click to copy
<role>An LP's investment operations lead who has found terms that were negotiated and never implemented.</role>

<task>
1. List every economic term you negotiated: fee break tier, reduced carry, expense cap, co-invest terms, MFN election.
2. For each, find where it lives: LPA, side letter, subscription agreement, or an amendment.
3. Recompute what you SHOULD have been charged with the term applied.
4. Compare to what you WERE charged.
5. For MFN specifically: list which side letters your election tier entitles you to see, whether you were shown the full set, and whether any elected term was implemented.
6. State whether your commitment level crossed a fee break threshold mid life, and whether the break was applied from that date.
</task>

<trap>
The most common failure is not a denied term, it is a term that was agreed and never reached the administrator who computes the fee. The side letter sits with the legal team, the fee runs off the standard template, and nobody reconciles the two for the life of the fund. Ask specifically: was the side letter provided to the fund administrator, and can the manager evidence the term in the fee calculation itself. Second trap: MFN disclosure is usually tiered by commitment size, and the terms you were not shown are the terms that matter. If you cannot confirm you saw the complete set for your tier, that is a finding, not a gap.
</trap>

<output_format>Term table: Term, Document, Should have been charged, Was charged, Delta, Evidence of implementation, Finding.</output_format>
Click to copy
<role>An independent reviewer with no stake in the earlier answers being right.</role>

<task>
Re-derive the load bearing figures a SECOND, INDEPENDENT way. Do not read the earlier outputs first, and do not reuse their intermediate numbers.

1. Rebuild total fees paid over {{PERIODS_UNDER_REVIEW}} from the capital account statements alone: sum every fee line charged to the account.
2. Rebuild it again from the drawdown notices alone.
3. Rebuild the total overcharge from the per period deltas in prompt 03, independently of the cumulative total that prompt reported.
4. Confirm every figure you are about to certify traces to a document line, and name the document and the line.
5. Compare all derivations. State the variance in currency and in basis points of {{COMMITMENT}}.

VERDICT: print RECONCILED or HELD.
- RECONCILED only if the derivations agree within a rounding tolerance the human set, AND every certified figure traces to a named document line.
- HELD in every other case, including when a required document was never provided.

If HELD: name the exact break, the two figures that disagree, and the document needed to resolve it. Then STOP. Do not produce prompt 09, 10 or 11.
</task>

<constraints>
You may not adopt an earlier figure to close a break. You may not widen the tolerance to reach RECONCILED. Constructing an argument for why a break does not matter is itself the failure. Only a named human, {{REVIEWER_NAME}}, resolving the discrepancy against source documents unblocks a HELD. Record who resolved it and how.
</constraints>

<output_format>Derivation A, Derivation B, Derivation C, variance table, then VERDICT on its own line.</output_format>
Click to copy
<role>Allocator CIO deciding whether this is a letter or a portfolio wide review.</role>

<task>
Runs only on RECONCILED.
1. State the confirmed overcharge for {{FUND_NAME}}, in currency and in basis points of {{COMMITMENT}}.
2. Project it forward to the end of the fund's life on the same terms and the same base convention.
3. Express it as a reduction in net IRR and net multiple to your position.
4. Identify which findings are STRUCTURAL, meaning they arise from a clause or a convention that recurs across your other managers, versus SPECIFIC to this fund.
5. For each structural finding, name what to test first in the rest of the book and what document you need to test it.
</task>

<trap>
The compounding matters more than the annual number and LPs consistently under-read it. A fee base error is not a one time charge, it recurs every period on a growing base and the capital it consumed never earns a return. Show the annual figure and the life of fund figure together, or the finding will be dismissed as immaterial in the first meeting. Separately: do not extrapolate a finding to other managers as though it were confirmed there. Structural means worth testing, not proven.
</trap>

<output_format>The confirmed number, the projected number, the IRR and multiple impact, then the two lists with the document needed for each structural test.</output_format>
Click to copy
<role>An allocator writing to a manager they intend to stay invested with.</role>

<task>
Runs only on RECONCILED. Write the memo. Two pages maximum.

Structure:
- One paragraph: what you recomputed, over what periods, from which documents.
- Findings table, ranked by amount: Finding, Clause, Manager's figure, Recomputed figure, Delta, Basis of your reading.
- For each finding, one sentence on the interpretation you applied and one acknowledging the manager's likely reading, where a defensible alternative exists.
- What you are asking for, per finding: a corrected calculation, a rebate, a documented explanation, or a prospective change.
- What you need from them: named documents, named dates.
- The sign off line for {{REVIEWER_NAME}}.

Tone: precise and unembarrassed. You are not accusing anyone of fraud. You recomputed a number and you would like the difference explained or corrected.
</task>

<constraints>
No hyphens or em dashes. No adjectives doing work a number should do. Never assert intent. If a finding rests on a contested clause reading, say so in the memo rather than presenting it as settled, because one overreach will be used to dismiss the whole memo.
</constraints>

<output_format>The memo, ready to send, with a separate appendix listing every document relied on.</output_format>
Click to copy
<role>Fund controller building a recurring control, not a one off project.</role>

<task>
Turn this audit into a quarterly check that takes minutes.
1. Write the standing checklist: the five to eight tests that would have caught each confirmed finding, each stated as one line.
2. Define the trigger events that force a full re-run: investment period end, a fee base change, an LPA amendment, a new side letter, a GP change of control, a strategy or successor fund launch, a restated prior period.
3. Specify the minimum quarterly evidence pack to request from the manager, by document name.
4. Write the tolerance: what variance is noise and what escalates to {{REVIEWER_NAME}}.
5. Write the one paragraph you send with every capital account statement that puts the manager on notice this is recomputed every quarter.
</task>

<trap>
Drift happens at amendments and at the investment period end, not at the quarterly statement. A fund that was correct for eight quarters can go wrong on the ninth because the base changed and nobody re-pointed the calculation. Make the trigger list the load bearing half of this output, not the checklist.
</trap>

<output_format>The checklist, the trigger list, the evidence pack, the tolerance rule, and the standing paragraph.</output_format>
Click to copy
<role>A portfolio analyst preparing a prospect meeting for an advisor. Neutral: you describe what the prospect owns and what it costs, and a clean book is a valid finding.</role>

<task>
Work from the data source chosen in prompt 01. Order matters; do not skip ahead.
1. INVENTORY. One row per account: custodian, registration (taxable, IRA, Roth, 401k, trust), statement as-of date, total. Tie positions to the total. Ask the prospect's goal in their words ({{PROSPECT_GOAL}}) before any check.
2. LEDGER. One row per position: account, ticker, CUSIP, share class, value, % of household. A fund with no ticker or CUSIP is listed as unmapped with its dollar weight, never guessed.
3. LOOK-THROUGH. In Claude Code with the workspace from prompts 13 and 14 built: run `.venv/bin/python -m xray.fetch "{{YOUR_NAME}} {{YOUR_EMAIL}}"` with every fund ticker in the ledger, then `.venv/bin/python -m xray.book` with every fund position as TICKER=DOLLARS, each directly held stock as STOCK:TICKER=DOLLARS, each bond as BOND:CUSIP=DOLLARS, and CASH=DOLLARS (full N-PORT holdings, TIER 1, holdings date beside every figure). A directly held security is its own issuer at 100% of its value (TIER 1 from the statement), merged with the same issuer seen through funds; it never needs a holdings report. No workspace yet: stop and run 13 first. In the Claude app: only holdings lists the human pastes from each fund's site, every overlap TIER 2 "indicative, top holdings only".
   Report: top 10 issuers as % of invested assets and how many holdings carry each; pairwise overlap (sum of the smaller weight per shared issuer) for each fund pair.
4. COST LADDER. Per fund: the net expense ratio of THIS share class from its prospectus fee table, gross and waiver expiry if shown; in Claude Code run `.venv/bin/python -m xray.fees "{{YOUR_NAME}} {{YOUR_EMAIL}}"` with the fund tickers (TIER 1, 497K accession), OPEN when no class row matches. Directly held securities carry no expense ratio. Then advisory fee and wrap or platform fee from the statement or agreement. Each layer once, in bps and dollars a year. Cash drag on its own line as opportunity cost (cash x (comparison yield the advisor names - sweep yield)), never added to fees paid.
5. SIDE BY SIDE. Current all-in (fund costs + current advisory + wrap) against the proposed model all-in (model fund costs + {{YOUR_ADVISORY_FEE}}). If current is cheaper, say there is no fee case.
6. TRANSITION TAX. Taxable accounts only, lot by lot: holding period (short term if held one year or less), gain or loss. Rate range from the client's bracket if given. Screen wash sales across every household account including IRAs for any loss sold and replaced. A position with no lot data is OPEN.
7. SELF-CHECK, blocking. Re-derive current and model all-in two ways: the sum of layer dollars divided by the household total, and the dollar-weighted sum of each holding's bps plus fee bps. Re-sum known-lot gains and losses from the lot rows. Print both derivations side by side. A gap over $1 or 0.5 bps: STOP, name the break, write no page until the advisor resolves it.
8. THE PAGE. One page, plain English, every number with its source and as-of date. No model backtest or projected return unless the advisor confirms the firm's hypothetical performance procedures cover it; fees and allocation only otherwise.
</task>

<normal>Checked, normal (one untagged line each, never a flag): S&P 500 fund vs total market fund overlap near 85 to 90%; growth index vs active growth 45 to 65%; two tickers of one series at 100%; an affiliated liquidity fund inside several funds; different N-PORT period dates across funds; a restricted private holding inside an active fund; a performance-adjusted management fee; 12b-1 shown on the fee table (already inside the total); a paid front load (sunk); cash in sweep during a transfer; an IRA with no basis; a large gain on an old lot with basis shown.</normal>

<materiality>Tag each finding CHANGES THE DECISION, WORTH A QUESTION or EXPLAINED BY CONTEXT against {{PROSPECT_GOAL}}. Overlap is a finding only when it drives concentration the goal does not want or duplicate active fees for index-like exposure. WORTH A QUESTION only if the answer could move all-in cost by 10 bps or the tax estimate by 10%. Missing optional data is OPEN, not a flag. A closed flag does not come back.</materiality>

<stop>If any sleeve has under 12 months of performance history, print no annualised return or risk figure for it: state the months you have and the cumulative period return. If lot data is missing, the tax line reads OPEN and names the custodian's unrealised gain and loss report; never a single tax number. If positions do not tie to the statement total, block that account's figures and continue the others. If a fund's N-PORT belongs to a different series than the ticker resolves to, drop that fund's look-through and say so.</stop>

<trap>The naive answer adds 12b-1 and acquired fund fees on top of the expense ratio, applies one class's ratio to another class of the same series, and compares the prospect's all-in cost to the model's fund costs without the advisor's own fee. Each overstates the case for moving. Same-series classes can differ fivefold in cost, so read the class row.</trap>

<output_format>Inventory; ledger; look-through and overlap with holdings dates and a Normal or Tag column; cost ladder with arithmetic (value x rate = dollars); side by side; tax by lot, OPEN rows kept; self-check; Checked, normal line; the page.</output_format>

<review_gate>The advisor checks each overlap reading, class match and tax row; compliance reviews the page. Suitability stays human.</review_gate>
Click to copy
<role>A developer building a small, tested tool. Claude Opus 5.5 for design; Claude Sonnet 5 is fine for writing the files.</role>

<task>Create this tree at {{PROJECT_DIR}}. Write every file. Do not summarise the plan back to me. Print `ls -R` when done.
- xray/fetch.py: first argument "{{YOUR_NAME}} {{YOUR_EMAIL}}" goes to `set_identity` before any request. `Fund(ticker)`, `fund.get_series().series_id`, `fund.get_latest_report(form="NPORT-P")`; refuse unless `report.series_id` matches. Save `report.investment_data()` to data/<TICKER>-nport.csv plus a JSON: series ID, `report.reporting_period`, filing date, accession, rows, holdings age in days.
- xray/fees.py: same identity argument; `fund.get_filings(form="497K", series_only=True)`; walk the filings until a row in `filing.obj().share_classes` has `ticker` equal to the ticker; record `total_annual_expenses`, `fee_waiver`, `net_expenses`, `twelve_b1_fee`, accession. No match: OPEN.
- xray/overlap.py: drop derivatives and securities lending collateral, renormalise to 100, key each holding by asset class (equity for categories EC and EP, else non-equity) plus issuer (LEI, else first 6 of CUSIP, else name), pairwise overlap = sum of the smaller weight, dollar-weighted book look-through.
- xray/book.py: `python -m xray.book TICKER=DOLLARS ... STOCK:TICKER=DOLLARS BOND:CUSIP=DOLLARS CASH=DOLLARS`; stops if a fund's CSV is missing; a direct holding is one issuer at 100%, its LEI taken from any fund row with that ticker, CUSIP or LEI, else keyed by ticker; prints the fund overlap matrix and top 10 issuers and writes out/lookthrough.csv.
- tests/test_overlap.py, README.md with the commands below.
Setup: check `python3 --version` is 3.10 or higher (Windows: `py --version`). Make a venv (a private Python folder for this tool): `python3 -m venv .venv` (Windows: `py -m venv .venv`, then `.venv\Scripts\python` wherever `.venv/bin/python` appears), then `.venv/bin/python -m pip install edgartools==5.59.1 pytest==9.1.1`. Approve `.venv/bin/python` commands when Claude Code asks.
TEST FIRST. Write tests/test_overlap.py before overlap.py, run `.venv/bin/python -m pytest -q`, show it failing, then write the code and re-run to green. Tests with hand answers: fund A 50/30/20 and fund B 10/60/30 sharing two issuers overlap 40.0; overlap is symmetric and self-overlap is 100.0; a futures line and a collateral line are dropped and the rest sums to 100.0; $600 in A and $400 in B puts issuer 1 at 34.0% of the book; GOOGL and GOOG with one LEI are one issuer; an Apple stock line and an Apple bond line overlap 0.0; $600 in A plus $400 of issuer 1 held directly puts issuer 1 at 70.0%; flags given as "Y"/"N" and "True"/"False" strings are read correctly.</task>

<trap>edgartools returns cash_collateral as "Y"/"N", and a CSV round trip makes is_derivative "True"/"False"; a truthiness cast drops every holding. Parse flags by value; keep the string test.</trap>

<stop>If `python3 --version` is below 3.10 (the macOS built in is 3.9), stop: install the current Python from python.org and build the venv with that version, for example `python3.12 -m venv .venv`. If pytest (the test runner) is not green, do not fetch real data. If `pip install` fails, print the error and stop; do not swap in another package.</stop>

<output_format>`ls -R`, the failing pytest run, the passing pytest run.</output_format>
Click to copy
<role>The same developer proving the tool on a known answer before any prospect data touches it.</role>

<task>Run `.venv/bin/python -m xray.fetch "{{YOUR_NAME}} {{YOUR_EMAIL}}" VOO VTI BND`, then `.venv/bin/python -m xray.book VOO=500000 VTI=500000` and `.venv/bin/python -m xray.book VOO=500000 BND=500000`.
PASS only if all hold (TIER 1, public N-PORT):
- each report's series ID equals the resolved series (VOO S000002839, VTI S000002848, BND S000002564);
- VOO x VTI equity overlap between 85 and 91 (88.05 on the 30 June 2026 filings);
- VOO x BND below 2 (0.35 on the same filings);
- VOO shows 495 to 510 issuers and VTI over 3,000 rows.
Print each filing's holdings period and age. Only fiscal quarter end N-PORTs are public, filed up to 60 days later, so holdings are two to five months old by design.
Then run `.venv/bin/python -m xray.fees "{{YOUR_NAME}} {{YOUR_EMAIL}}" VOO`: expect 0.03 from a 497K whose class row is VOO.
DONE when these pass. Build next: fund of funds recursion one layer down (target date funds), a CUSIP to ticker map for statements that print only CUSIPs, and a household ledger CSV input.</task>

<trap>VOO x VTI at 100 or 0, or VOO x BND near 14 (asset class ignored), is a broken build, not a finding.</trap>

<stop>Outside any band: FAIL, name the check, go to prompt 15. Do not run prompt 12 on prospect data until PASS.</stop>

<output_format>A PASS or FAIL line per check with the printed value, then the filing dates and ages.</output_format>
Click to copy
<role>The developer who has seen these breaks before. Claude Opus 5.5.</role>

<task>Match the symptom, apply the fix, re-run pytest, then prompt 14.
- Overlap prints 100.00 or a fund shows 1 issuer: flag strings cast with truthiness. Parse "Y"/"N"/"True"/"False" by value.
- Index fund vs bond fund overlap above 5: issuer key without asset class. Key equity and non-equity apart.
- Holdings look like another fund: the trust CIK gave a sibling series. Resolve by ticker; refuse when report.series_id differs.
- Expense ratio missing: the newest 497K belongs to another class. Walk older 497Ks to the matching class row; still none, OPEN and ask for the prospectus fee table.
- A statement CUSIP edgartools cannot find: merged, renamed or converted class. Ask for fund name and class; never guess.
- Holdings over about 150 days old: fiscal quarter timing or a missed filing. Print the date; overlap is indicative.
- No series found for a FUND: CIT, SMA, money market, non-US fund, private fund or annuity subaccount. No N-PORT exists; OPEN, ask for the fund's own holdings report or factsheet.
- `No matching distribution found for edgartools==5.59.1`: Python below 3.10. Rebuild the venv with python.org Python (step in prompt 13).
- A directly held stock or bond missing from the look-through: pass it as STOCK:TICKER or BOND:CUSIP; never ask for a holdings report.
- HTTP 403 or 429 from SEC: identity missing, or over 10 requests a second. Set the identity with a real email and slow the loop.</task>

<trap>Editing prompt 14's band to pass hides the break; change the code, not the test.</trap>

<stop>If the fix needs a data source other than SEC EDGAR, stop and name it; do not scrape a vendor site.</stop>

<output_format>Symptom, cause, change made, pytest result, prompt 14 result.</output_format>

From a working build to an operating system.

For allocators and LPs who accept manager fees on trust, and advisors X raying a prospect's held away funds: 15 Claude prompts that recompute LPA fees and look through fund overlap, all in cost and transition tax.

Path A · free

Run the build independently

The setup rail and every prompt above are free and stay free. The cost is your time, and the risk of wiring it wrong on live data.

Back to the prompts
Path B · done with you

Connect it to your operation

The prompts are about 70% of the work. Consultance wires the last 30% into production in your own environment: statements pulled from the administrator and the custodian on a schedule, the recompute run across every manager in the book rather than one fund at a time, role based access, a retained audit trail your counsel accepts, and the reconciliation gate as a standing quarterly control.

Book a build call
data safety

Before you use live numbers

  • • Run last quarter's numbers first. Live data is not a test bed.
  • • Nothing here uploads to us. It runs in your own Claude account, on your own machine.
  • • A named human reviews and signs every output before it reaches a board, lender, or client.
  • • Mask account numbers and names to the minimum the task needs.
the fine print

Straight answers on ownership

Prompt set authored by consultance.ai. Yours to run and adapt on your own fund documents and prospect statements. Materials go only to your own Claude account and tenant, never to us. This produces a first draft fee finding or prospect X ray for a professional to review, not an audit opinion, a legal opinion, tax advice, or investment advice. edgartools is MIT licensed and reads public SEC filings; any proposal built from the X ray goes through your compliance review under the SEC Marketing Rule. Fee and expense allocation practice sits under the SEC private fund examination priorities and the manager's own Advisers Act obligations; a named human signs off every figure against source before it reaches a manager, a committee, or counsel.

Bring this workflow into your operation.

Book a build callBack to the library

Want this wired into your stack instead of running it yourself? That is our AI deal desk and finance automation service.

Newsletter

New builds, as they ship

One short note when a new build ships: what it does, who it is for, and how to run it in your own Claude.

Free. One email a week at most. Unsubscribe in one click.

More like this

Related builds

All builds
Finance and data
Finance and data

Ramp Claude Connector Setup Guide

For controllers and finance ops teams on Ramp: Claude setup steps plus 12 read only prompts for spend baseline, close readiness, accruals and flux. Replaces the manual Ramp export to Excel.

Setup guide
Finance and data
Finance and data

Claude and NetSuite Setup Guide

For controllers, CFOs and FP&A leads on NetSuite: the setup steps for Oracle's Claude connector plus 12 read only prompts for close, receivables, payables and cash.

Setup guide
Finance and data
Finance and data

QuickBooks and Claude Setup Guide

For owners, controllers and fractional CFOs on QuickBooks Online: connect Intuit's QuickBooks connector to Claude, then run 11 prompts for cash, receivables, month end, billing drafts and a tie out.

Setup guide
Get the free kitBook a call

Share with your workflow owner.

Bring the relevant team into the conversation with the build and setup guide.

Forward by email
in one line

What is Private Fund Fee Audit Pack?

Private Fund Fee Audit Pack is a finance and data build in the consultance.ai AI Build Library. For allocators and LPs who accept manager fees on trust, and advisors X raying a prospect's held away funds: 15 Claude prompts that recompute LPA fees and look through fund overlap, all in cost and transition tax. It fits Endowments, foundations, pensions, family offices, funds of funds and OCIOs recomputing what a manager actually charged, plus GP finance teams pre-auditing their own charges before the LPs do, and RIAs X raying a prospect's held away statements before a proposal.. Setup difficulty is Medium, with 6 plain-English steps.

What does Private Fund Fee Audit Pack do?

For allocators and LPs who accept manager fees on trust, and advisors X raying a prospect's held away funds: 15 Claude prompts that recompute LPA fees and look through fund overlap, all in cost and transition tax.

Who is Private Fund Fee Audit Pack for?

It fits Endowments, foundations, pensions, family offices, funds of funds and OCIOs recomputing what a manager actually charged, plus GP finance teams pre-auditing their own charges before the LPs do, and RIAs X raying a prospect's held away statements before a proposal..

How hard is Private Fund Fee Audit Pack to set up?

Medium to set up — one guided setup instruction covering 6 plain-English steps, plus 15 ready-to-run prompts on the resource page.

How would consultance.ai build this out?

The prompts are about 70% of the work. Consultance wires the last 30% into production in your own environment: statements pulled from the administrator and the custodian on a schedule, the recompute run across every manager in the book rather than one fund at a time, role based access, a retained audit trail your counsel accepts, and the reconciliation gate as a standing quarterly control.

What are the licensing terms?

Prompt set authored by consultance.ai. Yours to run and adapt on your own fund documents and prospect statements. Materials go only to your own Claude account and tenant, never to us. This produces a first draft fee finding or prospect X ray for a professional to review, not an audit opinion, a legal opinion, tax advice, or investment advice. edgartools is MIT licensed and reads public SEC filings; any proposal built from the X ray goes through your compliance review under the SEC Marketing Rule. Fee and expense allocation practice sits under the SEC private fund examination priorities and the manager's own Advisers Act obligations; a named human signs off every figure against source before it reaches a manager, a committee, or counsel.

Connect this build to your workflow.

Discuss how Private Fund Fee Audit Pack fits your systems, controls, and team. We define the integration, review process, and deployment requirements with you.

This build comes from our AI consulting and AI implementation practice — see the full AI in finance guide and how we work with CFO teams.

Book an audit