# Selectra Scraper — French Energy Tariff Comparison (`studio-amba/selectra-scraper`) Actor

Scrape electricity and gas tariff comparisons from Selectra.info, France's energy comparison platform (the same data Selectra sells via its paid API at api.selectra.com). Extract provider names, prices, kWh rates, ratings and bonuses for any French postal code. No login required.

- **URL**: https://apify.com/studio-amba/selectra-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Business
- **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/platform/actors/running/actors-in-store#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

## Selectra Scraper

Extract live electricity and gas tariff comparisons from [Selectra](https://selectra.info), France's energy price comparison platform. Selectra runs a public comparator engine that ranks every available electricity and gas provider offer for a given location and household profile — this actor calls that same engine directly and returns clean, structured JSON: provider, offer name, annual price, per-kWh rate, discount, estimated savings and independent ratings.

No login. No cookies. No browser automation. The actor talks directly to Selectra's own public comparator API (`selectra.info/france-energy/api/engine/fr`) — the same endpoint the site's own widget calls — so it is fast, cheap and stable.

### What this actor does

Selectra's energy comparator takes a location and a household energy profile (subscribed power, annual consumption) and returns every electricity or gas offer currently on the French market, ranked and priced for that exact profile. This actor reproduces the same two-step flow the website itself uses:

1. Resolve your French postal code to an INSEE commune code via the French government's open geo API.
2. Call Selectra's comparator engine with that INSEE code plus your household profile (power, consumption) to get every matching offer.

Each returned tariff includes:

- Provider and offer name, and whether the pricing is fixed or variable
- Selectra's own letter-grade score (A-E) for the offer
- Total estimated annual price, with and without discount
- Monthly price, annual subscription price, and per-kWh rate (including peak/off-peak split where the meter type supports it)
- Estimated annual savings versus the regulated tariff
- Whether the offer is a sponsored/partner placement
- Independent Trustpilot rating and Selectra's own platform rating, both with review counts
- A direct sign-up/affiliate link for the offer

### Why use it

- **Energy price monitoring** — track how electricity and gas tariffs move across providers over time, for a specific region or nationally.
- **Comparison-site research** — see exactly which offers Selectra surfaces, in what order, and which ones are marked sponsored.
- **Rate benchmarking** — pull real per-kWh and annual prices across every major French energy provider in one call.
- **Lead generation** — energy brokers and comparison services can use live tariff data to build their own comparison tools or alerts.
- **Market research** — track new provider entrants, discount campaigns, and rating trends across the French energy retail market.

### How to scrape Selectra data

1. Open the actor and set a **French Postal Code** (e.g. `75001` for Paris, `69001` for Lyon, `13001` for Marseille). Leave it on the default to get results for Paris.
2. Choose **Energy Type**: both electricity and gas, or just one.
3. Pick a **Housing Type** (studio, apartment, house, large house) to set realistic default power and consumption figures — or set **Power**, **Annual Electricity Consumption** and **Annual Gas Consumption** explicitly for a precise household profile.
4. Optionally set a **Search Keyword** to only return offers from a specific provider (e.g. `edf`, `totalenergies`, `engie`).
5. Set **Max Results** and click **Start**.

The actor calls Selectra's comparator engine once per energy type requested, which returns every currently ranked offer for that INSEE code and household profile in a single response — typically 50+ electricity offers and 30+ gas offers for a well-covered postal code. Export as JSON, CSV or Excel.

### Input

| Field | Type | Description |
|-------|------|-------------|
| `postalCode` | string | 5-digit French postal code. Default: `75001`. |
| `energyType` | string | `both`, `electricity` or `gas`. Default: `both`. |
| `housingType` | string | `studio`, `appartement`, `maison` or `maison-grande` — sets default power/consumption. Default: `maison`. |
| `power` | integer | Subscribed electricity power in kVA. Overrides the Housing Type default. |
| `consumption` | integer | Annual electricity consumption in kWh. Overrides the Housing Type default. |
| `consumptionGas` | integer | Annual gas consumption in kWh. Overrides the Housing Type default. |
| `searchQuery` | string | Only return tariffs whose provider or offer name contains this keyword. Empty = all. |
| `maxResults` | integer | Maximum number of tariffs to return. Default: `80`. |
| `proxyConfiguration` | object | Apify proxy settings. Selectra's engine API has no anti-bot, so any setting (including none) works. |

#### Example input

```json
{
    "postalCode": "69001",
    "energyType": "both",
    "housingType": "maison",
    "maxResults": 80
}
```

### Output

Each dataset item looks like this (real output from a live test run):

```json
{
    "providerName": "Primeo",
    "providerSlug": "primeo",
    "offerName": "Confort+",
    "optionName": "Base",
    "energyType": "electricity",
    "offerType": "fixed",
    "score": "C",
    "punchline": "Prix fixe garanti jusqu'au 31/12/2027",
    "totalPriceAnnual": 1548,
    "totalPriceWithDiscountAnnual": 1548,
    "discount": 0,
    "monthlyPrice": 128.98,
    "subscriptionPriceAnnual": 245.28,
    "pricePerKwh": 0.16,
    "pricePerKwhHp": null,
    "pricePerKwhHc": null,
    "annualSavings": 240.11,
    "isSponsored": false,
    "partnershipType": "Partner",
    "lastCertifiedAt": "2026-07-02",
    "ratingTrustpilot": 4.5,
    "ratingTrustpilotCount": 3414,
    "ratingSelectra": 3.13,
    "ratingSelectraCount": 172,
    "filters": ["Prix fixes", "Offre à prix fixe", "Tarif avantageux"],
    "currency": "EUR",
    "postalCode": "75001",
    "insee": "75056",
    "power": 9,
    "consumption": 8060,
    "url": "https://souscription.primeo-energie.fr/referal?codeMarketPartner=SELECTRACOMPA",
    "scrapedAt": "2026-07-27T21:04:44.020Z"
}
```

#### Output fields

| Field | Type | Description |
|-------|------|-------------|
| `providerName` | string | Energy provider/supplier name |
| `providerSlug` | string | Selectra's internal provider slug |
| `offerName` | string | The specific tariff offer's name |
| `optionName` | string | null | Meter option, e.g. Base / Heures Pleines-Heures Creuses |
| `energyType` | string | `electricity` or `gas` |
| `offerType` | string | null | `fixed` or `variable` pricing |
| `score` | string | null | Selectra's letter grade for the offer (A-E) |
| `punchline` | string | null | Short marketing tagline, present on some offers only |
| `totalPriceAnnual` | number | null | Total estimated annual price in EUR |
| `totalPriceWithDiscountAnnual` | number | null | Total estimated annual price after discount |
| `discount` | number | null | Discount amount applied |
| `monthlyPrice` | number | null | Monthly subscription/consumption price |
| `subscriptionPriceAnnual` | number | null | Annual fixed subscription price |
| `pricePerKwh` | number | null | Base per-kWh price |
| `pricePerKwhHp` | number | null | Peak-hours (Heures Pleines) per-kWh price, double-rate meters only |
| `pricePerKwhHc` | number | null | Off-peak (Heures Creuses) per-kWh price, double-rate meters only |
| `annualSavings` | number | null | Estimated annual savings vs. the regulated tariff |
| `isSponsored` | boolean | Whether the offer is a sponsored/partner placement |
| `partnershipType` | string | null | Partnership category |
| `lastCertifiedAt` | string | null | When Selectra last certified this offer's pricing |
| `ratingTrustpilot` | number | null | Independent Trustpilot rating |
| `ratingTrustpilotCount` | integer | null | Number of Trustpilot reviews |
| `ratingSelectra` | number | null | Selectra's own platform rating |
| `ratingSelectraCount` | integer | null | Number of Selectra platform reviews |
| `filters` | array | Tag array (e.g. green energy, fixed price) |
| `currency` | string | Always `EUR` |
| `postalCode` | string | The postal code requested |
| `insee` | string | French INSEE commune code the tariff was computed for |
| `power` | integer | null | Subscribed power in kVA, electricity offers only |
| `consumption` | integer | null | Annual consumption used for the estimate, electricity offers only |
| `url` | string | Provider sign-up/affiliate link, or the Selectra comparator page as fallback |
| `scrapedAt` | string | ISO 8601 timestamp of collection |

### Cost estimate

This actor makes one HTTP call per energy type requested (two for `both`), plus one lightweight geo lookup to resolve the postal code — so a full run typically finishes in a few seconds. Exact cost depends on your Apify plan and the number of results you request.

### Limitations

- **Peak/off-peak rates only apply to double-rate meters.** `pricePerKwhHp`/`pricePerKwhHc` are `null` on single-rate (Base) offers — this is expected, not a scraping gap.
- **Punchline is optional.** Selectra only attaches a marketing tagline to a subset of offers; most return `null`.
- **France only.** This actor targets `selectra.info` (France). Selectra runs comparable platforms for Spain, Portugal and the UK on the same underlying CMS, but with different API paths — not covered by this actor.
- **Estimates, not guarantees.** Prices and savings are Selectra's own estimates based on the household profile you provide, not a binding quote from any provider.

### Related scrapers

Looking for other European price-comparison data? These sibling actors follow the same clean-JSON, no-login approach:

- **European Financial Comparison Scraper** — cross-border financial product comparisons
- **GovXray Scraper** — European municipal fiscal health data
- **Mercor Scraper** — AI talent marketplace gig listings

# Actor input Schema

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

5-digit French postal code to look up (e.g. 75001 for Paris, 69001 for Lyon, 13001 for Marseille). Resolved to an INSEE commune code automatically. Leave empty for the default (Paris 1st).

## `energyType` (type: `string`):

Which tariffs to fetch.

## `housingType` (type: `string`):

Housing archetype used to set default power (kVA) and annual consumption (kWh) if you don't set them explicitly below. These match Selectra's own comparator widget defaults.

## `power` (type: `integer`):

Subscribed electricity power in kVA. Leave empty to use the Housing Type default.

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

Annual electricity consumption in kWh. Leave empty to use the Housing Type default.

## `consumptionGas` (type: `integer`):

Annual gas consumption in kWh. Leave empty to use the Housing Type default.

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

Only return tariffs whose provider or offer name contains this keyword (case-insensitive). Leave empty to return all tariffs.

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

Maximum number of tariffs to return.

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

Selectra's engine API (selectra.info/france-energy/api) has no CDN/WAF or bot-detection — any proxy configuration works, including none at all.

## Actor input object example

```json
{
  "postalCode": "75001",
  "energyType": "both",
  "housingType": "maison",
  "maxResults": 80,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "postalCode": "75001",
    "maxResults": 80,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

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

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

```

## MCP server setup

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