CivicTechTO / CivicTechTO/toronto-bids
Agencies and corporations: the archive covers City divisions only
- Dominant language
- Python
- Stars
- 7
- Forks
- 2
- PR merge metrics
- No merged PRs in 30d
Description
Umbrella for the largest structural gap in the archive. **Tracking only — the per-body issues are where the work is.**
## The gap
`solicitation` is City **divisions**: Transportation Services (1,127), Toronto Water (712), Parks (681), Engineering, Fleet, Solid Waste. They all procure centrally through PMMD, which is what the `tobids-*` feeds publish.
The City's agencies, boards and corporations **procure independently of that feed and are absent**:
| probe | hits in 7,444 solicitations |
|---|---:|
| TTC / Toronto Transit | 38 / 10 — *mentions* inside City solicitations, not TTC procurement |
| Police | 7 |
| Toronto Community Housing / TCHC | 81 / **0** |
| Parking Authority | **0** |
| Library | 1 |
Not a coverage accident — a different buyer. The City's own `consulting-services-expenditures` dataset splits `CITY / ABC` and puts **325 of 607 2024 rows (54%) under "Agencies and Corporations."**
## The roster (from the City's own pages)
**Agencies:** CreateTO · Exhibition Place · Heritage Toronto · TO Live · Toronto Atmospheric Fund · Toronto Investment Board · Toronto Parking Authority · Toronto Police Service · Toronto Public Health · Toronto Public Library · Toronto Transit Commission · Toronto Zoo · Sankofa Square · Arena Boards · AOCCs · BIAs · TRCA (partnered)
**Corporations:** Build Toronto · Casa Loma · Lakeshore Arena · Toronto Community Housing · Toronto Hydro · Toronto Port Lands Company · Toronto Seniors Housing · Toronto Pan Am Sports Centre · Waterfront Toronto (partnered)
## Where they actually post — verified
| body | platform | what is exposed |
|---|---|---|
| **TTC** | MERX `merx.com/ttc` | open + closed solicitations, **bid results**, awarded solicitations. Non-competitive >$100K posted on ttc.ca separately |
| **Toronto Police Service** | MERX `merx.com/torontopolice` | open + closed solicitations |
| **Toronto Parking Authority** | MERX `merx.com/torontoparkingauthority` | open + closed solicitations |
| **Toronto Community Housing** | Bonfire + Biddingo | opportunities |
| **Waterfront Toronto** | Bonfire `waterfrontoronto.bonfirehub.ca` | opportunities >$100K, plus an **awarded contracts** page |
| **Toronto Zoo** | bids&tenders `torontozoo.bidsandtenders.ca` | bid opportunities |
| **Toronto Public Library** | own site | RFQ / RFP / REI / tender calls |
| Exhibition Place, Toronto Hydro, CreateTO, Build Toronto, Port Lands, TO Live, Casa Loma, Lakeshore Arena, Seniors Housing, Pan Am Centre | **unverified** | see the triage issue |
## The one architectural fact that shapes all of this
**Three of the biggest sit on MERX**, and TRCA and Toronto Zoo both sit on bids&tenders. These are *platforms*, not bespoke sites. A MERX adapter serves TTC + Police + Parking Authority; a bids&tenders adapter serves Zoo (+ TRCA if wanted); a Bonfire adapter serves TCHC + Waterfront Toronto.
**So do not write one scraper per body.** The per-body issues below are scoped as "confirm what this body exposes and feed it to the platform adapter", not "build a scraper".
## Scope discipline
This is a different **buyer**, not a different **feed** for the same buyer. Three questions have to be answered before any of it lands, and they are per-platform, not per-body:
1. **Keyspace.** These have no Ariba `document_number`. TTC solicitations are keyed TTC-internally. That is a fourth keyspace after `document_number`, `workspace_number` and `call_number` — or an argument for a `buyer` column and a composite key. **Decide once, in this issue, before any adapter is written.**
2. **Does the spine's contract still hold?** `solicitation` currently means "a City of Toronto competitive call". Admitting TTC rows changes what `COUNT(*)` means for every existing consumer — exactly the reasoning that kept `composite_award` out of `award` (#96).
3. **Terms of use.** MERX and Biddingo are commercial platforms hosting public-sector notices. Whether an archive may scrape them is a real question and is not answered by the data being public. **Check before writing a fetch.**
## Sources
- https://www.toronto.ca/city-government/accountability-operations-customer-service/city-administration/city-managers-office/agencies-corporations/agencies/
- https://www.toronto.ca/city-government/accountability-operations-customer-service/city-administration/city-managers-office/agencies-corporations/corporations/
- https://www.ttc.ca/doing-business-with-the-ttc/Procurement-and-Category-Management/solicitations-and-results
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with this issue's agency roster, verified platform table, and the linked City and TTC sources; no implementation files or tests are named. Before any adapter work, document the keyspace decision, whether the solicitation contract can include these buyers, and the terms-of-use result for each platform. Done means those platform-level decisions are settled and the per-body issues can be scoped against them.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- data-engineering
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100