Bidsandtenders APIbidsandtenders.com ↗
Search and discover public bid opportunities across Canada and the USA to find relevant procurement projects for your business. Access real-time tender data from the bids&tenders eProcurement platform to identify and pursue new contract opportunities.
curl -X GET 'https://api.parse.bot/scraper/94f5a0e0-28d3-4ff5-a4e7-dfd2e4953d34/search_bids?page=1&status=Open&keyword=construction&organization=5231' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace bidsandtenders-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: bidsandtenders SDK — bounded, re-runnable; every call capped."""
from parse_apis.bidsandtenders_com_api import BidsAndTenders, BidStatus, ParseError
client = BidsAndTenders()
# Search open bids in BC by organization IDs (Metro Vancouver + City of Surrey)
for bid in client.bids.search(status=BidStatus.OPEN, organization="5231,12412", limit=3):
print(bid.bid_name, bid.organization, bid.closing_date)
# Keyword search across all open bids
bid = client.bids.search(keyword="construction", status=BidStatus.OPEN, limit=1).first()
if bid:
print(bid.bid_name, bid.bid_type, bid.detail_url)
# Handle errors on a search
try:
for b in client.bids.search(keyword="plumbing", limit=2):
print(b.bid_name, b.status)
except ParseError as e:
print(f"error: {e}")
print("exercised: bids.search")
Search open and historical bid opportunities by keyword, status, organization, bid type, and date range. Results are paginated with up to 50 bids per page, ordered by closing date descending. To find bids in a specific province (e.g. BC), pass a comma-separated list of organization IDs for that region.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (1-indexed). Each page returns up to 50 bids. |
| status | string | Filter by bid status. |
| keyword | string | Free-text search against bid name and organization name. |
| bid_type | string | Filter by bid type (e.g. Public, Prequalification, Invitational). |
| publish_to | string | Filter bids published on or before this date, format MM/DD/YYYY. Omit to not filter by end date. |
| organization | string | Comma-separated list of organization IDs to filter results. Organization IDs can be discovered from the platform's organization dropdown (e.g. 5231 for Metro Vancouver, 12416 for City of Abbotsford). |
| publish_from | string | Filter bids published on or after this date, format MM/DD/YYYY. Omit to not filter by start date. |
{
"type": "object",
"fields": {
"bids": "array of bid opportunity objects with bid_name, status, published_date, closing_date, organization, document_fees, bid_type, detail_url",
"page": "current page number",
"total": "total number of matching bids across all pages",
"total_pages": "total number of pages available"
},
"sample": {
"data": {
"bids": [
{
"status": "Open",
"bid_name": "25-767 - Hydrothermal Liquefaction Products Management – Research and Development",
"bid_type": "Public",
"detail_url": "https://metrovancouver.bidsandtenders.ca/Module/Tenders/en/Tender/Detail/0db78897-6f32-4316-88fb-d16685a0de71",
"closing_date": "2028-12-31T22:00:00.0000000Z",
"organization": "Metro Vancouver",
"document_fees": "No",
"published_date": "2025-12-23T00:30:00.0000000Z"
}
],
"page": 1,
"total": 115,
"total_pages": 3
},
"status": "success"
}
}About the Bidsandtenders API
The Bidsandtenders API on Parse exposes 1 endpoint for the publicly available data on bidsandtenders.com. Calls return JSON over HTTPS and are billed per successful response.
Pin a release with the API-Snapshot-Version header so canonical updates don't silently change your contract.