ECB Bank Interest Rate Statistics (MIR)
Pricing
from $13.40 / 1,000 mir series records
ECB Bank Interest Rate Statistics (MIR)
Structured bank (MFI) interest rate series from the European Central Bank's official keyless SDMX Data Portal (data-api.ecb.europa.eu, the MIR dataflow).
Pricing
from $13.40 / 1,000 mir series records
Rating
0.0
(0)
Developer
NexGen Watch
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
🔔 ECB Bank Interest Rate Statistics (MIR)
Structured bank (MFI) interest rate series from the European Central Bank's official keyless SDMX Data
Portal (data-api.ecb.europa.eu, the MIR dataflow). One record per MIR series key, carrying the series'
latest observation and its full metadata, source-native and verbatim — rate/index unit, coverage,
maturity, amount category, business coverage and status exactly as the ECB publishes them.
Output is one bank_rate_series_record row per result; billing is pay-per-event, the value event being one mir series record (a $0.02 start fee per run, then $0.02 per mir series record). Source: data-api.ecb.europa.eu, data.ecb.europa.eu.
📊 Sample Output
Real rows from run bFIPCF4k6Gkcsk6xO on build 0.1.5 (2026-09-19), the same input as the Quick start below — every value is as the source published it (emails masked, long text shortened):
| series_key | flow | source_attribution | free_source_notice | third_party_content | metadata_fidelity |
|---|---|---|---|---|---|
| MIR.M.U2.B.A20.A.I.A.2240.EUR.O | MIR | European Central Bank (ECB) | This information is available free of charge from the ECB. | none — MIR is official ESCB MFI interest-rate statistics | carried unmodified from ECB SDMX |
| MIR.M.U2.B.A20.A.J.A.2240.EUR.O | MIR | European Central Bank (ECB) | This information is available free of charge from the ECB. | none — MIR is official ESCB MFI interest-rate statistics | carried unmodified from ECB SDMX |
| MIR.M.U2.B.A20.A.M.A.2240.EUR.O | MIR | European Central Bank (ECB) | This information is available free of charge from the ECB. | none — MIR is official ESCB MFI interest-rate statistics | carried unmodified from ECB SDMX |
| MIR.M.U2.B.A20.A.N.A.2240.EUR.O | MIR | European Central Bank (ECB) | This information is available free of charge from the ECB. | none — MIR is official ESCB MFI interest-rate statistics | carried unmodified from ECB SDMX |
| MIR.M.U2.B.A20.A.O.A.2240.EUR.O | MIR | European Central Bank (ECB) | This information is available free of charge from the ECB. | none — MIR is official ESCB MFI interest-rate statistics | carried unmodified from ECB SDMX |
| MIR.M.U2.B.A20.A.R.A.2240.EUR.O | MIR | European Central Bank (ECB) | This information is available free of charge from the ECB. | none — MIR is official ESCB MFI interest-rate statistics | carried unmodified from ECB SDMX |
| MIR.M.U2.B.A20.A.R.A.2250.EUR.O | MIR | European Central Bank (ECB) | This information is available free of charge from the ECB. | none — MIR is official ESCB MFI interest-rate statistics | carried unmodified from ECB SDMX |
| MIR.M.U2.B.A20.A.V.A.2240.EUR.O | MIR | European Central Bank (ECB) | This information is available free of charge from the ECB. | none — MIR is official ESCB MFI interest-rate statistics | carried unmodified from ECB SDMX |
The run finished with the status message: NORMAL: 50 unique rows (0 duplicates collapsed). billable=50
✅ What you get
Each row is flat JSON with these fields (from the dataset schema and the sample run; a field the source does not publish for a given row is null):
record_type(string/null) — e.g.bank_rate_series_recordseries_key(string/null) — e.g.MIR.M.U2.B.A20.A.I.A.2240.EUR.Oflow(string/null) — e.g.MIRfreq(string/null) — e.g.Mref_area(string/null) — e.g.U2bs_rep_sector(string/null) — e.g.Bbs_item(string/null) — e.g.A20maturity_not_irate(string/null) — e.g.Adata_type_mir(string/null) — e.g.Iamount_cat(string/null) — e.g.Abs_count_sector(string/null) — e.g.2240currency_trans(string/null) — e.g.EURir_bus_cov(string/null) — e.g.Olatest_time_period(string/null) — e.g.2026-07obs_value(string/null) — e.g.0.05obs_status(string/null) — e.g.Aobs_conf(string/null) — e.g.Fobs_pre_break(string/null) — null in every sample rowobs_comment(string/null) — null in every sample rowtitle(string/null) — e.g.Bank interest rates - loans to corporations (outstanding amounts)title_compl(string/null) — e.g.Euro area (changing composition), Interest rate component of euro area month-to-unit(string/null) — e.g.POunit_mult(string/null) — e.g.0unit_index_base(string/null) — null in every sample rowdecimals(string/null) — e.g.4compiling_org(string/null) — null in every sample rowdiss_org(string/null) — null in every sample rowsource_agency(string/null) — e.g.4F0coverage(string/null) — null in every sample rowsource_attribution(string/null) — e.g.European Central Bank (ECB)free_source_notice(string/null) — e.g.This information is available free of charge from the ECB.third_party_content(string/null) — e.g.none — MIR is official ESCB MFI interest-rate statisticsmetadata_fidelity(string/null) — e.g.carried unmodified from ECB SDMXrate_disclaimer(string/null) — e.g.statistical AGGREGATE MFI interest-rate index (computed across reporting banks)missing_obs_rule(string/null) — e.g.a series whose LATEST observation has no published OBS_VALUE is never given a fasource_url(string/null) — e.g.https://data-api.ecb.europa.eu/service/data/MIRrecord_key(string/null) — e.g.MIR.M.U2.B.A20.A.I.A.2240.EUR.O|2026-07source(string/null) — e.g.ecb-bank-interest-ratesrelease_date(string/null) — null in every sample rowobserved_at(string/null) — e.g.2026-09-19T04:50:32Zlicense(string/null) — e.g.European Central Bank (ECB) statistical data, reproduced under the ECB's reuse tattribution(string/null) — e.g.European Central Bank (ECB) — ECB Data Portal (https://data.ecb.europa.eu/)release_checksum(string/null) — null in every sample rowterminal(string/null) — null in every sample rowscope(string/null) — null in every sample rownote(string/null) — null in every sample rowreported_total(string/integer/null) — null in every sample rowraw_seen(string/integer/null) — null in every sample rowduplicates(string/integer/null) — null in every sample rowunique_found(string/integer/null) — null in every sample rowdelivered(string/integer/null) — null in every sample row
✅ What you get
record_type(string/null) — e.g.bank_rate_series_recordseries_key(string/null) — e.g.MIR.M.U2.B.A20.A.I.A.2240.EUR.Oflow(string/null) — e.g.MIRfreq(string/null) — e.g.Mref_area(string/null) — e.g.U2bs_rep_sector(string/null) — e.g.Bbs_item(string/null) — e.g.A20maturity_not_irate(string/null) — e.g.Adata_type_mir(string/null) — e.g.Iamount_cat(string/null) — e.g.Abs_count_sector(string/null) — e.g.2240currency_trans(string/null) — e.g.EURir_bus_cov(string/null) — e.g.Olatest_time_period(string/null) — e.g.2026-07obs_value(string/null) — e.g.0.05obs_status(string/null) — e.g.Aobs_conf(string/null) — e.g.Fobs_pre_break(string/null) — null in every sample rowobs_comment(string/null) — null in every sample rowtitle(string/null) — e.g.Bank interest rates - loans to corporations (outstanding amounts)title_compl(string/null) — e.g.Euro area (changing composition), Interest rate component of euro area month-to-unit(string/null) — e.g.POunit_mult(string/null) — e.g.0unit_index_base(string/null) — null in every sample rowdecimals(string/null) — e.g.4compiling_org(string/null) — null in every sample rowdiss_org(string/null) — null in every sample rowsource_agency(string/null) — e.g.4F0coverage(string/null) — null in every sample rowsource_attribution(string/null) — e.g.European Central Bank (ECB)free_source_notice(string/null) — e.g.This information is available free of charge from the ECB.third_party_content(string/null) — e.g.none — MIR is official ESCB MFI interest-rate statisticsmetadata_fidelity(string/null) — e.g.carried unmodified from ECB SDMXrate_disclaimer(string/null) — e.g.statistical AGGREGATE MFI interest-rate index (computed across reporting banks)missing_obs_rule(string/null) — e.g.a series whose LATEST observation has no published OBS_VALUE is never given a fasource_url(string/null) — e.g.https://data-api.ecb.europa.eu/service/data/MIRrecord_key(string/null) — e.g.MIR.M.U2.B.A20.A.I.A.2240.EUR.O|2026-07source(string/null) — e.g.ecb-bank-interest-ratesrelease_date(string/null) — null in every sample rowobserved_at(string/null) — e.g.2026-09-19T04:24:40Zlicense(string/null) — e.g.European Central Bank (ECB) statistical data, reproduced under the ECB's reuse tattribution(string/null) — e.g.European Central Bank (ECB) — ECB Data Portal (https://data.ecb.europa.eu/)release_checksum(string/null) — null in every sample rowterminal(string/null) — null in every sample rowscope(string/null) — null in every sample rownote(string/null) — null in every sample rowreported_total(string/integer/null) — null in every sample rowraw_seen(string/integer/null) — null in every sample rowduplicates(string/integer/null) — null in every sample rowunique_found(string/integer/null) — null in every sample rowdelivered(string/integer/null) — null in every sample row
ECB reuse terms — honoured on every record
Source attribution; statistics & metadata unmodified; third-party series excluded (MIR is official ESCB statistics — the guard runs regardless); free-source notice (above).
What you get
One bank_rate_series_record per MIR series: series_key, the ten MIR dimensions (freq, ref_area,
bs_rep_sector, bs_item, maturity_not_irate, data_type_mir, amount_cat, bs_count_sector,
currency_trans, ir_bus_cov), the latest observation (latest_time_period, obs_value, obs_status,
obs_conf, obs_pre_break), descriptive metadata (title, unit, coverage, …), the rate_disclaimer, and
the reuse-term fields.
⚙️ Sample inputs
1. Quick start — the Store example (this is what the sample above came from)
{"freqs": ["M"],"refAreas": ["U2"],"maxRecords": 50}
The sample run charged exactly: 1 × $0.02 apify-actor-start + 50 × $0.02 bank_rate_series_record = $1.02 on the Free tier — every delivered row was billed.
2. A smaller, narrowed run
{"freqs": ["M"],"refAreas": ["U2"],"maxRecords": 5}
Caps the run at 5 rows — about $0.12 on the Free tier ($0.02 start + 5 × $0.02).
3. A full-size run
{"freqs": ["M"],"refAreas": ["U2"],"maxRecords": 2500}
Up to 2500 rows (the schema default for maxRecords) — about $50.02 on the Free tier ($0.02 start + 2500 × $0.02) if the source has that many.
4. A filtered run
{"freqs": ["M"],"refAreas": ["U2"],"maxRecords": 50,"fieldMatch": {"flow": "MIR"}}
Keeps only rows whose flow contains MIR (a value from the sample run above), matched case-insensitively after the source is read and before the maxRecords cap, so the cap counts matches and only delivered matches are billed. searchText does the same across every column. Zero matches end the run as EMPTY_SELECTION with no row charged — if the source has moved on since that sample run, pick a value you see in your own first run. The source is still read in full — this narrows what you receive and pay for, not what the source serves.
🧾 JSON sample record
One real record from run bFIPCF4k6Gkcsk6xO, exactly as it lands in the dataset (emails masked, long text shortened):
{"record_type": "bank_rate_series_record","series_key": "MIR.M.U2.B.A20.A.I.A.2240.EUR.O","flow": "MIR","freq": "M","ref_area": "U2","bs_rep_sector": "B","bs_item": "A20","maturity_not_irate": "A","data_type_mir": "I","amount_cat": "A","bs_count_sector": "2240","currency_trans": "EUR","ir_bus_cov": "O","latest_time_period": "2026-07","obs_value": "0.05","obs_status": "A","obs_conf": "F","obs_pre_break": null,"obs_comment": null,"title": null,"title_compl": "Euro area (changing composition), Interest rate component of euro area month-to-month level change (Bennet binary index on interest rates), Credit and other institutions (MFI except MMFs and central banks) reporting sector - Loans, Total or","unit": "PO","unit_mult": "0","unit_index_base": null,"decimals": "4","compiling_org": null,"diss_org": null,"source_agency": "4F0","coverage": null,"source_attribution": "European Central Bank (ECB)","free_source_notice": "This information is available free of charge from the ECB.","third_party_content": "none — MIR is official ESCB MFI interest-rate statistics","metadata_fidelity": "carried unmodified from ECB SDMX","rate_disclaimer": "statistical AGGREGATE MFI interest-rate index (computed across reporting banks) — NOT a quote, an advertised/offered rate, or a rate any individual consumer or business can obtain; the rate/index unit, coverage and maturity are carried verb","missing_obs_rule": "a series whose LATEST observation has no published OBS_VALUE is never given a fabricated value and never billed — it is excluded and its status counted, not invented","source_url": "https://data-api.ecb.europa.eu/service/data/MIR","record_key": "MIR.M.U2.B.A20.A.I.A.2240.EUR.O|2026-07","source": "ecb-bank-interest-rates","release_date": null,"observed_at": "2026-09-19T04:50:32Z","license": "European Central Bank (ECB) statistical data, reproduced under the ECB's reuse terms. Source: ECB. Statistics and metadata are carried unmodified; third-party series are excluded. This information is available free of charge from the ECB (h","attribution": "European Central Bank (ECB) — ECB Data Portal (https://data.ecb.europa.eu/)"}
🔧 How it works
Source. The actor reads data-api.ecb.europa.eu, data.ecb.europa.eu — endpoints: https://data-api.ecb.europa.eu/service/data, https://data-api.ecb.europa.eu/service/data/, https://data.ecb.europa.eu/. Public pages and feeds only; nothing behind a login.
Transport. Plain HTTPS from the Apify platform, no proxy. robots.txt is read first and a disallowed path is never fetched. Every request carries an identified contact User-Agent. Pacing: CRAWL_DELAY=0.0.
Terminal states. A run ends NORMAL, CAPPED (your cap was reached), PARTIAL (something was withheld and the message says what), GENUINE_EMPTY (the source was read and truly had nothing in scope) or BLOCKED (the source refused or changed shape — the run FAILS loud and bills nothing). A zero-row run is never reported as a silent success.
Charging. Each mir series record is charged at the moment it is pushed (bank_rate_series_record); a row that fails to charge is not delivered, so the dataset count always equals the charged count.
🔧 How it works
These are statistical aggregate rates — NOT offered consumer rates
MIR series are the ECB's statistical aggregate interest-rate indices (MFI interest rate statistics),
computed across reporting banks. They are not a quote, an advertised or offered rate, or a rate any individual
consumer or business can obtain. This actor never labels a MIR value as an offered/available consumer
rate; a rate_disclaimer states this on every record, and the rate/index unit, coverage and maturity are
carried verbatim.
This information is available free of charge from the ECB
The underlying data is available free of charge from the ECB (https://data.ecb.europa.eu/). Every record
repeats that notice in a free_source_notice field, and it appears in the store listing.
Missing observations — never fabricated, never billed
A series whose latest observation has no published value is never given a fabricated value and never billed:
it is excluded, and its status is honestly counted and reported in the run's scope note. Only series with a
genuinely published obs_value are delivered and charged.
Filters
Supply at least one of freqs, refAreas, repSectors, bsItems, or dataTypes — the MIR flow is never
emitted in full. maxRecords caps delivery (hard cap 5000).
Robots & door
Only the official keyless SDMX endpoint on data-api.ecb.europa.eu is read (no API key, no third-party mirror).
Its robots.txt returns an empty (0-byte) body — no policy published — so access is permitted; the actor
re-reads robots on every run and STOPs on any real Disallow. No implied ECB endorsement.
Source & licence
European Central Bank (ECB), ECB Data Portal — reproduced under the ECB's reuse terms. This information is available free of charge from the ECB (https://data.ecb.europa.eu/).
What is not done. No login, no cookie or CAPTCHA bypass, no private or personal-account data, no browser automation.
💰 Pricing example
| Event | Free | Bronze | Silver | Gold |
|---|---|---|---|---|
Actor Start (apify-actor-start) | $0.02 | $0.02 | $0.02 | $0.02 |
MIR series record (bank_rate_series_record) | $0.02 | $0.018 | $0.016 | $0.0134 |
Worked at the live Free-tier price:
- 8 mir series records: $0.02 start + 8 × $0.02 = $0.18
- 25 mir series records: $0.02 start + 25 × $0.02 = $0.52
- 2500 mir series records: $0.02 start + 2500 × $0.02 = $50.02
A run that delivers zero rows charges the $0.02 start fee only. A BLOCKED run (source refused) fails loud and charges no value event. The start fee is charged once per GB of run memory; the default run memory is 4096 MB.
Yield on the sample run: NORMAL: 50 unique rows (0 duplicates collapsed). billable=50. maxRecords is a hard ceiling on what is delivered and billed, never a target.
⚖️ Legal & ToS
This actor reads public, logged-out pages and feeds published by data-api.ecb.europa.eu, data.ecb.europa.eu. It collects only what the source publishes to any visitor, keeps to the source's robots rules (checked on every run), identifies itself with a contact User-Agent, and does not access accounts, private data or anything behind authentication. Use the output in line with the source's terms and your local law; the intended use is B2B research and monitoring.
❓ FAQ
Q: Do I need an API key or a login?
A: No. The source (data-api.ecb.europa.eu, data.ecb.europa.eu) is read logged-out; the input schema has no key field and the actor carries no secrets.
Q: Why did my run return 0 rows?
A: Read the run's status message. GENUINE_EMPTY means the source was read and had nothing in scope for your input; BLOCKED means the source refused and the run failed without billing a value event — retry later or narrow the input. A zero-row run bills the start fee only.
Q: How many rows can one run return?
A: Up to maxRecords (default 2500). Raise the cap for a bigger run; you pay per delivered row.
Q: How fresh is the data?
A: Every run reads the source live at run time; nothing is cached between runs. Put it on a schedule for a continuous feed.
Q: What formats can I export?
A: The dataset downloads as JSON, CSV, Excel, XML or RSS from the run's Dataset tab or the Apify API, and any run can push to a webhook or integration.
Q: How is this different from the other NexGen Watch actors actors?
A: Same output shape and billing model; this one covers data-api.ecb.europa.eu, data.ecb.europa.eu. The siblings under Related Actors cover the other sources or slices — run several on one schedule for a combined feed.
Q: Are there rate limits?
A: The actor paces itself against the source (CRAWL_DELAY=0.0) and honours its robots rules; there is no per-buyer limit beyond your Apify plan's concurrency.
🆘 Troubleshooting
- Run FAILED with BLOCKED → the source refused the request or changed its page shape → nothing was billed beyond the start fee; retry after a while, and if it persists open an Issue with the run id.
- Status says CAPPED → your cap (
maxRecords) was reached → raise it for a bigger run. - Input validation error on start → a field is outside the schema's allowed values → start from the Quick start block and change one field at a time.
- Run TIMED-OUT → a very wide request on a slow day → raise the run timeout in Run options or narrow the input; what was delivered before the timeout is still in the dataset.
🔗 Related Actors
- DOL Prevailing-Wage Determinations (FY2026 Q3, quarter-to-date) — Structured OFLC prevailing-wage determinations (ETA-9141) — the required-wage anchor for every U.S. foreign-labor program — read directly from the of…
- DOL Prevailing-Wage Worksites (FY2026 Q3, quarter-to-date) — Structured worksite-level prevailing-wage detail — the per-worksite companion to the OFLC prevailing-wage determinations — read directly from the off…
- ECB Bank (MFI) Balance Sheet Statistics — Structured bank (MFI) balance-sheet series from the European Central Bank's official keyless SDMX Data Portal (data-api.ecb.europa.eu, the BSI datafl…
- ECB Bank Lending Survey (BLS) — Structured Bank Lending Survey series from the European Central Bank's official keyless SDMX Data Portal (data-api.ecb.europa.eu, the BLS dataflow)
- ECB Central Counterparty (CCP) Clearing Statistics — Structured central counterparty (CCP) clearing and settlement statistics from the European Central Bank's official keyless SDMX Data Portal (data-api…
- ECB Consolidated Banking Data (CBD2) — Structured consolidated banking series from the European Central Bank's official keyless SDMX Data Portal (data-api.ecb.europa.eu, the CBD2 dataflow)
- 🏢 About NexGenData — NexGen Watch is NexGenData's fleet of more than 300 public data actors built on official sources, pay-per-result. Browse the catalog at apify.com/nexgenwatch.
⭐ Found this useful?
If this actor saved you a manual check, a quick review on the Apify Store helps other teams find it. Feature request or a source that changed? Open it from the Issues tab — every one is read.
