ECB Euro Exchange Rates Scraper — Official FX Reference Rates
Pricing
Pay per event
ECB Euro Exchange Rates Scraper — Official FX Reference Rates
Pull official European Central Bank euro reference exchange rates from the ECB free, keyless SDMX Data API — daily, monthly, quarterly, or annual rates for any currency the ECB publishes, flattened into clean one-row-per-observation records. No API key, no subscription.
Pricing
Pay per event
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
🎯 What this 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 / 503and honourRetry-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.
⚙️ How to use it
- Click Try for free at the top of the page.
- Set Currencies — ISO-4217 codes against EUR, e.g.
USD,GBP. - Pick a Frequency — Daily, Monthly, Quarterly, or Annual.
- Optionally set Start date / End date (
YYYY-MM-DD). Leave blank to get the latest published rates. - Set Max results (up to 50,000).
- Click Start. Rows stream into the run's dataset as each series/observation is resolved.
- Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
currencies | array<string> | no | ["USD"] | ISO-4217 currency codes against EUR. At least one. |
frequency | string | no | "D" | One of D (daily), M (monthly), Q (quarterly), A (annual). |
startDate | string | no | — | YYYY-MM-DD. Omit for the ECB API's default window. |
endDate | string | no | — | YYYY-MM-DD. Omit to fetch through the latest published observation. |
maxResults | integer | no | 1000 | Cap on total observation rows across all requested series (1-50,000). |
proxyConfiguration | object | no | {"useApifyProxy": true} | Apify Proxy configuration. |
Example input
{"currencies": ["USD", "GBP"],"frequency": "D","maxResults": 1000,"proxyConfiguration": {"useApifyProxy": true}}
📤 Output
Every row is one (currency, date) exchange-rate observation.
| Field | Type | Notes |
|---|---|---|
date | string | Observation date (YYYY-MM-DD). |
currency | string | Resolved currency code (e.g. "USD"). |
currency_denom | string | Denominating currency — always "EUR" for the EXR dataflow. |
rate | number | null | The exchange rate, when published. |
frequency | string | Resolved frequency (D, M, Q, or A). |
exr_type | string | ECB exchange-rate type (e.g. "SP00" — spot rate). |
exr_suffix | string | ECB series-variation suffix (e.g. "A" — average). |
obs_status | string | null | ECB observation status/quality flag, when published. |
series_key | string | Raw SDMX series key, for traceability. |
Example output
{"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
Pay-Per-Event — you pay only when these events fire:
| Event | USD | What it is |
|---|---|---|
actor-start | $0.20 | One-off warm-up charge per run |
observation-scraped | $0.002 | Per (currency, date) exchange-rate row written to the dataset |
Example: 100 observations ≈ $0.40 total per run; at 1,000 rows that's $2.20/1,000 ($0.20 start + 1000 x $0.002). No subscription, no minimum, no card to start — Apify gives every new account free credit.
🚧 Limitations
This Actor covers the ECB's EXR reference-rate dataflow only — other
ECB dataflows (BSI, ICP, YC, …) are out of scope for v1. It publishes the
ECB's official reference fix, not live/intraday market quotes, and only
currencies the ECB itself publishes (cross-rates the ECB does not publish,
e.g. USD/GBP, are not derived). Non-trading days (weekends, TARGET
holidays) simply have no observation — row counts do not equal the number
of calendar days requested.
❓ 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.
💬 Your feedback
Spotted a bug, hit a weird edge case, or need another ECB dataflow covered? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.