# Verivox Scraper — Energy, Internet & Insurance Tariffs (`studio-amba/verivox-scraper`) Actor

Scrape tariff comparisons from Verivox.de — Germany's largest comparison portal. Extract energy, gas, internet, and insurance plans with prices, ratings, and features. Compare Strom, Gas, DSL plans by postal code. No login required.

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

## Pricing

from $2.00 / 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.

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

## Verivox Scraper — German Energy Tariff Comparison

Scrape tariff comparisons from Verivox.de, Germany's largest comparison portal. Extract provider names, monthly and annual prices, kWh rates, features, ratings, bonuses, and contract details for electricity (Strom) and gas plans at any German postal code.

### How to scrape Verivox data

Verivox is Germany's leading price comparison portal used by millions of consumers to compare energy, telecommunications, insurance, and financial products. This actor automates the energy comparison: it resolves your postal code to the right district, loads the comparison results, and extracts every returned tariff with its full pricing details straight from the comparison data.

1. **Choose a category**: Select Strom (electricity) or Gas.
2. **Enter a postal code**: Any valid German 5-digit PLZ (e.g. 10115 for Berlin, 80331 for Munich, 50667 for Cologne).
3. **Set consumption**: Annual energy consumption in kWh (only needed for Strom and Gas). Average German household uses ~3,500 kWh electricity or ~20,000 kWh gas.
4. **Run the actor**: Results include all available tariffs for that region with full pricing breakdowns.
5. **Export data**: Download results as JSON, CSV, or Excel. Integrate via Apify API for automated monitoring.

No login or cookies required. The actor accesses only publicly available comparison data.

### Why use this actor?

- **Monitor energy prices** across German regions over time
- **Compare providers** (E.ON, Vattenfall, EnBW, RWE, etc.) at any postal code
- **Track switching bonuses** and promotional offers
- **Build price comparison dashboards** for energy consulting
- **Research German utility markets** with structured data
- **Automate tariff monitoring** via Apify schedules and webhooks

### Input

| Field | Type | Required | Default | Description |
|-------|------|----------|---------|-------------|
| `category` | Select | No | `strom` | Comparison category: strom or gas |
| `postalCode` | String | No | `10115` | German 5-digit postal code (PLZ) |
| `consumption` | Integer | No | `3500` / `20000` | Annual consumption in kWh (3500 for strom, 20000 for gas) |
| `searchQuery` | String | No | — | Filter results by keyword (provider name, plan type) |
| `maxResults` | Integer | No | `20` | Maximum tariffs to scrape (1–100) |
| `proxyConfiguration` | Object | No | Residential DE | Proxy settings for the browser |

### Output

Each result contains:

| Field | Type | Example |
|-------|------|---------|
| `planName` | String | `"MeinSmartStrom Klima"` |
| `provider` | String | `"Vattenfall"` |
| `category` | String | `"strom"` |
| `monthlyPrice` | Number | `89.50` |
| `annualPrice` | Number | `1074.00` |
| `savingsPerYear` | Number | `156.00` |
| `currency` | String | `"EUR"` |
| `pricePerKwh` | Number | `28.5` |
| `basePrice` | Number | `12.95` |
| `features` | Array | `["Ökostrom", "Preisgarantie", "Sofortbonus"]` |
| `rating` | Number | `4.2` |
| `reviewCount` | Integer | `1250` |
| `contractDuration` | String | `"12 Monate"` |
| `cancellationPeriod` | String | `"4 Wochen"` |
| `priceGuarantee` | String | `"12 Monate Preisgarantie"` |
| `bonus` | Number | `120.00` |
| `isGreen` | Boolean | `true` |
| `planDescription` | String | `"100% Ökostrom mit 12 Monaten Preisgarantie"` |
| `postalCode` | String | `"10115"` |
| `consumption` | Integer | `3500` |
| `url` | String | `"https://www.verivox.de/stromvergleich/..."` |
| `scrapedAt` | String | `"2026-06-09T12:00:00.000Z"` |

### Example output

```json
{
    "planName": "MeinSmartStrom Klima",
    "provider": "Vattenfall",
    "category": "strom",
    "monthlyPrice": 89.50,
    "annualPrice": 1074.00,
    "savingsPerYear": 156.00,
    "currency": "EUR",
    "pricePerKwh": 28.5,
    "basePrice": 12.95,
    "features": ["Ökostrom", "Preisgarantie", "Sofortbonus"],
    "rating": 4.2,
    "reviewCount": 1250,
    "contractDuration": "12 Monate",
    "cancellationPeriod": "4 Wochen",
    "priceGuarantee": "12 Monate Preisgarantie",
    "bonus": 120.00,
    "isGreen": true,
    "planDescription": "100% Ökostrom aus erneuerbaren Energien mit 12 Monaten Preisgarantie",
    "postalCode": "10115",
    "consumption": 3500,
    "url": "https://www.verivox.de/stromvergleich/ergebnis/",
    "scrapedAt": "2026-06-09T12:00:00.000Z"
}
```

### Supported categories

| Category | German Name | What it compares |
|----------|-------------|------------------|
| `strom` | Stromvergleich | Electricity tariffs from 1,000+ providers |
| `gas` | Gasvergleich | Natural gas tariffs by region |

### Typical use cases

#### Energy price monitoring

Run this actor on a schedule (daily/weekly) to track electricity and gas prices in specific German regions. Detect price drops and switching opportunities automatically.

#### Market research

Compare tariff structures across different postal codes to understand regional pricing differences in the German energy market. Useful for energy consultants, journalists, and researchers.

#### Provider benchmarking

Extract all tariffs from a specific provider (using the `searchQuery` filter) to analyze their pricing strategy across regions.

#### Automated switching alerts

Combine with Apify webhooks to get notified when cheaper tariffs become available at your postal code.

### Access and reliability

The actor connects through a built-in scraping browser that handles Verivox's anti-bot challenge automatically. You do not need to configure any proxy — the `proxyConfiguration` input is kept for backward compatibility but is not used.

### Tips

- **Berlin (10115)** and **Munich (80331)** are good test postal codes with many available providers
- Average German household electricity consumption is **3,500 kWh/year** (default)
- Average German household gas consumption is **20,000 kWh/year**
- Use `searchQuery` to filter for specific providers like "Vattenfall" or "E.ON"
- The actor saves debug HTML and screenshots to the Key-Value Store when no results are found — check these for troubleshooting

### Limitations

- Verivox serves only the German market (DE postal codes)
- Internet (DSL) and insurance comparisons use a different Verivox app and are not covered
- Some promotional tariffs may have regional restrictions
- The comparison returns Verivox's recommended tariff set (typically 20-25 tariffs per postcode)

### Cost of usage

A typical run finishes in under a minute and returns the full recommended tariff set for the postal code in one pass.

# Actor input Schema

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

Comparison category to scrape. Strom = electricity, Gas = natural gas.

## `postalCode` (type: `string`):

German 5-digit postal code (Postleitzahl). Determines available providers and regional prices. Examples: 10115 (Berlin), 80331 (Munich), 50667 (Cologne).

## `consumption` (type: `integer`):

Annual energy consumption in kWh. Defaults per category: 3500 (electricity), 20000 (gas).

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

Optional: filter results by keyword (e.g. provider name like 'Vattenfall', 'E.ON', or plan type like 'Oekostrom').

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

Maximum number of tariffs to scrape. The comparison typically exposes 20-25 recommended tariffs per postcode.

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

Not used by this actor — access goes through a built-in scraping browser that handles the anti-bot challenge. Kept for backward compatibility.

## Actor input object example

```json
{
  "category": "strom",
  "postalCode": "10115",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DE"
  }
}
```

# 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": "strom",
    "postalCode": "10115",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "DE"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/verivox-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": "strom",
    "postalCode": "10115",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "DE",
    },
}

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

```

## MCP server setup

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