---
name: world-bank-pink-sheet-ingestion
description: "How to get World Bank Commodity Markets Pink Sheet data into a pandas DataFrame and Parquet: access, the request, the format, limits, quirks and terms."
---

# Load World Bank Pink Sheet monthly prices into pandas and Parquet

Source entry: https://signal-lab-jet.vercel.app/datasets/world-bank-pink-sheet
Provider: https://www.worldbank.org/en/research/commodity-markets
Checked against the provider's documentation: 2026-11-01

## Access
- No account or key was needed for the checked monthly Excel workbook.
- Reading XLSX with pandas requires the openpyxl engine.

## Request
```bash
curl -O 'https://thedocs.worldbank.org/en/doc/74e8be41ceb20fa0da750cda2f6b9e4e-0050012026/related/CMO-Historical-Data-Monthly.xlsx'
```

## Format
XLSX workbook with Monthly Prices, Monthly Indices, Description and Index Weights sheets. Prices are wide columns keyed by YYYYMMM periods, with units in the row beneath the column names.

## Load into pandas and Parquet
Needs Python 3 with requests, pandas and pyarrow.
```python
"""World Bank Pink Sheet monthly nominal prices -> pandas -> Parquet."""
import io
import requests
import pandas as pd

URL = "https://thedocs.worldbank.org/en/doc/74e8be41ceb20fa0da750cda2f6b9e4e-0050012026/related/CMO-Historical-Data-Monthly.xlsx"
r = requests.get(URL, timeout=120)
r.raise_for_status()
df = pd.read_excel(io.BytesIO(r.content), sheet_name="Monthly Prices", header=4)
df = df.iloc[1:].rename(columns={df.columns[0]: "period"})
df["date"] = pd.to_datetime(
    df["period"].astype(str).str.replace("M", "-", regex=False), format="%Y-%m"
)
for col in df.columns[1:-1]:
    df[col] = pd.to_numeric(df[col], errors="coerce")
df.to_parquet("world_bank_pink_sheet_monthly.parquet", index=False)
print(len(df), "months", df["date"].min().date(), "to", df["date"].max().date(),
      len(df.columns) - 2, "commodity series")
```
Run by us on 2026-11-01 (python 3.13.5 | pandas 3.1.0 | pyarrow 26.0.0 | requests 2.34.2 | openpyxl 3.1.5). Result: 801 months 1960-01-01 to 2026-09-01 71 commodity series

## Limits
- Rate limit: Not stated.
- The checked monthly workbook is about 586 KB.
- Monthly data are nominal US-dollar series; the workbook states that monthly real-price series are not provided.

## Quirks
- The units occupy the first data row after the header and are removed by df.iloc[1:].
- The ellipsis character denotes missing values and becomes NaN through numeric conversion.
- Keep the Description sheet separately when series provenance and definition changes matter.

## Terms and attribution
- World Bank datasets default to CC BY 4.0 unless metadata states otherwise.
- Attribute the World Bank and named data providers; check metadata for third-party additions.
- Terms page: https://data.worldbank.org/summary-terms-of-use

## Sources
- https://www.worldbank.org/en/research/commodity-markets: "Latest Commodity Prices Published (10/02/2026)."
- https://data.worldbank.org/summary-terms-of-use: "you are free to copy, distribute, adapt, display or include the data in other products for commercial or noncommercial purposes at no cost"
- https://data.worldbank.org/summary-terms-of-use: "The World Bank: Dataset name: Data source (if known)."

## 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.
