BidNet Direct Scraper — Government Bids & RFPs avatar

BidNet Direct Scraper — Government Bids & RFPs

Pricing

from $12.99 / 1,000 government bid records

Go to Apify Store
BidNet Direct Scraper — Government Bids & RFPs

BidNet Direct Scraper — Government Bids & RFPs

Scrape public BidNet Direct government bids and RFPs by keyword and state: title, notice ID, publication and closing dates, summary and URL. USD 0.017 a bid.

Pricing

from $12.99 / 1,000 government bid records

Rating

0.0

(0)

Developer

Muhammad Afzal

Muhammad Afzal

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 hours ago

Last modified

Security

Limited permissions

Share

BidNet Direct Scraper extracts public government bids and RFPs from BidNet Direct by keyword and US state and returns each notice's title, notice ID, state, publication and closing dates, public summary and source URL. It is built for contractors, suppliers and procurement teams who track state and local opportunities, and it costs USD 16.99 per 1,000 bids on the FREE tier (USD 0.01699 per bid, USD 12.99 per 1,000 on GOLD).

What does the BidNet Direct scraper return?

Each dataset row is one unique public solicitation:

FieldWhat it contains
noticeIdBidNet Direct notice ID, used to remove duplicates
titleBid or RFP title
stateUS state or territory shown on the listing
statusopen or closed, from the search you ran
publicationDate, publicationDateTimeNormalized date and the exact timestamp shown on the detail page
closingDate, closingDateTimeDeadline as a date and the exact timestamp with time zone
timeRemainingTime-to-close text when BidNet shows it
summaryPublic overview or page description of the bid
issuingOrganization, solicitationNumberPublic values, or null when BidNet shows them only to registered members
detailAccesspublic or registration_required
sourceUrl, sourcePageUrl, scrapedAtNotice URL, the listing page that found it and collection time

Each run also saves OUTPUT and SUMMARY with the outcome (DATA, PARTIAL, EMPTY, BLOCKED or REJECTED), records delivered and charged, pages read and warnings.

How do I find government bids by state and keyword?

Set keywords and one or more states. The Actor runs one public search per state, follows result pages, removes duplicate notices and, by default, opens each notice for exact dates and the public summary.

InputExampleNotes
keywordsconstructionSearches public titles and keywords (up to 200 characters); empty returns the newest bids
states["California", "Texas"]Up to 20 states, territories or BidNet location slugs; empty means nationwide
statusopenopen (default) or closed
startUrlsBidNet listing or notice URLsUsed instead of generated searches; other domains are rejected
maxResults251 to 1,000 bids per run (default 25)
maxPages51 to 40 listing pages per search
enrichDetailstrueOpen each notice for exact timestamps and the public summary

The Actor chooses its own network route. A proxyConfiguration field sent by older saved inputs is accepted but ignored.

{
"keywords": "road construction",
"states": ["California", "Texas"],
"status": "open",
"maxResults": 50,
"maxPages": 5,
"enrichDetails": true
}

Can I track construction bids and closing dates?

Yes. Search construction, paving or another trade keyword for your states, and sort the export by closingDate. Scheduling the same input daily on Apify gives you new notices each morning, and noticeId lets you skip ones you already have. Set status to closed to study past solicitations in your trade.

When should I use it, and when not?

Use it when you want public state and local government bid notices from BidNet Direct as a spreadsheet or JSON feed: a daily list of open construction bids in two states, an RFP database for a sales team, or deadline alerts in your own tools.

Use another Actor when:

How do I run it from code?

JavaScript with apify-client:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('muhammadafzal/bidnet-direct-government-bids-scraper').call({
keywords: 'construction',
states: ['California'],
maxResults: 25,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const bid of items) console.log(bid.closingDate, bid.title, bid.sourceUrl);

Python with apify-client:

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("muhammadafzal/bidnet-direct-government-bids-scraper").call(run_input={
"keywords": "engineering",
"states": ["Texas"],
"status": "open",
"maxResults": 50,
})
for bid in client.dataset(run.default_dataset_id).iterate_items():
print(bid["noticeId"], bid["closingDateTime"], bid["title"])

Use it from an AI assistant

BidNet Direct Scraper works from Claude, ChatGPT, Cursor or any MCP client through Apify's MCP server. Add the single-tool URL https://mcp.apify.com/?tools=muhammadafzal/bidnet-direct-government-bids-scraper to your client and ask, for example: "List open construction bids in California on BidNet Direct that close in the next three weeks, with closing dates and links." Each bid is charged, so include a result limit.

What does the output look like?

Two of the 25 records from a cloud run of the Console prefill input (construction, California) on 2026-10-26:

[
{
"noticeId": "444208198045",
"title": "Traffic Signal Head Improvements",
"state": "California",
"status": "open",
"publicationDate": "2026-10-23",
"publicationDateTime": "10/23/2026 03:01 PM EDT",
"closingDate": "2026-11-16",
"closingDateTime": "11/16/2026 04:00 PM EST",
"timeRemaining": null,
"summary": "Construction project involves removing and salvaging existing equipment, furnishing and installing traffic signal equipment including vehicle heads, backplates, mounts, brackets, and appurtenances, with all necessary traffic control measures.",
"issuingOrganization": null,
"solicitationNumber": null,
"detailAccess": "registration_required",
"sourceUrl": "https://www.bidnetdirect.com/public/supplier/solicitations/statewide/444208198045/abstract?purchasingGroupId=88020151&origin=1",
"sourcePageUrl": "https://www.bidnetdirect.com/california/solicitations/open-bids?keywords=construction",
"scrapedAt": "2026-10-26T06:54:19.715Z"
},
{
"noticeId": "444208272408",
"title": "On-Call Labor Compliance Services",
"state": "California",
"status": "open",
"publicationDate": "2026-10-23",
"closingDate": "2026-11-18",
"closingDateTime": "11/18/2026 05:00 PM EST",
"summary": "Seeking qualified firms to provide on-call labor compliance consultant services for Capital Improvement Program projects of varying contract size and complexity in construction, supporting the Department of Public Works – Engineering Division.",
"detailAccess": "registration_required"
}
]

How much does BidNet Direct data cost?

The Actor uses pay-per-event pricing, and platform usage is included in the event prices. Each unique bid saved to the dataset is charged once.

EventFREEBRONZESILVERGOLDPLATINUM / DIAMOND
Government bid record (one dataset row)USD 0.01699USD 0.01699USD 0.01699USD 0.01299USD 0.01299
Actor start (per started GB of allocated memory)USD 0.005USD 0.005USD 0.005USD 0.005USD 0.005

The default memory is 512 MB, so a run pays one start event. Worked totals on the FREE tier:

  • 25 bids: 25 × USD 0.01699 + USD 0.005 = USD 0.43
  • 100 bids: 100 × USD 0.01699 + USD 0.005 = USD 1.70

Empty, blocked and rejected runs charge only the start event. The run's status message and OUTPUT quote the live per-bid price for your tier. When your maximum cost per run is reached, the Actor stops delivering bids.

Limits and reliability

  • Speed: 25 bids with detail enrichment took about 100 seconds in the 2026-10-26 cloud run.
  • Coverage: state searches are the reliable path. In the August 2026 validation, nationwide searches without a state were denied by the site and ended as BLOCKED with no bid charges. A BLOCKED run ends with a failed run status, so it never looks like a successful empty run.
  • Partial results: if a notice page fails to load, the listing fields for that bid are still delivered and the outcome becomes PARTIAL.
  • Scope: the Actor never logs in, so registration-only fields stay null.

FAQ

Is there a BidNet Direct API?

This Actor is not an official BidNet Direct API. It reads public BidNet Direct pages and delivers the bids as JSON, CSV or Excel through the Apify API, so you can call it from code, schedules or AI assistants.

Public listing and notice pages can be viewed without an account, and those are the pages this Actor reads. Bid documents and some notice fields need a BidNet Direct registration.

Does it download bid documents or addenda?

No. Attachment URLs are rejected, and documents are not downloaded.

Why are issuingOrganization and solicitationNumber null?

BidNet Direct shows them only to registered members on many notices. detailAccess is registration_required in that case.

Can I get closed or past bids?

Yes. Set status to closed, or pass a closed-bids listing URL in startUrls.

Which states are covered?

Any US state name, plus territories and BidNet location slugs. Each entry in states runs its own search.

The Actor reads public BidNet Direct pages without logging in, bypassing registration or downloading restricted documents, and it stops with a BLOCKED outcome instead of evading access controls. Use the data under BidNet Direct's terms, and confirm deadlines and requirements in the official notice before you bid. This tool is not affiliated with BidNet Direct, and this is not legal advice.

Last verified: 2026-10-27