Blog · · 5 min read
An RFP compliance matrix is a table that lists every requirement in a request for proposal and shows how your response meets it. Evaluators use it to check that nothing was missed. Bid teams use it to make sure every "shall" got an answer.
Most teams build one under deadline, in a spreadsheet, and throw it away the day the proposal goes out. That is a waste. The matrix is the most complete record of what you promised, and it is exactly what your delivery team will need if you win.
This guide covers how to build one properly, and how to keep it alive after award.
What a compliance matrix is for
A good matrix answers four questions for every requirement:
- What exactly was asked? The requirement in the buyer's words, with a reference to where it appears.
- Can we do it? A clear compliance answer, not a paragraph of hope.
- Where is our answer? The section of the proposal that responds to it.
- What will it take? Who owns it, and whether it needs work you haven't priced yet.
Evaluators mostly care about the first three. Your own team should care most about the fourth, because that's where margin is won or lost.
Step 1: Gather every document before you start
Requirements rarely live in one place. Before extracting anything, collect:
- The main RFP or tender document
- Every addendum and amendment, in order
- Answers to bidder questions, which often add or change requirements
- Attachments: statements of work, technical specifications, service level schedules, security questionnaires, pricing forms
- The draft contract or terms and conditions, if one is included
Addenda are the classic trap. A requirement changed in addendum 3 must replace the original in your matrix, not sit beside it. Note which document and version each requirement came from.
Step 2: Extract every requirement, one per row
Read the documents line by line and pull out each obligation. Look for binding language:
- Mandatory: shall, must, will, is required to
- Desirable or rated: should, may, preferred, is an asset
- Hidden obligations: "the vendor is responsible for", "the solution includes", "at no additional cost"
Split compound sentences. "The system shall support single sign-on and export audit logs monthly" is two requirements with different owners and different effort. If you keep them together, one half tends to get forgotten.
Give each requirement:
- A unique ID, such as
TR-014for the fourteenth technical requirement - A source reference: the document, section and page, for example
RFP §4.2.3, p. 18 - The exact text, copied rather than paraphrased
Copying the exact wording matters more than it seems. Months later, when someone asks whether a feature was in scope, the original sentence is the only thing that settles it.
Step 3: Choose honest compliance answers
Avoid a simple yes or no column. It pushes people to write "yes" and explain the caveats in a paragraph no one reads. Use a short, fixed set of answers instead:
| Answer | Meaning |
|---|---|
| Comply | Delivered today by the standard product or service |
| Comply with configuration | Delivered by setup, with no new development |
| Comply with integration | Depends on connecting to another system |
| Partial | Some of it is met today. Say which part is not |
| Custom | Needs new work that must be estimated and priced |
| Exception | You cannot or will not meet it, with the reason |
Two rules keep this honest. First, the person who answers must be able to deliver it, or must have asked someone who can. Second, every "Custom" or "Partial" answer needs an estimate before the price is final. Those rows are where unpriced work comes from.
Step 4: Add the columns that make it useful
A practical matrix has these columns:
| Column | Example |
|---|---|
| ID | TR-014 |
| Source | RFP §4.2.3, p. 18 (as amended by Addendum 2) |
| Requirement text | The solution shall export audit logs in CSV format. |
| Type | Mandatory |
| Compliance answer | Custom |
| Response reference | Proposal Vol. 2, §3.4 |
| Owner | Product lead |
| Effort estimate | 40 hours, engineering |
| Notes | Needs confirmation of export frequency |
Keep the response reference current as the proposal changes. Evaluators notice when a matrix points to the wrong section, and it suggests the rest of the bid was rushed.
Step 5: Review it like a contract, because it will become one
Before submission, review the matrix with the people who will deliver the work, not only the bid team. Ask three questions:
- Is any "Comply" answer actually a "Custom" in disguise?
- Is every mandatory requirement answered?
- Does the price include the effort behind every "Custom" and "Partial" row?
If you only have time for one review, review the "Comply with configuration" rows. Configuration that takes three weeks is custom work under another name.
Step 6: Keep it after you win
When the contract is signed, the matrix should not go into an archive folder. Hand it to delivery as the starting list of obligations:
- Each requirement gets an owner and a due date
- Custom items become planned work with their original estimate attached
- Anything the customer later asks for that is not in the matrix is, by definition, a change
That last point is the real payoff. A clear, sourced list of what was promised is the best defence against scope creep. We cover that in how to catch and price scope creep on fixed-price contracts.
Common mistakes
- Paraphrasing requirements. Paraphrases drift. Copy the text and cite the source.
- Ignoring the contract terms. Service levels, reporting and audit duties in the terms are requirements too.
- One giant row per section. If it can't have one owner, it is more than one requirement.
- Answering "Comply" by default. An honest "Partial" loses fewer deals than a broken promise loses margin.
- Building it twice. If delivery has to rebuild the list from the PDF after award, the bid matrix wasn't good enough.
Doing this without a spreadsheet
A spreadsheet works for a single bid. It starts to break when you're answering several RFPs a quarter, reusing answers, and trying to connect each requirement to effort and cost. That is the problem we're building Mauby to solve: one list of requirements, tied to the source text, to what the product can do and to what it will cost, carried from the bid into delivery.