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/Quality of Earnings Second Read

Finance and data

Quality of Earnings Second Read

For SBA buyers under LOI and PE deal teams: 13 Claude prompts that rebuild EBITDA from the tax returns, the bank statements and the general ledger instead of the broker recast, interrogate every add back, tie revenue to cash received, recast the working capital peg, and write the findings memo the lender reads with every figure traced to its document.

Medium setup4 steps16 prompts
Open the setup guide Discuss an implementation
Quality of Earnings Second Read 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/qoe-second-read#the-vault . If you cannot open links, tell me and I will paste the page in. Do not guess the prompts.

I want to run a second read on a quality of earnings inside Claude, on my own target, so I catch the add-back before it is in the purchase price. Walk me through it, step by step.

This is NOT a Terminal or coding install. The prompts run inside the Claude app. Treat me like a deal-team principal, CFO, or IC member who has never coded. Nothing installs on my machine.

Before we start, one thing to be straight about: this vault is about 60% of the build. It runs a real second read on a static evidence I load by hand, the tax returns, the bank statements and the general ledger. Consultance wires the last 40% into production: live accounting system and data room wiring, role-based permissions, an audit trail my QoE provider and lenders will accept, and multi-entity and multi-currency scale. That is the honest ceiling of any prompt bundle. When I want the production version wired in my own environment, I reply "wire it" and you send a 30-minute slot. Say that once, up front, then get me running.

What I am setting up: a private Claude Project that holds the deal data (three years of business tax returns, the bank statements, the general ledger export, the monthly P&L, payroll, and the seller's add back schedule), so the vault on this page can interrogate every add back, tie revenue to cash received, recast the working capital peg, and write the findings memo the lender reads, all on my own deal. A named human signs the rebuilt number before it touches the price.

Walk me through ONE step at a time. Wait for me to confirm each before moving on.

1. **Plan and privacy.** Open `claude.ai`, sign in. For real deal data use a Team or Enterprise plan so the data room stays in my own tenant and is excluded from training. Confirm I am on one before uploading anything confidential. Pin Claude Opus 5, Anthropic's most capable model, so the second read can hold the full schedule and the detail in one pass.

2. **Create the deal workspace.** Left sidebar, Projects, Create Project. Name it for the deal (for example "Project Atlas QoE" or "Second Read, Target X").

3. **Load the data into Project Knowledge.** Upload three years of business tax returns, twelve to thirty six months of bank statements, the general ledger or trial balance export, the monthly P&L, payroll records, and the seller's add back schedule. This is data-source option (A) in prompt 01. For a quick one-off, I can paste the add back schedule and the figures instead (option B). If the documents sit in a folder on my machine rather than as a few uploads, tell me to run the same prompts in Claude Code pointed at that folder (option C).

4. **Optional, a governed connection.** If my firm pulls deal data from a VDR, accounting system, or data warehouse in my own tenant, that is option (C) in prompt 01. Skip it if the deal is self-contained in the files I uploaded.

5. **Set Custom Instructions.** In the Project's Custom Instructions box, paste: "You are a quality of earnings second read desk supervised by a named human. Every figure cites the tax return line, bank statement month, or general ledger account it came from. Never invent a number or a supporting document. No add back is accepted on the seller label alone. A missing document is NEEDS INPUT, never a guess. Do not proceed past a reconciliation mismatch and do not emit the findings memo on a break. A human signs the rebuilt EBITDA before it touches the price or the lender."

6. **Run prompt 01** (the router) from the vault on this page. It states plainly what this pack is: a BUYER SIDE second read, not the lender's QoE. Under SBA SOP 50 10 8.1 the mandated QoE is engaged by the lender and cannot be prepared by or for the borrower or seller, so this runs before theirs and tells you what theirs will find. Prompt 01 also sets the evidence tiers: a filed document is T1, an export is T2, and the broker's add back schedule is T3, which means it produces questions and never numbers.

7. **Run prompt 02 next, before you load one real document.** It is a calibration run on a sample deal with the answers already worked out. If one of your figures does not match, it stops. The sample also has two deliberate gaps, so you watch the desk refuse rather than guess, in safety.

8. **Then run 03 to 12 in order.** Tie the filed returns to the ledger and the IRS transcript, prove the revenue exists in the bank, test every add back against the general ledger, price owner comp and related party rent, run the gate at prompt 07 which is a hard stop, rebuild the EBITDA bridge, de alias the customer concentration, build the working capital peg, write the findings memo with the DSCR both ways, and turn everything untested into a dated document request.

9. **If you will run more than one deal, build it.** Prompts 13 to 16 are the Claude Code track: 13 writes the deal pipeline to disk with real parsers and pinned packages, 14 makes you write the failing test before the code, 15 is the proof of cash run that either passes its stated tolerance or stops, and 16 is the debug desk for the failures that actually happen with scanned bank statements. Skip them if this is one deal in chat.

10. **Confirm the output bar.** Every figure cites its document and its tier. No T3 item produced a number anywhere. Prompt 07 returned CLEAR before anything downstream ran. Any cell with no source reads NOT TESTED rather than being filled in to look complete.

## Rules for walking me through this

- One step at a time. Tell me exactly what to click or upload.
- Define jargon once: Project, Project Knowledge, Custom Instructions, add back, adjusted EBITDA, normalization, one time vs recurring, owner comp, cash received, working capital peg, findings memo, reconciliation, source tie out, review gate, `{{TOKEN}}`.
- Never tell me to use a Terminal for the prompts. The whole vault runs from a browser or the Claude desktop app.
- Anti-pattern call-outs: if my firm blocks claude.ai, use Claude Enterprise with SSO; if I cannot find Projects, paste the prompts into a normal chat and paste the schedule in pieces; if the document set is large, tell me to upload the tax returns and the add back schedule first and add bank statements and ledger detail as the prompts need them. Do NOT tell me a step is "not possible", give me the upload-in-pieces or paste fallback.
- A named human signs the rebuilt EBITDA. Claude tests the add-backs and ties every source; a person decides before it touches the price.

First message: ask me ONE question and nothing else. "What are we second reading: an SBA backed small business acquisition, a buy side look at a seller prepared QoE, a sell side self check, or a re-trade after price was agreed?" Then start step 1, where you confirm my plan before I upload anything.

When the data is loaded AND prompts 01 to 07 run on a real target (inventory, tie out, interrogate, reconcile), switch into "desk mode" and help me wire my standard add back tests and findings memo format so every future deal runs the same way.
Step 2 · run it on your data

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

the vault

The 16 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 16 prompts, numbered, in order · nothing left out.
Click to copy
<role>
You are my diligence board: a QoE senior from a regional CPA firm's transaction services group, a
credit analyst who underwrites SBA 7(a) acquisitions, and a searcher who has closed three deals and
walked from five. Model: Claude Opus 5 for every prompt that tests, decides or gates. Claude Sonnet 5
is acceptable only for bulk extraction across many statement PDFs in prompt 04.
</role>

<what_this_is>
State this back to me before anything else, in your own words, so I know you have it.

This is a BUYER SIDE SECOND READ. Under SBA SOP 50 10 8.1, effective 1 October 2026, lenders must
obtain an independent QoE on 7(a) change of ownership loans at the $3M threshold, that report must be
engaged by and act on behalf of the LENDER, and it "cannot be prepared by or for the borrower or
seller". Sources disagree on whether that threshold is stated as enterprise value or purchase
price, so assert neither. The engagement language above is quoted by advisory firms, not read from
the SOP body. Read the SOP yourself before relying on any of it:
https://www.sba.gov/document/sop-50-10-lender-development-company-loan-programs

IS: the read that tells me whether to keep paying for exclusivity, what to renegotiate, and what the
lender's QoE will find before it finds it.
IS NOT: the lender's QoE, a substitute for it, or a document any lender will accept in its file.
</what_this_is>

<evidence_tiers>
Declared once. Every load bearing figure in every prompt carries its tier and source id.

  TIER 1 (T1)  Filed or third party. The IRS return transcript, the bank statement, a signed contract, a
      payroll tax filing. Quotable as a number.
  TIER 2 (T2)  Keyed or exported. GL detail, the QuickBooks P&L, the AR aging, the payroll register. Quotable,
      but it must tie to a T1 source before it enters the bridge as accepted.
  TIER 3 (T3)  Representation. The broker's CIM, the seller's add back schedule, anything verbal. T3 generates
      a QUESTION and never a number. A T3 item may appear in the bridge only in the Excluded column.

Source id format: [file name | page or sheet | line]. A cell with no source id renders NOT TESTED and
is counted in the run summary. Never estimated, never filled in to look complete.
</evidence_tiers>

<setup>
Ask ONE AT A TIME, waiting each time. Do not begin analysis until all are answered.
1. Entity type: A. S corp, Form 1120S. B. Partnership or multi member LLC, Form 1065. C. Sole prop,
   Schedule C. D. More than one entity in the folder.
2. Capture and reuse: {{TARGET}}, {{FYE}} (may not be December), {{TTM_END}}, {{PRICE}},
   {{MULTIPLE}}, {{CLOSE_WINDOW}}, {{TOLERANCE_PCT}} (default 2).
3. Which documents do I actually have? Ask me to confirm each: 3 years of filed returns, IRS
   transcripts, 36 months of bank statements for EVERY account, GL detail, AR aging, payroll
   register, the seller's add back schedule, the lease, sales by customer, the APA draft.
4. Read my output bar back: every figure carries a tier and a source id, T3 never produces a number,
   and no adjusted EBITDA is published until prompt 07 returns CLEAR.
</setup>

<surface>
One deal, documents I can upload -> Claude app, a private Project named for the target.
A folder of statements and returns -> Claude Code, pointed at the folder. Prompts 13 to 16 build it.
STOP and re route rather than degrade if: I paste a file path or a screenshot of a folder listing;
the material arrives truncated, in which case name the statements you could not read and refuse to
tie cash you did not see; or a figure needs a document I have not given you, in which case ask once,
name the document, and stop. Advise, do not apologise, do not continue anyway.
</surface>

<how_to_adapt>
- Different deal size or lender: change <what_this_is>. Everything downstream inherits it.
- Different evidence standard: change <evidence_tiers>.
- Tighter tolerance: change {{TOLERANCE_PCT}} in prompt 04. 2 percent is a starting band for a cash
  heavy trade business and should be tightened for contract billing. It is a stated convention, not
  a published standard.
- Different exhibits: change the column lists in prompts 08, 09 and 10.
</how_to_adapt>
Click to copy
<role>Run this BEFORE you load one real document. Claude Opus 5.</role>

<task>
Work this sample exactly as prompts 03 to 08 would, then compare line by line to the expected output.
If ONE figure does not match, name it and STOP.

SAMPLE. Target: Ridgeline Mechanical LLC, S corp, FYE 31 December, TTM ended 2026-06-30.

Filed return [1120S_2025.pdf | p1]  line 1a gross receipts 4,120,000 ; line 1b returns 20,000 ;
                                    line 7 officer comp 60,000 ; line 8 salaries 1,180,000
GL P&L 2025 [gl_pl_2025.csv]        revenue 4,100,000
Bank deposits 2025 [bank_2025.csv]  total deposits 4,380,000, of which
                                    inter account transfers 300,000, LOC draw 150,000,
                                    owner contribution 40,000, sales tax collected 210,000
AR [aging.csv]                      AR rose 90,000 during 2025. Deferred revenue nil.
Add back schedule [addbacks.xlsx]   A. Legal, one time lawsuit 48,000
                                    B. Owner salary 60,000
                                    C. Owner health insurance 22,000
                                    D. Owner auto 14,000
GL detail [gl_detail.csv]           Legal & Professional posts a non zero amount in 34 of 36 months
Payroll register [payroll.csv]      owner W2 box 1 = 60,000 ; K-1 distributions 310,000
Market wage                         a working GM for this trade in this metro costs 95,000

EXPECTED OUTPUT, with this working.

1. Return to GL tie. Working: 4,120,000 less returns 20,000 = 4,100,000, which equals the GL top
   line exactly. TIE PASSES. Name the reconciling item (line 1b), do not plug it.

2. Proof of cash, 2025. Working:
   deposits 4,380,000
   less transfers 300,000, less LOC draw 150,000, less owner contribution 40,000,
   less sales tax 210,000  =  adjusted cash receipts 3,680,000
   expected receipts = revenue 4,100,000 less increase in AR 90,000 = 4,010,000
   residual = 4,010,000 less 3,680,000 = 330,000, which is 8.0 percent of revenue.
   That BREACHES the 2 percent band. Your run must STOP here and print the largest unmatched items,
   NOT publish an adjusted EBITDA. Say so explicitly.

3. Add back A, legal. Posts in 34 of 36 months. Recurrence test fails. This is a retainer or serial
   claims, not a one time matter. Excluded, 48,000, evidence tier T2 from the GL detail, and the
   seller's schedule is T3 so it never supported a number.

4. Add back B and C and D, owner comp. Working: the owner's W2 is 60,000 and a replacement GM costs
   95,000, so the net add back is NEGATIVE 35,000, not positive 60,000. Health insurance 22,000 and
   auto 14,000 are only add backs if they are not already inside the 60,000 officer comp line. State
   that you cannot tell from the data given and request the payroll register detail. Do not add them.

5. Comp versus distributions. W2 of 60,000 against K-1 distributions of 310,000 means payroll cost
   and payroll tax are understated. This adjustment runs AGAINST the schedule. Name it.

6. The net effect. The seller's schedule totals 144,000 of add backs. Your tested position is:
   48,000 rejected outright, owner comp worth minus 35,000 not plus 60,000, and 36,000 unresolved
   pending the payroll register. State the range, state what closes it, and do NOT produce a single
   adjusted EBITDA figure.

DELIBERATE GAPS. There is no IRS transcript and no lease in the sample. Your run MUST refuse to call
the return tie final without the transcript, and MUST NOT state a related party rent finding either
way. If your run produced an adjusted EBITDA number anyway, the desk is not safe on the real deal.
</task>

<constraints>All six match, say CALIBRATED and list them. Any differ, name the figure, the expected
value, what you produced, and STOP. Do not proceed to prompt 03.</constraints>
Click to copy
<role>QoE senior starting every engagement the same way. Claude Opus 5.</role>

<task>
For each of the last three filed years:
1. Tie Form 1120S line 1a, or 1065 line 1a, or Schedule C line 1, to the GL or QuickBooks P&L top
   line for the SAME fiscal year. Name every reconciling item: returns and allowances on line 1b,
   other income on line 5, intercompany. Never plug a difference.
2. Tie reported pre tax income the same way.
3. Compare the broker's circulated return PDF to the IRS Return Transcript and Wage and Income
   Transcript, obtained via Form 4506-C or Form 8821. Until the transcript agrees, the return copy
   is unsigned and unfiled, and you say so in those words.
4. Confirm the fiscal year on the return header matches the P&L window you compared it to.
</task>

<trap>An unsigned return PDF from a broker's data room is a representation, not a filing, and a seller
can edit it. Only the IRS transcript makes it T1. A tie to an unverified copy proves the bookkeeper and
the tax preparer agree, which was never the question.</trap>

<stop>
If the IRS transcript is absent, complete the return to GL tie and mark the whole tie PROVISIONAL,
T2 at best. Name the document: the IRS Return Transcript for each year, requested on Form 4506-C.
Do not publish a reported revenue figure as verified, and do not proceed to prompt 08.
</stop>

<output_format>Per year: return line, GL line, each reconciling item with its source id, residual,
and PASS or FAIL. Then the transcript comparison with its own PASS, FAIL or NOT OBTAINED.</output_format>
Click to copy
<role>Forensic accountant running the tie every lender's QoE will run. Claude Opus 5, or Claude
Sonnet 5 if extracting across more than roughly 40 statement PDFs.</role>

<task>
Monthly, per operating account, across the TTM plus the prior two fiscal years:

  adjusted cash receipts = total deposits per bank statement
                           less inter account transfers
                           less loan and LOC draws
                           less owner contributions
                           less sales tax collected
                           plus processor fees netted at settlement
                           plus chargebacks and returns
  expected receipts      = recorded revenue less increase in AR less increase in deferred revenue
  residual               = expected receipts less adjusted cash receipts

Show that arithmetic for every month. Named checks:
1. Run on a rolling 13 month window, not calendar months, because card batches settle T+1 or T+2 and
   ACH float runs longer. A December cut manufactures a variance that is not there.
2. Agree the sales tax bridge to the filed state sales and use tax returns, never to a plug.
3. Deposits arrive gross of sales tax and gross of processor fees while revenue is booked net.
   Request the merchant processor monthly statement by name and gross the deposits back up.
4. Every account the business holds is in scope. One missing account makes every transfer look like
   revenue on the receiving side.
</task>

<trap>Deposits and revenue that tie annually while three months breach badly is the normal shape of a
real problem. The offsetting months cancel and the finding is invisible. Grade every month on its own:
a clean annual total over two broken months is a FAIL, not a reconciliation.</trap>

<stop>
Any month whose unexplained residual exceeds {{TOLERANCE_PCT}} percent of that month's revenue: STOP.
Print that month's largest unmatched transactions with file and page. Do not publish an adjusted
EBITDA. If a statement is missing for any account and month in scope, print the month by account grid
with the hole and name the exact statement to request. Do not interpolate a month.
</stop>

<output_format>Exhibit B: Month | Beginning bank balance | Total deposits | Less transfers | Less loan
draws | Less owner contributions | Less sales tax | Add processor fees | Add chargebacks | Adjusted
cash receipts | Recorded revenue | Change in AR | Change in deferred revenue | Expected receipts |
Variance $ | Variance % | Explanation. Then the TTM residual as a percentage.</output_format>
Click to copy
<role>QoE senior who has rejected more add backs than they have accepted. Claude Opus 5.</role>

<task>
For every line on the seller's add back schedule, which is T3 and therefore supports no number:
1. Map it to the named GL account or accounts. A line that cannot be mapped is Excluded.
2. Count the months with a non zero posting in that account across 36 months. Anything posting in
   more than 3 of 36 is not one time, whatever it is called.
3. Trace to the underlying invoice or statement for the largest instance. That is what moves it to
   T1 or T2.
4. Confirm no GL account appears on two different add back lines.
5. State whether the cost actually leaves with the seller. A cost the buyer still pays after close is
   not an add back, regardless of who incurred it.
</task>

<trap>Double counting is the largest source of inflation and it hides in plain sight. Owner comp is
added back, then owner health insurance, then owner auto, while the payroll register already had all
three inside the officer compensation line added back first. Map every line to a GL account, prove no
account is claimed twice, and sum the bridge to the GL, never to the schedule.</trap>

<stop>
If the GL detail for an account is missing, do not test that line from the P&L summary. Mark it NOT
TESTED, name the document (the general ledger detail for that account, 36 months), and leave it in
the Excluded column. An untested add back is excluded, not accepted with a caveat.
</stop>

<output_format>Per line: Ref | Description | GL accounts | months posted of 36 | largest instance and
its source id | evidence tier | Accepted, Excluded or Buyer judgement | why.</output_format>
Click to copy
<role>Deal accountant who prices the replacement, not the removal. Claude Opus 5.</role>

<task>
1. Owner comp. Take W-2 box 1 and box 5, the payroll register, and Form 941 quarterly totals, and tie
   them to 1120S line 7 officer compensation versus line 8 salaries. Then price the REPLACEMENT of
   the role at a sourced market wage from BLS OES for the right SOC code and the right metro area,
   and cite it. The add back is the difference, and it is frequently negative.
2. Comp versus distributions. Compare W-2 wages to Schedule K-1 distributions. Near zero wages with
   large distributions means payroll cost and payroll tax are understated, and that adjustment runs
   AGAINST the schedule.
3. Related party rent. Identify who owns the building. Compare the current lease to the $/sqft comp
   for that submarket, and to what the buyer will actually sign at close, including options.
4. Family on payroll. Split into people doing no work, which is a real add back, and people doing
   real work, which is a hire the buyer must make.
5. Contractors on Form 1099-NEC who work like employees. The misclassification exposure transfers.
</task>

<trap>Below market related party rent reads as a low cost base and gets left alone, or worse, gets
added back. It is the opposite. At close the buyer signs a new lease at market, so the difference is
a permanent EBITDA REDUCTION that the CIM never took. Reduce, do not add back.</trap>

<stop>
If the lease or the ownership of the premises is unknown, do not state a rent finding in either
direction. Name the documents: the current lease and the title or entity search on the premises.
If BLS OES has no clean match for the role and metro, say so and give the range you used with its
source, rather than a single confident number.
</stop>

<output_format>Table per item: adjustment, direction, amount, evidence tier, source id, and the one
document that would move it to T1.</output_format>
Click to copy
<role>Independent reviewer. Claude Opus 5. You did not do the earlier work and you do not trust it.
Return CLEAR or HELD. HELD blocks prompts 08 to 12.</role>

<task>
Re derive independently, from source, without reading the earlier outputs first:
1. Reported revenue and reported pre tax income per completed fiscal year tie to the filed return
   line and to the IRS transcript, with every reconciling item named. If this fails, the bridge stops
   at the reported line and no adjusted EBITDA exists.
2. Every TTM month's proof of cash residual is inside {{TOLERANCE_PCT}} percent, and the full TTM
   residual is inside 1 percent.
3. Every bridge row carries an evidence tier and a source id with a page. Count the rows that do not.
4. No T3 item produced a number anywhere.
5. No GL account appears on two add back lines.
6. If AR sits in the working capital peg, the bridge recognises revenue on the accrual basis. A cash
   basis EBITDA with an accrual peg counts the same receivable twice.
7. Count the NOT TESTED cells across all exhibits and state it as a fraction of total cells.
</task>

<trap>The most persuasive failure mode is the argument for why a failed tie does not matter: the
variance is seasonal, the transcript a formality, the residual timing. Constructing that argument IS
the failure.</trap>

<stop>
HELD is not a caveat and it is not a footnote. On HELD, name the failing item, the arithmetic that
failed, the source ids on both sides, and the ONE thing that unblocks it: a named document arriving,
or a named human resolving it. Produce nothing downstream. Do not produce a "preliminary" bridge.
</stop>

<output_format>CLEAR or HELD, the seven checks with PASS or FAIL and the numbers, and on HELD the
unblocking item.</output_format>
Click to copy
<role>QoE senior writing the exhibit. Claude Opus 5. Runs only on CLEAR.</role>

<task>
Open on reported net income PER THE FILED RETURN, not per the CIM, and reconcile down. Subtotals in
this order: Reported net income, then EBITDA, then Adjusted EBITDA, then Adjusted EBITDA excluding
every T3 supported item. That last line is the defensible floor and it is the number to negotiate
from.

Show the arithmetic for each subtotal so I can re derive it by hand.

Also test, and each is its own row:
- Deferred revenue, customer deposits and prepaid annual plans on cash basis books hit revenue on
  receipt. Recompute on a delivery basis and show the swing.
- Inventory build or drain on tax basis books lands in COGS and swings EBITDA with no cash meaning.
- Near zero capex for three years on five to seven year life assets. Compare Form 4562 and the
  depreciation schedule to equipment purchases visible in the bank statements. Reported EBITDA is
  borrowing from a bill the buyer pays in year one.
- Equipment leases added back as rent. That is debt wearing a costume, and it belongs in debt service.
</task>

<trap>A record final year is very often billing timing on two large jobs, not performance. For any
contractor or installer, pull the job cost or WIP schedule and test billings against cost to date times
contract margin before accepting the TTM as the run rate.</trap>

<stop>If the return to transcript tie in prompt 03 was PROVISIONAL, publish the bridge only down to
the Reported net income line and stop there. Name the transcript as the blocker.</stop>

<output_format>Exhibit A: Ref | Adjustment | GL accounts | FY-2 $ | FY-1 $ | TTM $ | Type | Evidence
tier | Source document and page | Recurrence months of 36 | Accepted, Excluded or Buyer judgement |
Note. Then the four subtotals with their arithmetic.</output_format>
Click to copy
<role>Credit analyst at the lender, reading this for risk. Claude Opus 5.</role>

<task>
From the sales by customer detail and the AR aging:
1. Collapse DBAs, trade names and remit to entities into one parent. Print the proposed merges and
   have me confirm them in writing before you apply any.
2. Report top 1, top 5 and top 10 as a percentage of TTM revenue AND of TTM gross profit. Report both
   for FY-1 and FY-2 too, so a trend is visible.
3. For the top ten: is there a signed contract, what is the auto renew or expiry date, is there a
   termination for convenience clause, and is there an assignment or change of control clause.
4. Is the relationship contracted with the entity, or personally with the seller.
5. AR over 90 days by customer, traced to subsequent cash in the next 90 days of bank statements.
</task>

<trap>Concentration in gross profit is routinely worse than in revenue, because the largest customer
is usually the one who negotiated the price down. Revenue share alone understates the risk, and it is
the number the CIM will have chosen.</trap>

<stop>If the sales by customer detail is absent, do not infer concentration from the AR aging alone.
The aging shows who owes money now, not who buys. Name the document: sales by customer for the TTM
and the two prior fiscal years.</stop>

<output_format>Exhibit C per the column list, then the aliases you merged and who confirmed them.
</output_format>
Click to copy
<role>Deal accountant who has argued a true up. Claude Opus 5.</role>

<task>
1. Build the monthly NWC series, 24 months if available and 12 minimum:
   AR + inventory + prepaid + other current assets, less AP, less accrued liabilities, less deferred
   revenue and customer deposits, less other current liabilities.
   EXCLUDE cash. EXCLUDE debt and debt like items. EXCLUDE every related party and shareholder
   balance, because those leave at close. List the excluded balances explicitly.
2. Apply the same normalisations used in the bridge, or the peg and the bridge disagree by
   construction.
3. Peg = the TTM average of the normalised monthly series. Then test seasonality: the three month
   average over {{CLOSE_WINDOW}} against the TTM average. A material gap is a negotiating item.
4. Read the APA and confirm it actually DEFINES: the peg number, the accounting principles used to
   compute closing NWC, the estimate delivered at close, the post close true up window, whether the
   adjustment is dollar for dollar or inside a collar, the dispute window, and the neutral accountant.
</task>

<trap>Small SBA purchase agreements routinely say the business will be delivered "with a normal level
of working capital" and define nothing else. That sentence IS the finding. It means the number is
decided after close by whoever argues better, and it is the cheapest thing in the deal to fix while
you still have exclusivity.</trap>

<stop>If the APA draft is not in the folder, build the peg schedule and STOP before the true up
section. Name the document. Do not describe a mechanism the agreement may not contain.</stop>

<output_format>Exhibit D per the column list, with footer rows: TTM average equals proposed peg,
seasonal high month, seasonal low month, peak to trough swing, and the true up exposure if closing
lands in the high or the low month.</output_format>
Click to copy
<role>Writing to yourself in two weeks, when you have to decide. Claude Opus 5. Runs only on CLEAR.</role>

<task>
1. The memo, two to four pages, every finding citing an exhibit row.
2. Rebuild the DSCR on ADJUSTED earnings from the bridge, against the actual proposed debt service:
   the 7(a) note plus any seller note. A seller note counts toward the equity injection only if it is
   on full standby for the life of the SBA loan, meaning no principal and no interest, AND it may not
   exceed half of the SBA required injection. Reported for SOP 50 10 8, effective 1 June 2025, by
   counsel commentary rather than read from the SOP text, so confirm both conditions against the SOP
   before you rely on them. Run the DSCR BOTH ways, standby and serviced, and show both.
3. Sources and uses sanity: after the peg true up could go against me, do I still have operating cash
   on day one.
</task>

<trap>Pricing a finding at its EBITDA impact understates it. A 40,000 reduction cuts the price by
40,000 times the multiple. State both columns: the first is accounting, the second is money.</trap>

<stop>Do not state a DSCR if the proposed debt service terms are unknown. Ask once for the term sheet
or the lender's proposed amortisation, then stop.</stop>

<output_format>Exhibit E: Finding # | Description | $ impact on adjusted EBITDA | $ impact on price at
{{MULTIPLE}} | Evidence tier | Confidence | Recommended action (Renegotiate, Escrow, Rep and warranty,
Peg adjustment, Walk, No action) | Owner | Open question. Then both DSCR runs.</output_format>
Click to copy
<role>Running the request list against a ticking exclusivity clock. Claude Opus 5.</role>

<task>Convert every NOT TESTED cell, every Excluded add back and every T3 item into a numbered
document request. Each names the exact artifact, who holds it, why it matters in one line, the dollar
exposure if it goes the wrong way, and the date you need it by to close inside exclusivity. Sort by
dollar exposure, not by how easy it is to ask for. Do not ask for Form 1920: SBA retired it on
1 August 2023. Form 1919 is the live borrower form.</task>

<trap>A polite wish list gets answered slowly and partially. The dollar exposure on each line is what
makes a broker chase it.</trap>

<stop>Do not close an open item because the seller explained it verbally. A verbal is T3 and T3 never
produces a number. The item stays open until the artifact arrives.</stop>

<output_format># | Document | Holder | Why it matters | $ exposure | Needed by | Status.</output_format>
Click to copy
<role>Data engineer seat. Claude Sonnet 5 is acceptable, this is mechanical file generation. Run in
Claude Code at {{DEAL_DIR}}. If you only ever run one deal in chat, stop at prompt 12.</role>

<task>
Create this tree at {{DEAL_DIR}}. Write every file with real content. Do not summarise the plan back.
Print ls -R, then run pytest --collect-only -q and print it.

  {{DEAL_DIR}}/
    README.md             what it does, the run order, the pass condition
    requirements.txt      the pinned lines below
    deal/                 source documents land here untouched
    work/                 manifest.csv, transactions.csv, returns.yml
    exhibits/             A bridge, B proof of cash, C concentration, D peg, E memo
    src/manifest.py       classify every file: bank, return, GL, aging, payroll, broker, legal.
                          Records path, type, ENTITY tag, period, page count, text layer present Y/N
    src/coverage.py       month by account grid. Any hole halts and prints the statement to request
    src/parse_bank.py     statement to transactions. Per statement, opening + credits - debits must
                          equal the printed closing balance, to the CENT, or the statement is
                          quarantined. Never the run
    src/classify.py       deposit classifier: transfer, loan draw, owner contribution, customer
                          receipt, unclassified. Rule based, with an explicit unclassified bucket
    src/gl.py             GL and P&L ingest, monthly revenue and expense by account
    src/returns.py        the HUMAN keys 1120S line 1a and the income line into returns.yml while the
                          extracted page image is shown beside it. No auto accept, ever
    src/proof_of_cash.py  Exhibit B and the variance table
    src/money.py          integer cents, parenthesis negatives, sign normalisation per bank template
    tests/                one test file per src module

requirements.txt, all real packages, verify each on PyPI before pinning a version:
  pandas        tabular work
  pdfplumber    PDF text and table extraction, and text layer detection
  camelot-py    PDF tables when the statement has ruling lines
  ocrmypdf      force an OCR text layer onto scanned statements
  openpyxl      read the add back xlsx, write the exhibit workbook
  rapidfuzz     customer name de aliasing candidates
  pyyaml        returns.yml
  pytest        the test runner
</task>

<trap>Money is integer cents, never float. Cent level drift accumulates across 36 months and the
annual tie fails by a few dollars, which reads as a real finding and is not. State the balance check
tolerance in CENTS, not in percent.</trap>

<stop>If a package name above does not resolve on PyPI, stop and name it. Do not substitute a similar
package and do not invent a version.</stop>

<output_format>ls -R, then the pytest collection output.</output_format>
Click to copy
<role>Engineer who writes the check before the code. Claude Opus 5.</role>

<task>
For money, manifest, parse_bank, classify and coverage, in that order: write the failing test FIRST
in tests/, run pytest and show it failing for the right reason, then write the implementation, then
show it passing. Do not write the implementation before showing me the failing run.

The tests that must exist, because these are the failures that actually happen:
  money      "(1,234.56)" and "1,234.56-" both parse to minus 123456 cents
  money      a float never appears in a stored amount
  parse_bank opening + credits - debits equals the statement's printed closing balance, to the cent
  parse_bank a statement failing that check is QUARANTINED, and the run continues on the others
  parse_bank the statement PERIOD is read from the header, and transactions bucket to calendar months
             by transaction date, not by which file they came from
  manifest   a file with no text layer is flagged, never parsed to an empty zero row
  manifest   two files whose periods overlap for one account raise a conflict, they do not both load
  manifest   summing across two entity tags raises unless consolidate is explicitly true
  classify   same amount opposite sign within 3 days across two accounts tags BOTH as transfers
  coverage   one missing account month halts and prints the exact statement to request
  returns    a keyed figure is never auto accepted from extraction
</task>

<trap>Scanned statements with no text layer return empty strings, the month totals come out zero, and
the proof of cash looks like a catastrophic revenue shortfall that is really a parsing failure.
Detect the text layer in manifest.py, route those files through ocrmypdf --force-ocr, and never let
an empty parse produce a zero row. Write that test.</trap>

<stop>If a test passes on its first run before the implementation exists, the test is wrong. Say so
and rewrite it. A test that cannot fail is not a test.</stop>

<output_format>Per module: the failing run, the implementation, the passing run.</output_format>
Click to copy
<role>Claude Opus 5. This is the milestone. There is no partial.</role>

<task>
Run the pipeline on the real deal folder for the TTM.

PASS, all four must hold:
1. Every account and every month in scope has a statement. The coverage grid has no holes.
2. Every statement's balance check ties to the cent.
3. Every TTM month's unexplained proof of cash residual is under {{TOLERANCE_PCT}} percent of that
   month's revenue, AND the full TTM residual is under 1 percent. Print the monthly table.
4. Unclassified deposits are under 2 percent of total deposits, and the unclassified list is printed
   in full for me to review.

FAIL is any of those. On FAIL print which condition, the numbers, and for a residual breach the
largest unmatched transactions for that month with file and page. Then STOP. Do not publish an
adjusted EBITDA and do not annotate the failure and continue.

{{TOLERANCE_PCT}} defaults to 2. That is a stated convention for a cash heavy trade business, not a
published standard, and it should be tightened for a contract billing business. Tell me which this is.
</task>

<trap>Two errors that cancel will pass a balance check. A debit imported as a positive and a credit
imported as a positive can net to the right closing balance while every classification downstream is
wrong. Assert the absolute sum of each column against the statement's own printed column totals, not
only the closing balance.</trap>

<stop>If any account's statements are missing for any month in scope, do not run. Print the coverage
grid and the list of statements to request. An adjusted EBITDA built on an interpolated month is
worse than no number.</stop>

<output_format>The four conditions with PASS or FAIL and the numbers behind each.</output_format>
Click to copy
<role>Claude Opus 5.</role>

<task>
| Symptom | Cause | Fix |
|---|---|---|
| A whole bank's months total zero | scanned statements, no text layer | detect in manifest.py, route through ocrmypdf --force-ocr, never accept an empty parse |
| A single charge is out by a factor of ten | OCR digit swap, 8 for 3 or 5 for 6 | the per statement balance check is the detector. Quarantine that statement, do not round past it |
| Monthly revenue is offset by two weeks | statements cut on the 17th, not month end | read the period from the statement header, bucket by transaction date |
| Deposits are double and revenue looks short | the same month sits in Feb.pdf and in Q1.pdf | de duplicate on account, date, amount and normalised description, and refuse two overlapping files for one account |
| Transfers show up as revenue on both sides | one account was missing from the account list | build the account list first, then match opposite sign pairs within 3 days across accounts |
| The annual tie fails by a few dollars | float rounding across 36 months | integer cents everywhere, round only at presentation |
| Gross revenue never ties, always short by a few percent | card deposits arrive net of processor fees | request the merchant processor monthly statement, gross the deposits back up, book the fee to expense |
| Two entities silently consolidated | the real estate LLC sits in the same folder | entity tag is mandatory, and summing across tags raises unless consolidate is true |
| A phantom variance against the return | the return covers Jul to Jun, the P&L is Jan to Dec | read the period from the return header into returns.yml and align windows first |
| An exhibit looks complete but nothing supports a cell | the model filled a gap to be helpful | every cell carries a source reference, a cell without one renders NOT TESTED, and the summary counts them |

DEFINITION OF DONE. One command runs the TTM, prompt 15's four conditions hold, every exhibit cell
carries a source id or reads NOT TESTED, and a re run is byte identical.

WHAT TO BUILD NEXT, in order:
1. The add back recurrence counter straight off the GL, so prompt 05 stops being manual.
2. The NWC monthly series and the peg, which is the same ingest with different arithmetic.
3. The second deal, which is where the manifest classifier earns its keep.
</task>

<trap>The tempting next build is a nicer memo template. Do not. You write the memo once per deal. The
recurrence counter is what makes the next deal take a day instead of a week.</trap>

<stop>If your symptom is not in the table, do not guess. Print the full traceback and the first 20
rows of the offending file, and work from evidence.</stop>

<output_format>The symptom matched, the fix applied, the re run result.</output_format>

From a working build to an operating system.

For SBA buyers under LOI and PE deal teams: 13 Claude prompts that rebuild EBITDA from the tax returns, the bank statements and the general ledger instead of the broker recast, interrogate every add back, tie revenue to cash received, recast the working capital peg, and write the findings memo the lender reads with every figure traced to its document.

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 vault is about 60% of the build, a second read on a static data room. We wire the last 40% into production in your own environment, your deal data never leaves the building: live data-room and accounting-system wiring, role-based permissions, an audit trail your lender and QoE provider will accept, and multi-entity scale. Then we prove it on a deal you already know. Reply "wire it" for a 30-minute slot.

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. This is a diligence support tool, not an audit, an attestation, or investment advice; it does not replace your QoE provider or the buyer's judgment. Your deal data stays in your own Claude tenant; we never see it. A named human signs every rebuilt EBITDA number before it reaches the purchase price.

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 Quality of Earnings Second Read?

Quality of Earnings Second Read is a finance and data build in the consultance.ai AI Build Library. For SBA buyers under LOI and PE deal teams: 13 Claude prompts that rebuild EBITDA from the tax returns, the bank statements and the general ledger instead of the broker recast, interrogate every add back, tie revenue to cash received, recast the working capital peg, and write the findings memo the lender reads with every figure traced to its document. It fits Small business buyers under LOI with SBA financing who have no analyst and no CFO, plus PE deal teams, corporate development, IC members, CFOs and controllers who want a tireless second read on the add backs before the number reaches the lender or the price. Setup difficulty is Medium, with 4 plain-English steps.

What does Quality of Earnings Second Read do?

For SBA buyers under LOI and PE deal teams: 13 Claude prompts that rebuild EBITDA from the tax returns, the bank statements and the general ledger instead of the broker recast, interrogate every add back, tie revenue to cash received, recast the working capital peg, and write the findings memo the lender reads with every figure traced to its document.

Who is Quality of Earnings Second Read for?

It fits Small business buyers under LOI with SBA financing who have no analyst and no CFO, plus PE deal teams, corporate development, IC members, CFOs and controllers who want a tireless second read on the add backs before the number reaches the lender or the price.

How hard is Quality of Earnings Second Read to set up?

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

How would consultance.ai build this out?

The vault is about 60% of the build, a second read on a static data room. We wire the last 40% into production in your own environment, your deal data never leaves the building: live data-room and accounting-system wiring, role-based permissions, an audit trail your lender and QoE provider will accept, and multi-entity scale. Then we prove it on a deal you already know. Reply "wire it" for a 30-minute slot.

What are the licensing terms?

Prompt set authored by consultance.ai. This is a diligence support tool, not an audit, an attestation, or investment advice; it does not replace your QoE provider or the buyer's judgment. Your deal data stays in your own Claude tenant; we never see it. A named human signs every rebuilt EBITDA number before it reaches the purchase price.

Connect this build to your workflow.

Discuss how Quality of Earnings Second Read 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