# AusTender Contract Notices - Australian Government Contracts (`jpopendata/australia-austender`) Actor

Australian Government contract notices from AusTender's official OCDS API: agency, UNSPSC, value (AUD), contract period, procurement method and supplier companies with ABN. Filter by keyword, agency, UNSPSC, value, state or contract end date. CC BY 3.0 AU. Unofficial; not affiliated with AusTender.

- **URL**: https://apify.com/jpopendata/australia-austender.md
- **Developed by:** [JP Open Data](https://apify.com/jpopendata) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## AusTender Contract Notices — Australian Government Contracts

Get **Australian Government contracts** from **AusTender** as clean rows: every contract notice (CN) that Commonwealth agencies publish for contracts worth AUD 10,000 or more — agency, description, UNSPSC category, value, contract period, procurement method and the **supplier company with its ABN**.

Data comes live from AusTender's **official OCDS API** (Department of Finance). No login, no API key, no browser. Shared fields use the same names as our UK (Find a Tender / Contracts Finder) and EU (TED) tender Actors — `title`, `buyerName`, `procurementMethod`, `valueAmount`, `contractStart` / `contractEnd`, `awardedSuppliers`, `noticeUrl` — so the datasets are easy to combine.

### What you get

- **One row per contract notice** (optionally one per amendment): CN ID, description, agency reference, agency and its division/branch, UNSPSC code, procurement method (open / limited / prequalified tender), limited-tender exemption or condition, value in AUD (GST inclusive), contract start and end, publication date.
- **Suppliers with ABN, city, postcode and state** when the supplier is a company or a public body.
- **Contracts coming up for renewal**: search by contract **end date** (e.g. every IT contract ending in the next 90 days) or by start date, not only by publication date.
- **Filters**: keywords, agency, UNSPSC prefix, supplier name or ABN, supplier state, procurement method, value range, date window, amendments on/off.
- **No personal data**: contact officers' names, e-mails and phone numbers are never output; supplier names that may be private persons (sole traders, family trusts, partnerships) are withheld.

### Quick start — verified input

IT contracts (UNSPSC segment 43) that end in the next 90 days:

```json
{
  "dateField": "contractEnd",
  "daysAhead": 90,
  "unspscCodes": ["43"],
  "maxItems": 20
}
```

An empty input `{}` also works: the newest 20 contract notices published in the last 7 days.

### Input

| Field | Example | What it does |
|---|---|---|
| `keywords` | `["software", "cyber security"]` | Whole words or phrases in the description, agency reference, agency, division/branch and supplier name. Any keyword matches. |
| `buyers` | `["Department of Defence", "CSIRO"]` | Part of the agency's name. |
| `unspscCodes` | `["43", "8012"]` | UNSPSC codes or prefixes (2, 4, 6 or 8 digits): `43` = information technology, broadcasting and telecommunications; `8012` = legal services. |
| `suppliers` | `["Leidos", "KPMG"]` | Part of the supplier's name (shown names only). |
| `supplierAbns` | `["51 002 260 602"]` | Supplier ABNs (shown suppliers only). |
| `procurementMethods` | `["open"]` | `open`, `limited`, `prequalified`. |
| `supplierStates` | `["VIC", "New South Wales"]` | `ACT`, `NSW`, `NT`, `QLD`, `SA`, `TAS`, `VIC`, `WA` or `Outside Australia`. |
| `valueMin` / `valueMax` | `100000` / `5000000` | Contract value range in AUD (GST inclusive). |
| `dateField` | `"contractEnd"` | What the window searches: `published` (default), `lastModified` (new and amended notices), `contractStart`, `contractEnd`. |
| `daysBack` | `7` | For `published` / `lastModified`: the last N days up to today (Canberra time). |
| `daysAhead` | `90` | For `contractStart` / `contractEnd`: from today up to N days ahead. |
| `dateFrom` / `dateTo` | `"2026-09-01"` | Explicit window (at most 366 days; the API starts on 2013-01-01). `DD/MM/YYYY`, `"1-Sep-2026"`, `"-30d"`, `"+180d"` also work. |
| `includeAmendments` | `true` | Also output amendment notices (IDs like `CN1234567-A1`) as rows. Use with `lastModified`, `contractStart` or `contractEnd`. |
| `maxItems` | `20` | Maximum rows. |
| `maxApiRequests` | `30` | Hard request budget (one request returns up to 100 notices). |

#### Common input mistakes

| You wrote | Write instead | Why |
|---|---|---|
| `"unspscCodes": ["IT"]` | `"unspscCodes": ["43"]` | UNSPSC codes are digits; put words in `keywords`. |
| `"dateField": "contractEnd", "daysBack": 90` | `"dateField": "contractEnd", "daysAhead": 90` | Contract end dates are in the future: use `daysAhead`. |
| `"dateField": "published", "includeAmendments": true` | `"dateField": "lastModified", "includeAmendments": true` | The publication-date search returns new contract notices only. |
| `"supplierStates": ["Newcastle"]` | `"supplierStates": ["NSW"]` | States, not cities (only the state capitals are accepted as a shortcut, e.g. "Sydney" = NSW). |
| `"supplierAbns": ["123 456 789"]` | `"supplierAbns": ["51 002 260 602"]` | An ABN has 11 digits; a 9-digit ACN is not accepted. |

### Output example

```json
{
  "id": "CN4282114",
  "cnId": "CN4282114",
  "amendmentId": null,
  "noticeType": "contract",
  "stage": "award",
  "status": "awarded",
  "isOpenForBids": false,
  "title": "Software Licence Subscription",
  "agencyReferenceId": "3000846128",
  "buyerName": "Department of Defence",
  "buyerAbn": "62950639680",
  "buyerDivision": "NAVY",
  "buyerBranch": "Navy Strategic Command",
  "mainUnspscCode": "43230000",
  "unspscCodes": ["43230000"],
  "procurementMethod": "limited",
  "procurementMethodDetails": "Limited tender",
  "limitedTenderExempt": false,
  "exemptionCode": null,
  "exemption": null,
  "limitedTenderReasonCode": "AD",
  "limitedTenderReason": "10.3.e. Additional deliveries by original supplier intended as replacement parts, extensions, or continuation for existing goods or services for compatibility.",
  "valueAmount": 536064.71,
  "valueCurrency": "AUD",
  "awardedValue": 536064.71,
  "awardedCurrency": "AUD",
  "tenderDeadline": null,
  "contractStart": "2026-09-28",
  "contractEnd": "2027-01-30",
  "awardDate": "2026-10-12",
  "publishedDate": "2026-10-12",
  "publishedAt": "2026-10-12T04:20:49Z",
  "supplierName": "NORTHROP GRUMMAN AUSTRALIA PTY LIMITED",
  "supplierAbn": "78156458981",
  "supplierNameWithheld": false,
  "supplierCity": "SYMONSTON",
  "supplierPostcode": "2609",
  "supplierState": "ACT",
  "supplierCountry": "Australia",
  "awardedSuppliers": ["NORTHROP GRUMMAN AUSTRALIA PTY LIMITED"],
  "suppliersWithheld": 0,
  "matchedKeywords": [],
  "ocid": "prod-7ef5699bf4454923ad44c29c14c7be6f",
  "releaseId": "prod-7ef5699bf4454923ad44c29c14c7be6f-555aeb1a9d7f39689229b9302ab6fd7d",
  "noticeUrl": "https://api.tenders.gov.au/ocds/findById/CN4282114",
  "source": "AusTender - Australian Government procurement information system (Department of Finance)",
  "sourceUrl": "https://www.tenders.gov.au/",
  "license": "AusTender materials are released by the Department of Finance. AusTender materials are subject to change and should be verified on the AusTender website to ensure the information is up to date and correct: www.tenders.gov.au. Licensed under Creative Commons Attribution 3.0 Australia (CC BY 3.0 AU, https://creativecommons.org/licenses/by/3.0/au/). Contract notices from the AusTender OCDS API. Changed by this tool: selected fields only, values and dates normalised, contact details removed, names of possible private persons withheld. Unofficial tool, not affiliated with or endorsed by the Department of Finance or the Commonwealth of Australia.",
  "retrievedAt": "2026-10-12T19:39:44.456Z"
}
```

#### Main fields

| Field | Meaning |
|---|---|
| `id` | Row key: the CN ID, or the amendment ID (`CN1234567-A1`) for an amendment row. |
| `noticeType` | `contract` (the original contract notice) or `amendment`. |
| `title` | The contract description written by the agency (contact details and personal names removed). |
| `agencyReferenceId` | The agency's own reference for the contract. |
| `valueAmount` | Contract value in AUD including GST, for the life of the contract. On an amendment row it is the value AusTender reports with that amendment. |
| `contractStart` / `contractEnd` | Contract period (Canberra calendar days). `null` when the agency gave no date. |
| `publishedDate` / `publishedAt` | When this notice was published (Canberra day / UTC time). |
| `awardDate` | The award (original publication) date of the contract. |
| `exemption` / `limitedTenderReason` | Why a limited tender was used (Commonwealth Procurement Rules Appendix A exemption / Division 2 condition). |
| `supplierName` / `supplierAbn` | Supplier company or public body and its ABN; `null` when withheld. |
| `supplierNameWithheld` | `true` when the supplier may be a private person (see below). State and country are still given. |
| `stage`, `status`, `isOpenForBids`, `tenderDeadline` | Kept for compatibility with our UK and EU tender datasets: a contract notice is always an award (`tenderDeadline` is always `null`). |
| `noticeUrl` | The official OCDS record of the notice on the AusTender API (JSON). To see the web page, search the CN ID on tenders.gov.au. |

### How it works

1. Splits your window into API queries (a month each for publication/modification dates, newest first; a week each for contract start/end dates, earliest first).
2. Reads each query page by page (100 notices per page) through AusTender's own pagination links.
3. Turns each notice into a row, applies your filters and stops as soon as it has `maxItems` rows.

Requests are sent one at a time, at least 2 seconds apart, within a hard request budget; `Retry-After` is honoured. Only the official API is used — never the AusTender website.

### Empty results?

- **Weekends and public holidays**: agencies publish on working days. A one-day window on a Sunday is often empty.
- **Too many filters together**: a UNSPSC code plus a state plus a value range can match nothing in a short window. Widen `daysBack` / `daysAhead` first.
- **Supplier filters** only match suppliers whose names are shown; a withheld supplier never matches.
- **Amendments** only come with `lastModified`, `contractStart` or `contractEnd` plus `includeAmendments`.
- A run that matches nothing ends successfully with 0 rows and a warning in the log; you are not charged for rows.

### Personal data (GDPR and the Australian Privacy Act)

AusTender contract notices can contain personal data: the agency's contact officer (name, e-mail, phone) and sometimes a private person who won a contract (consultants with an ABN, sole traders, family trusts). This Actor leaves it out:

- Contact officers' names, e-mail addresses, phone numbers and street addresses are **never output**.
- **Supplier names** are shown only when they carry an Australian company word (Pty Ltd, Limited, Inc, Corporation, No Liability, Co-operative), an unambiguous foreign company form (GmbH, LLC, PLC, Sdn Bhd, ...), a public-body word (University, Department, Council, Commission, ...), or belong to a short list of national professional-services firms (KPMG, Deloitte, EY, PwC, major law firms). Names with "trading as", "trustee", "family trust", a personal title, or no organisation evidence are withheld together with their ABN, city and postcode. Some real companies are withheld too; that is intended.
- Descriptions are scrubbed: e-mail addresses, phone numbers, URLs and "title + name" sequences (e.g. "Dr ...") are replaced, and a withheld supplier's name is removed from its row.

You remain responsible for how you process the data under the GDPR, the Australian Privacy Act 1988 and other laws that apply to you.

### Source, licence and attribution

- Source: AusTender, the Australian Government procurement information system, Department of Finance — https://www.tenders.gov.au — through its official OCDS API (https://github.com/austender/austender-ocds-api).
- Licence: AusTender's terms of use state that, with the exception of the Commonwealth Coat of Arms, Approach to Market (ATM) material and where otherwise noted, all materials on AusTender are licensed under **Creative Commons Attribution 3.0 Australia (CC BY 3.0 AU)**. Every API response carries the same licence.
- Attribution required by AusTender's terms of use (repeated in the `license` field of every row):
  - AusTender materials are released by the Department of Finance.
  - AusTender materials are subject to change and should be verified on the AusTender website to ensure the information is up to date and correct: www.tenders.gov.au.
- This dataset is a restructured, partial copy (selected fields, normalised values and dates, personal data removed). Verify important details on AusTender.
- **Open tenders (Approach to Market) are not included**: AusTender's terms exclude ATM material from the open licence and do not allow it to be redistributed or commercialised without written approval.
- The Commonwealth Coat of Arms is not used.

### Disclaimer

This is an **unofficial** tool. It is **not affiliated with or endorsed by** the Department of Finance, AusTender or the Commonwealth of Australia. It reads **public data only** through AusTender's public API. You are responsible for complying with AusTender's terms of use and the laws that apply to your use of the data.

# Actor input Schema

## `keywords` (type: `array`):

Optional. Words or phrases searched as whole words, any case, in the contract description, the agency reference, the agency and its division/branch and the supplier name, e.g. "software", "cyber security", "legal services". A notice matches if it contains ANY of them. Leave empty for all notices.

## `buyers` (type: `array`):

Optional. Part of the procuring agency's name, e.g. "Department of Defence", "Taxation", "CSIRO", "Services Australia". Any match counts.

## `unspscCodes` (type: `array`):

Optional. UNSPSC category codes or prefixes (2, 4, 6 or 8 digits): "43" (information technology, broadcasting and telecommunications: the whole segment), "8012" (legal services), "80101500" (business and corporate management consultation), "72" (building, construction and maintenance services). A notice matches when its category starts with any of them.

## `suppliers` (type: `array`):

Optional. Part of the supplier's name, e.g. "Accenture", "Leidos", "KPMG". Only supplier names that are shown can match (names of possible private persons are withheld and never match).

## `supplierAbns` (type: `array`):

Optional. Australian Business Numbers of suppliers (11 digits, spaces allowed), e.g. "51 002 260 602". Only suppliers whose name is shown can match.

## `procurementMethods` (type: `array`):

Optional. Any of: open (Open tender), limited (Limited tender), prequalified (Prequalified tender). Empty = all methods.

## `supplierStates` (type: `array`):

Optional. Where the supplier is located: ACT, NSW, NT, QLD, SA, TAS, VIC, WA (full names such as "Victoria" work too) or "Outside Australia". Empty = everywhere.

## `valueMin` (type: `integer`):

Optional. Minimum contract value in Australian dollars, including GST, e.g. 100000. Notices without a value are dropped when a value range is set.

## `valueMax` (type: `integer`):

Optional. Maximum contract value in Australian dollars, including GST, e.g. 5000000.

## `dateField` (type: `string`):

Which date the window searches: published = new contract notices published in the window (default); lastModified = notices created or changed in the window (use with Include amendments to get amendment notices); contractStart = contracts starting in the window; contractEnd = contracts ending in the window (find contracts coming up for renewal).

## `daysBack` (type: `integer`):

For published / lastModified: search from N days ago up to today (1..366, Canberra calendar days). Ignored when Date from is set. Agencies publish about 150-400 contract notices per working day; with Max rows the run stops early once it has enough.

## `daysAhead` (type: `integer`):

For contractStart / contractEnd: search from today up to N days ahead (1..731). Ignored when Date from / Date to are set. Example: contractEnd with 90 = contracts ending in the next 90 days.

## `dateFrom` (type: `string`):

Optional. First day of the window, YYYY-MM-DD, e.g. "2026-09-01". DD/MM/YYYY (day first), "1-Sep-2026", "today", "yesterday" and relative days such as "-30d" or "+180d" also work. The window can be at most 366 days; AusTender's API starts on 2013-01-01.

## `dateTo` (type: `string`):

Optional. Last day of the window, YYYY-MM-DD. Empty = today (published / lastModified) or Date from + Days ahead (contractStart / contractEnd).

## `includeAmendments` (type: `boolean`):

Also output amendment notices (IDs like CN1234567-A1) as their own rows. AusTender's publication-date search returns new contract notices only, so use it with dateField = lastModified (or contractStart / contractEnd).

## `maxItems` (type: `integer`):

Maximum rows (1..5000). Rows come in AusTender's order: newest notices first (published / lastModified) or the earliest week of the window first (contractStart / contractEnd). You are charged per row.

## `maxApiRequests` (type: `integer`):

Hard budget of requests to the AusTender API for the whole run (1..500). Requests are sent one at a time at least 2 seconds apart; one request returns up to 100 notices. If the budget runs out the run still succeeds with what it found (complete=false in RUN_SUMMARY).

## `proxyConfiguration` (type: `object`):

Optional and normally not needed: the AusTender API answers Apify datacenter IPs. If set, one sticky session is used for the whole run (never rotation).

## Actor input object example

```json
{
  "keywords": [],
  "buyers": [],
  "unspscCodes": [],
  "suppliers": [],
  "supplierAbns": [],
  "procurementMethods": [],
  "supplierStates": [],
  "dateField": "published",
  "daysBack": 7,
  "daysAhead": 90,
  "dateFrom": "",
  "dateTo": "",
  "includeAmendments": false,
  "maxItems": 20,
  "maxApiRequests": 30,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `records` (type: `string`):

One row per AusTender contract notice (and, with includeAmendments, per amendment) with the CC BY 3.0 AU attribution (source, sourceUrl, license, retrievedAt) on every item.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [],
    "buyers": [],
    "unspscCodes": [],
    "suppliers": [],
    "supplierAbns": [],
    "procurementMethods": [],
    "supplierStates": [],
    "dateField": "published",
    "daysBack": 7,
    "daysAhead": 90,
    "dateFrom": "",
    "dateTo": "",
    "includeAmendments": false,
    "maxItems": 20,
    "maxApiRequests": 30,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("jpopendata/australia-austender").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keywords": [],
    "buyers": [],
    "unspscCodes": [],
    "suppliers": [],
    "supplierAbns": [],
    "procurementMethods": [],
    "supplierStates": [],
    "dateField": "published",
    "daysBack": 7,
    "daysAhead": 90,
    "dateFrom": "",
    "dateTo": "",
    "includeAmendments": False,
    "maxItems": 20,
    "maxApiRequests": 30,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("jpopendata/australia-austender").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [],
  "buyers": [],
  "unspscCodes": [],
  "suppliers": [],
  "supplierAbns": [],
  "procurementMethods": [],
  "supplierStates": [],
  "dateField": "published",
  "daysBack": 7,
  "daysAhead": 90,
  "dateFrom": "",
  "dateTo": "",
  "includeAmendments": false,
  "maxItems": 20,
  "maxApiRequests": 30,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call jpopendata/australia-austender --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jpopendata/australia-austender"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/uUnZLIEL8o91B6TsC/builds/t3RRKpsuRKxcTwbLU/openapi.json
