Biddingo Public Tenders Scraper
Pricing
Pay per event
Biddingo Public Tenders Scraper
π¨π¦ Find public Biddingo tenders with buyers, locations, deadlines, descriptions, addenda, Q&A, submission, result, and award indicators.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Find Canadian procurement opportunities before their deadlines.
Biddingo Public Tenders Scraper exports current public bid listings from Biddingo into clean JSON, CSV, Excel, XML, RSS, or Parquet through Apify.
Search by keyword, buyer, region, province, city, and date.
Optionally enrich every opportunity with its anonymous public bid detail, categories, contact emails, description, and source-native workflow flags.
No Biddingo login is required for the data covered by this Actor.
What does Biddingo Public Tenders Scraper do?
The Actor queries Biddingo's anonymous Canadian opportunity search and public bid details.
Each dataset row represents one tender, quotation, RFP, RFQ, or related procurement opportunity.
It collects:
- π solicitation number and Biddingo IDs
- π’ public buyer name
- π region, province, city, and postal code
- π posted date, closing date, time zone, and days left
- π§° bid and procurement type
- π description and public categories
- βοΈ contact emails and external opportunity links
- β addendum and special-notice indicators
- β Q&A and site-meeting indicators
- π result and award indicators
- π€ online and paper submission indicators
- π research/masking indicators
The Actor never purchases documents or attempts to reveal subscription-only fields.
Who is it for?
Canadian contractors
Monitor relevant construction, roofing, maintenance, equipment, and service opportunities without manually checking Biddingo every morning.
Bid consultants
Create client-specific feeds by keyword, buyer, or geography and triage opportunities by deadline.
Suppliers and distributors
Identify public-sector demand for products and services across Canadian provinces.
Procurement intelligence teams
Feed structured opportunities into BI tools, CRMs, warehouses, and alerting systems.
Researchers
Analyze publicly visible procurement activity while preserving Biddingo's explicit masking markers.
Why use this Biddingo scraper?
- β‘ HTTP-first: it uses lightweight public JSON routes rather than an expensive browser.
- π Repeatable: save an input as an Apify Task and schedule it daily.
- π Structured: export normalized fields instead of copying rows from a web page.
- π― Filtered: narrow records by buyer, province, city, dates, or keywords.
- π Traceable: every item includes its public Biddingo detail and source-search URL.
- π‘οΈ Transparent: researched or masked rows are labeled instead of falsely enriched.
- π§© Integratable: connect datasets to webhooks, Make, Zapier, Google Sheets, or your own API.
What Biddingo tender data can I extract?
| Field | Meaning |
|---|---|
biddingoTenderId | Stable Biddingo opportunity ID |
procurementId | Biddingo procurement identifier when present |
solicitationNumber | Public RFQ, RFP, tender, or quote number |
title | Opportunity title |
buyerName | Public buyer or issuing organization |
region | Biddingo geographic region |
province, city, postalCode | Public location fields |
postedDate | Normalized publication date |
closingDate | Normalized deadline date |
closingDateTime | Source deadline text with time |
closingTimeZone | Source time-zone abbreviation |
status, daysLeft | Current bid status and days remaining |
bidType, procurementType | Source procurement classifications |
categories | Public Biddingo category names |
description | Plain-text public bid description |
contactEmails | Emails found in the public detail |
externalUrls | Public external opportunity or submission links |
hasAddendum, hasQna | Addendum and Q&A indicators |
hasSiteMeeting, hasNda | Site meeting and NDA indicators |
hasResult, hasAward | Result and award indicators |
hasOnlineSubmission | Whether source data indicates online submission |
documentCount, addendumCount | Public source counts |
isResearchBid, isMasked | Restricted/researched record markers |
detailUrl, sourceSearchUrl | Traceable public source URLs |
scrapedAt | UTC collection timestamp |
How to scrape Biddingo public tenders
- Open the Actor input page.
- Enter a useful phrase such as
roofing,snow removal, orsoftware. - Keep Open for bidding selected for an active opportunity feed.
- Optionally set a province, city, buyer, or deadline filter.
- Choose a small
maxItemsvalue for your first run. - Leave detail enrichment enabled when you need descriptions and categories.
- Click Start.
- Review the Dataset and export it in your preferred format.
- Save the configuration as a Task if you want a scheduled monitor.
Input parameters
Search
keywordsβ optional full-text Biddingo search phrase.searchUrlsβ one or more Biddingo/searchURLs; these override the generated search.statusβ collect open opportunities or all statuses returned by Biddingo.
Buyer and location
buyerβ case-insensitive buyer-name filter.regionβ Biddingo region filter, such asEastern Canada.provinceβ province filter, such asOntario.cityβ city filter.
Dates and pagination
postedAfterβ inclusive earliest posted date inYYYY-MM-DD.closingBeforeβ inclusive latest closing date inYYYY-MM-DD.offsetβ initial Biddingo API offset.maxItemsβ maximum unique records across all searches.
Enrichment
includeDetailsβ request public detail JSON for richer fields.requestDelayMsβ delay between requests, from 0 to 5,000 ms.
Example input
{"keywords": "roofing","status": "open","province": "Ontario","maxItems": 25,"includeDetails": true,"requestDelayMs": 150}
To reuse a search configured on Biddingo:
{"searchUrls": [{ "url": "https://www.biddingo.com/search?keywords=construction&statuses=1" }],"maxItems": 50,"includeDetails": true}
Output example
{"biddingoTenderId": "41625328","procurementId": "577294","solicitationNumber": "Q26-81","title": "David Durward Centre Roof Replacement","buyerName": "City of Cambridge","region": "Eastern Canada","country": "Canada","province": "Ontario","city": "Cambridge","postedDate": "2026-07-15","closingDate": "2026-07-31","closingTimeZone": "ET","status": "Open for Bidding","bidType": "Goods, Service, Construction","categories": ["Construction", "Roofing Supplies/ Services"],"hasAddendum": false,"hasQna": false,"hasSiteMeeting": false,"hasResult": false,"hasAward": false,"isResearchBid": false,"isMasked": false,"detailUrl": "https://www.biddingo.com/dashboard/bid/1/11003134/41625328/verification"}
Actual fields vary because Biddingo buyers decide which public details to provide.
How much does it cost to scrape Biddingo tenders?
This Actor uses pay-per-event pricing.
A small one-time start event covers run setup, followed by one result event per saved tender.
The provisional base prices are:
- Start: $0.005 per run
- FREE result: $0.000066261 per saved tender
- BRONZE result: $0.000057618 per saved tender
- Higher usage tiers receive automatic volume discounts
At the BRONZE rate, a run saving 100 opportunities costs about $0.0108 before any platform plan allowances.
Check the Actor pricing tab for the currently active tier and exact price.
Tips for reliable tender monitoring
- Start with 10β25 records while refining keywords.
- Use source-specific words instead of broad phrases when precision matters.
- Keep detail enrichment on for lead qualification.
- Turn enrichment off for fast, listing-only market counts.
- Filter by province after the source search when you serve one territory.
- Use
offsetto partition large searches into separate tasks. - Schedule daily open-opportunity runs to spot new notices.
- Deduplicate downstream by
biddingoTenderId. - Use
closingDateanddaysLeftto prioritize alerts. - Treat
isMasked: trueas a source restriction, not missing scraper logic.
Integrations and automation workflows
Daily email or Slack alerts
Schedule an Apify Task, compare IDs with the previous dataset, and send only new opportunities through a webhook.
CRM lead creation
Map buyerName, title, province, closingDate, and detailUrl into opportunity records in HubSpot, Salesforce, or another CRM.
Google Sheets bid calendar
Export records to Sheets and sort by closingDate and daysLeft for a shared estimator calendar.
Data warehouse ingestion
Fetch dataset items through the API and upsert by biddingoTenderId into BigQuery, Snowflake, PostgreSQL, or DuckDB.
Addendum watch
Run the same source URLs daily and trigger a workflow when hasAddendum or addendumCount changes.
Use the Biddingo scraper API
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/biddingo-public-tenders-scraper').call({keywords: 'roofing',province: 'Ontario',status: 'open',maxItems: 25,includeDetails: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/biddingo-public-tenders-scraper').call(run_input={'keywords': 'snow removal','status': 'open','maxItems': 25,'includeDetails': True,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~biddingo-public-tenders-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"keywords":"construction","status":"open","maxItems":25,"includeDetails":true}'
Use Biddingo tender data through MCP
Apify MCP lets Claude Code and compatible clients run this Actor as a tool.
Claude Code
$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/biddingo-public-tenders-scraper"
Claude Desktop, Cursor, or VS Code
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/biddingo-public-tenders-scraper"}}}
Example prompts:
- βFind 20 open Ontario roofing tenders on Biddingo and sort them by closing date.β
- βCreate a table of public buyers, cities, deadlines, and source links for snow removal opportunities.β
- βShow Biddingo opportunities with site meetings or addenda and fewer than 14 days left.β
Scheduling a Biddingo opportunity monitor
- Save a tested input as an Apify Task.
- Add a daily or weekday schedule.
- Keep
statusset toopen. - Send the dataset ID to your integration or webhook.
- Compare
biddingoTenderIdvalues with the previous run. - Alert only on new IDs or changed addendum/result flags.
Scheduled runs are useful because procurement opportunities and deadlines change continuously.
Data quality and limitations
Biddingo controls the source data and can change its anonymous API.
Some records contain more details than others.
Some researched listings deliberately mask the buyer or solicitation number with values such as OXOXOXOX.
The Actor preserves those rows and sets isResearchBid or isMasked.
It does not bypass masking, authentication, subscription requirements, document fees, or buyer submission portals.
Date filters are applied to public normalized dates.
Text filters are case-insensitive substring filters after records are received.
An individual detail failure does not discard an otherwise useful listing record.
Is scraping Biddingo legal?
This Actor accesses anonymous public listing and detail data without logging in.
Public procurement facts are generally business information, but legality depends on your jurisdiction, purpose, volume, and obligations.
You are responsible for:
- following applicable laws and contractual terms
- respecting intellectual-property and database rights
- using contact details for a lawful procurement purpose
- avoiding spam or discriminatory automated decisions
- setting a reasonable request rate
- securing exported datasets
Do not use the Actor to obtain paid documents or restricted account data.
Troubleshooting
The dataset is empty
Remove buyer, location, and date filters first.
Test a broad keyword such as construction, or leave the keyword empty for the newest open opportunities.
Also confirm that a supplied URL belongs to Biddingo and uses the /search route.
I see masked buyer or solicitation values
That is expected for some Biddingo researched records.
Check isResearchBid and isMasked; the Actor intentionally does not invent or unlock restricted data.
A listing has no description or categories
Enable includeDetails.
If it is already enabled, the buyer may not expose those fields publicly or the detail request may have failed while the listing was preserved.
Large runs are slow
Turn off detail enrichment for a listing-only feed, reduce requestDelayMs carefully, or partition the search with offset.
Related public tender scrapers
- CanadaBuys Tender Opportunities Scraper β official Canadian federal procurement opportunities
- Singapore GeBIZ Tender Opportunities Scraper β Singapore government tenders and quotations
- UK Find a Tender Scraper β UK high-value procurement notices
- TED Europa Tenders Scraper β European public procurement notices
- BOAMP Public Tenders Scraper β French public tenders
- World Bank Procurement Notices Scraper β international development procurement
Choose the actor matching the source your team monitors; use several actors when you need broader geographic coverage.
FAQ
Does this Actor require a Biddingo account?
No. The supported listing and detail fields are anonymously public.
Does it download tender documents?
No. Paid document downloads and subscription-only enrichment are deliberately excluded.
Can I provide a Biddingo search URL?
Yes. Add one or more https://www.biddingo.com/search?... URLs to searchUrls.
Can I scrape all current opportunities?
Set a larger maxItems and leave keywords empty. Use a polite delay and consider partitioning with offsets.
Can I run it every day?
Yes. A scheduled task is one of the main use cases; deduplicate by biddingoTenderId.
Why are some optional fields missing?
Different buyers publish different detail levels, and researched records can be intentionally masked by Biddingo.
What export formats are available?
Apify datasets support JSON, CSV, Excel, XML, RSS, and Parquet exports.
How should I identify urgent bids?
Sort or filter by closingDate and daysLeft, then inspect site-meeting and addendum flags.
Support
If a run behaves unexpectedly, share its Apify run URL and a redacted copy of the input through the Actor issue form.
Include the keyword or search URL, expected opportunity, and whether detail enrichment was enabled.
That evidence makes source changes and edge cases much faster to diagnose.