Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
US Local Bid Portals Scraper icon

US Local Bid Portals Scraper

Open solicitations from US city, county, state and school-district procurement feeds. One row per bid: buyer, title, closing date and link. No key, no login.

44 runs on Apify $0.016 per solicitation ($16 / 1,000)
Run this in the cloudRun on Apify →

Developer & Research Tools

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust sources, keywords, states (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.016 per solicitation = $16 per 1,000

You are charged forWhenPrice
Solicitation scrapedOne open solicitation from a US state, county, city or school-district portal. Jurisdictions that cannot answer are skipped and never charged.$0.016

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-09-20, and they are what you are actually charged.

Inputs

FieldWhat it doesType
sourcesWhich procurement feeds to read. Leave every box ticked to check all nine. Each one is a single jurisdiction except the school-district feed, which is nationwide.array
keywordsWords that must appear in the solicitation title, category or buying department. Each portal does this filtering itself, so a narrow keyword costs less than a broad one. Leave empty for everything that is open. Terms are OR'd: "paving", "asphalt" returns both.array
statesTwo-letter state codes. A portal that belongs to a state you did not list is not queried at all, and the school-district feed is filtered to the states you name. Leave empty for everywhere.array
onlyOpenOn: only solicitations whose closing date is still ahead. Off: the portal's whole list, closed ones included. Leave it on unless you are building a history.boolean
maxItemsHard ceiling on rows for this run, shared across the portals you picked so one big portal cannot use up the whole allowance. Maximum 5000.integer

What you get

A structured dataset — each result includes fields like:

jurisdictionjurisdictionLevelstatesolicitationIdtitlesolicitationTypecategorystatuspostedDatedueDatedaysUntilDuebuyerDepartmentestimatedValueurldocumentUrlportalUrlsource

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Developer & Research Tools

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

GitHub Scraper iconDeveloper & Research Tools

GitHub Scraper

Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.

18 use cases

Stack Overflow / Stack Exchange Scraper iconDeveloper & Research Tools

Stack Overflow / Stack Exchange Scraper

Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.

2 use cases

Package Registry Scraper (npm + PyPI) iconDeveloper & Research Tools

Package Registry Scraper (npm + PyPI)

Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.

2 use cases

arXiv Scraper iconDeveloper & Research Tools

arXiv Scraper

Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.

2 use cases

OpenAlex Scholarly Works Scraper iconDeveloper & Research Tools

OpenAlex Scholarly Works Scraper

Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.

2 use cases

Crossref Scholarly Works Scraper iconDeveloper & Research Tools

Crossref Scholarly Works Scraper

Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.

2 use cases

See all Developer & Research Tools →

US Local Bid Portals Scraper: open solicitations from city, county and school feeds

Pick the procurement feeds you care about and get the open solicitations back as rows. Buyer, jurisdiction, title, solicitation type, posted and closing dates, days left, and the link to the official listing.

Nine feeds, not fifty states. Eight are single jurisdictions: Los Angeles, New York City, Baton Rouge, Montgomery County MD, Washington DC, Delaware, the Illinois Capital Development Board and the State University Construction Fund in New York. The ninth is nationwide, every US school district, school and library with a live FCC Form 470.

InputWhich of the nine feeds to read, plus keywords
OutputOne row per open solicitation
Ceiling5,000 solicitations per run
Account neededNone, no key, no login
Price$0.016 per solicitation, flat on every plan

🏛️ What US Local Bid Portals Scraper does

Each feed is queried on its own terms. Your keywords and the still-open filter are pushed into the query, so the portal does the filtering and the run only pays for what comes back. A narrow keyword therefore costs less than a broad one, which is the opposite of how most search tools behave.

Then comes the part worth paying for. A procurement portal will happily answer HTTP 200 with something that is not a reply to the question: the whole unfiltered list when you asked for one keyword, a different dataset's columns after a schema change, a login page wearing a JSON content type. Every page is checked against the rows themselves before anything is billed. Ask for still-open solicitations and get back a page where more than a tenth have already closed, and that whole page is dropped with a written reason. Nothing from it is delivered and nothing is charged.

Named contacts are deliberately left out. Several of these datasets carry a buyer's name, direct phone number or email address. Those columns are never requested, so they never reach your dataset. The official portal link is on every row instead, and the contact is published there by the jurisdiction.

📥 What you give it

{
  "sources": ["la-city", "nyc", "erate-f470"],
  "keywords": ["security", "software"],
  "states": ["CA", "NY"],
  "onlyOpen": true,
  "maxItems": 200
}
FieldWhat the run uses if you leave itWhat it is
sourcesall nine boxes tickedWhich feeds to read: la-city, nyc, baton-rouge, montgomery-county-md, dc-ocp, delaware-state, illinois-cdb, suny-construction, erate-f470.
keywordsbox starts at security and softwareWords that must appear in the title, category or buying department. Terms are OR'd. Leave empty for everything open.
statesbox starts emptyTwo-letter codes. A feed belonging to a state you did not list is not queried at all, and the school-district feed is narrowed to the states you name.
onlyOpentrueOn, only solicitations whose closing date is still ahead. Off, the whole list including closed ones.
maxItems200Hard ceiling on rows, up to 5,000, shared across the feeds you picked so one big portal cannot use the whole allowance. This is also your spending cap.

📤 What you get back

A real row from a recent run:

{
  "source": "la-city",
  "jurisdiction": "City of Los Angeles, CA",
  "jurisdictionLevel": "city",
  "state": "CA",
  "solicitationId": "231996",
  "title": "RFB-IS-27200173 - 2708010VAtlassian Software Licenses Renewal-BRAND ONLY - Closing: 9/23/2026 12:00 PM",
  "summary": null,
  "solicitationType": "RFB - Request For Bid",
  "category": "Commodity",
  "status": "Open",
  "postedDate": "2026-09-15T15:30:09.000Z",
  "dueDate": "2026-09-23T19:00:00.000Z",
  "buyerDepartment": "Los Angeles County",
  "estimatedValue": null,
  "url": "https://www.rampla.org/s/opportunity-details?id=006Ql00000lZtjMIAS",
  "documentUrl": null,
  "daysUntilDue": 3,
  "portalUrl": "https://www.rampla.org/",
  "scrapedAt": "2026-09-21T02:09:43.620Z"
}
FieldWhat it is
solicitationIdThe jurisdiction's own reference. Use it with source as a dedupe key across runs.
jurisdictionLevelcity, county, state or the school-district feed's own level, so you can sort by who is buying.
dueDate, daysUntilDueThe closing date as a timestamp, and how many days that is from the run.
summary, estimatedValue, documentUrlPresent on the feeds that publish them, null on the ones that do not. Most of these portals publish neither a summary nor a value.
urlThe official listing. This is where the documents and the named contact live.
titleStraight from the portal, formatting and all. Several of them bury the closing date inside it.

🧾 Reading the output

Three kinds of row can land in your dataset.

RowHow to spot itCharged
A solicitationno _sample and no _diagnostic keyyes
The sample row_sample: trueno
A diagnostic_diagnostic: true and an errorCodeno
CodeWhat it means
FILTER_NOT_HONOUREDThat portal answered with rows that do not match what was asked. The whole page was dropped rather than billed.
STATE_FILTER_EXCLUDEDThat feed belongs to a state you did not list, so it was not queried.
NO_RESULTSThe feeds were queried and nothing matched. Try fewer keywords, or turn onlyOpen off.
SCHEMA_MISMATCHA portal answered with a shape that is not its dataset. Usually means it changed and we need to look.
PORTAL_REFUSEDA portal turned the request away. Re-run later.
PORTAL_MOVEDA portal's address returned a 404. Tell us and we will chase it.
PORTAL_ERRORA portal returned an error of its own.
RATE_LIMITEDA portal asked the run to slow down and it gave up on that one.
TIME_BUDGETThe run ran out of time before a feed answered. Everything delivered is complete.
BUDGET_EXHAUSTEDYour run's spending cap was reached before the feeds were finished.
UNKNOWN_SOURCEA source key in your input is not one of the nine.

One bad portal never stops the others, and a diagnostic row never fails the run.

▶️ How to run it

1. Open US Local Bid Portals Scraper and click Try for free. 2. Under Portals to check, untick the feeds you do not want. 3. Put the words you bid on into Keywords, one per line. 4. Add two-letter codes to Limit to these states if you only work in some. 5. Set Maximum solicitations, click Start, then download as JSON, CSV or Excel.

💰 How much does it cost?

$0.016 per solicitation. Flat on every Apify plan, no volume tiers.

You pay per solicitation row delivered. Pages dropped because a portal ignored a filter, feeds skipped by your state list, the sample row and diagnostic rows are all free.

💡 What people use it for

  • A standing keyword watch: schedule it daily on the two or three words you actually bid on, dedupe

on source plus solicitationId, and you see new work the day it posts.

  • Feeding a bid/no-bid pipeline, using daysUntilDue to drop anything closing too soon to answer.
  • Tracking which departments in a jurisdiction buy what you sell, by grouping on buyerDepartment.
  • Covering the nationwide school and library feed for education contracts, which is the one feed here

that is not tied to a single city.

  • Building a history of what a jurisdiction put out to tender, with onlyOpen turned off.

🚧 What it does not do

  • Nine feeds, not national coverage. Eight jurisdictions plus the school and library feed. It

does not cover federal contracting.

  • No named buyer contacts. Those columns are never requested. The portal link on each row is

where they are published.

  • No bid documents. documentUrl is filled in only where a feed publishes one, which is rare.
  • No award data, no bidder lists, no pricing. These are open solicitations only.
  • Fields differ between feeds. A summary or an estimated value that exists in one jurisdiction

will be null in another, because that portal does not publish it.

  • Keyword matching is what the portal supports, so it matches on title, category and department

text rather than inside attached documents.

  • Rows are a snapshot. A solicitation can be amended, extended or cancelled, and scrapedAt

records when it was read.

🧭 Which procurement tool do you need?

If you wantUse
Open bids from US local portalsThis one
Those bids scored against what you can actually winRFP & Tender Fit Monitor
US company filings and financialsSEC EDGAR Scraper
Contact details for a list of company websitesContact Details Scraper

❓ Questions people ask

Do I need a login for any of these portals? No. All nine publish these feeds openly, and there is no key to apply for.

Why are keywords cheaper than no keywords? The filtering happens at the portal, so a narrow keyword returns fewer rows and you pay per row.

Can I get closed solicitations too? Yes, turn onlyOpen off. Useful for building a picture of what a jurisdiction tenders over a year.

What is the school-district feed? US schools, districts and libraries file an FCC Form 470 when they want bids for telecoms and internet services. It is nationwide, which is why the state filter matters on it.

Can I add my own city? Not through the input, but tell us which portal and we will look at it.

Is scraping these feeds legal? They are public procurement records published by the jurisdictions themselves for exactly this purpose. Named contact columns are left out on purpose. Apify's write-up on scraping and the law is a sensible starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the run ID and which feed misbehaved. A SCHEMA_MISMATCH or PORTAL_MOVED row usually means that jurisdiction changed something, and that is worth telling us about.