---
name: world-bank-remittance-flows-ingestion
description: "How to get World Bank Remittance Flows Datasets data into a pandas DataFrame and Parquet: access, the request, the format, limits, quirks and terms."
---

# Load World Bank inward remittances into pandas and Parquet

Source entry: https://signal-lab-jet.vercel.app/datasets/world-bank-remittance-flows
Provider: https://datacatalog.worldbank.org/search/dataset/0066877/remittance-flows-datasets
Checked against the provider's documentation: 2026-11-01

## Access
- No account or key. The inward and outward Excel workbooks are public downloads.
- The example reads the XLSX package directly so it does not require an additional Excel engine.

## Request
```bash
curl -O 'https://datacatalogfiles.worldbank.org/ddh-published/0066877/DR0095407/Inward_remittance_flows_(July_13_2025).xlsx'
```

## Format
Excel workbook with one wide sheet: economy rows, annual columns from 2000 through 2024 and values in current nominal US$ millions.

## Load into pandas and Parquet
Needs Python 3 with requests, pandas and pyarrow.
```python
"""World Bank inward-remittance workbook -> tidy pandas -> Parquet. No key."""
import io
import re
import zipfile
import xml.etree.ElementTree as ET
import pandas as pd
import requests

URL = "https://datacatalogfiles.worldbank.org/ddh-published/0066877/DR0095407/Inward_remittance_flows_(July_13_2025).xlsx"
NS = {"m": "http://schemas.openxmlformats.org/spreadsheetml/2006/main"}
r = requests.get(URL, timeout=60)
r.raise_for_status()
with zipfile.ZipFile(io.BytesIO(r.content)) as book:
    root = ET.fromstring(book.read("xl/sharedStrings.xml"))
    strings = ["".join(n.text or "" for n in item.findall(".//m:t", NS))
               for item in root.findall("m:si", NS)]
    sheet = ET.fromstring(book.read("xl/worksheets/sheet1.xml"))
rows = []
for row in sheet.findall(".//m:sheetData/m:row", NS):
    values = {}
    for cell in row.findall("m:c", NS):
        column = re.match(r"[A-Z]+", cell.attrib["r"]).group()
        value = cell.find("m:v", NS)
        if value is None:
            values[column] = None
        elif cell.attrib.get("t") == "s":
            values[column] = strings[int(value.text)]
        else:
            values[column] = float(value.text)
    rows.append(values)
wide = pd.DataFrame(rows)
wide.columns = ["economy"] + [str(int(x)) for x in wide.iloc[0, 1:]]
wide = wide.iloc[1:].copy()
df = wide.melt(id_vars="economy", var_name="year", value_name="usd_millions")
df["usd_millions"] = pd.to_numeric(df["usd_millions"], errors="coerce")
df = df.dropna(subset=["economy", "usd_millions"])
df["year"] = df["year"].astype("int16")
df.to_parquet("world_bank_inward_remittances.parquet", index=False)
print(len(df), "observations", df["economy"].nunique(), "economies", df["year"].min(), "to", df["year"].max())
```
Run by us on 2026-11-01 (python 3.13.5 | pandas 3.1.0 | pyarrow 26.0.0 | requests 2.34.2). Result: 5018 observations 201 economies 2000 to 2024

## Limits
- Rate limit: Not stated.
- The files are annual and end in 2024.
- The checked inward workbook is about 76 KB and has one 222-row by 26-column sheet before tidying.

## Quirks
- The workbook is wide; reshape the year columns before time-series use.
- Zero and missing are distinct. Preserve both rather than converting blank cells to zero.
- The workbook includes totals and note rows; the example drops rows without numeric values but retains published aggregates such as Total.

## Terms and attribution
- ODbL permits copying, modification, distribution and commercial use with attribution and share-alike obligations.
- Use the workbook's requested citation to the World Bank Migration and Development Brief 2025.
- Terms page: https://datacatalog.worldbank.org/public-licenses?fragment=odbl

## Sources
- https://datacatalog.worldbank.org/search/dataset/0066877/remittance-flows-datasets: "Annual remittance flows data from 2000-2024"
- https://datacatalog.worldbank.org/search/dataset/0066877/remittance-flows-datasets: "This dataset is licensed under Open Database License"
- https://datacatalog.worldbank.org/public-licenses?fragment=odbl: "Users are obligated to give appropriate credit (attribution), and to provide any redistributions of data under the same license and in open formats."

## Help improve this skill
Missing a source, or see something to improve? Call the MCP tool suggest_source or feedback (or POST /api/suggest or /api/feedback). Reviewed ideas: https://signal-lab-jet.vercel.app/agent-suggestions

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.
