# AusTender Scraper: Australian Government Contracts API (`mrslm_data/austender-contracts`) Actor

Scrape AusTender contract notices: agency, supplier, ABN, value, UNSPSC, procurement method and dates. Filter by keyword, value, date. Export CSV/JSON.

- **URL**: https://apify.com/mrslm_data/austender-contracts.md
- **Developed by:** [MRSLM Data](https://apify.com/mrslm_data) (community)
- **Categories:** Business, Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 contracts

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Scraper: Australian Government Contracts API

**Australian Government contract notices from AusTender: agency, supplier, ABN, value, UNSPSC, procurement method and dates, filtered by keyword, value and date. $1.50 per 1,000 contracts.**

This Actor reads **AusTender contract notices** through the Australian Government's official Open Contracting (OCDS) API. Every Commonwealth agency must report contracts worth A$10,000 or more, so the dataset shows who buys what from whom, for how much, under which procurement method and UNSPSC category. Filter by keyword, agency, supplier name or ABN, category, value and date, and download clean rows for spreadsheets, BI tools or a CRM.

### What the AusTender Scraper does

The Actor queries the AusTender OCDS API (api.tenders.gov.au) for the date window you choose (the last 7 days by default, or fixed `dateFrom` / `dateTo`), flattens each contract release into one row with buyer, supplier, value, category and dates, applies your filters, and saves the matches. Amendments are skipped unless you ask for them, so totals are not double-counted.

Common uses: **competitor and partner tracking** (which suppliers win Defence or Home Affairs work), **sales prospecting** (which agencies buy your category, and when their contracts end), **market sizing** by UNSPSC category, and **journalism and research** on government spending.

### Who it is for

- **Government sales and bid teams** who want to see every relevant contract award and the incumbent supplier.
- **Consultancies and IT vendors** who track competitors' Commonwealth wins.
- **Analysts, journalists and researchers** who study procurement patterns.
- **Subcontractors** looking for primes that just won large contracts.

### Quick start

1. Press **Start**. The form is already filled with this example input, so the first run returns real rows in under a minute:

```json
{
  "minValueAud": 1000000,
  "publishedWithinDays": 3,
  "maxResults": 20
}
```

2. Swap in your own values, or call the Actor through the Apify API, Make, Zapier, n8n or the Python/JS clients with the same JSON.
3. Download the results as JSON, CSV or Excel from the **Output** tab, or schedule the run to repeat.

### Real example: cyber and security contracts over A$100,000 in the last 30 days

Run on 2 November 2026 with this input:

```json
{
  "searchTerms": [
    "cyber",
    "security"
  ],
  "publishedWithinDays": 30,
  "minValueAud": 100000,
  "maxResults": 300
}
```

Result: **31 contract notices** worth **A$36,258,234** in total, charged 31 contract events (about $0.05).

- Procurement method: Open tender 24, Limited tender 7.
- Busiest buyers: Department of Foreign Affairs and Trade (5), Department of Defence (3), Department of Home Affairs (3), Department of Foreign Affairs and Trade - Australian Aid Program (3).
- The largest six:

| Agency | Supplier | Description | Value (A$) |
|---|---|---|---|
| Department of Foreign Affairs and Trade - Australian Aid Program | THE AUSTRALIAN NATIONAL UNIVERSITY | Pacific Security College - Phase II (Australia) | 22,440,000 |
| Department of Home Affairs | BEMAC SECURITY PTY. LIMITED | CCTV hardware refresh | 2,641,616 |
| Department of Foreign Affairs and Trade - Australian Aid Program | DT GLOBAL ASIA PACIFIC PTY LTD | Provision of the Security Studies Support (Phase 2) under th | 1,430,000 |
| Department of Defence | WSP AUSTRALIA PTY LIMITED | Renewable Energy and Energy Security Technical Support | 1,187,916 |
| Department of Foreign Affairs and Trade | WALSONS SERVICES PVT. LTD. | Security Guard Services | 858,130 |
| Services Australia | CyberCX Pty Ltd | Software Support and Maintenance | 822,398 |

`searchTerms` match the contract description, so "security" also catches guarding and energy-security work. For IT security only, add `"unspscCodes": ["43", "81"]` (IT hardware/software and IT services) or use more specific words such as `cyber`, `penetration`, `SOC`.

### Sample row (real run, trimmed)

```json
{
  "contractNoticeId": "CN4284855",
  "amendmentId": null,
  "isAmendment": false,
  "agencyReference": "4600031142",
  "description": "Building Construction and support and maintenance",
  "agency": "Department of Foreign Affairs and Trade",
  "agencyAbn": "47065634525",
  "supplierName": "J Kadowaki Inc",
  "supplierType": "Organisation",
  "supplierAbn": null,
  "supplierCity": "Honolulu",
  "supplierState": "Outside Australia",
  "supplierPostcode": "96813",
  "supplierCountry": "UNITED STATES",
  "valueAud": 16776906.82,
  "currency": "AUD",
  "procurementMethod": "Limited tender",
  "limitedTenderExemptionCode": "1",
  "unspscCode": "72100000",
  "unspscCodes": [
    "72100000"
  ],
  "startDate": "2026-10-08",
  "endDate": "2028-10-08",
  "publishedAt": "2026-10-27T06:54:37Z",
  "status": "active",
  "ocid": "prod-64266a38f6d047fc84c43d9db6b238eb",
  "releaseId": "prod-64266a38f6d047fc84c43d9db6b238eb-44577b1f7b6c379c961d259de2e2011c",
  "searchUrl": "https://www.tenders.gov.au/Search/CnAdvancedSearch?Type=Cn&KeywordString=CN4284855"
}
```

Also included: contract notice and amendment IDs, agency reference and ABN, supplier type, postcode and country, limited-tender exemption code, all UNSPSC codes, publication time, status and OCDS release IDs.

### Output fields

| Field | What it holds |
|---|---|
| `contractNoticeId` | AusTender CN ID, e.g. CN4284855. |
| `amendmentId / isAmendment` | Set when the row is an amendment to an earlier notice. |
| `agencyReference` | The agency's own reference. |
| `description` | Contract description. |
| `agency / agencyAbn` | Buying agency and its ABN. |
| `supplierName / supplierType / supplierAbn` | Supplier (company or organisation), type and ABN. Names that look like private persons are withheld. |
| `supplierCity / supplierState / supplierPostcode / supplierCountry` | Supplier location. |
| `valueAud / currency` | Contract value in Australian dollars. |
| `procurementMethod` | Open tender, Limited tender or Prequalified tender. |
| `limitedTenderExemptionCode` | Commonwealth Procurement Rules exemption code for limited tenders. |
| `unspscCode / unspscCodes` | Category codes (UNSPSC). |
| `startDate / endDate` | Contract period. |
| `publishedAt` | When the notice was published. |
| `status` | Contract status. |
| `ocid / releaseId` | Open Contracting (OCDS) identifiers. |
| `searchUrl` | Link to the notice search on tenders.gov.au. |

### Filters

- `searchTerms`: words in the contract description (any match), e.g. `software`, `cyber`, `consulting`.
- `agencies`: part of the agency name, e.g. `Defence`, `Home Affairs`, `Services Australia`.
- `suppliers`: part of the supplier name, or an 11-digit ABN.
- `unspscCodes`: category codes or prefixes, e.g. `43` (IT), `80` (management services), `81111500` (software engineering).
- `procurementMethods`: open, limited or prequalified tender.
- `minValueAud`: minimum contract value.
- `publishedWithinDays` (default 7) or `dateFrom` / `dateTo` for a fixed window.
- `includeAmendments`: also return amendment notices. Amendments are matched by the day they were last modified, not the day the original contract was published.
- `maxResults`: cap.

### Export to CSV, Excel, JSON or Google Sheets

Every run saves its rows to an Apify dataset. Open the **Output** tab and pick a format:

- **CSV** or **Excel** for spreadsheets and CRM imports. Nested fields (arrays and objects) are flattened into columns such as `locations/0`.
- **JSON** or **JSONL** to keep the nested structure for code and databases.
- **Google Sheets**: add the Apify "Google Sheets export" integration to the Actor or schedule, and every finished run is appended to a sheet.

You can also copy the dataset link from the **Storage** tab. It is a stable API URL your own scripts can download at any time.

### Use it from Make, Zapier or n8n

The Actor has official Apify modules in all three tools:

- **Make**: add the *Apify → Run an Actor* module, choose `mrslm_data/austender-contracts`, paste the JSON input, then add *Apify → Get Dataset Items* and map the fields into Google Sheets, HubSpot, Airtable or Slack.
- **Zapier**: use the *Apify* app with the trigger *Finished Actor Run* (set up a schedule in Apify) or the action *Run Actor*, then *Fetch Dataset Items*.
- **n8n**: use the *Apify* node (Run Actor + Get dataset items), or a plain HTTP Request node calling the run-sync endpoint shown below.

### Schedule it

In Apify Console open **Schedules → Create new**, choose this Actor and a cron such as `0 7 * * 1-5` (07:00 every working day). With `publishedWithinDays: 1` each daily run returns only the notices published since the day before. Pair the schedule with an integration (e-mail, Slack, Google Sheets or a webhook) so new rows reach you without opening Apify.

### Call it from the API (Python, JavaScript or curl)

The input below is the same JSON you would paste into the form.

**Python** (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("mrslm_data/austender-contracts").call(run_input={
  "searchTerms": [
    "software"
  ],
  "minValueAud": 100000,
  "publishedWithinDays": 7
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row)
```

**JavaScript / Node.js** (`npm install apify-client`):

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

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('mrslm_data/austender-contracts').call({"searchTerms": ["software"], "minValueAud": 100000, "publishedWithinDays": 7});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, 'contracts');
```

**curl** (runs the Actor and returns the rows in one call, for runs under 5 minutes):

```bash
curl -X POST "https://api.apify.com/v2/acts/mrslm_data~austender-contracts/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>&format=csv" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["software"], "minValueAud": 100000, "publishedWithinDays": 7}'
```

### Use it from AI agents and chat assistants (MCP)

Apify's MCP server (`https://mcp.apify.com`) exposes Store Actors as tools for Claude, ChatGPT, Cursor and other MCP clients. Add the server with your Apify token, enable `mrslm_data/austender-contracts`, and ask in plain language, for example: *"Show Australian Government software contracts over A$100,000 published in the last 7 days, with supplier and agency."* The assistant fills the input, runs the Actor and reads the rows back. You pay the same per-contract price as a normal run.

### What it costs

- **Contract: $1.50 per 1,000 saved** (Silver $1.35, Gold $1.20)
- Plus $0.00005 per run. You pay only for contracts saved after your filters. Searches with no matches are free.

Worked example: the cyber and security run below saved 31 contracts for about **$0.05**. A full month of every Commonwealth contract notice is roughly 5,000-8,000 rows, about $8-12. Narrow by keyword, agency, UNSPSC or value to pay only for what you need.

### Tips

- **Incumbent research:** set `suppliers` to a competitor's name or ABN and a wide date range to see all their Commonwealth contracts.
- **Renewal pipeline:** pull a year of contracts in your category and sort by `endDate` to see which ones expire next.
- **Cleaner categories:** UNSPSC prefixes are more precise than keywords; combine both for the best recall.
- **Big windows:** a year of all notices is tens of thousands of rows; add a keyword, agency or category to keep the bill low.

### Limits

- Commonwealth (federal) contracts only. State and territory portals (NSW eTendering, Buy for Victoria, QTenders and others) are separate systems.
- Contract notices are awards, not open tenders (approaches to market).
- Values are as reported by agencies; amendments can change them later (turn on `includeAmendments` to see changes).
- Contact-point names, phones and e-mails are never output.

### FAQ

**Where does the data come from?** From the official AusTender OCDS API (api.tenders.gov.au) of the Australian Department of Finance, published under CC BY 3.0 AU.

**Is any personal data included?** Contact-point names, phones and e-mails are never output. A supplier name that looks like a private person (no business words) is replaced with null, so rows describe companies and organisations.

**How fresh is it?** Live. Agencies publish contract notices every working day.

**Can I get only new records each day?** Yes. Use the date window input and schedule the Actor; each run returns what is new in that window.

**What is OCDS?** The Open Contracting Data Standard, an international format for public procurement data. AusTender publishes contract notices in OCDS through its public API.

**How far back can I go?** Use `dateFrom` / `dateTo` for any past window; long windows simply take longer and return more rows.

### Data source, freshness and licence

Source: AusTender OCDS API (api.tenders.gov.au), Australian Government Department of Finance. Agencies publish contract notices every working day, and every run queries the API live. Licence: Creative Commons Attribution 3.0 Australia (CC BY 3.0 AU); credit "Department of Finance, AusTender" when you republish.

### Is it legal?

This Actor only reads official open-data APIs that the publisher offers to everyone without a login or key. It obeys robots.txt, stays under the published rate limits, and never tries to get past logins, paywalls, captchas or bot checks. Contact-point names, phones and e-mails are never output. A supplier name that looks like a private person (no business words) is replaced with null, so rows describe companies and organisations. You are responsible for how you use the data: follow the source's licence and terms and the privacy and marketing laws that apply to you (GDPR, CAN-SPAM, PECR, etc.). This tool is independent and not affiliated with or endorsed by the data publisher.

# Actor input Schema

## `searchTerms` (type: `array`):

Match the contract description, e.g. software, cyber, consulting. One per line.

## `agencies` (type: `array`):

Part of the agency name, e.g. Defence, Home Affairs, Services Australia.

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

Part of the supplier name, or an 11-digit ABN.

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

Category codes or prefixes, e.g. 43 (IT), 81111500 (software engineering).

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

Default: all.

## `minValueAud` (type: `integer`):

0 = no minimum.

## `publishedWithinDays` (type: `integer`):

Contracts published in the last N days.

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

Optional fixed start date (YYYY-MM-DD). Overrides "Published within".

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

Optional fixed end date (YYYY-MM-DD). Default today.

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

Also return amendments to earlier contract notices. Amendments are matched by the day they were last modified, not the day the original contract was published.

## `maxResults` (type: `integer`):

Safety cap on saved contracts. Default 20. 0 = no cap. Your max cost per run is always respected.

## Actor input object example

```json
{
  "minValueAud": 1000000,
  "publishedWithinDays": 3,
  "includeAmendments": false,
  "maxResults": 20
}
```

# Actor output Schema

## `results` (type: `string`):

All contracts as a dataset (JSON, CSV, Excel and more via the API or Console).

## `summary` (type: `string`):

Matches and saved rows per search, failures and the stop reason.

# 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 = {
    "minValueAud": 1000000,
    "publishedWithinDays": 3,
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrslm_data/austender-contracts").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 = {
    "minValueAud": 1000000,
    "publishedWithinDays": 3,
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("mrslm_data/austender-contracts").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 '{
  "minValueAud": 1000000,
  "publishedWithinDays": 3,
  "maxResults": 20
}' |
apify call mrslm_data/austender-contracts --silent --output-dataset

```

## MCP server setup

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

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/vDIMc0dwkbymOnya4/builds/MdPujnJrWpeNyOgFK/openapi.json
