TX ESBD Opportunity Search avatar

TX ESBD Opportunity Search

Pricing

$20.00 / 1,000 solicitation records

Go to Apify Store
TX ESBD Opportunity Search

TX ESBD Opportunity Search

Find Texas government contracts by keyword, NIGP code, agency or status over 59K+ solicitations. Best starting point for finding bids. AI-agent ready.

Pricing

$20.00 / 1,000 solicitation records

Rating

0.0

(0)

Developer

Wenhao Yang

Wenhao Yang

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

a day ago

Last modified

Categories

Share

TX Government Contracts & Bids Search, NIGP (tx-esbd-search)

Search every Texas state & local government solicitation - the official Texas Electronic State Business Daily (ESBD) record - by keyword, NIGP commodity code, agency or status, and get back structured JSON with the NIGP codes already parsed apart.

This is the starting point of the Texas procurement family: you have a category or a set of keywords, and you want to know what the state is buying right now.

Low cost

From $0.02 per record - you are charged per matching record delivered, never for the query itself. A run that matches nothing costs nothing. The scan stops early once it has delivered limit matches, so the cost tracks what you actually receive rather than the depth of the corpus.

What you get

Every match is normalized with structured NIGP codes - not the raw "94828-Dental Services;" string the source emits:

{
"platform": "tx-esbd",
"agency": "Parks & Wildlife Department - 802",
"agencyNumber": "802",
"title": "17ft Center Console Mud Boat Packages",
"bidNumber": "802-27-75102-BR",
"status": "Awarded",
"publishedDate": "7/24/2026",
"closeDate": "8/7/2026 2:00 PM",
"nigpCodes": [
{ "code": "12021", "description": "Boats, 21 Feet And Under" },
{ "code": "12063", "description": "Motors, Outboard, Gasoline" },
{ "code": "12090", "description": "Trailers, Boat" }
],
"url": "https://www.txsmartbuy.gov/esbd/802-27-75102-BR",
"created": "7/24/2026 8:25 am",
"lastModified": "8/27/2026 4:10 pm"
}

Fields: platform, agency, agencyNumber, title, bidNumber, status, publishedDate, closeDate, nigpCodes (structured), url, created, lastModified.

Statuses: Posted / Awarded / Addendum Posted / Closed / No Award

Filters

FilterWhat it does
keywordsMatches the title and the NIGP descriptions - searching dental also finds solicitations classified under NIGP Dental Services even when the title never says "dental". This is the filter most existing scrapers get wrong.
nigpCodesRestrict to one or more NIGP codes.
agenciesRestrict to one or more agencies.
statusesAny of the five lifecycle statuses above.
publishedAfter / publishedBeforeDate window (YYYY-MM-DD) - for chunking the full corpus.
pagesScan depth from the newest record (24 records per page). Default 20.
limitStop after this many matches. Default 50.

Example inputs

What the state is buying in a category - keywords reaches the NIGP descriptions too, so one word finds solicitations whose title never uses it.

{ "keywords": ["dental"], "limit": 50 }

Open bids from one agency:

{ "agencies": ["529"], "statuses": ["Posted"], "limit": 100 }

Everything under one NIGP commodity code:

{ "nigpCodes": ["91054"], "statuses": ["Posted"] }

A date window over the full corpus - pair a deep scan with publishedAfter / publishedBefore to cover a quarter:

{ "pages": 2500, "publishedAfter": "2026-01-01", "publishedBefore": "2026-03-31" }

Why this is hard

The source is a live JSON service with no server-side search: the lines filter parameter is accepted and then ignored, so every query is a client-side pass over the corpus, and the corpus is ordered by last modified, not posted date. That means a shallow scan can miss an older solicitation that was touched this week - which is why the run reports the date range it actually covered, so you can tell a genuinely empty result from a scan that stopped too early.

Scanning the full corpus

pages is scan depth from the newest record, not a page offset: pages: 2500 walks every record (~59,000, ~40 min). Measured: 100 pages ~ 95 s, 200 pages ~ 3 min, 500 pages ~ 8 min.

To cover everything reliably, chunk by date window or NIGP code (the source's modified-date ordering is the reason date windows beat plain deep scans):

{"pages": 2500, "publishedAfter": "2026-01-01", "publishedBefore": "2026-03-31"}
{"pages": 2500, "nigpCodes": ["90000"]}

A _meta record reports the scanned range, so you can confirm a chunk was fully covered.

Example output

{"keywords": ["painting"]} - one match, with the NIGP codes already parsed apart:

{
"platform": "tx-esbd",
"agency": "Health & Human Services Commission - 529",
"agencyNumber": "529",
"title": "Dormitory Interior Painting San Antonio State Supported Living Center Building 674",
"bidNumber": "HHS0017699",
"status": "Posted",
"publishedDate": "9/21/2026",
"closeDate": "10/6/2026 10:30 AM",
"nigpCodes": [
{
"code": "91054",
"description": "Painting, Maintenance And Repair Services (Including Caulking)"
},
{
"code": "91461",
"description": "Painting And Wallpapering"
}
],
"url": "https://www.txsmartbuy.gov/esbd/HHS0017699",
"internalId": "561764",
"created": "9/21/2026 5:29 pm",
"lastModified": "9/21/2026 5:32 pm"
}

A run also emits a _meta record reporting the date range the scan actually covered, so an empty result can be told apart from a scan that stopped too early.

The rest of the Texas family

One actor, one job - match your goal:

Your goalActor
Find bids by keyword, NIGP, agency, statustx-esbd-search - you are here
Check one specific bid by its numbertx-esbd-get
Monitor new & changed solicitations on a scheduletx-esbd-changes
Who won state contracts, at what amountstx-esbd-awards
Find / vet a vendor - HUB, SDV, small business, NIGP capabilitytx-cmbl-vendors
Find disabled-veteran (DV) HUB vendorstx-hub-certified
Statewide contracts - who's on each SPD/TxSmartBuy contracttx-smartbuy-contracts
Pull the raw full corpus (query + monitor) - power userssled-tx-procurement

Notes

  • Data source: Texas Comptroller - ESBD. Public state records.
  • No login, no anti-bot - uses the official public JSON API.
  • Full corpus - ~59,000 solicitations (posted, awarded, closed & historical).
  • Also available as a hosted MCP tool (j0401--tx-esbd-search) for AI assistants.

License

MIT - see ./LICENSE.

Disclaimer

This product is an independent data service and is not affiliated with, endorsed by, or sponsored by the State of Texas or any government agency. All solicitation data is public government information. We recommend verifying any opportunity on the official portal before acting.