River
Y CombinatorBacked by Y Combinator
FREE TEMPLATE

Investor Due Diligence Checklist Template

Three documents and three sheets that count coverage on the files in the room rather than on the rows of your own checklist.

Free download  ·  No account needed

Diligence Plan

[Target] — Data Room Review Plan

Room open [date] to [date]. Coverage is reported on two denominators, and the plan is scoped against reading capacity rather than against the length of the request list.

What complete means here

Two numbers, both defined before the room opens. Line coverage is request lines ticked over lines asked. Document coverage is files with a named reviewer and a review date over files in the room. They diverge, and the gap is itself the finding.

Workstreams, owners and load

WorkstreamOwnerFilesRequest linesRead hours
Commercial
Financial
Legal and corporate
Technology
People

Reading capacity, stated rather than assumed

Hours available against hours of reading sitting in the room. Where the second exceeds the first, the plan names which workstream goes unread instead of discovering it in the third week.

Escalation

What severity reaches the deal lead the same day, and what waits for the findings report.

Four hundred and twelve files in the room, against a request list of 128 lines. Three withdrawn, 125 scored, 111 ticked, so the dashboard reads 89 per cent complete. Count the room instead and 313 files carry a named reviewer and a date, which is 76 per cent. Seventy-one files satisfy no request line at all, so no owner was ever assigned to them. Ten of the deal's twelve findings came off those seventy-one, including both critical ones.

Every checklist in circulation computes its percentage from its own rows. A line ticks when anything lands under it, and one row can stand for many files: 2.7 per scored line here, 3.8 in the commercial workstream. So the tick records that somebody opened the folder. Sixteen of the 111 ticked lines received part of what they asked for, two years of three, one contractor review of seven, which is how 30 open requests report as 14.

The join nobody runs is the reverse one: which line does this file answer, and if none, whose job was it. PCAOB AS 1215 already requires audit documentation to record who performed the work and who reviewed it, file by file. Diligence borrowed the checklist and dropped that granularity. Under Rule 502(b) a buyer may obtain any additional information the issuer can produce without unreasonable effort, so an ask naming a file beats one naming a category.

Ravensthorpe Systems: the checklist read 89 per cent on the day a fifth of the room was unread

Coverage on both denominators, the register that produces them, what is still open, and where the findings came from.

Coverage, on both denominators

Illustrative, for a fictional freight-forwarding software target. Room open 6 April to 18 May 2026, 31 working days. Line coverage is ticked lines over 125 scored. Document coverage is files with a named reviewer and a date over files in the room.

DateDayFilesLines tickedLine coverageFiles readDocument coverageUnread
6 Apr11995443%116%188
21 Apr122607459%13953%121
1 May203058669%21972%86
11 May263058669%25383%52
12 May2741211189%26464%148
18 May3141211189%31376%99

Read the 11 May and 12 May rows together. One upload of 107 files took line coverage up 20 points and document coverage down 19, in a single day, four working days before signing. The two numbers move in opposite directions on every delivery, and a dashboard carrying only the first one reports the upload as progress.

WorkstreamLinesLine coverageFilesDocument coverageGapFiles with no lineFiles per line
Commercial and customers1794%9658%36313.8
Financial2291%7177%1492.8
Contracts and suppliers1292%4680%1273.2
Tax1377%3367%1032.3
Technology and IP1283%3479%462.3
Corporate and governance1392%3889%342.6
Data protection and security1191%2588%322.1
People and employment1587%5285%282.9
Insurance and claims1090%1794%-411.6
Total12589%41276%13712.7

Commercial and customers is the best-covered workstream on the checklist and the worst in the room. It is also where both critical findings were. And there is a ceiling in the last column but one: with 71 of 412 files on no line, document coverage cannot pass 83 per cent however many hours the team works, because those files have no owner to assign the reading to.

Document Register

One row per file, 412 rows. The reviewer and the review date sit on the file, never on the request line. Status has three values and no fourth: reviewed means a named person and a date.

FileWorkstreamFile nameUploadedRequest lineSatisfiesReviewerReviewedStatus
F0110CommercialCustomer contract - Halbeath Freight.pdf6 AprTop 20 customer contractsFullyAssociate 18 AprReviewed
F0175CommercialAmendment 1 - Halbeath Freight.pdf6 AprNONENo line asks for thisUnassigned
F0176CommercialAmendment 2 - Halbeath Freight.pdf6 AprNONENo line asks for thisUnassigned
F0177CommercialAmendment 3 - Halbeath Freight.pdf6 AprNONENo line asks for thisUnassigned
F0038FinancialAudited accounts FY2025.pdf6 AprAudited accounts, 3 yearsPartlyPrincipal8 AprReviewed
F0039FinancialAudited accounts FY2024.pdf6 AprAudited accounts, 3 yearsPartlyPrincipal9 AprReviewed
F0100FinancialDraft restated schedule 1.xlsx6 AprNONENo line asks for thisUnassigned
F0170CommercialService level schedule 1.pdf12 MayService level commitmentsFullyAssociate 1Assigned, unread
F0172CommercialCustomer complaint log.xlsx12 MayCustomer complaint logFullyAssociate 1Assigned, unread
ROOM9 workstreams412 files199 / 61 / 45 / 107125 scored lines16 partly5 people313 dated313 / 28 / 71

F0177 is the whole argument. It grants Halbeath Freight, 14.1 per cent of the 8.94m ARR, the right to terminate on a change of control at 30 days' notice. At a 78 per cent gross margin that is 983,221 of contribution against 2,640,000 of adjusted EBITDA, so 37 per cent of earnings and 10.8m of price at 11 times. It was uploaded on the first morning and it was still unassigned on the last day, because no request line asks for amendments.

Outstanding Request Tracker

Regenerated from the register rather than maintained by hand, so a line that received part of what it asked for stops reading as closed. Thirty requests are open. A checklist shows fourteen.

RequestWorkstreamRequest lineStateWhat is still missingWhat arrivedTicked?Days openChased
R008CommercialChange of control provisionsNothing deliveredConfirmation the amendments and side letters in the room are the complete setNothingNo423
R004FinancialDeferred revenue scheduleNothing deliveredThe schedule, monthly, for 24 monthsNothingNo423
R026TaxTax provision workingsNothing deliveredThe workings behind the balance sheet provisionNothingNo423
R006FinancialAudited accounts, 3 yearsPartly satisfiedFY2023 audited accountsFY2025 and FY2024Yes271
R029TaxEmployment tax status reviewPartly satisfiedStatus reviews for the other six contractorsOne of sevenYes271
R022ContractsGuarantees and indemnitiesPartly satisfiedThe two parent guarantees referenced in the leasesOne guaranteeYes271
R015TechnologyPatent portfolioWithdrawnNothing filed or pendingConfirmed 9 AprNot scored00
TOTAL9 workstreams128 lines issued14 / 16 / 330 openA checklist reports 14 open42 max3 max

R008 is worse than a missing document. The line asks for change of control provisions across the top 20 contracts, amendments included. It received nothing, was chased three times and stood 42 days open, while 17 amendments, 8 side letters and 6 order-form addenda sat in the room satisfying no line. One of them was the answer. Run the reverse join before the chaser and the ask becomes a confirmation, which comes back in a day.

Finding Register

Every row carries the file it came from. The column that pays for itself across deals is the third one: how each finding surfaced. Ten of twelve came off a file no request line asked for.

IDSeverityFindingHow it surfacedDeal implicationAction
D001CriticalLargest customer may terminate on change of control at 30 days' noticeUnassigned file14.1% of ARR, 983,221 of contribution, 10.8m of price at 11xPrice, escrow or a consent condition
D002CriticalThe change of control line was chased three times while the answer sat in the roomReverse join31 amendments and side letters match no line and were never assignedClose the request from the room, then verify
D003HighEight side letters vary the standard terms and none appears in the contract scheduleUnassigned fileStandard terms do not govern 8 of the top 20 customersDisclosure schedule and warranty
D004HighDeferred revenue schedule never delivered, so the revenue bridge cannot be tiedNothing deliveredBlocks the quality of earnings tie outCondition to signing
D005HighNine restated schedules are in the room and reconcile to no delivered accountsUnassigned fileTwo prior years appear restated with no explanationReopen financial diligence
D007HighSix contractor commit logs are in the room with no matching IP assignmentUnassigned fileOwnership of contributed code unresolvedCondition to signing
D010MediumSeven supplier termination letters are in the room and no line asks for themUnassigned fileTwo carriers gave notice inside the diligence windowRe-forecast
D012LowA lapsed policy note is in the room and no line asks for lapsed coverUnassigned fileTwelve week gap in product liability cover during 2024Note in the report
ALL2 / 4 / 4 / 112 findings across 9 workstreams10 off an unassigned file1 priced, 3 quantified, 8 structural3 conditions to signing

Eighty-three per cent of the findings came from the 17 per cent of the room that no request line covered. That ratio is the argument for running the reverse join first rather than last, and it is not available to any artifact whose denominator is its own row count.

What is in the pack

01

Document Register

One row per file rather than per request line, carrying the reviewer and the review date on the file, plus the line each file answers or NONE where no line does

02

Outstanding Request Tracker

Regenerated from the register, separating a line that received nothing from a line that received part of what it asked for and therefore already ticked

03

Finding Register

A source file ID on every row and a column recording how each finding surfaced, which after a few deals shows where a firm's findings actually come from

04

Diligence Plan

Defines complete as full delivery plus a named reader, and states reading capacity per person per day so a late tranche can be measured on the day it lands

05

Findings Report

Leads with both coverage numbers and the ceiling the request list imposes on the second one, then the workstream where the two diverge most

06

Information Request List

Asks for the missing part in the seller's own vocabulary, so FY2023 audited accounts rather than audited accounts when two of three years are already in

07

The chase sweep

Runs twice a week against the live room for a request being chased that the room already answers, and for a tranche bigger than the reading time left

How it works

  1. 1

    Register the room

    One row per file, with the upload date taken from the room rather than from today. A file index or folder export is enough to start.

  2. 2

    Join it both ways

    Forward for each request line, reverse for each file. A file that answers no line gets NONE, never the nearest plausible line to tidy the sheet.

  3. 3

    Read the room first

    Before any chaser goes out, look for the undelivered documents among the files nobody owns. The ask then becomes a confirmation rather than a demand.

  4. 4

    Report both numbers

    Ticked lines and read files, side by side, never averaged, with the ceiling stated and the divergence broken out by workstream.

Frequently asked questions

How is this different from the checklist we already use?

One number instead of two. Yours divides ticked rows by total rows, which is a statement about your list. This also divides read files by files in the room, which is a statement about the room. Screening inbound before a room exists is separate, and the deal screening pack does that.

What actually ends up as a file that answers no request line?

It clusters, and the clusters are predictable. Amendments where the line asked for contracts. Side letters where it asked for standard terms. Drafts and restatements where it asked for finals. Notes and logs where it asked for a register. Each cluster is a request line somebody should have written.

Our request list is inherited and far too long. Does it need rewriting first?

No, and rewriting it first is the usual reason this never gets done. Organise it into workstreams, count the lines, and start the register. The unmapped file count tells you which lines are missing far more reliably than reading the list through would.

Does this replace the data room provider's index and Q and A?

No, it joins to them. The provider knows what is in the room and who opened what. It does not know which request line a file answers, whether that line is fully satisfied, or which files answer nothing. The register is that join and nothing else holds it.

Is reading four hundred documents in five weeks realistic?

The plan states a rate per person per day and the arithmetic follows from it. What is not realistic is the last tranche: 107 files landed with four working days left against capacity of about 54. Reading one document closely is its own job, which pitch deck analysis covers.

Why keep the withdrawn request lines instead of deleting them?

So the totals still reconcile. Here 125 scored lines plus three withdrawn equals the 128 issued, and each withdrawal carries the basis and the date. A withdrawn line that has been deleted is indistinguishable from one that was quietly answered, months later when somebody asks.

Does it decide anything about the deal?

No. It records what is in the room, who read it, and what is missing, and does not value the target. Turning statements into an earnings figure is separate work, done by the add-back review; reading whether recurring revenue survives its own termination and notice clauses is another; the investment committee memo is where all three land.

Find out how many files in your room belong to nobody

Send the file index and your request list, however rough. The first pass returns both coverage numbers, the ceiling, and every file that answers no line.

Review my data room