Biddingo Public Tenders Scraper avatar

Biddingo Public Tenders Scraper

Pricing

Pay per event

Go to Apify Store
Biddingo Public Tenders Scraper

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

Stas Persiianenko

Maintained by Community

Actor 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?

FieldMeaning
biddingoTenderIdStable Biddingo opportunity ID
procurementIdBiddingo procurement identifier when present
solicitationNumberPublic RFQ, RFP, tender, or quote number
titleOpportunity title
buyerNamePublic buyer or issuing organization
regionBiddingo geographic region
province, city, postalCodePublic location fields
postedDateNormalized publication date
closingDateNormalized deadline date
closingDateTimeSource deadline text with time
closingTimeZoneSource time-zone abbreviation
status, daysLeftCurrent bid status and days remaining
bidType, procurementTypeSource procurement classifications
categoriesPublic Biddingo category names
descriptionPlain-text public bid description
contactEmailsEmails found in the public detail
externalUrlsPublic external opportunity or submission links
hasAddendum, hasQnaAddendum and Q&A indicators
hasSiteMeeting, hasNdaSite meeting and NDA indicators
hasResult, hasAwardResult and award indicators
hasOnlineSubmissionWhether source data indicates online submission
documentCount, addendumCountPublic source counts
isResearchBid, isMaskedRestricted/researched record markers
detailUrl, sourceSearchUrlTraceable public source URLs
scrapedAtUTC collection timestamp

How to scrape Biddingo public tenders

  1. Open the Actor input page.
  2. Enter a useful phrase such as roofing, snow removal, or software.
  3. Keep Open for bidding selected for an active opportunity feed.
  4. Optionally set a province, city, buyer, or deadline filter.
  5. Choose a small maxItems value for your first run.
  6. Leave detail enrichment enabled when you need descriptions and categories.
  7. Click Start.
  8. Review the Dataset and export it in your preferred format.
  9. Save the configuration as a Task if you want a scheduled monitor.

Input parameters

  • keywords β€” optional full-text Biddingo search phrase.
  • searchUrls β€” one or more Biddingo /search URLs; 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 as Eastern Canada.
  • province β€” province filter, such as Ontario.
  • city β€” city filter.

Dates and pagination

  • postedAfter β€” inclusive earliest posted date in YYYY-MM-DD.
  • closingBefore β€” inclusive latest closing date in YYYY-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 offset to partition large searches into separate tasks.
  • Schedule daily open-opportunity runs to spot new notices.
  • Deduplicate downstream by biddingoTenderId.
  • Use closingDate and daysLeft to prioritize alerts.
  • Treat isMasked: true as 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 os
from apify_client import ApifyClient
client = 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().items
print(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

  1. Save a tested input as an Apify Task.
  2. Add a daily or weekday schedule.
  3. Keep status set to open.
  4. Send the dataset ID to your integration or webhook.
  5. Compare biddingoTenderId values with the previous run.
  6. 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.

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.

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.