BidNet Direct Government Bids Scraper
BidNet Direct Government Bids Scraper
Scrape government bid solicitations from BidNet Direct, the US public procurement portal that aggregates state and local government RFPs, contracts, and awards. Returns bid title, ID, location, publication date, closing date, days remaining, status, and optional AI-generated overviews — filtered by keyword, status, or starting URL.
BidNet Direct Scraper Features
- Extracts bid title, ID, agency location, publication date, closing date, and days remaining
- Filters by keyword (e.g. "construction", "IT services", "road repair")
- Switches between open, closed, and awarded bids with one input field
- Optionally pulls the AI-generated bid overview from each detail page — richer context for screening
- Pure API-grade extraction from server-rendered HTML — no browser required, no proxies needed
- Pay-per-event pricing tied to records returned, not pages paginated
- Handles BidNet's pagination automatically up to your
maxItemslimit
Who Uses BidNet Direct Data?
- Procurement teams — monitor solicitations matching your capability set and respond before the deadline
- Government contractors — build bid pipelines by keyword, location, or industry vertical, then track them in one place
- Business development reps — flag new RFPs from target agencies, no manual portal-checking required
- Compliance analysts — track awarded contracts and pricing benchmarks across state and municipal procurements
- Market researchers — quantify public-sector demand for a service category over time
How BidNet Direct Scraper Works
- Pick a status — open, closed, or awarded — and optionally a keyword filter.
- The scraper hits the matching BidNet Direct listing page and walks the bid table, row by row, paginating until it has what you asked for.
- If
scrapeDetailPagesis enabled, each bid is followed to its detail page to pull the AI overview field (when available). - Records are emitted with a normalized schema and ISO scrape timestamps.
Input
Open bids matching a keyword:
{
"maxItems": 50,
"keywords": "IT services",
"status": "open"
}
Closed bids for retrospective analysis:
{
"maxItems": 100,
"status": "closed"
}
Open bids with AI overviews from the detail pages:
{
"maxItems": 25,
"keywords": "construction",
"status": "open",
"scrapeDetailPages": true
}
| Field | Type | Default | Description |
|---|---|---|---|
| maxItems | integer | 15 |
Maximum number of bid records to return |
| keywords | string | "" |
Keyword filter applied to bid titles (e.g. "construction", "IT services") |
| status | string | "open" |
Bid status: open, closed, or awarded |
| startUrls | array | — | Optional list of BidNet listing URLs to scrape directly. Overrides the keyword/status filters. |
| scrapeDetailPages | boolean | false |
If true, visit each bid's detail page to extract the AI overview. Roughly doubles request count. |
BidNet Direct Scraper Output Fields
{
"bid_id": "0000123456",
"title": "Roadway Resurfacing — Phase II",
"detail_url": "https://www.bidnetdirect.com/public/solicitations/open?id=0000123456",
"location": "Texas",
"publication_date": "05/15/2026",
"closing_date": "06/12/2026",
"days_remaining": "14 day(s) left",
"bid_status": "open",
"ai_overview": "The City of Austin Public Works Department is seeking bids for asphalt resurfacing across approximately 12 miles of arterial roads...",
"scraped_at": "2026-05-27T14:32:11.000Z"
}
| Field | Type | Description |
|---|---|---|
| bid_id | string | Unique numeric bid/solicitation identifier from BidNet Direct |
| title | string | Title of the solicitation or bid opportunity |
| detail_url | string | Full URL to the bid detail page on bidnetdirect.com |
| location | string | State or location of the issuing agency |
| publication_date | string | Date the solicitation was published (MM/DD/YYYY) |
| closing_date | string | Deadline to submit bids/proposals (MM/DD/YYYY) |
| days_remaining | string | Human-readable time remaining until bid closes (e.g. "14 day(s) left") |
| bid_status | string | Status of the bid — open, closed, or awarded |
| ai_overview | string | AI-generated overview from the detail page. Only populated when scrapeDetailPages is true. |
| scraped_at | string | ISO 8601 timestamp of extraction |
FAQ
How do I scrape government bids from BidNet Direct?
BidNet Direct Scraper runs from the Apify console — pick a status (open, closed, or awarded), optionally add a keyword, and run. The scraper walks BidNet's bid table and returns one record per solicitation. No registration or login is needed for the public listing data.
Does BidNet Direct Scraper need proxies?
No. BidNet Direct serves the public listing pages without bot protection, so the scraper runs proxy-free by default. Less moving parts, lower cost.
Can I get the full bid details, not just the listing summary?
BidNet Direct Scraper extracts the public listing-table fields by default. Set scrapeDetailPages to true and it visits each bid's detail page to pull the AI-generated overview field. The agency-specific fields (full solicitation document, line items, contact officer) are locked behind BidNet registration and aren't scraped.
How does keyword filtering work?
BidNet Direct Scraper passes the keyword string straight through to BidNet's ?keywords= query parameter, so the filter behaves exactly like the BidNet search bar. Quoted phrases and multi-word queries work the same way they do on the site.
How fresh is the data?
BidNet Direct Scraper hits the live site on every run. The bid table reflects whatever BidNet is publishing at the moment, including new solicitations posted today and bids that closed an hour ago.
Need More Features?
Need custom fields, filters, or a different target site? File an issue or get in touch.
Why Use BidNet Direct Scraper?
- No proxies, no browser — Pure HTTP extraction from server-rendered HTML, which keeps run cost down and uptime up.
- Three statuses, one actor — Open, closed, and awarded bids come from the same scraper with a single input flag, instead of three separate workflows stitched together.
- AI overview pulled on demand — Optional detail-page enrichment grabs BidNet's AI-generated bid summary, so screening doesn't require reading the original PDF.