Biddingo APIbiddingo.com ↗
Search and retrieve government procurement bids and RFPs from Biddingo. Filter by region, category, and status. Access full tender details via 4 endpoints.
What is the Biddingo API?
The Biddingo API exposes 4 endpoints for searching and retrieving government procurement solicitations across Canada and beyond. Use search_bids to query active tenders by keyword, region, category, or closing date, and get_bid_detail to pull the full tender record — including HTML description, contract type, category codes, and closing date — for any result returned by the search.
curl -X GET 'https://api.parse.bot/scraper/809ca7d5-a675-42ba-b064-66b1287e9bd5/search_bids?sort=postedDate%3Adesc&limit=10&statuses=1&page_number=1' \ -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 biddingo-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: Biddingo SDK — search government procurement bids, filter by region/category, drill into details."""
from parse_apis.biddingo_api import Biddingo, Sort, BidNotFound
client = Biddingo()
# List available regions for filtering
regions = client.regions.list(limit=5)
for region in regions:
print(region.region_name, region.country)
# Search open bids sorted by newest posted date
bid = client.bidsummaries.search(sort=Sort.POSTED_DATE_DESC, limit=1).first()
if bid:
print(bid.tender_name, bid.buyer_name, bid.days_left)
# Drill into full details via the summary→detail navigation
try:
detail = bid.details()
print(detail.tender_number, detail.contract_type, detail.bid_status)
for cat in detail.category_list:
print(cat.category_name, cat.category_code)
except BidNotFound as exc:
print(f"Bid not found: {exc}")
# List categories available for filtering
for cat in client.categories.list(limit=5):
print(cat.category_name, cat.category_id)
print("exercised: regions.list / bidsummaries.search / bid.details / categories.list")Search for active bid/RFP solicitations with various filters. Returns paginated results sorted by the specified field. Each result contains summary information; use get_bid_detail for the full description. Paginates via integer page counter.
| Param | Type | Description |
|---|---|---|
| sort | string | Sort order as field:direction. Accepted values: 'postedDate:desc', 'postedDate:asc', 'closingDate:desc', 'closingDate:asc'. |
| limit | integer | Number of results per page. |
| keyword | string | Search keyword or solicitation number to match against bid titles and descriptions. |
| statuses | string | Bid status ID. '1' for Open for Bidding. |
| region_ids | string | Comma-separated list of region IDs to filter by (IDs from get_regions endpoint, e.g. '1' for Eastern Canada, '3' for Western Canada). |
| page_number | integer | Page number to retrieve (1-based). |
| category_ids | string | Comma-separated list of category IDs to filter by (IDs from get_categories endpoint). |
{
"type": "object",
"fields": {
"bidCount": "integer total number of matching bids",
"bidInfoList": "array of bid summary objects with fields like tenderName, tenderNumber, buyerName, bidStatus, publishedDate, buyerOrgId, biddingoTenderId, buyerSysId, tenderClosingDate, regionName, daysleft"
},
"sample": {
"data": {
"bidCount": 3816,
"bidInfoList": [
{
"daysleft": 18,
"regionId": 1,
"bidStatus": "Open for Bidding",
"buyerName": "Mohawk Medbuy",
"buyerOrgId": 41030408,
"buyerSysId": 1,
"regionName": "Eastern Canada",
"tenderName": "MILR IMMUNOHISTOCHEMISTRY (IHC) EQUIPMENT AND SOLUTIONS 2026 - RFEOI - LHSC",
"contractType": "2",
"tenderNumber": "CW29709",
"publishedDate": "06/10/2026",
"biddingoTenderId": 41511528,
"tenderClosingDate": "2026-06-29 14:00:00.0"
}
],
"regionCountMap": {}
},
"status": "success"
}
}About the Biddingo API
What the API Covers
Biddingo aggregates government procurement opportunities — bids, RFPs, and tenders — from public-sector buyers. The API surfaces this data across four endpoints: search_bids, get_bid_detail, get_regions, and get_categories. Search results include summary fields such as tenderName, tenderNumber, buyerName, bidStatus, publishedDate, buyerOrgId, and biddingoTenderId. These last two IDs are required inputs for get_bid_detail.
Searching and Filtering Bids
search_bids accepts a keyword parameter matched against titles and descriptions, a statuses field (use '1' for open solicitations), region_ids for geographic filtering, and category_ids for procurement category filtering. Results are paginated via page_number (1-based) with a configurable limit, and can be sorted by postedDate or closingDate in either direction. The response includes a bidCount total alongside the bidInfoList array.
Bid Details and Reference Lists
get_bid_detail returns the full tender record: tenderName, tenderNumber, buyerName, bidStatus, contractType, tenderClosingDate, a categoryList array with categoryId, categoryName, and categoryCode, and a detailPreview field containing the HTML bid description. To build valid filter parameters, use get_regions (returns masterRegionInfoList with regionId, regionName, and country) and get_categories (returns parentCategoryList and a masterChildCategoryListMap keyed by parent category code with full subcategory objects).
The Biddingo API is a managed, monitored endpoint for biddingo.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when biddingo.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official biddingo.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Monitor newly posted government tenders in specific Canadian regions using
region_idsandpostedDate:descsort. - Build a bid-matching tool that queries
search_bidsby keyword and maps results to internal product or service categories. - Track closing deadlines by sorting on
closingDate:ascand alerting whentenderClosingDatefalls within a threshold. - Enrich a CRM with buyer organization data by extracting
buyerNameandbuyerOrgIdfrom search results. - Index full tender descriptions from
detailPreviewto power full-text search across active solicitations. - Filter procurement opportunities by UNSPSC or similar category codes retrieved from
get_categoriessubcategory objects. - Generate competitive intelligence reports by aggregating
contractTypeandcategoryListfields across matching tenders.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Biddingo have an official developer API?+
What does `get_bid_detail` return beyond the search summary?+
get_bid_detail adds fields not present in search_bids results: a detailPreview HTML string with the full bid description, a categoryList array with categoryId, categoryName, and categoryCode entries, contractType, and the precise tenderClosingDate. You need buyerOrgId and biddingoTenderId from a prior search_bids call to invoke it.Can I retrieve historical or awarded bids, not just open ones?+
statuses parameter in search_bids accepts a bid status ID, but the documented value is '1' for Open for Bidding. Closed or awarded bid history is not currently surfaced by the API. You can fork this API on Parse and revise it to target other status IDs if Biddingo exposes them.Does the API cover bids from US states or other non-Canadian regions?+
masterRegionInfoList returned from get_regions, which includes a country field per region. The primary focus of Biddingo is Canadian procurement. You can fork this API on Parse and revise it to filter or extend coverage if additional regions appear in the regions list.Are vendor registration or document download links included in bid details?+
get_bid_detail response does not include vendor registration URLs or attached procurement documents — it covers structured fields and the HTML detailPreview description. You can fork this API on Parse and revise it to add an endpoint that retrieves document attachment metadata if that data is accessible on the bid page.