# Scottish Housing Regulator News Publication Index (`vixendata/scottish-housing-regulator-news-publication-index`) Actor

Scottish Housing Regulator News Publication Index with typed dates, bounded discovery and attribution.

- **URL**: https://apify.com/vixendata/scottish-housing-regulator-news-publication-index.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

## Scottish Housing Regulator News Publication Index

Build a source-linked news-to-publication index for Scottish social-housing governance teams. The Actor extracts dated SHR news cards, then associates publication and statutory-guidance URLs actually linked in each article's main content. Large site navigation, contacts, quoted commentary and notes-to-editors are excluded.

### Output and scope

Rows include newsId (canonical slug), title, url, indexDate/indexDateRaw, sourceCategory "News", updatedDate/updatedDateRaw from the article's explicitly labelled Updated field, relatedPublicationUrls, listingUrl and attribution. publicationDate remains null: neither news-index nor article-updated dates are the underlying publication's date. Publication content and publication dates are not fetched. Related links are limited to official /publications/ and /for-landlords/statutory-guidance/ paths. No summaries, tenant-level information, data endpoint extraction or compliance verdicts.

Source: https://www.housingregulator.gov.scot/about-us/news/

maxItems defaults to 10 (1–20). maxPages defaults to 1 (1–3). Pagination follows only visible sequential official links using ?p=N\&s=9 and only when current robots allow them. The source explicitly publishes these query parameters; the Actor never invents other filters or search URLs. It is a bounded current news index, not the complete publication archive. The source category and all date labels are preserved distinctly.

### Reuse and provenance

The copyright section of https://www.housingregulator.gov.scot/data-protection/ permits website information reuse excluding logos under the Open Government Licence: https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/ . Observe attribution and accuracy, exclude third-party rights, personal data and logos; no endorsement. Every row carries "Contains public sector information from the Scottish Housing Regulator licensed under the Open Government Licence v3.0", the original URL and dates. Linked documents are not redistributed.

### Why this workflow

Inside Housing professionally covers SHR regulatory changes: https://www.insidehousing.co.uk/news/social-landlords-need-certainty-on-net-zero-standards-scottish-housing-regulator-says-97445 . SFHA's 2026 toolkit documents updates reflecting the revised SHR framework: https://www.sfha.co.uk/sites/default/files/2026-03/tracked-changes-to-self-assurance-toolkit-march-2026%29-pdf.pdf . This evidences industry use, not promised sales. Bounded Apify Store searches on 6 October 2026 found no dedicated result for Scottish Housing Regulator or housingregulator.gov.scot. Generic regulatory page monitors remain alternatives; dated index extraction and article-specific publication-link association are this Actor's distinction. Store searches are not exhaustive.

### Conservative operation

Serial ordinary HTTPS through standard runtime network egress. No user-selected URLs, configured Apify proxy, rotation, evasion or redirects. Robots fetched first; longest-match rules, wildcard/end-anchor rules and delays respected with minimum two-second spacing. /data/ is excluded. Stop on denial, challenge, 403/429, other HTTP error or layout change; no alternate endpoint or retries. Caps: 32 requests, 2 MB per response, 8 MB total, 480 seconds, 20 items and 3 listing pages. No document downloads. RUN_REPORT reports requests, bytes, pages, emitted count and bounded coverage; errors fail the run and already-emitted data can be partial.

### Run and verify

Python 3.12; install requirements.txt, then python main.py. Apify SDK 4.0.2 and BeautifulSoup 4.14.3 pinned; Apify Python Docker image. Run python -m unittest discover -s tests -v. Official 6 October 2026 fixtures test nine listing cards and exactly three associated links in the selected accounting-requirements article, along with schema, date, robots, scope, denial, redirect and caps. See VALIDATION.md for inspected local SDK records.

The 480-second elapsed-time budget is checked between reads and requests. An active socket read can overshoot that budget by up to its 25-second timeout; this is not a hard process-kill deadline.

# Actor input Schema

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

Maximum emitted news metadata rows. Limited by eligible cards in requested pages.

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

Maximum sequential pages reached through visible official pagination links; one page by default.

## Actor input object example

```json
{
  "maxItems": 10,
  "maxPages": 1
}
```

# 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/scottish-housing-regulator-news-publication-index").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/scottish-housing-regulator-news-publication-index").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/scottish-housing-regulator-news-publication-index --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vixendata/scottish-housing-regulator-news-publication-index"
        }
    }
}
```

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/20p3mVFNMCXtLCefd/builds/uLeVpR9jWqhbDbjIf/openapi.json
