Managing bid invitations from PlanHub, BuildingConnected, and Procore
If you bid commercial work, your invitations do not come from your general contractors. They come from PlanHub, BuildingConnected, Procore, SmartBid, Dodge, and a dozen GC-hosted portals — each with its own login, its own notification address, and its own idea of what a project is called. Here is how to get all of it into one list you can actually work from.
Ask an estimator at a mid-sized flooring or specialty sub where their bid invitations live and the honest answer is: in the inbox. Not in a system — in the inbox, alongside supplier quotes, RFIs, submittals, and everything else. The invitations that get bid are the ones that happened to be near the top when someone had time to look.
Why the inbox loses
Three structural problems, none of which are solved by being more organized:
1. The sender is almost never the general contractor
This is the one that breaks every home-grown system. An invitation to bid a Turner project does not arrive from anyone at Turner. It arrives from a relay address — something like `notifications@planhub.com` or a per-thread alias such as `728832@message.planhub.com`. The GC's actual name appears only in the display name or the body of the message.
So any rule built on the sender address — an Outlook rule, a Gmail filter, a spreadsheet column for "who sent this" — files three different GCs' invitations under "PlanHub." Your bid list ends up organized by the platform rather than by the client, which is the opposite of useful: you never bid a platform, you bid a GC, and win rate is only meaningful per GC.
2. The same project arrives three times
A GC posts to PlanHub, invites through BuildingConnected, and copies you directly. An addendum drops and every channel re-notifies. A second estimator at the same GC sends their own invite. You now have five emails about one job, with the project name spelled three different ways: "T.F. Green — Expansion of Parking," "TF Green Parking Expansion," and "Green Airport Pkg Expansion."
Handled by hand, this goes one of two ways: you log it five times and your pipeline value is inflated by 4x, or someone deletes four of them and occasionally deletes the one carrying the addendum.
3. Nothing distinguishes urgent from noise
A bid due Thursday and a courtesy notice for a job in another state look identical in a list of subject lines. The information that would let you triage — due date, square footage, location, whether this GC has ever awarded you anything — is inside the attachments, not in the inbox view.
What a working intake process looks like
- Consolidate to one mailboxEvery platform notification, every direct invite, one destination. Not one per estimator — one shared address the whole desk can see. Invitations sitting in a departed estimator's personal inbox are the single most common cause of a missed bid.
- Resolve the real client on arrivalPull the GC from the display name or the message body and store it as a proper field, separate from the sending address. Store the relay address too — you will need it to reply — but never let it stand in for the client.
- Extract the four fields that drive triageProject name, location, bid due date, and scope/size. Those four decide whether the job is worth a takeoff. Everything else can wait until you have decided to bid.
- De-duplicate before it hits the listMatch incoming invitations against what is already open by project name, address, and client — not by subject line, which changes with every addendum. Merge duplicates into the existing record so the addendum attaches to the job instead of creating a sixth copy of it.
- Make bid/no-bid an explicit decisionEvery invitation gets an outcome: bidding, declined, or duplicate. A declined invite is a real data point — it tells you which GCs are sending you work outside your lane, which is a conversation worth having with them.
- Close the loop on submitted bidsThe intake list is not done when you submit. Read the replies, record awards and regrets against the specific GC, and let the outcome flow back into the record. Otherwise you rebuild your win rate from memory every year.
Should you decline more invitations?
Almost certainly yes. Subs who bid everything have low win rates, exhausted estimators, and no signal about where they are actually competitive. The uncomfortable version of the math: if you bid 200 jobs a year at a 12% hit rate, you did roughly 176 takeoffs that produced nothing. Cutting to 120 well-chosen bids at 20% wins the same amount of work with 80 fewer takeoffs.
You cannot make that call without per-GC history, which is the real argument for structured intake. "We've bid nine jobs for this GC and won none" is a decision. "I feel like we never win with them" is a hunch, and hunches lose to the estimator who wants to be helpful.
Bid boards vs. your own pipeline
Platform bid boards — PlanHub's, BuildingConnected's, ConstructConnect's — are genuinely useful for what they are: a view of the invitations that arrived through that platform. The limit is structural, not a criticism. No platform can show you the invitations that came through a competing platform, or the ones a GC emailed you directly, and none of them hold your pricing history, your scopes, or your outcomes.
| Platform bid board | Your own pipeline | |
|---|---|---|
| Covers invites from | That platform only | Every source, including direct email |
| Who controls the data | The platform | You |
| Holds your pricing history | No | Yes |
| Per-GC win rate across all sources | Partial at best | Yes |
| Survives switching platforms | No | Yes |
The practical answer is both: keep using the boards to receive invitations, and maintain one pipeline of your own that everything lands in. See how IntelBid works alongside PlanHub and BuildingConnected for how that split works in practice.
Automating intake
This is the part of a bid desk that automates best, because the work is genuinely mechanical: read the email, pull out four fields, decide whether it duplicates something already open. IntelBid connects to Gmail or Outlook, reads incoming invitations, resolves the GC from the display name rather than the relay address, extracts project name, location, due date and size with a confidence score, and merges duplicates against your open pipeline before showing you the queue.
What it does not do is decide for you. Every extracted bid lands in a review queue with its confidence score and a link back to the source email — you approve, correct, or reject. Automation earns trust by being auditable, not by being invisible.
Why do bid invitations come from PlanHub or BuildingConnected instead of the general contractor?
Those platforms send invitations on the GC's behalf, so the sending address belongs to the platform's relay, often as a per-thread alias. The general contractor's identity appears in the display name or the message body. Any filing rule based on the sender address will therefore group unrelated GCs together under the platform's name.
How do I stop double-counting the same project from multiple platforms?
Match incoming invitations on project name, address, and client rather than on the email subject line, which changes with every addendum. Merge matches into the existing record so revisions attach to the original job instead of creating new entries.
Do I need a bid management system if I already use PlanHub?
PlanHub shows the invitations that came through PlanHub. It cannot show invites from BuildingConnected, Procore, or a GC's direct email, and it does not hold your pricing history or your outcomes. Most subs keep the platforms for receiving invitations and maintain one pipeline of their own that everything consolidates into.
What information should I capture from every bid invitation?
At minimum: the real general contractor, the project name and location, the bid due date, and the scope or square footage. Those four fields are what a bid/no-bid decision actually turns on. Also record the outcome — awarded, lost, or no response — against the specific GC, since that is what makes win-rate analysis possible later.
Every invitation in one list, automatically
IntelBid reads your Gmail or Outlook, resolves the real GC behind the relay address, and de-duplicates before anything reaches your pipeline. Try it with a sample project first — no inbox connection required.
Start your free trialKeep reading
- How to follow up on construction bids without becoming the annoying subA practical follow-up cadence for subcontractors: when to check in after submitting, what to actually say, and how to tell a slow job from a dead one.
- Bid-hit ratio: how to measure and actually improve your win rateHow to calculate your bid-hit ratio correctly, why per-GC win rate matters more than the overall number, and the four levers that move it.
- Commercial flooring takeoff: a practical estimating guideHow to take off and price a commercial flooring package: waste factors by product, the scope items that get missed, and where flooring bids actually lose money.