Skip to content
productmatching

How Cornerstone matches bid opportunities to your capabilities

A plain-language tour of the scoring signals behind every match — trades, geography, size, and posting recency — and the override rules that keep junk opportunities out.

Every morning, Cornerstone pulls the latest postings from the procurement boards you care about — Sasktenders, Alberta Purchasing Connection, BC Bid, MERX, and the municipal feeds — and rates each one against the profile you onboarded. The goal is to save you the "open tab, skim, close tab" cycle for the 90%+ of postings that will never be a fit.

The four scoring signals

A match score is a weighted sum of four independent signals:

  1. Trade alignment — posting trade tags intersected with the trade codes you chose during onboarding. This is the biggest single factor.
  2. Geography — how far the job site is from the service areas you set. Work inside your primary region scores highest; bordering provinces score partial.
  3. Size fit— the posting's estimated value against your typical project range. Too-small and too-large both reduce the score so we don't surface $4M jobs to a $200K crew (or vice versa).
  4. Recency — postings within the first 48 hours of going live get a small lift, because early bids have more time to prepare a competitive proposal.

What gets filtered out entirely

Some postings are rejected before scoring even runs. Expired closing dates, postings already archived by the source board, and anything tagged "consulting-only" or "labour-only" when your profile is for general-contractor work — those are dropped so the list you see is actionable.

Why AI isn't used for matching

Matching is deterministic: two identical postings against two identical profiles always produce the same score. That predictability matters when you're trusting the system to triage dozens of opportunities per day. AI is reserved for the step after — drafting the proposal itself, where creative language is the whole point.

Tuning the matches you see

If you're getting too many matches on trades you don't actually want, the fix is to refine your profile under Settings → Streams. The scoring always honours the most recent profile, so changes take effect on the next scrape.