Blog / Construction Operations
Track Invitations to Bid and Sub Responses in One Sheet
By Keyona Meeks, Founder, ReRev Labs · Oct 31, 2026 · 9 min read
The short answer: Keep one row per invitation: project, trade, company, contact, date sent and a status of Sent, Viewed, Declined or Bid received. Two formulas do the rest. One counts the days a row has been waiting and flags it for a chase. A second sheet counts invitations, bids and declines per trade and flags any trade with fewer bids than you want. This is tracking only. It does not decide who wins a job, and it does not replace the bidding rules that apply to your project. I tested the formulas in LibreOffice with made-up rows.
By the end of this post, you'll be able to:
- Build a one-sheet record of every invitation to bid you send.
- Flag the invitations that have gone quiet.
- See, trade by trade, whether you have enough bids.
- Know when the record itself matters for compliance.
I sell build work, and I am not a contractor. I have no field experience to offer you, and nothing here is advice on how to bid a job. This post is about the paperwork around invitations: who you asked, when, and what came back. That paperwork is easy to lose, and it is the part a sheet can hold.
This is the general contractor's side: invitations to bid sent to subcontractors and suppliers. It is different from following up on your own bids to an owner.
What does the sheet need to hold?
One row per invitation. A project with six trades and four companies each is twenty-four rows. That feels like a lot until you try to answer "who did we ask for electrical?" from an inbox.
| Column | What goes in it |
|---|---|
| A. Project | Job name or number |
| B. Trade | Concrete, electrical, roofing, and so on. Keep the spelling the same every time |
| C. Company | Who you invited |
| D. Contact | Name and phone or email |
| E. Date sent | The day the invitation went out |
| F. Status | Sent, Viewed, Declined or Bid received |
| G. Response date | When they answered |
| H. Days waiting | A formula, below |
| I. Flag | A formula, below |
| J. Notes | Anything a person needs to remember |
Add a data validation list to column F and column B so the words stay the same. A formula that counts "Bid received" misses "bid recieved."
"Viewed" is something you enter. It only means something if your bid platform or your email tells you a company opened the invitation. I do not claim any platform does this. If yours does not, drop the word.
How do you flag invitations that have gone quiet?
Put a setting in two cells next to the table. In L1 type Chase after (days) and in M1 type 5. Then in H2:
=IF(OR(E2="",F2="Declined",F2="Bid received"),"",TODAY()-E2)
And in I2:
=IF(H2="","",IF(H2>$M$1,"Chase",""))
Fill both down. Declined and answered rows show nothing. A row with no date sent shows nothing. A row still waiting after more than five days shows "Chase." Change the five to whatever your bid timeline allows.
I tested both formulas in LibreOffice with six made-up rows. A row sent ten days ago and still "Sent" showed "Chase." A row sent three days ago did not. A Declined row and a Bid received row showed nothing. I did not test them in Google Sheets, so type a few test rows and check.
A flag is a prompt for a person. It tells you to call. It does not tell you the company is ignoring you.
How do you see which trades need more bids?
Make a second sheet named Trades. List each trade in column A. Put the number of bids you want per trade in a cell, say I1. Then, in row 2:
B2: =COUNTIFS(Invites!$B:$B,A2)
C2: =COUNTIFS(Invites!$B:$B,A2,Invites!$F:$F,"Bid received")
D2: =COUNTIFS(Invites!$B:$B,A2,Invites!$F:$F,"Declined")
E2: =B2-C2-D2
F2: =IF(C2<$I$1,"Need more bids","")
The headings are Trade, Invited, Bids received, Declined, Still waiting and Flag. Fill down. In my test, a trade with three invitations, one bid and no declines showed two still waiting and "Need more bids" when the target was two. The sheet name in the formulas, Invites, must match the name of your first tab.
This is a count. It does not say whether the bids are complete or comparable. That is a separate job.
When does this record matter beyond convenience?
On some public and federally assisted projects, the record of who you solicited can matter. I am not an attorney, and the rules differ by project and by state. I found one official example and checked it.
The U.S. Department of Transportation's rule on disadvantaged business enterprise participation, 49 CFR 26.53, covers what bidders submit when a contract has a goal. I read it on the eCFR as an excerpt on October 30, 2026. It says a bidder can document either that it "has obtained enough DBE participation to meet the goal" or that it "made adequate good faith efforts to meet the goal." When efforts are adequate, the recipient "must not deny award of the contract on the basis that the bidder/offeror failed to meet the goal." Source: 49 CFR 26.53.
The section refers to guidance in Appendix A on what counts as adequate. In the excerpt I read, that guidance lists "soliciting through all reasonable and available means the interest of all certified DBEs," giving "written notices or emails" to firms in the State's directory, and "taking appropriate steps to follow up initial solicitations." Source: Appendix A to Part 26.
The point for a sheet is narrow. If you have to show who you contacted and that you followed up, a dated row per invitation with a response date is the raw material. Whether your project is covered, and what you must submit, depends on your contract documents. Check with an attorney, and read the bid documents.
What stays with a person?
- Deciding who to invite. A sheet cannot judge who is qualified.
- Reading the bids. The count says three arrived. It does not say they cover the same scope.
- Anything required by your bid documents or by law. Follow those, not this sheet.
- The chase itself. Pick up the phone.
Where does an LLM fit in this?
An LLM can help with the messy part: reading a reply email and suggesting which row it belongs to and what status to set, or drafting a short chase message. A person should check the row before it changes and read the message before it goes. The days-waiting count and the per-trade count are plain rules, and they do the same thing every time. My stance: AI writes the code, plain automation runs it, and an LLM shows up only where the input is messy and a person checks the result. For other jobs worth automating next, see what to automate first and the follow-up engine.
How do you test the sheet before you use it?
- Enter six made-up rows across two trades.
- Check that the days-waiting number matches the calendar.
- Change a status to Declined and confirm the flag clears.
- Check each trade count against the rows by hand.
- Delete the test rows and keep the formulas.
Where this has limits
- I did not use this on a live project. The formulas were tested in LibreOffice with made-up rows, not in Google Sheets.
- I am not an attorney, an insurer or a safety professional. Bidding rules differ by project, owner and state. Check with an attorney.
- The DBE rule is one federal example. It applies to certain U.S. Department of Transportation assisted contracts. I did not research state or private rules.
- I read the eCFR pages as excerpts. Check the full text before you rely on a line.
- "Viewed" depends on your tools. I do not claim any platform reports it.
- No ReRev prices and no promises about results.
If you want help turning this into a system that reminds you, see our AI operations service or tell us where your bid list gets stuck. Bring the way you track invitations today. Do not send bid documents, contact lists, passwords or login details.
Frequently asked questions
How do I track invitations to bid in a spreadsheet?
Use one row per invitation, with project, trade, company, contact, date sent and a status. Add a formula that counts the days since you sent it.
How do I know which subs to chase?
Flag rows that are still waiting after a number of days you choose. The sheet shows the flag. A person makes the call.
How do I know if I have enough bids on a trade?
Count the rows marked Bid received for each trade and compare to the number you want.
Does this satisfy good faith effort rules?
I cannot say. It gives you a dated record. Whether it meets a rule on your project depends on your contract. Check with an attorney.
Is this different from bid follow-up?
Yes. This tracks invitations you send to subcontractors. Bid follow-up covers bids you send to an owner.
Does the sheet send emails?
No. It shows flags. Nothing is sent.
Read next: The bid leveling spreadsheet takes over once the bids this tracker chases start arriving.