
Google Ads Scraper
scrape.ly/store/querystone/google-ads-scraperLead generationSEO tools
4 monthly users

Scrape open and closed government bids, RFPs and RFQs from BidNet Direct (bidnetdirect.com): title, agency type, state, publication and closing dates with exact times, AI overview and bid link. Search by keyword, state, category, agency type and date, or paste any listing or bid URL. Federal bids are matched to SAM.gov. No login needed.
Export open and closed government bids, RFPs and RFQs from BidNet Direct in minutes. Get every solicitation's title, state, agency type, publication and closing dates with exact times, the site's AI overview and the bid link, and match federal bids to their SAM.gov notice. No login, no BidNet account, pay only for the bids you save.
| Field | What it does |
|---|---|
startUrls | BidNet Direct links: open or closed list, search page, state page (e.g. https://www.bidnetdirect.com/texas), agency page or single bids |
keywords | Keyword searches; each keyword is its own search, a bid found by several is saved once |
maxItems | Maximum bids to save in total (0 = no limit) |
bidStatus | open or closed |
locations | US states and territories by two-letter code (TX, CA, ...) |
categories | Industry categories, e.g. construction, information, professional-services |
agencyType | all, member, state-local or federal |
publishedWithin | any, 24h or week |
sortBy | newest, oldest, closing-soonest, closing-latest, title-az, ... |
includeDetails | Open each bid page for the AI overview, exact times and SAM.gov match (on by default) |
matchSamGov | Match federal bids to SAM.gov (on by default) |
Search example:
{
"keywords": ["paving", "roofing"],
"bidStatus": "open",
"locations": ["TX", "OH"],
"categories": ["construction"],
"publishedWithin": "week",
"maxItems": 100
}
Link example:
{
"startUrls": [{ "url": "https://www.bidnetdirect.com/public/solicitations/open" }],
"maxItems": 20
}
| Field | Description |
|---|---|
bidId | BidNet Direct bid ID |
title | Solicitation title |
bidStatus | open or closed |
agencyType | Member Agency Bids, State & Local Bids or Federal Bids |
location | US state or territory |
timeRemaining, daysLeft | Time left as the list shows it, and as a number of days |
publishedDate, closingDate | Dates as the list shows them (YYYY-MM-DD) |
publicationDateTime, closingDateTime | Exact times with the time zone, from the bid page (details) |
publishedAt, closingAt | The same moments in UTC, ISO 8601 (details) |
aiOverview | The site's AI summary of the bid (details; shown for most state, local and federal bids) |
issuingOrganization, solicitationNumber | Federal bids: from the matched SAM.gov notice; others when the bid page shows them publicly |
description, sourceUrl | When the bid page shows them publicly (often on closed bids) |
samNoticeId, samNoticeType, samUrl | The matched SAM.gov notice (federal bids) |
bidUrl | Link to the bid on bidnetdirect.com |
searchKeyword | The keyword search that found the bid |
detailsIncluded | true when the bid page was loaded |
scrapedAt | When the bid was scraped (UTC) |
Example (one state and local bid, one federal bid):
[
{
"bidId": "444205606294",
"title": "Ingleside Regional Airport and Sinton Airport",
"bidStatus": "open",
"agencyType": "State & Local Bids",
"location": "Texas",
"timeRemaining": "28 day(s) left",
"daysLeft": 28,
"publishedDate": "2026-10-21",
"closingDate": "2026-11-19",
"publicationDateTime": "10/21/2026 02:51 PM EDT",
"closingDateTime": "11/19/2026 02:00 PM EST",
"publishedAt": "2026-10-21T18:51:00Z",
"closingAt": "2026-11-19T19:00:00Z",
"aiOverview": "Aviation construction project involves replacing and installing an Automated Weather Observation System III with Present Weather Sensor and Thunder Strike Alert (AWOS III PT) at an existing location.",
"issuingOrganization": null,
"solicitationNumber": null,
"description": null,
"sourceUrl": null,
"samNoticeId": null,
"samNoticeType": null,
"samUrl": null,
"bidUrl": "https://www.bidnetdirect.com/texas/solicitations/open-bids/statewide/Ingleside-Regional-Airport-and-Sinton-Airport/444205606294?target=view",
"searchKeyword": "construction",
"detailsIncluded": true,
"scrapedAt": "2026-10-22T03:33:58.709Z"
},
{
"bidId": "2720322962",
"title": "59--ADAPTER,CONNECTOR",
"bidStatus": "open",
"agencyType": "Federal Bids",
"location": "Ohio",
"timeRemaining": "12 day(s) left",
"daysLeft": 12,
"publishedDate": "2026-10-21",
"closingDate": "2026-11-04",
"publicationDateTime": "10/20/2026 09:41 PM EDT",
"closingDateTime": "11/03/2026 07:00 PM EST",
"publishedAt": "2026-10-21T01:41:00Z",
"closingAt": "2026-11-04T00:00:00Z",
"aiOverview": null,
"issuingOrganization": "DEPT OF DEFENSE > DEFENSE LOGISTICS AGENCY > DLA MARITIME > DLA MARITIME COLUMBUS > DLA LAND AND MARITIME",
"solicitationNumber": "SPE7M527U0026",
"description": null,
"sourceUrl": null,
"samNoticeId": "a160cf858cae4401b385612fcfdd3c5e",
"samNoticeType": "Combined Synopsis/Solicitation",
"samUrl": "https://sam.gov/opp/a160cf858cae4401b385612fcfdd3c5e/view",
"bidUrl": "https://www.bidnetdirect.com/ohio/solicitations/open-bids/statewide/59-ADAPTER-CONNECTOR/2720322962?target=view",
"searchKeyword": null,
"detailsIncluded": true,
"scrapedAt": "2026-10-22T03:33:58.709Z"
}
]
Pay per result, nothing else from us:
Example: 1,000 bids with details ≈ $20; 1,000 bids without details ≈ $14. Platform usage (compute and proxy traffic) is billed on top and is small: about $0.07 per 1,000 bids with details in our test runs, almost all of it proxy traffic.
Is it legal to scrape BidNet Direct? The scraper reads only public pages that anyone can open without an account. It does not log in and does not unlock the fields BidNet reserves for registered members. Check the site's terms and your local rules for how you use the data.
Do I need a login or a proxy? No login. The run uses Scrapely proxies by default: BidNet Direct limits how many pages one address may load, so requests are spread over many exits, and the run switches to US residential exits by itself if datacenter exits are refused.
Why are some fields empty? BidNet Direct shows the issuing organization, solicitation number, description and documents of open bids to registered members only, so they are empty for most open bids. Federal bids get them from SAM.gov instead, and closed bids often show the description and source publicly. The AI overview is not shown for every bid.
How many bids can I get? As many as the site has. One search lists at most 10,000 bids; when you ask for more from the open or closed list, the scraper splits the search by state (and agency type) to go past that.
Can I schedule it or use the API? Yes. Schedule daily runs with "Published within: last 24 hours" for alerts, or start runs and read results through the Scrapely API, webhooks and integrations.
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
startUrlsarrayOptionalBidNet Direct URLs
Links to scrape: the open or closed bids list, a search result page, a state page (for example https://www.bidnetdirect.com/texas), an agency page or single bid pages. Listing pages are followed page by page up to Maximum bids. When you set keywords or a filter below, the example link is skipped and the search is used instead.
keywordsarrayOptionalKeywords
Search bids by keyword or title. Each keyword is its own search and a bid found by several keywords is saved once, so several keywords match any of them (for example paving, roofing, janitorial).
maxItemsintegerOptionaldefault 20Maximum bids
How many bids to save in total. 0 means no limit. One search on the site lists at most 10,000 bids; larger open or closed list jobs are split by state (and agency type) automatically so you can collect more.
Narrow the search. Any filter set here builds a search on the site.
bidStatusenumOptionaldefault "open"Bid status
Search open (accepting responses) or closed solicitations.
locationsarrayOptionalStates and territories
Only bids from these US states or territories. Leave empty for all.
categoriesarrayOptionalCategories
Only bids in these industry categories (NAICS sectors). Leave empty for all.
agencyTypeenumOptionaldefault "all"Agency type
Member agencies publish directly on BidNet Direct; state & local and federal bids are collected from other public sources.
publishedWithinenumOptionaldefault "any"Published within
Only recently published bids.
sortByenumOptionaldefault "newest"Sort by
Order of the search results. Very large jobs that are split by state keep this order within each state.
Open each bid's own page for more fields (charged as a bid-details event, only when the page loaded).
includeDetailsbooleanOptionaldefault trueInclude bid details
Adds the AI overview, the exact publication and closing times with time zone (and in UTC), and any public organization, number or description the bid page shows. Single bid links always load the bid page.
matchSamGovbooleanOptionaldefault trueMatch federal bids to SAM.gov
For federal bids (with details on), find the same notice on SAM.gov by title and publication time and add its notice ID, type, solicitation number, issuing office and link. No extra charge. A bid is matched only when exactly one notice fits.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
The site limits how many pages one address may load, so requests are spread over many proxy exits. Datacenter exits work well; the run switches to US residential exits by itself if they are refused.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| bidId | string | BidNet Direct bid ID (from the bid link) |
| title | string | Solicitation title |
| bidStatus | string | null | open or closed |
| agencyType | string | null | Member Agency Bids, State & Local Bids or Federal Bids |
| location | string | null | US state or territory |
| timeRemaining | string | null | Time left as the list shows it, e.g. 12 day(s) left |
| daysLeft | number | null | Days until closing (0 = closes today) |
| publishedDate | string | null | Publication date (YYYY-MM-DD) |
| closingDate | string | null | Closing date (YYYY-MM-DD) |
| publicationDateTime | string | null | Publication date and time as the bid page shows it (details) |
| closingDateTime | string | null | Closing date and time with time zone as the bid page shows it (details) |
| publishedAt | string | null | Publication time in UTC, ISO 8601 (details) |
| closingAt | string | null | Closing time in UTC, ISO 8601 (details) |
| aiOverview | string | null | The site's AI overview of the bid (details) |
| issuingOrganization | string | null | Issuing organization (federal bids: SAM.gov office path) |
| solicitationNumber | string | null | Solicitation number (federal bids: from SAM.gov) |
| description | string | null | Description, when the bid page shows it publicly |
| sourceUrl | string | null | Original source of the notice, when the bid page shows it publicly |
| samNoticeId | string | null | Matched SAM.gov notice ID (federal bids) |
| samNoticeType | string | null | SAM.gov notice type (federal bids) |
| samUrl | string | null | SAM.gov notice link (federal bids) |
| bidUrl | string | Bid page on bidnetdirect.com |
| searchKeyword | string | null | Keyword search that found the bid |
| detailsIncluded | boolean | True when the bid page was loaded (bid-details event) |
| scrapedAt | string | When the bid was scraped (UTC) |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Bid | Charged per bid (solicitation) saved to the dataset. | $0.014 |
| Bid details | Charged per bid whose own page was loaded for the AI overview, exact publication and closing times and the SAM.gov match (Include bid details on). Only when the page loaded. | $0.006 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('cornerledger/bidnet-scraper').call({
"startUrls": [
{
"url": "https://www.bidnetdirect.com/public/solicitations/open"
}
],
"maxItems": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run cornerledger/bidnet-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=cornerledger/bidnet-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Open construction bids in Texas with AI overview and exact closing times.
The newest federal bids, each matched to its SAM.gov notice, solicitation number and office.
Closed construction solicitations in California with descriptions and source links.
Every bid on the Texas page without opening bid pages: cheapest per bid.
State and local bids published in the last week for three keywords, closing soonest first.

Scrape Google Maps places for any search term and city, with no code or with one API call. A real run, its output, its log and its exact cost, plus the limits and the legal side.
Read the article
Paste an Amazon search or product URL into a ready-made Actor and get one row per product with price, ASIN, rating and review count. This guide covers the no-code steps, the API, ZIP code pricing, a real run and its cost.
Read the article
Scrape Google search results by query and country and get each results page as JSON: organic results with positions, People Also Ask and related searches. Run it without code or from Python, with a real run, the cost per page and Google's terms.
Read the articleScrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.