# CRICOS Register Lookup (Australia) (`yappman/cricos-register`) Actor

Australian education providers registered to enrol overseas students (CRICOS): search by name, state, type or postcode, or look up codes. One row per provider with its type, state, postcode, city, capacity and course counts. Names are left out when they show no organisation cue. CC BY 2.5 AU.

- **URL**: https://apify.com/yappman/cricos-register.md
- **Developed by:** [Russell Yapp](https://apify.com/yappman) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 records

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

## CRICOS Register Lookup: Australian education providers for overseas students (CRICOS)

Not affiliated with or endorsed by the Department of Education.

Search the Australian CRICOS register of education providers that may enrol overseas students, or look up providers by their CRICOS provider code. One fixed row per provider: its type, state, postcode and city, institution capacity and how many courses it has registered. Ready for a spreadsheet, a script or an AI agent.

### When to use it, and when not to

Use it to build a list of providers by state, postcode or institution type, to check that a provider code is in the register, to see how many courses a provider has registered, or to find providers by a word in their name.

Do not use it to decide whether a provider may enrol a student, or as proof of a provider's registration: the register itself is the authority, and this Actor returns a dated copy of two of its files. It holds no course details, fees, locations or contact details, only the counts and fields below.

### Modes

- `search` (default): providers that pass your filters, sorted by provider code.
  - `nameContains`: text of 2 to 80 characters, matched without regard to capitals against the provider name in the output. A provider whose name is left out never matches, so a search cannot reveal a left-out name.
  - `states`: any of `ACT`, `NSW`, `NT`, `QLD`, `SA`, `TAS`, `VIC`, `WA`.
  - `institutionTypes`: types spelled as the register spells them (for example `Government`, `Private`); capitals do not matter. A type the register does not have refuses the run before anything is charged.
  - `postcodes`: up to 50 four-digit postcodes as text.
  - `maxItems`: the most rows returned (default 100 through the API, 10 in the Console form; at most 2,000).
- `lookup`: give `providerCodes` (1 to 20, five digits and a capital letter, for example `00001K`). Codes that are not in the register are listed in `RUN_SUMMARY.notFound` and the rest are returned; the run is refused if none is found. `maxItems` is not used, and a search filter given in lookup refuses the run.

### What you get

One row per provider, in this field order.

| Field | Meaning |
|---|---|
| `providerCode` | The CRICOS provider code. |
| `providerName` | The trading name if the name rule finds an organisation cue and no person shape, else the institution name if it does, else `null`. |
| `nameWithheld` | `true` when the provider's name is left out. |
| `institutionType` | The register's institution type. |
| `state` | State of the provider's postal address. |
| `postcode` | Postcode of the provider's postal address (four digits), or `null`. |
| `city` | City of the provider's postal address. |
| `institutionCapacity` | The register's institution capacity as a whole number, or `null`. |
| `courseCount` | Rows in the register's Courses file for the provider, expired courses included. |
| `activeCourseCount` | Of those, the courses the register marks as not expired. |
| `website` | The website as the register gives it, for an `http` or `https` address, when neither the trading name nor the institution name is left out; otherwise `null`. |
| `snapshotDate` | The date (YYYY-MM-DD) from the `Last-Modified` header of the Institutions file this run read, or `null`. |
| `recordUrl` | Always `null` for now: no stable public page address for a provider has been confirmed. |

### Pricing

$0.002 per row returned (`record`), flat on every Apify plan; no start fee and no run fee. Refused, empty and source-problem runs are not charged. `maxItems` (default 100 through the API, 10 in the Console form; at most 2,000) caps the rows you can be charged for in a search, and the run's maximum charge stops it at the last row it can pay for.

### Personal data

Rows hold provider codes, types, state, postcode and city, capacity and course counts. There are no contact fields and no postal address lines. A provider can be a sole trader: a name is left out unless the name rule finds an organisation cue and no person shape. Names are left out for about 24% of providers (365 of 1,547, measured 28 Oct 2026); those rows carry `nameWithheld: true` and the provider code. This includes a name made of what looks like a person's name and a word such as College, with no company ending, which is left out even when it belongs to an organisation. They still give the postal state, postcode and city, which for a sole trader can be a home locality. The website is left out when either the trading name or the institution name is left out. To object, see the privacy page on the Yappman Data website.

### Data and licence

- Attribution: Contains data from the Commonwealth Register of Institutions and Courses for Overseas Students (CRICOS), Department of Education, Australian Government, licensed under Creative Commons Attribution 2.5 Australia (CC BY 2.5 AU). This Actor filters and reshapes the data; changes were made.
- Licence text: `creativecommons.org/licenses/by/2.5/au/`
- Read from the two published CSV files (Institutions and Courses) on `data.gov.au` only.

### Limits

- Two requests to `data.gov.au` per run (the Institutions file and the Courses file), at most one every 1.5 seconds, a 60-second network timeout, a 60 MB cap on each file, and reading stops after 5 minutes.
- A rate-limit refusal (HTTP 429 or 503) stops the run with no retry and nothing charged; `RUN_SUMMARY.retryAfter` says when to try again.
- The input takes no URLs, headers or query strings: the Actor builds its requests itself.
- Postcode, city and state come from the provider's postal address, which may differ from where it teaches.

### Run summary

Each run saves `RUN_SUMMARY` in its key-value store: the status (`ok`, `refused`, `stopped` or `failed`), the mode, `snapshotDate`, rows `matched` and `returned`, `namesWithheld` among the rows returned, `notFound` codes in a lookup, `removedProviders`, `truncatedByMaxItems`, whether the charge limit was reached, the request counts, and the attribution and non-affiliation lines. A refused run saves the status and the reason; a stopped run saves the status, the reason and `retryAfter`.

Ratings and reviews on the Store page help other buyers judge whether this Actor fits their use, whatever your experience.

### About

From Yappman Data. Contact: info@yappman.com.

# Actor input Schema

## `mode` (type: `string`):

search: rows for the providers that pass your filters, sorted by provider code. lookup: rows for the provider codes you list in providerCodes (1 to 20). Allowed values: search, lookup. Default: search. Cost: $0.002 per row returned, flat on every Apify plan; refused, empty and source-problem runs are not charged.

## `nameContains` (type: `string`):

Search only. Optional text of 2 to 80 characters, matched without regard to capitals against the provider name shown in the output; providers whose name is left out never match. Default: no name filter. Cost: $0.002 per row returned, flat on every Apify plan.

## `states` (type: `array`):

Search only. Optional list of up to 8 states from ACT, NSW, NT, QLD, SA, TAS, VIC, WA (any capitals), matched to the provider's postal address state. Default: all states. Cost: $0.002 per row returned, flat on every Apify plan.

## `institutionTypes` (type: `array`):

Search only. Optional list of up to 20 institution types spelled as the register spells them, for example Government or Private (any capitals). A type the register does not have refuses the run before anything is charged. Default: all types. Cost: $0.002 per row returned, flat on every Apify plan.

## `postcodes` (type: `array`):

Search only. Optional list of up to 50 four-digit postcodes as text, for example "3000", matched to the provider's postal address postcode. Default: all postcodes. Cost: $0.002 per row returned, flat on every Apify plan.

## `providerCodes` (type: `array`):

Lookup only, and required there: 1 to 20 CRICOS provider codes, five digits and a capital letter, for example 00001K. Codes not in the register are listed in RUN_SUMMARY notFound; the run is refused if none is found. Cost: $0.002 per row returned, flat on every Apify plan.

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

Search only: the most rows returned, and so the most you can be charged for ($0.002 per row returned, flat on every Apify plan). Whole number from 1 to 2,000. Default: 100 through the API; the Console form starts at 10. Not used in lookup, which returns one row for each code found.

## Actor input object example

```json
{
  "mode": "search",
  "maxItems": 10
}
```

# Actor output Schema

## `rows` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

# 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 = {
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("yappman/cricos-register").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 = { "maxItems": 10 }

# Run the Actor and wait for it to finish
run = client.actor("yappman/cricos-register").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 '{
  "maxItems": 10
}' |
apify call yappman/cricos-register --silent --output-dataset

```

## MCP server setup

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

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/3af6B5cQ0kcSKF6AH/builds/bMq50Z0mlWCv7pRfq/openapi.json
