ECB Euro Exchange Rates Scraper — Official FX Reference Rates avatar

ECB Euro Exchange Rates Scraper — Official FX Reference Rates

Pricing

Pay per event

Go to Apify Store
ECB Euro Exchange Rates Scraper — Official FX Reference Rates

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

DevilScrapes

Maintained by Community

Actor 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 / 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.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Set Currencies — ISO-4217 codes against EUR, e.g. USD, GBP.
  3. Pick a Frequency — Daily, Monthly, Quarterly, or Annual.
  4. Optionally set Start date / End date (YYYY-MM-DD). Leave blank to get the latest published rates.
  5. Set Max results (up to 50,000).
  6. Click Start. Rows stream into the run's dataset as each series/observation is resolved.
  7. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
currenciesarray<string>no["USD"]ISO-4217 currency codes against EUR. At least one.
frequencystringno"D"One of D (daily), M (monthly), Q (quarterly), A (annual).
startDatestringnoYYYY-MM-DD. Omit for the ECB API's default window.
endDatestringnoYYYY-MM-DD. Omit to fetch through the latest published observation.
maxResultsintegerno1000Cap on total observation rows across all requested series (1-50,000).
proxyConfigurationobjectno{"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.

FieldTypeNotes
datestringObservation date (YYYY-MM-DD).
currencystringResolved currency code (e.g. "USD").
currency_denomstringDenominating currency — always "EUR" for the EXR dataflow.
ratenumber | nullThe exchange rate, when published.
frequencystringResolved frequency (D, M, Q, or A).
exr_typestringECB exchange-rate type (e.g. "SP00" — spot rate).
exr_suffixstringECB series-variation suffix (e.g. "A" — average).
obs_statusstring | nullECB observation status/quality flag, when published.
series_keystringRaw 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:

EventUSDWhat it is
actor-start$0.20One-off warm-up charge per run
observation-scraped$0.002Per (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.