# Moneyfacts Savings Rates Scraper (`crawlerbros/moneyfacts-scraper`) Actor

Scrape Moneyfacts.co.uk best savings account comparison tables - provider names, AER rates, account types, notice periods, and minimum deposits for easy-access, fixed-rate, notice, regular savings, and ISA accounts.

- **URL**: https://apify.com/crawlerbros/moneyfacts-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Automation, Agents, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Moneyfacts Savings Rates Scraper

Extract UK's best savings account rates from **Moneyfacts.co.uk** — one of the UK's leading financial data providers since 1988. Scrape the curated best-buy comparison table featuring top easy-access accounts, fixed-rate bonds, notice accounts, regular savings accounts, and cash ISAs with live AER rates, notice periods, and minimum deposits.

### What You Can Scrape

- **Easy Access Accounts** — Best easy-access savings with instant or near-instant withdrawal
- **Fixed Rate Bonds** — Top fixed-term savings accounts (1-year, 2-year, 5-year etc.)
- **Notice Accounts** — Best notice period accounts (e.g. 90-day, 150-day)
- **Regular Savings Accounts** — Top monthly regular savings deals
- **Cash ISAs** — Best tax-free cash ISA rates

From providers including Marcus (Goldman Sachs), Nationwide, Santander, NS&I, Chase, Halifax, HSBC, Oxbury Bank, GB Bank, Afin Bank, and more.

### Input Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `accountTypeFilter` | Select | Filter by savings account type (Easy Access, Fixed Rate Bond, Notice, Regular Savings, Cash ISA) |
| `providerFilter` | Text | Filter by provider name (case-insensitive substring), e.g. "Marcus", "Nationwide", "NS&I" |
| `minAer` | Number | Minimum AER percentage to return (e.g. 4.5 for 4.5%+) |
| `maxItems` | Integer | Maximum records to return (1–500, default 50) |

### Output Fields

| Field | Description |
|-------|-------------|
| `provider` | Savings provider name (e.g. "Marcus by Goldman Sachs®", "Santander") |
| `accountType` | Type of savings account (e.g. "Easy access account", "Fixed rate bond"). Cash ISA records use a more specific sub-type (e.g. "Easy access Cash ISA", "One-year fixed Cash ISA") — these always contain "Cash ISA" so `accountTypeFilter: "Cash ISA"` matches all of them |
| `accountName` | Product name, on Cash ISA records only (e.g. "1 Year Fixed Rate Cash ISA via Meteor Savings") |
| `aer` | Annual Equivalent Rate — e.g. "5.01% (includes a bonus)", "4.90%" |
| `aerPercent` | Numeric AER as a number (e.g. `5.01`) for easy sorting/filtering |
| `noticeTerm` | Notice period or fixed term (e.g. "150 days", "1 year", "None"). Not present on Cash ISA records |
| `minDeposit` | Minimum opening deposit required (e.g. "£1", "£1,000") |
| `acceptsTransfersIn` | Boolean, on Cash ISA records only — whether the ISA accepts transfers-in from other providers |
| `recordType` | Always `savingsDeal` |
| `sourceUrl` | URL of the scraped Moneyfacts comparison page (savings or ISA table) |
| `scrapedAt` | UTC timestamp when data was collected |

### Example Output

```json
{
  "provider": "Marcus by Goldman Sachs®",
  "accountType": "Fixed rate bond",
  "aer": "4.90%",
  "noticeTerm": "1 year",
  "minDeposit": "£1",
  "recordType": "savingsDeal",
  "sourceUrl": "https://moneyfacts.co.uk/savings/",
  "scrapedAt": "2026-06-30T12:00:00Z"
}
````

```json
{
  "provider": "Santander",
  "accountType": "Regular savings account",
  "aer": "8.00% (includes a bonus)",
  "noticeTerm": "None",
  "minDeposit": "£1",
  "recordType": "savingsDeal",
  "sourceUrl": "https://moneyfacts.co.uk/savings/",
  "scrapedAt": "2026-06-30T12:00:00Z"
}
```

### Frequently Asked Questions

**Is this free to use?**\
Yes. Moneyfacts.co.uk's comparison tables are publicly accessible without an account. No API keys, cookies, or registration required.

**How many records are returned?**\
Moneyfacts publishes "best in class" picks across its savings and Cash ISA best-buy tables — typically around 10–12 records in total: a handful of savings accounts (easy access, fixed rate bond, notice account, regular savings — some categories list more than one top pick) plus about 5 Cash ISA picks (easy access, one-year fixed, two-year fixed, notice, and lifetime ISA).

**What is AER?**\
AER (Annual Equivalent Rate) shows the interest rate you'd earn over a full year, accounting for compound interest. It's the standard UK measure for comparing savings rates.

**What does "(includes a bonus)" mean?**\
Some accounts include a temporary introductory bonus rate. The AER shown includes this bonus — the rate will drop when the bonus period ends.

**Can I filter by account type?**\
Yes, use `accountTypeFilter` to select a specific type like "Fixed rate bond" or "Easy access account".

**Can I filter by minimum rate?**\
Yes, use `minAer` (e.g. 4.5) to only return accounts with AER at or above that percentage.

**What is the data source?**\
Data is sourced from Moneyfacts.co.uk's publicly accessible best-buy savings tables at moneyfacts.co.uk/savings/.

# Actor input Schema

## `accountTypeFilter` (type: `string`):

Filter by savings account type. Leave blank for all types.

## `providerFilter` (type: `string`):

Filter by provider name (case-insensitive substring match). E.g. 'Marcus', 'Santander', 'Nationwide'.

## `minAer` (type: `number`):

Only return accounts with AER at or above this percentage (e.g. 4.5 for 4.5%).

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

Maximum number of records to return (1–500). Default: 50.

## Actor input object example

```json
{
  "accountTypeFilter": "",
  "maxItems": 50
}
```

# Actor output Schema

## `accounts` (type: `string`):

Dataset containing all scraped savings account deals from Moneyfacts.

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

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/moneyfacts-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 = {
    "accountTypeFilter": "",
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/moneyfacts-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "accountTypeFilter": "",
  "maxItems": 50
}' |
apify call crawlerbros/moneyfacts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=crawlerbros/moneyfacts-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Moneyfacts Savings Rates Scraper",
        "description": "Scrape Moneyfacts.co.uk best savings account comparison tables - provider names, AER rates, account types, notice periods, and minimum deposits for easy-access, fixed-rate, notice, regular savings, and ISA accounts.",
        "version": "1.0",
        "x-build-id": "ng8dSVfkhnh5FmJjY"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~moneyfacts-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-moneyfacts-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/crawlerbros~moneyfacts-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-moneyfacts-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/crawlerbros~moneyfacts-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-moneyfacts-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "accountTypeFilter": {
                        "title": "Account Type Filter",
                        "enum": [
                            "",
                            "Easy access account",
                            "Fixed rate bond",
                            "Notice account",
                            "Regular savings account",
                            "Cash ISA"
                        ],
                        "type": "string",
                        "description": "Filter by savings account type. Leave blank for all types.",
                        "default": ""
                    },
                    "providerFilter": {
                        "title": "Provider Filter",
                        "type": "string",
                        "description": "Filter by provider name (case-insensitive substring match). E.g. 'Marcus', 'Santander', 'Nationwide'."
                    },
                    "minAer": {
                        "title": "Minimum AER (%)",
                        "minimum": 0,
                        "maximum": 20,
                        "type": "number",
                        "description": "Only return accounts with AER at or above this percentage (e.g. 4.5 for 4.5%)."
                    },
                    "maxItems": {
                        "title": "Maximum Items",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of records to return (1–500). Default: 50.",
                        "default": 50
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
