ECB Euro Exchange Rates Scraper icon

Developer tools

ECB Euro Exchange Rates Scraper — Official FX Reference Rates

Pull official ECB euro reference exchange rates from the free, keyless SDMX Data API and export clean, one-row-per-observation records — the authoritative rate that lands in audited books, not a live-market quote.

Free Apify credit covers a first run. No credit card to try.

What this Actor scrapes

This Actor queries the ECB's SDMX 2.1 Data API (data-api.ecb.europa.eu, the EXR reference-rate dataflow) and returns one structured row per (currency, date) observation: date, currency, the EUR-denominated rate, frequency, and the ECB's own quality/status flags.

The ECB doesn't serve a flat table — it serves an index-keyed SDMX-JSON cube that has to be joined against a separate structure block to mean anything, and the series order the API returns is not guaranteed to match the order you requested. Getting that join right — and never silently attaching the wrong rate to the wrong currency — is the actual work this Actor sells.

What we handle for you

  • 🛡️ We rotate browser fingerprints (curl-cffi impersonation) so every request looks like a real browser, not Python.
  • 🔁 We retry with exponential backoff on 408 / 429 / 503 and honour Retry-After — up to 5 attempts per page.
  • 🌐 We rotate residential proxies through Apify Proxy on every retry — fresh session, fresh exit IP.
  • 🧱 We isolate per-series/per-observation failures — one malformed series is skipped and logged, the run keeps going.
  • 🧊 We keep the dataset clean — Pydantic-validated rows, nullable fields typed correctly, dimensions resolved by index rather than assumed request order.
  • 💰 You pay only for observations that land. A query for a window with no published rates still succeeds — you're never charged for a failed run.

Use cases

  • Fintech & payments — reconcile transactions against the official EUR reference rate for a given settlement date.
  • Treasury / FP&A — pull historical daily/monthly rates for multi-currency reporting and budgeting.
  • Accounting & invoicing tools — attach an authoritative, audit-defensible FX rate to a cross-border invoice.
  • Econ research — build long-run time series of ECB reference rates for any published currency.
  • Compliance / audit — cite the exact ECB rate (and its status flag) used to convert a historical transaction.

Input

Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.

FieldTypeRequiredWhat it does
currencies array no ISO-4217 currency codes to fetch against EUR (e.g. "USD", "GBP"). At least one is required.
frequency string no ECB observation frequency: Daily, Monthly, Quarterly, or Annual.
startDate string no YYYY-MM-DD. Leave blank to let the ECB API decide the window's start — an unbounded window always returns the latest published rates, so it can't go stale.
endDate string no YYYY-MM-DD. Leave blank to fetch through the most recently published observation.
maxResults integer no Cap on total observation rows collected across all requested series.
{
  "currencies": [
    "USD",
    "GBP"
  ],
  "frequency": "D",
  "maxResults": 1000,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}

Output

One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.

datecurrencycurrency_denomratefrequencyexr_typeobs_status

{
  "date": "2024-01-02",
  "currency": "USD",
  "currency_denom": "EUR",
  "rate": 1.0956,
  "frequency": "D",
  "exr_type": "SP00",
  "exr_suffix": "A",
  "obs_status": "A",
  "series_key": "0:1:0:0:0"
}

Pricing

EventPriceWhen
Actor start$0.20Once per run, covers warm-up and proxy session setup.
Observation scraped$0.0020Per result written to the dataset.

You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.

FAQ

Does this need an ECB account or API key?
No. The ECB's SDMX Data API is free and keyless.
Why doesn't the row count match the number of days I requested?
The ECB doesn't publish a rate on weekends or TARGET holidays — those dates simply have no observation in the response.
What happens if my date window has no published rates?
The run finishes successfully with zero rows and a status message describing the query — you're not charged for a failed run.
Can I get rates between two non-EUR currencies (e.g. USD/GBP)?
Not in v1 — only rates the ECB itself publishes against EUR. Deriving cross-rates is a candidate for a future version.

Ready to run it?

Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.

Related Actors

Teams that run this also run