# Define months for FY 2025/26 (April 2025 - March 2026)
fy_months <- seq(as.Date("2025-04-01"), as.Date("2026-03-01"), by = "month") %>%
format("%Y-%m")
# Function to fetch rate for a month
fetch_hmrc_rate <- function(month_ym) {
year_mon <- str_replace(month_ym, "-", "/")
url <- paste0("https://hmrc.matchilling.com/rate/", year_mon, ".json")
resp <- request(url) %>%
req_timeout(10) %>%
req_perform()
if (resp_status(resp) == 200) {
data <- resp %>%
resp_body_json(simplifyVector = TRUE) %>%
.$rates %>%
enframe(name = "currency", value = "rate") %>%
filter(currency == "EUR") %>%
mutate(
month = month_ym,
period_start = ymd(paste0(month_ym, "-01")),
period_end = period_start %m+% months(1) - days(1),
eur_per_gbp = as.numeric(rate)
) %>%
select(month, eur_per_gbp, period_start, period_end)
return(data)
} else {
tibble(
month = month_ym,
eur_per_gbp = NA_real_,
period_start = ymd(paste0(month_ym, "-01")),
period_end = period_start %m+% months(1) - days(1)
)
}
}
# Fetch all months
rates <- map_df(fy_months, fetch_hmrc_rate)HMRC Euro to GBP Monthly Rates 2025/26
Monthly rate extraction
This code retrieves the monthly EUR→GBP exchange rates for the 2025-26 financial year by calling the open HMRC exchange‑rate API developed by Matías J. S. and assembling the Euro rate for each month into a single tidy table.
You can double check values in the official site HMRC monthly Euro to Sterling exchange rates
View the table
This bit creates a simple table visualization for the html file
rates %>%
mutate(
month_display = month,
eur_per_gbp = round(eur_per_gbp, 4),
gbp_per_eur = round(1/eur_per_gbp, 4)
) %>%
select(month_display, eur_per_gbp, gbp_per_eur) %>%
kbl(
caption = "HMRC Monthly EUR/GBP Rates FY 2025/26",
col.names = c("Month", "€ per £1", "£ per €1")
) %>%
kable_styling(
bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE
) %>%
# Fixed: pack_rows() doesn't accept font_size argument
pack_rows("2025", 1, 9) %>%
pack_rows("2026", 10, 12)| Month | € per £1 | £ per €1 |
|---|---|---|
| 2025 | ||
| 2025-04 | 1.1897 | 0.8405 |
| 2025-05 | 1.1680 | 0.8562 |
| 2025-06 | 1.1846 | 0.8442 |
| 2025-07 | 1.1689 | 0.8555 |
| 2025-08 | 1.1547 | 0.8660 |
| 2025-09 | 1.1573 | 0.8641 |
| 2025-10 | 1.1528 | 0.8675 |
| 2025-11 | 1.1506 | 0.8691 |
| 2025-12 | 1.1328 | 0.8828 |
| 2026 | ||
| 2026-01 | 1.1382 | 0.8786 |
| 2026-02 | 1.1448 | 0.8735 |
| 2026-03 | 1.1469 | 0.8719 |
Export it for your Tax Returns
Here, we save the csv file with the 12 months you need and the currency you need. (if you are looking for any other currency , just change the line in the first chunck of code to match your currency filter(currency == “EUR”)
# Save clean CSV for HMRC filing
rates_export <- rates %>%
select(month, eur_per_gbp) %>%
mutate(
eur_per_gbp = round(eur_per_gbp, 4),
gbp_per_eur = round(1/eur_per_gbp, 4)
)
write_csv(rates_export, "hmrc_eur_gbp_2025_26.csv")
print("CSV saved: hmrc_eur_gbp_2025_26.csv")[1] "CSV saved: hmrc_eur_gbp_2025_26.csv"
# Preview
rates_export# A tibble: 12 × 3
month eur_per_gbp gbp_per_eur
<chr> <dbl> <dbl>
1 2025-04 1.19 0.840
2 2025-05 1.17 0.856
3 2025-06 1.18 0.844
4 2025-07 1.17 0.856
5 2025-08 1.15 0.866
6 2025-09 1.16 0.864
7 2025-10 1.15 0.868
8 2025-11 1.15 0.869
9 2025-12 1.13 0.883
10 2026-01 1.14 0.879
11 2026-02 1.14 0.874
12 2026-03 1.15 0.872