Bid Banana
PricingBid helpAPILog inStart free trial
Log inStart free trial
Bid Banana
SearchPricingBid helpBrowse bidsAPISupportFAQPrivacy PolicyTerms of UseAI Use Policy

This website and its content is copyright of The Bid Lab © 2026. The Bid Lab is a trademark of Bid Lab, LLC. All rights reserved.

For developers & platforms

The Bid Banana API

Every open government bid and awarded contract we track, available to your product through one endpoint.

POST https://v1.api.bidbanana.com
curl https://v1.api.bidbanana.com -d '{
    "api_key": "YOUR_API_KEY",
    "operation": "search",
    "keywords": "fruit",
    "category": "open",
    "state": "FL",
    "max_results": 25
  }'
1,600,000+
RFPs and contracts
All 50
US States
Daily
Updates

Get API access

An annual subscription, billed on its own. All you need is a Bid Banana account. Higher volume than this? Talk to us.

  • 10,000 records per month
  • Open bids, closed bids, and awarded contracts
  • 1.6M+ records across all 50 US states, refreshed daily
  • Winning vendors, award values, and contract terms
  • One REST endpoint — JSON in, JSON out
  • Email support

Subscribe to the Bid Banana API

Billed annually. Once you're subscribed you can create your key and start making calls right away.

Get API access →

Try it right now

Run a real query against live data. No key, no signup — just to show you what comes back.

Active solicitations still accepting submissions. The default.

POST https://v1.api.bidbanana.com
{
  "api_key": "YOUR_API_KEY",
  "operation": "search",
  "keywords": "fruit",
  "category": "open",
  "state": "FL",
  "max_results": 5
}
Response
// Run a query to see the response.

One endpoint, JSON in and out

Every request is a POST to https://v1.api.bidbanana.com with your key in the body. That's the whole integration.

cURL
curl https://v1.api.bidbanana.com -d '{
  "api_key": "YOUR_API_KEY",
  "operation": "search",
  "keywords": "fruit",
  "category": "open",
  "state": "FL",
  "max_results": 25
}'

Open bids, closed bids, and awarded contracts

One category parameter switches between three datasets.

"open"

Active solicitations still accepting submissions. The default.

"closed"

Past solicitations no longer open. Same fields as open bids.

"awarded"

Awarded contracts — every bid field plus the winning vendors, award value, and contract terms.

Full developer reference

Every parameter, the complete response shape, all 36 bid fields and the 13 award fields, error handling, and usage limits.

Questions

We meter returned records, not API calls. One request that returns 117 matches uses 117 of your 10,000 monthly records, and the same record returned twice counts twice — so fetch what you need and set max_results deliberately.

Records are refreshed daily from their source agencies. Every result carries last_updated_ms1970, and you can pass updated_since_ms1970 to fetch only what has changed since your last sync — the efficient way to keep a local copy current.

That depends on volume and how it’s presented. Each result includes bb_page_url_partner, a link that opens the bid on Bid Banana without a login and without counting against the anonymous view limit — That’s the intended way to surface an opportunity to your audience. If you’re redistributing data at scale, talk to us about a partnership first.

The download links in doc_files expire 15 minutes after the API call that returned them was made. You should download any solicitation files you want soon after each API call you make. Or contact us if you’d like longer-term access to our solicitation file library.

No need! All data is present in the JSON response body, including any errors that may have occurred (designated by the presence of an "error" field). You can additionally check HTTP status if you prefer — Good responses come back as 200s, and errors come back as 400s.

Searches return an error once you’ve used your 10,000 records, and work again as soon as the next month starts. You can check your usage at any time on your API Settings page — And if you need more, just reach out and we’ll raise your limit or size a partnership around your volume.

Yes. The category parameter selects the dataset: "open" for active solicitations, "closed" for past ones, and "awarded" for contracts that have been won — which adds the winning vendors, the final award value, and the contract terms.

Not a separate sandbox. The playground on this page runs live queries so you can see real responses before writing any code, and your own key works against the same endpoint from day one.

Something not covered? [email protected].

Partnerships

API access comes with every annual plan — create a key and start calling today. Partnerships are for platforms that put our data in front of audiences we don’t reach ourselves — a vertical, a region, a workflow — at a volume or in a form the standard plan doesn’t cover, and not for products that would simply resell it. If that’s you, let’s talk.

What a good fit looks like

  • You're building for a defined audience — an industry vertical, a region, a community of buyers, a workflow tool.
  • Your users would act on government bid and award opportunities if they could see the relevant ones.
  • You can describe where our data shows up in your product: a feed, alerts, search results, an embedded view.
  • The data makes your product more useful — it isn't the product you're selling.
  • You're past prototype, or close, and ready to integrate.

What happens after you write to us

  1. 1

    Tell us about your product and audience in the form below.

  2. 2

    A person reads it — usually within two business days. We check the fit properly rather than approving on volume.

  3. 3

    If it works, we'll set up a call to scope data access, rate limits and pricing.

  4. 4

    Sign a partnership agreement and we'll provision access shaped to your use case.

Tell us what you’re building

Every partnership is scoped individually — data access, rate limits and pricing all depend on what you’re building and who it reaches. The more specific you can be here, the faster we can give you a real answer.

0/600 characters