buy.nsw.gov.au APIbuy.nsw.gov.au ↗
Access NSW Government tender opportunities, contract award notices, and supplier hub data from buy.nsw.gov.au via a structured REST API.
curl -X GET 'https://api.parse.bot/scraper/bc2c3e8a-2ae7-4cf7-a718-71f6003213da/list_opportunities?page=1&sort=LastUpdated' \ -H 'X-API-Key: $PARSE_API_KEY'
Retrieve a paginated list of open tender opportunities. Supports filtering by keyword and opportunity type. Results are sorted by last updated date by default.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| sort | string | Sort order for results. |
| query | string | Search keyword to filter opportunities by title or description. |
| types | string | Comma-separated opportunity types to filter by (e.g. RFT, RFQ, RFP). |
{
"type": "object",
"fields": {
"items": "array of opportunity objects with title, opportunity_id, url, description, agency, type, category, closing_date, status",
"current_page": "integer, current page number",
"total_results": "integer, total number of matching opportunities"
},
"sample": {
"data": {
"items": [
{
"url": "https://buy.nsw.gov.au/prcOpportunity/06A7F3BC-56FC-4387-95EDB28401FE8557",
"type": "Request for tender (RFT)",
"title": "NSW Police Academy Boiler Heaters Replacement",
"agency": "NSW Police Force",
"status": "",
"category": "Building and property",
"description": "Goulburn Academy's existing gas-fired boiler heating plant has reached end of life and requires replacement.",
"closing_date": "25-May-2026 15:00",
"opportunity_id": "06A7F3BC-56FC-4387-95EDB28401FE8557"
}
],
"current_page": 1,
"total_results": 138
},
"status": "success"
}
}About the buy.nsw.gov.au API
This API exposes 7 endpoints covering NSW Government procurement data from buy.nsw.gov.au, including open tender opportunities, contract award notices (CAN), and standing offer notices (SON). The list_opportunities endpoint returns paginated results filterable by keyword, opportunity type (RFT, RFQ, RFP), and sort order, while get_opportunity_details delivers full metadata, content sections, and associated file links for any individual tender by UUID.
Tender Opportunities
The list_opportunities endpoint returns an array of opportunity objects, each with fields including title, opportunity_id, agency, type, category, closing_date, and status. You can filter by query (keyword matching title and description), types (comma-separated values like RFT, RFQ, RFP), and page for pagination, with total_results returned alongside each response. For a zero-parameter snapshot, get_top_opportunities returns the 10 most recently updated open opportunities. To drill into a specific tender, pass its UUID to get_opportunity_details, which returns structured sections (description, scope, assessment_criteria), a details object (agency, type, category, locations), and an array of files with names and download URLs.
Contract Notices
list_notices covers both Contract Award Notices (CAN) and Standing Offer Notices (SON). Filter by noticeTypes, categories (comma-separated slugs such as building-and-property or healthcare), or a free-text query. Each notice object includes title, notice_id, agency, publish_date, and contract_period. Passing a notice UUID to get_notice_details returns the full details object, which includes estimated_amount_payable_inc_gst — useful for spend analysis.
Categories and Supplier Hub
list_opportunity_categories returns every procurement category available as a filter, with a human-readable label, a value slug, and an opportunity_count indicating how many open tenders sit in each category. This is useful for building category-driven dashboards without pre-hardcoding slugs. get_supplier_hub returns the main text content and a structured links array from the Supplier Hub landing page, covering navigation resources aimed at both suppliers and buyers.
- Monitor new open tenders by agency and type to automate business development alerts
- Track closing_date fields across open opportunities to surface expiring tenders before deadlines
- Aggregate estimated_amount_payable_inc_gst from contract award notices for government spend analysis
- Build a category-filtered procurement dashboard using opportunity_count from list_opportunity_categories
- Download tender documents programmatically using file URLs returned by get_opportunity_details
- Identify standing offer notice activity in specific categories like healthcare or building-and-property
- Compare contract award frequency by agency using notice publisher and type fields from list_notices
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 250 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does buy.nsw.gov.au have an official developer API?+
What does get_opportunity_details return beyond what list_opportunities provides?+
sections object with named content blocks (description, scope, assessment_criteria), a files array containing downloadable document names and URLs, and a fuller details object that includes location metadata. list_opportunities returns summary fields only — title, agency, type, category, closing_date, status.Can I filter opportunities by agency or closing date range?+
query), opportunity type (types), and procurement category (via list_opportunity_categories slugs fed to the search). Filtering by specific agency name or closing date range is not currently exposed as a dedicated parameter. The API covers keyword and type-based filtering. You can fork it on Parse and revise it to add agency-level or date-range filter parameters.Does the API cover historical closed or awarded tenders, or only active ones?+
How does pagination work across list_opportunities and list_notices?+
page parameter and return current_page and total_results in every response. There is no explicit page_size parameter — page size is fixed by the source. Divide total_results by the item count in a single response to calculate the number of pages needed to iterate the full result set.