---
name: boe-database-ingestion
description: "How to get Bank of England Database (IADB) data into a pandas DataFrame and Parquet: access, the request, the format, limits, quirks and terms."
---

# Load Bank of England Bank Rate CSV into pandas and Parquet

Source entry: https://signal-lab-jet.vercel.app/datasets/boe-database
Provider: https://www.bankofengland.co.uk/boeapps/database/
Checked against the provider's documentation: 2026-10-30

## Access
- No account or API key.
- Use the parameterized Database CSV URL and send a descriptive User-Agent.

## Request
```bash
curl -A 'your-app/1.0 you@example.com' 'https://www.bankofengland.co.uk/boeapps/database/_iadb-fromshowcolumns.asp?csv.x=yes&Datefrom=01/Jan/2026&Dateto=30/Oct/2026&SeriesCodes=IUDBEDR&CSVF=TN&UsingCodes=Y&VPD=Y&VFD=N'
```

## Format
CSV in tabular-no-titles mode: DATE and IUDBEDR columns. Dates use day abbreviated-month year; Bank Rate values are percentages.

## Load into pandas and Parquet
Needs Python 3 with requests, pandas and pyarrow.
```python
"""Bank of England Bank Rate daily CSV -> pandas -> Parquet. No key."""
import io
import requests
import pandas as pd

URL = "https://www.bankofengland.co.uk/boeapps/database/_iadb-fromshowcolumns.asp"
params = {
    "csv.x": "yes",
    "Datefrom": "01/Jan/2026",
    "Dateto": "30/Oct/2026",
    "SeriesCodes": "IUDBEDR",
    "CSVF": "TN",
    "UsingCodes": "Y",
    "VPD": "Y",
    "VFD": "N",
}
headers = {"User-Agent": "your-app/1.0 you@example.com"}  # Requests' default User-Agent gets HTTP 403
r = requests.get(URL, params=params, headers=headers, timeout=30)
r.raise_for_status()
df = pd.read_csv(io.BytesIO(r.content))
df["DATE"] = pd.to_datetime(df["DATE"], format="%d %b %Y")
df["IUDBEDR"] = pd.to_numeric(df["IUDBEDR"])
df.to_parquet("boe_bank_rate_2026.parquet", index=False)
print(len(df), "daily rows", df["DATE"].min().date(), "to", df["DATE"].max().date(), "latest", df["IUDBEDR"].iloc[-1])
```
Run by us on 2026-10-30 (python 3.13.5 | pandas 3.1.0 | pyarrow 26.0.0 | requests 2.34.2). Result: 210 daily rows 2026-01-02 to 2026-10-29 latest 3.75

## Limits
- Rate limit: Not stated.
- The CSV SeriesCodes parameter supports up to 300 comma-separated codes in one request.
- The Bank may terminate or restrict access for excessive use, but it publishes no numeric request ceiling.

## Quirks
- Observed 2026-10-30: the endpoint returned HTTP 403 with Requests' default User-Agent and HTTP 200 with a descriptive User-Agent such as the one in the snippet.
- Daily Bank Rate rows repeat the effective percentage between policy changes; they are not daily market yields.
- The Bank reserves the right to change information, publication time and methods without notice. Keep retrieval dates and account for revisions.

## Terms and attribution
- Database data are under the UK Open Government Licence, with separate exclusions for selected exchange-rate series and named Crown Dependency data.
- The specific SONIA attribution statement does not apply to this Bank Rate series.
- Terms page: https://www.bankofengland.co.uk/legal

## Sources
- https://www.bankofengland.co.uk/boeapps/database/help.asp: "An automatic CSV download of specific series for a certain date range can be setup by using the following link:"
- https://www.bankofengland.co.uk/boeapps/database/help.asp: "The "SeriesCodes" parameter supports up to 300 comma separated codes in a single request."
- https://www.bankofengland.co.uk/boeapps/database/Bank-Rate.asp: "See how the Bank of England's Bank Rate changed over time"
- https://www.bankofengland.co.uk/legal: "allowing and encouraging free and flexible data reuse."

Information for educational purposes only. Free tiers, limits and licenses belong to the providers and may change; check the provider's own terms before using the data.
