# UK Business Rates Valuation Watchdog (`hllerdgn80/uk-business-rates-valuation-watchdog`) Actor

Look up the official rateable value of every business property in one or more UK postcodes via VOA's free 'Find a business rates valuation' service. Returns current value plus full revaluation history and the change vs. the previous value. No login, no scraping tool bypass.

- **URL**: https://apify.com/hllerdgn80/uk-business-rates-valuation-watchdog.md
- **Developed by:** [Halil Erdogan](https://apify.com/hllerdgn80) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.01 / 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

## UK Business Rates Valuation Watchdog

Look up the official rateable value of every business property in one or
more UK postcodes, and get the full revaluation history — not just today's
number, but every previous rateable value and effective date, with the
change already calculated for you.

### Where the data comes from

The [Valuation Office Agency](https://www.gov.uk/government/organisations/valuation-office-agency)
(VOA), an executive agency of HMRC, publishes the rateable value of every
non-domestic (business) property in England and Wales through its free,
public **Find a business rates valuation** service
(`www.tax.service.gov.uk/business-rates-find`) — the same tool a business
owner or ratepayer uses by hand to check or challenge their rates bill. This
Actor drives that exact public GOV.UK form (search by postcode, then open
each property's valuation page) using only the Python standard library — no
login, no API key, no scraping tool that bypasses a paywall or ignores terms
of use.

Rateable value is the figure local councils multiply by the business rates
"multiplier" to calculate a property's rates bill, and it is revalued by VOA
periodically (most recently 1 April 2023, with the next general revaluation
effective 1 April 2026) — so a property's history of rateable values is a
direct record of how its rates bill has moved over time.

### Who this is for

- **Commercial property investors and agents** who want the rates history
  for every unit in a portfolio or a target building in one pass, instead of
  looking each one up by hand.
- **Rating surveyors and rates-mitigation advisers** scanning a client's
  estate for units where the rateable value jumped sharply at the last
  revaluation (a strong candidate for a formal Check/Challenge/Appeal).
- **Retailers and hospitality operators** budgeting for a store portfolio,
  comparing the rates burden across locations before signing a lease.
- **Local journalists and researchers** covering a high street's fortunes —
  e.g. a run of empty units alongside falling rateable values.

### How to use it

1. Enter one or more **postcodes** (e.g. `EC1A 1BB`, or `SW1A1AA` — spacing
   is normalised automatically).
2. Optionally cap **max properties per postcode** — some postcodes (a
   shopping centre, a government building, a business park) cover dozens of
   separately-rated units.
3. Optionally add a **watch label** to tell several saved postcode lists
   apart when comparing runs or datasets.
4. Run it — every property found gets one row per valuation period: the
   current rateable value and every prior one, each with its effective date
   and the change (£ and %) versus the value immediately before it.
5. Schedule the Actor (e.g. monthly) against a fixed list of postcodes to
   catch a mid-cycle "interim" revaluation the moment VOA publishes it —
   these happen after a property is altered, split, merged, or a Check/
   Challenge/Appeal is settled, not just at the scheduled 2023/2026-style
   general revaluations.

### Output example

```json
{
  "watch_label": "Whitehall portfolio",
  "postcode_searched": "SW1A 1AA",
  "status": "ok",
  "uarn": "14967702000",
  "address": "Admiralty Arch, The Mall, London,  SW1A 1AA",
  "description": "Site huts and premises",
  "valuation_period": null,
  "is_current": true,
  "effective_date": "1 April 2026",
  "rateable_value_gbp": 272500,
  "previous_rateable_value_gbp": 362500,
  "change_from_previous_gbp": -90000,
  "change_from_previous_pct": -24.83,
  "property_url": "https://www.tax.service.gov.uk/business-rates-find/valuations/start/14967702000",
  "fetched_at": "2026-09-28T05:09:20+00:00",
  "error": null
}
```

If a postcode is not a recognisable UK postcode, or VOA cannot be reached,
a single row is returned with `status` set to `invalid_input`, `http_error`,
`network_error` or `parse_error` and the reason in `error` — you are never
charged for that row.

### FAQ

**Is this legal / does it breach any terms of use?** Find a business rates
valuation is the official public tool VOA/HMRC provide specifically so
ratepayers and their agents can look up rateable values without contacting
VOA directly. This Actor only submits the same postcode search and reads the
same public results any visitor sees — no login, no paywall bypass, no
private API.

**Does it cover Scotland or Northern Ireland?** No — VOA's remit is England
and Wales. Scotland uses the Scottish Assessors' Portal and Northern Ireland
uses Land & Property Services; both keep separate registers.

**What does "Previous" vs a missing `valuation_period` mean?** VOA's own
page always shows the effective date and rateable value for each period; the
descriptive period label (e.g. "1 April 2023 to 31 March 2026") is present on
most properties but occasionally omitted by VOA itself — when that happens
`valuation_period` is `null` while `effective_date` and `rateable_value_gbp`
are still filled in.

**Can I run this on a schedule?** Yes — a fixed postcode list on a monthly
Apify schedule gives you an early alert whenever VOA publishes a new
valuation for any of your properties, without you polling the site by hand.

### Related Actors

If you also need company-level context for who occupies these units, pair
this with **Companies House Watchlist** or **Corporate KYC Intelligence**
from the same developer.

# Actor input Schema

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

One or more England/Wales postcodes, e.g. 'EC1A 1BB' or 'SW1A1AA' (spacing is normalised automatically). Every non-domestic property registered at that postcode is looked up.

## `maxPropertiesPerPostcode` (type: `integer`):

Some postcodes (shopping centres, business parks, government buildings) cover dozens of separately-rated properties. Caps how many are opened per postcode.

## `watchLabel` (type: `string`):

A tag copied onto every output row (e.g. 'High Street portfolio') so several saved postcode lists can be told apart in one dataset or across scheduled runs.

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

Stops after this many valuation rows have been pushed, across all postcodes.

## Actor input object example

```json
{
  "postcodes": [
    "SW1A 1AA"
  ],
  "maxPropertiesPerPostcode": 20,
  "maxItems": 500
}
```

# 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 = {
    "postcodes": [
        "SW1A 1AA"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("hllerdgn80/uk-business-rates-valuation-watchdog").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 = { "postcodes": ["SW1A 1AA"] }

# Run the Actor and wait for it to finish
run = client.actor("hllerdgn80/uk-business-rates-valuation-watchdog").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 '{
  "postcodes": [
    "SW1A 1AA"
  ]
}' |
apify call hllerdgn80/uk-business-rates-valuation-watchdog --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hllerdgn80/uk-business-rates-valuation-watchdog"
        }
    }
}
```

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/ZxIXu5vE8hFpGiAAP/builds/GxMrds01h2KK5X45h/openapi.json
