# Moneyland Scraper - Swiss Financial Comparison Data (`studio-amba/moneyland-scraper`) Actor

Scrape comparison data from Moneyland.ch, Switzerland's #1 financial comparison site. Extract banking rates, insurance premiums, mortgage rates. No login required.

- **URL**: https://apify.com/studio-amba/moneyland-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** 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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Moneyland Scraper

Scrape financial comparison data from [Moneyland.ch](https://www.moneyland.ch), Switzerland's leading independent financial comparison platform. Extract savings account rates, mortgage rates, banking fees, insurance premiums, and investment costs across 300+ Swiss financial products.

No login or cookies required.

### How to scrape Moneyland data

1. Go to the [Moneyland Scraper](https://apify.com/studio-amba/moneyland-scraper) on Apify Store.
2. Click **Try for free** to open the actor in Apify Console.
3. Select a **Category** -- Savings, Mortgages, Banking, or Insurance.
4. Optionally enter a **Search Query** to filter results (e.g. "UBS savings", "Hypothek 10 Jahre").
5. Set **Max Results** to control how many items to scrape.
6. Click **Start** and wait for the run to finish.
7. Download your data in JSON, CSV, Excel, or any other supported format.

### What data can you extract from Moneyland?

This scraper extracts structured comparison data across all major Moneyland categories:

#### Savings Accounts & Pillar 3a

- Interest rates on savings accounts (300+ accounts compared)
- Pillar 3a retirement savings account rates
- Account conditions and withdrawal terms
- Interest rate tiers for different balance amounts
- Youth, student, and senior-specific accounts

#### Mortgages & Construction Loans

- Fixed-rate mortgage rates (2-year to 15-year terms)
- Variable-rate mortgage offers
- SARON mortgage rates
- Construction loan terms
- Loan-to-value and amortization conditions

#### Banking, Accounts & Credit Cards

- Private account fees and conditions
- Banking package comparisons
- Credit card annual fees and benefits
- Business account costs
- Prepaid card comparisons

#### Insurance

- Compulsory health insurance (KVG) premiums
- Supplemental health insurance plans
- Life insurance comparisons
- Car insurance quotes
- Household and liability insurance
- Legal protection and travel insurance

### Input parameters

| Parameter | Type | Description |
|---|---|---|
| `category` | Select | Comparison category: savings, mortgages, banking, or insurance. Default: savings |
| `searchQuery` | String | Optional search term to filter results |
| `maxResults` | Integer | Maximum number of items to scrape (1-500). Default: 100 |
| `proxyConfiguration` | Object | Proxy settings. Swiss residential proxies recommended |

### Output fields

Each scraped item contains the following fields:

| Field | Type | Description |
|---|---|---|
| `providerName` | String | Financial institution name (e.g. UBS, Raiffeisen, CSS) |
| `productName` | String | Specific product or plan name |
| `category` | String | Comparison category (savings, mortgages, banking, insurance) |
| `interestRate` | Number | Interest rate as percentage (savings and mortgages) |
| `monthlyFee` | Number | Monthly fee in CHF (banking products) |
| `annualPremium` | Number | Annual premium in CHF (insurance products) |
| `currency` | String | Currency code (CHF) |
| `conditions` | Array | Product conditions, requirements, or features |
| `providerUrl` | String | URL to provider detail page on Moneyland.ch |
| `url` | String | Source URL where data was scraped |
| `scrapedAt` | String | ISO 8601 timestamp of data collection |

### Output example

```json
[
    {
        "providerName": "Raiffeisen",
        "productName": "Savings Account",
        "category": "savings",
        "interestRate": 0.65,
        "monthlyFee": null,
        "annualPremium": null,
        "currency": "CHF",
        "conditions": [
            "No account maintenance fee",
            "Withdrawal notice: 3 months for amounts over CHF 25,000"
        ],
        "providerUrl": "https://www.moneyland.ch/en/provider/raiffeisen",
        "url": "https://www.moneyland.ch/en/savings-accounts-comparison",
        "scrapedAt": "2026-06-09T10:30:00.000Z"
    },
    {
        "providerName": "UBS",
        "productName": "Fix Hypothek 5 Years",
        "category": "mortgages",
        "interestRate": 1.45,
        "monthlyFee": null,
        "annualPremium": null,
        "currency": "CHF",
        "conditions": [
            "Minimum loan: CHF 100,000",
            "Fixed rate for 5 years"
        ],
        "providerUrl": "https://www.moneyland.ch/en/provider/ubs",
        "url": "https://www.moneyland.ch/en/mortgage-comparison",
        "scrapedAt": "2026-06-09T10:31:00.000Z"
    },
    {
        "providerName": "CSS",
        "productName": "Basic Health Insurance",
        "category": "insurance",
        "interestRate": null,
        "monthlyFee": null,
        "annualPremium": 4200.00,
        "currency": "CHF",
        "conditions": [
            "Standard model",
            "Deductible: CHF 300"
        ],
        "providerUrl": "https://www.moneyland.ch/en/provider/css",
        "url": "https://www.moneyland.ch/en/health-insurance-comparison",
        "scrapedAt": "2026-06-09T10:32:00.000Z"
    }
]
```

### Cost estimate

Running this actor with default settings (20 results, residential proxy) costs approximately:

- **Compute**: ~0.05 USD (Playwright browser, ~1-2 minutes)
- **Proxy**: ~0.10-0.30 USD (Swiss residential proxy traffic)
- **Total**: ~0.15-0.35 USD per run

Larger runs with more results will cost proportionally more due to additional proxy traffic.

### Tips for best results

- **Use Swiss residential proxies** for the most reliable results. Moneyland.ch is a Swiss site and may filter non-Swiss traffic.
- **Start with a specific category** rather than a broad search to get the most structured data.
- **Keep maxResults reasonable** (20-50) for faster runs and lower proxy costs.
- **Savings and mortgages** categories typically yield the most structured numeric data (interest rates).
- **Check debug data** if a run returns zero results. The actor saves the page HTML and a screenshot to the key-value store for troubleshooting.

### FAQ

**Does this scraper require a Moneyland account?**
No. All comparison data on Moneyland.ch is publicly available without registration or login.

**What languages does the scraper support?**
The scraper targets the English version of Moneyland.ch (/en/) for consistency. The same comparison data is available in German and French on the site.

**How often is Moneyland data updated?**
Moneyland.ch updates its comparison data regularly. Interest rates and insurance premiums are typically updated when providers change their offers. Run the scraper periodically to capture the latest rates.

**Can I scrape specific providers only?**
Use the `searchQuery` parameter with a provider name (e.g. "UBS", "Raiffeisen", "CSS") to filter results to a specific institution.

**Why might a run return zero results?**
Moneyland uses interactive comparison tools that require form parameters. The scraper attempts to trigger results automatically, but some comparison pages may need specific input combinations. Check the debug HTML and screenshot in the key-value store. Try using Swiss residential proxies if you suspect blocking.

### About Moneyland.ch

Moneyland.ch is Switzerland's largest independent online comparison platform for banking, insurance, and telecom products. Founded in Switzerland, it provides unbiased comparisons across more than 100 product categories with over 3 million data points. The platform compares savings accounts, mortgages, health insurance, credit cards, mobile plans, and many more financial products from Swiss banks and insurance companies.

Moneyland.ch serves as a neutral comparison service and does not sell financial products directly. It generates revenue through advertising and referral fees while maintaining editorial independence. The platform is available in German, French, and English.

# Actor input Schema

## `category` (type: `string`):

Which Moneyland comparison category to scrape. Savings: interest rates on savings accounts and pillar 3a. Mortgages: mortgage rates and terms. Banking: private accounts, credit cards, and banking packages. Insurance: health, life, car, and household insurance.

## `searchQuery` (type: `string`):

Optional search term to filter results (e.g. 'UBS savings', 'Hypothek 10 Jahre', 'Krankenkasse Zurich'). Leave empty to browse the selected category.

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

Maximum number of comparison items to scrape.

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

Proxy settings for the browser. Swiss residential proxies are recommended -- Moneyland.ch may block datacenter IPs.

## Actor input object example

```json
{
  "category": "savings",
  "searchQuery": "savings account",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "CH"
  }
}
```

# 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 = {
    "category": "savings",
    "searchQuery": "savings account",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "CH"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/moneyland-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 = {
    "category": "savings",
    "searchQuery": "savings account",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "CH",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/moneyland-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 '{
  "category": "savings",
  "searchQuery": "savings account",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "CH"
  }
}' |
apify call studio-amba/moneyland-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/moneyland-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/U6PbMO4Ze0Fe6orud/builds/vDFN2n67ZP5NKmoK7/openapi.json
