# APRA Regulatory News Scraper (`vixendata/apra-regulatory-news-scraper`) Actor

Source-linked Australian prudential regulatory news with publication dates, document types, industries and consultation deadline context. Bounded recent discovery.

- **URL**: https://apify.com/vixendata/apra-regulatory-news-scraper.md
- **Developed by:** [Vixendata](https://apify.com/vixendata) (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 recognized consultation/publication/alert metadata 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

## APRA Regulatory News Scraper

Turn APRA's latest prudential-regulation announcements into structured, source-linked records for regulatory watchlists, compliance triage and consultation tracking. Get publication dates, document types, industry labels, summaries and original consultation-deadline context without manually reviewing every listing card.

### What you get

- One record per eligible APRA news announcement, with a stable URL-derived ID.
- Published date in ISO format plus the original source date text.
- APRA document type and industry labels, including their original wording.
- Editorial summary, source paragraphs mentioning consultation closures, and official news/consultation links.
- A deterministic metadata content hash for downstream comparisons and a UTC observation timestamp. The actor does not persist a change history itself.

The actor serves a different workflow from APRA disqualified-person registers and quarterly superannuation datasets. It does not collect those datasets or enrich people. Professional monitoring services such as [RegWatch](https://regwatch.com.au/about) explicitly cover APRA; this supports the monitoring use case, not a revenue claim. Bounded Store searches on 6 October 2026 found no dedicated APRA regulatory-news actor; generic crawlers remain alternatives and Store coverage can change.

### Coverage and important limits

Discovery starts at [News and publications](https://www.apra.gov.au/news-and-publications), in the source's default newest-first order. Only listing cards identified by APRA as news and linking under /news-and-publications/ are fetched. Mixed listing entries, including standalone APRA Explains pages and statistical-publication pages, are excluded and counted in RUN_REPORT. Some excluded statistical pages share the news-and-publications path; the Drupal node type is also checked. This is deliberately a recent-news scraper, not comprehensive APRA publication or archive coverage.

Choose 1–5 listing pages, at most 50 detail fetches and 1–50 matching output records. Filters do not extend this discovery window. Empty results can therefore mean no match within the selected window. Article structure changes fail closed. Missing dates remain null and generate diagnostics.

Deadline context preserves complete source paragraphs, including qualifications such as “Subject to consultation”. It is a best-effort textual convenience, not an exhaustive deadline parser, a computed deadline field, an assertion that an obligation is binding, or legal advice. Check the official source before acting. The content hash covers output metadata, not every word of an article or linked document.

### Input

Example:

```json
{
  "maxItems": 10,
  "maxPages": 2,
  "sinceDate": "2026-09-01",
  "keywords": ["trustee", "consultation"],
  "documentTypes": ["Media release"],
  "industries": ["Superannuation"]
}
```

- maxItems: maximum matching records, default 10, range 1–50.
- maxPages: first source-linked listing pages, default 1, range 1–5.
- sinceDate: optional inclusive publication-date filter in YYYY-MM-DD. Unknown dates are excluded when supplied.
- keywords: optional OR substring matches across title, summary and deadline context, case-insensitive.
- documentTypes: optional OR exact case-insensitive source labels.
- industries: optional OR exact case-insensitive source labels. “All industries” is a distinct source label; it does not automatically match Banking or other individual sectors.

Different filter groups combine with AND. Empty arrays disable their filters. Arbitrary URLs and proxy configuration are not accepted.

### Output and run report

Dataset fields: id, source, url, title, documentType, industries, publishedDate, publishedDateText, summary, deadlineContext, officialLinks, contentHash, observedAt, attribution, licenseUrl and diagnostics. The portable contract is dataset.schema.json; .actor/dataset_schema.json configures the Apify dataset view. officialLinks contains label/URL pairs for official news and consultation links; links are not downloaded.

RUN_REPORT in the default key-value store records status, errors, termination reason, requests, response bytes, pages fetched, details checked, records emitted, filter exclusions and non-news listing exclusions. Reaching a configured bound is expected, not proof the archive was exhausted. Any transport, robots or parser error marks the run stopped and fails the Actor; already emitted partial records remain available and must be interpreted with the report.

### Responsible access

Uses ordinary Python urllib transport and the environment's normal network path. No rotating proxies, custom proxy routing, credentials, browser impersonation, CAPTCHA handling, retries or redirects. Reads robots.txt first, honors matching allow/disallow and crawl-delay rules, and spaces sequential requests at least two seconds apart. Denials including 401/403/429 immediately stop the run without alternative-route attempts.

Hard request/content limits: 56 total requests including robots, 50 detail pages, 2 MB per response and 30 MB aggregate bytes. A 300-second elapsed-time budget is checked before request launch and after each response, with up to 25 seconds per socket operation. This is not a strict wall-clock kill deadline: a response that continually trickles bytes can overrun the budget before the post-response check. Socket timeouts stop a stalled source rather than retrying it. Only HTTPS www.apra.gov.au, the listing and its bounded page query, and qualified news detail paths can be requested. No attachments, images, registers, site-search endpoints or external links are fetched.

### Attribution and reuse

[APRA copyright](https://www.apra.gov.au/copyright) licenses APRA material under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/), subject to exceptions including logos, the Australian Coat of Arms and third-party content. Each record attributes APRA and links its source and license. This project extracts APRA editorial metadata and normalizes dates; no endorsement is implied. Do not extend reuse to excluded third-party material. Fixtures are APRA source pages retained solely for parser tests; their original branding is not part of dataset output.

### Local development

```sh
python -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt
python -m unittest discover -s tests -v
mkdir -p storage/key_value_stores/default
printf '{"maxItems":3,"maxPages":1}\n' > storage/key_value_stores/default/INPUT.json
python main.py
```

Tests use bundled real HTML fixtures and run without network or credentials. TEST_REPORT.md records the local SDK live verification separately from offline tests. No Apify Console deployment or production-container success is claimed by these local checks.

# Actor input Schema

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

Stop after this many matching records. Bounded 1–50; filters can yield fewer.

## `maxPages` (type: `integer`):

Visit the first 1–5 source-linked listing pages in newest-first order. This is not a full archive crawl.

## `sinceDate` (type: `string`):

Optional inclusive YYYY-MM-DD publication date filter. Unknown dates are excluded when set; older pages are not automatically scanned.

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

Match any case-insensitive substring in title, summary or deadline context. Empty list disables this filter.

## `documentTypes` (type: `array`):

Match any exact case-insensitive source document type, for example Media release or Speech. Empty list disables this filter.

## `industries` (type: `array`):

Match any exact case-insensitive source industry, for example Banking or Superannuation. All industries is its own source label, not an automatic match to every sector. Empty list disables this filter.

## Actor input object example

```json
{
  "maxItems": 10,
  "maxPages": 1,
  "sinceDate": "",
  "keywords": [],
  "documentTypes": [],
  "industries": []
}
```

# Actor output Schema

## `results` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("vixendata/apra-regulatory-news-scraper").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("vixendata/apra-regulatory-news-scraper").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 '{}' |
apify call vixendata/apra-regulatory-news-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vixendata/apra-regulatory-news-scraper"
        }
    }
}
```

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/yi3cNhZlTJpluwAJL/builds/PdMA4gu1xIb9Owd4u/openapi.json
