River
Y CombinatorBacked by Y Combinator
FREE TEMPLATE

Government RFP Response Checklist

Forty-one submission rules typed by what happens when each one fails, plus a register that dates every certification against the rule that tests it.

Free download  ·  No account needed

Certification Register, at a glance

Wendover Technical Group, Solicitation 26-R-0431

Register built20 Mar 2026
Rows12, eleven with an expiry date
Current on 20 Mar11 of 11
Failing their own test date5

1. Four dates, not one

Tested onDateRows
Offer14 Apr 20264
Acceptance period ends12 Aug 20261
Award target28 Aug 20262
Performance starts1 Oct 20265

170 days from the earliest test date to the latest. One column of days-remaining cannot answer for all four.

2. The two columns disagree

Worst row against tightest pass

Professional liability expires 8 Sep, tested 1 Oct. 172 days of validity left and 23 days short. Posted representations lapse 22 Apr, tested 14 Apr. 33 days left and clear by 8.

3. The row with no date

The size representation does not expire. Its value moved when the books closed on 31 Jan, so nothing will ever remind anybody. It goes in the declared changes block.

A public solicitation does not test its obligations on the deadline printed on the cover. An offeror has to be registered when the offer is submitted and again at award, months apart. The posted representations it incorporates have to be accurate as of the offer date and no more than twelve months old. Anything the offer promises has to survive the acceptance period, counted in calendar days from the receipt date, and insurance the contract requires is tested when performance starts. On the worked example those dates span 170 days.

So days until a certificate expires and days of slack against the date it is tested on are different columns, and they do not sort the same way. Wendover Technical Group holds twelve rows on one bid. Eleven are current the day the register is built and five have already failed. The worst of them shows 172 days of validity left. The row a renewal reminder would be shouting about, with 33 days, clears its test by eight.

The checklist works the same way. Each of its 41 rows carries the rule that would reject the bid and what happens when it fails. In a negotiated procurement, a clarification is permitted rather than owed. Thirteen rows have no route back. A five-hour window worked in Section L order reaches six of them, and all thirteen in class order. The live bid itself is the RFP response pack, the requirement list behind it is an extraction job, and whether to bid at all is a separate decision.

The date each rule tests, and what failing it costs

The Certification Register, the Submission Requirements Checklist, and the Verification Order sheet.

Certification Register

Sorted by slack against each row's own test date. Days left is kept as context, because it is what a renewal takes.

RowExpiresTested onDays leftSlack
ISO 9001:2015 registration30 Jun 20261 Oct, performance102-93
Professional liability, $5M8 Sep 20261 Oct, performance172-23
Surety commitment24 Jul 202612 Aug, offer open126-19
Offer validity, 120 days12 Aug 202628 Aug, award145-16
Registration, Active19 Aug 202628 Aug, award152-9
Posted representations22 Apr 202614 Apr, offer33+8
SDVOSB certification6 May 202614 Apr, offer47+22
General liability, $2M30 Nov 20261 Oct, performance255+60
Signature authority19 Jun 202614 Apr, offer91+66
Workers' compensation31 Mar 20271 Oct, performance376+181
PE licence, J. Ferreira30 Jun 20271 Oct, performance467+272
Size representation, 541330no expiry14 Apr, offern/anot accurate

Sort the same rows by days left instead. The first three all pass, and the last failure is the eighth row you reach. Professional liability, the worst row here, sits at position eight showing 172 days of validity.

The last row has no date at all. The three-year average of receipts crossed the size standard on 31 Jan 2026. The posted representation still says small, no certificate lapsed, and no reminder will fire.

Eleven rows current today. Five of them already failed.

Submission Requirements Checklist

Nine rows of forty-one. Every row carries the rule, the requirement in the buyer's units, and what happens when it fails.

L posRuleRequirementOursClassMin
2L.4.2Volume I, 40 pages39Fatal34
4L.4.3Times or Arial, 11pt minTimes 11ptDiscretionary9
18L.8.2Template cells unalteredChecksum matchesFatal17
23L.10Subcontracting, 22% target18%Scored28
3052.204-8(d)Changes block, entered or struckOne entryFatal23
3252.204-7(b)(1)Registered at offer and at awardActive to 19 AugFatal13
34L.3.2Signed by the named officerSignedFatal8
35L.11.1One electronic, two hardMatchesDiscretionary5
36L.13Addenda 0001 to 0003 acknowledgedAll threeFatal7

Thirteen fatal, eleven discretionary, seventeen scored. The class comes from the rule rather than from how bad the mistake feels. File size feels serious and is scored. A copy count feels trivial and is a named form defect.

Rows 34, 35 and 36 change class with the procurement method. They are three of five that the sealed-bidding list of form defects names by name. This package is a negotiated procurement, so that list has no application and two of the five are fatal here.

A row with no rule cannot fail, so it will be ticked. Those rows are recorded as unsourced rather than passed.

Verification Order

The whole pass costs 556 minutes. The window between freeze and upload is 300. Same rows, two orderings.

Fatal rowMinSection L orderClass order
Volume I page limit344234
Price on the buyer's template2426458
No price in Volumes I or II20328122
Changes block2344981
Representations currency11460181
Registration at offer and award13473170
Acceptance period6479211
Signature8487198
Amendment acknowledgement7499205

Six of thirteen against thirteen of thirteen. A checklist built from Section L arrives in Section L order, and Section L lists submission mechanics last. Five hours reaches six fatal rows that way and all thirteen the other way, with 89 minutes to spare.

The last four cost 34 minutes between them. Acceptance period, signature, amendment acknowledgement and registration status are last because of where they are printed, not because they are hard.

Rows the plan will not reach are named with their cost, so shipping one unverified is a decision.

What's in the pack

01

Solicitation Date Map

Every date the solicitation sets, traced to the paragraph it came from, with the subtractions that turn two printed numbers into a finding.

02

Certification Register

Twelve rows, each measured against the date its own rule tests, sorted by that slack rather than by how much validity is left.

03

Submission Requirements Checklist

Forty-one rows carrying the rule, the requirement in the buyer's own units, the consequence of failing, the minutes it costs and a verifier.

04

Verification Order

The same rows in Section L order and in class order with cumulative minutes, so shipping one unverified is a decision somebody made.

05

How a Row Gets Typed

Both computations worked through one solicitation end to end: the four test dates, the three consequence classes, and the arithmetic behind each.

06

Submission Rule Standard

The seven fields a row carries before it carries a status, how its class is decided, and the four ways a row gets written so it cannot fail.

07

Declared Changes Note

The entry for a representation that is no longer accurate, written into the block the provision provides and almost every offer leaves empty.

08

Pre-Submission Verification Note

What the person signing is accepting: each declared change, each register row that fails a later date, and every row still open.

How to use it

  1. 1

    Open in River, or take it blank

    Open the pack in River and hand it the solicitation, or download the four Word documents and four CSV sheets and fill them in yourself.

  2. 2

    Send the package and what you hold

    Every attachment, every amendment, every published clarification, plus the registration record, posted representations, certificates, policies, licences and resolutions. Expiry dates are the field that matters.

  3. 3

    Date every row against its own rule

    Registration is tested at the offer and again at award. Anything the offer promises runs to the end of the acceptance period. Contract insurance is tested at performance start.

  4. 4

    Type the rows, then order the pass

    Each submission rule gets a class from what happens when it fails. Then the pass is costed against the real window between freeze and upload, and the rows it misses are named.

Frequently asked questions

Is this template free?

Yes, no account and no card. The download is four Word documents and four CSV sheets. Opening it in River is the optional half: the agent reads the solicitation, dates every register row against its own rule, and types the checklist. Every pack is in the template library, and the single-output jobs live under River's tool index.

What format are the downloaded files?

Four .docx documents and four .csv sheets, no conversion needed. The documents open in Word, Pages and Google Docs; the sheets open in Excel, Numbers and Sheets. The register and the checklist are sheets because both are worked row by row and sorted on a computed column.

Why not just put reminders on the expiry dates?

Because the date that matters is rarely today plus a notice period. Registration is tested at the offer and again at award, months apart, so a reminder set on the expiry fires against the wrong date. In the worked example the worst row has 172 days of validity and the row with 33 days passes.

Does the class of a row ever change?

Yes, and that is why it is recomputed per solicitation. In sealed bidding a short list of form defects carries a cure or a waiver the contracting officer has to allow. That list has no application to a negotiated procurement. Five checklist rows sit on that line, and two of them are fatal here.

What is the declared changes block?

The provision that collects annual representations works by reference and gives you a place to identify the ones that are no longer accurate, by clause, title and date. It is blank on almost every offer. A blank block on a bid with a stale representation is a statement that the record is accurate.

Does this build the compliance matrix too?

No, deliberately. The matrix maps requirements to the sections that answer them and belongs with the response itself. This pack holds only what rejects a package before an evaluator opens it. Departures from the requirements go to the exceptions and risk note instead. Which prior contracts can be nominated against a reference row is its own register.

Verify the rows that end the bid first

Take the Word documents and CSV sheets blank, or open this exact pack in River and have your solicitation's own dates mapped and every certification measured against them.

Edit with AI