# money.co.uk Savings Rates Scraper (UK) (`studio-amba/money-co-uk-scraper`) Actor

Scrape UK savings account rates from money.co.uk: easy access, notice, fixed rate bonds and cash ISAs. AER, term, notice period, minimum and maximum deposit, bonus rate, FSCS cover. No login, no API key.

- **URL**: https://apify.com/studio-amba/money-co-uk-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Business, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 result scrapeds

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

## money.co.uk Savings Rates Scraper (UK)

Scrape UK savings account rates from [money.co.uk](https://www.money.co.uk/savings-accounts). The actor reads the full product tables behind the site's results pages: easy access savings, notice accounts, fixed rate bonds and cash ISAs. Each product comes with its AER, term, notice period, deposit limits, bonus rate and deposit protection. No login, no API key, no proxy.

At the time of writing the four tables hold about 1,550 products: 359 easy access, 238 notice, 891 fixed rate bonds and 57 cash ISAs. money.co.uk updates the list daily.

### How to scrape money.co.uk data

money.co.uk shows ten products on each results page and loads the rest through a JSON request that the page itself makes. The actor sends that same request in pages of 100 products, sorted by highest rate, and returns clean records. A full run of all four tables takes under a minute.

#### Choose the account types

Set **Account types** to one or more of these values:

- `instant-access`: easy access savings accounts.
- `notice`: notice savings accounts, with the notice period in `noticeDays`.
- `fixed-rate-bond`: fixed rate bonds, with the term in `termMonths`.
- `cash-isa`: cash ISAs, including fixed term and notice ISAs.

Leave the list empty to read all four tables.

#### Filter the products

- **Provider contains**: keep one bank or building society, for example `chase` or `marcus`.
- **Minimum AER (%)**: keep products at or above a rate, for example `4.5`.
- **Fixed term (months)**: keep one term, for example `12` for one-year bonds or `60` for five-year bonds.
- **Maximum opening deposit (GBP)**: keep products you can open with this amount or less.
- **Exclude new-money-only products**: off by default. When on, products that need new money are left out.

All filters you fill in must match at the same time.

#### Limit the size of a run

**Max results** caps the number of products returned. It defaults to 100. The actor stops as soon as it has this many matches, and you are charged per product returned.

### What data does the money.co.uk Savings Rates Scraper extract?

| Field | Type | Description |
|-------|------|-------------|
| **productId** | String | Stable money.co.uk product id |
| **provider** | String | Bank or building society |
| **productName** | String | Product name |
| **accountCategory** | String | `instant-access`, `notice`, `fixed-rate-bond` or `cash-isa` |
| **accountType** | String | Account type label from the site |
| **interestRateAer** | Number | Headline AER in percent |
| **currency** | String | Always `GBP` |
| **rateType** | String | `fixed` or `variable` |
| **rateDescription** | String | Rate text as shown on the site |
| **bonusRate** | Number | Introductory bonus in percentage points |
| **bonusMonths** | Integer | Length of the bonus in months |
| **termMonths** | Integer | Fixed term in months, empty for variable products |
| **termDisplay** | String | Term as shown, for example `5 years` |
| **noticeDays** | Integer | Notice period for withdrawals in days |
| **minimumDeposit** | Number | Minimum opening deposit in GBP |
| **maximumDeposit** | Number | Maximum opening deposit in GBP |
| **maximumBalance** | Number | Maximum balance in GBP |
| **interestPaid** | String | Interest payment frequency |
| **depositProtection** | String | Deposit protection scheme, for example `FSCS` |
| **newMoneyOnly** | Boolean | Product needs new money |
| **existingCustomersOnly** | Boolean | Only existing customers can open it |
| **openOnline** | Boolean | Account can be opened online |
| **isaTransfersIn** | Boolean | Cash ISAs: transfers in accepted |
| **cashIsaType** | String | Cash ISA sub-type, for example `Fixed term` |
| **minimumAge** | Integer | Minimum applicant age |
| **withdrawalConditions** | String | Withdrawal and closure terms |
| **badge** | String | Promotional badge text from the listing |
| **logoUrl** | String | Provider logo URL |
| **sourceUrl** | String | Results page the product was read from |
| **updatedAt** | String | When money.co.uk last updated the record |
| **scrapedAt** | String | ISO timestamp of the scrape |

Fields that do not apply to a product are `null`. A fixed rate bond has no `noticeDays`, and an easy access account has no `termMonths`.

### Example output

```json
{
  "productId": "defaqto-savings-547096",
  "provider": "Tembo",
  "productName": "Lloyds Bank - HomeSaver",
  "accountCategory": "instant-access",
  "accountType": "Instant access",
  "interestRateAer": 4.55,
  "currency": "GBP",
  "rateType": "variable",
  "rateDescription": "4.55% AER variable inc. 1.55% fixed bonus for 12 months",
  "bonusRate": 1.55,
  "bonusMonths": 12,
  "termMonths": null,
  "noticeDays": null,
  "minimumDeposit": 10,
  "maximumDeposit": 20000,
  "interestPaid": "monthly",
  "depositProtection": "FSCS",
  "newMoneyOnly": false,
  "sourceUrl": "https://www.money.co.uk/savings-accounts/instant-access-savings/results",
  "scrapedAt": "2026-10-18T14:00:00.000Z"
}
```

### Input examples

Best easy access rates from a single provider:

```json
{ "accountTypes": ["instant-access"], "providerContains": "chase", "maxResults": 50 }
```

All one-year fixed rate bonds at 4.5% AER or more that open with 1,000 pounds or less:

```json
{ "accountTypes": ["fixed-rate-bond"], "termMonths": 12, "minRate": 4.5, "maxMinimumDeposit": 1000, "maxResults": 200 }
```

The whole market, all four tables:

```json
{ "maxResults": 5000 }
```

### Use cases

- **Rate monitoring.** Schedule a daily run and store the output to track how each provider changes its rates.
- **Comparison sites and newsletters.** Feed current AERs, terms and deposit limits into your own pages.
- **Financial advisers.** Build a shortlist of fixed bonds by term and deposit size for a client.
- **Market research.** Compare how many products and which rates each bank offers per account type.

### How much does it cost?

The actor is billed per result: $0.005 per run start and $0.002 per product returned on the free and bronze plans, less on higher plans. Maximum results per run: 5,000 (set by **Max results**), so the most a run can cost in results is $10.00. A full run of all four tables returns about 1,550 products, takes about 6 seconds and uses less than one cent of compute. The usage cost of a run settles after the run has SUCCEEDED, so it does not show on a run that is still in progress.

### Data source and limits

The data is what money.co.uk publishes on its public results pages. Rates change during the day, so every record carries `scrapedAt` and `updatedAt`. The actor returns the product tables as listed and does not follow the affiliate links on the site. It covers the savings tables only. Credit cards, loans, mortgages and current accounts are not included.

If money.co.uk changes the way the results pages load, the actor stops with an error that names the table and the offset instead of returning partial data.

### FAQ

**Does it need a proxy?**
No. The site answers plain requests.

**Why are some fields empty?**
Fields that do not apply to a product type are `null`. For example, `termMonths` is `null` for easy access accounts.

**How fresh is the data?**
The actor reads the live tables on every run.

**What happens when nothing matches?**
The run finishes with no results and a status message. It fails only when money.co.uk returns no products at all, so a scheduled run does not silently return nothing when the site changes.

**Can I get one product by id?**
Run the actor with the provider filter and match on `productId`. The ids stay the same between runs.

**Is the rate gross or AER?**
`interestRateAer` is the AER shown on money.co.uk. `rateDescription` has the text exactly as displayed, including bonus periods.

### Support

Found a problem or need a field that is missing? Open an issue on the actor page and describe the input you used.

# Actor input Schema

## `accountTypes` (type: `array`):

Which savings tables to read. Allowed values: instant-access (easy access savings), notice (notice savings), fixed-rate-bond (fixed rate bonds), cash-isa (cash ISAs). Leave empty to read all four.

## `providerContains` (type: `string`):

Keep only products whose provider name contains this text, case-insensitive. Example: 'chase', 'marcus', 'monzo'.

## `minRate` (type: `number`):

Keep only products with an AER at or above this value. Example: 4.5.

## `termMonths` (type: `integer`):

Keep only products with exactly this fixed term in months. Applies to fixed rate bonds and fixed term cash ISAs. Example: 12 for one-year bonds, 60 for five-year bonds.

## `maxMinimumDeposit` (type: `integer`):

Keep only products that can be opened with this amount or less. Example: 1000 keeps products with a minimum opening deposit of up to 1,000 pounds.

## `newMoneyOnly` (type: `boolean`):

Off by default. When on, products that require new money to be paid in are left out.

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

Hard cap on the number of products returned (1 to 5,000). The actor stops reading as soon as it has this many matches. The cost of a run is this number times the per-result price.

## `proxyConfiguration` (type: `object`):

Not required. money.co.uk answers plain requests from datacenter and residential IPs. The field is accepted so that saved inputs from other actors keep working.

## Actor input object example

```json
{
  "accountTypes": [
    "instant-access"
  ],
  "newMoneyOnly": false,
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "accountTypes": [
        "instant-access"
    ],
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/money-co-uk-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 = {
    "accountTypes": ["instant-access"],
    "maxResults": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/money-co-uk-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 '{
  "accountTypes": [
    "instant-access"
  ],
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call studio-amba/money-co-uk-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/money-co-uk-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/12NJIRYUX0A9a7ESf/builds/xe997JZX5Zl8eKPiL/openapi.json
