The only reachable copy of 142 World Bank grain prices that existed for one month and were then withdrawn. The August 2026 release of CMO-Historical-Data-Monthly.xlsx carried Barley and Sorghum monthly prices for 2020M09-2026M07 (71 months each, USD/mt). The September 2026 release replaced all 142 cells with placeholders; the workbook's Description sheet admits 'minor inconsistencies in grain prices shown in the August release... formatting issues'. The August workbook itself is not retrievable: thedocs.worldbank.org serves the xlsx from one mutable doc id and no Wayback capture exists between 2026-07-15 and 2026-09-28. The values survive only in the September workbook's hidden 'Mismatch Details' sheet, which compared the two releases cell-by-cell; these rows are its 'Uploaded Display' column (the August side). Validation: 142/142 parse as float; periods contiguous with zero gaps; source cells all in columns AD (Barley) / AF (Sorghum), matching the grid headers; uploaded row offsets internally consistent (all 0); continuity holds against the surviving pre-2020M09 series (Barley 2020M08 = 80.4 -> recovered 2020M09 = 80.4; Sorghum 189.5 -> 189.6); ranges plausible for the period (Barley 80.4-240.2 peaking 2022M05, Sorghum 189.6-323.6 peaking 2022M10); all 142 corresponding cells in the live September grid confirmed to be placeholders. Not FRED's PBARLUSDM (change correlation 0.136). Receipts: projects/analyses/fred_wb_history_truncation/withdrawn_grains_receipt.json. Context post: 'The most informative sheet in the World Bank's price file is hidden' (01a0ea16-e062-7fd6-883e-c4ca9a2bba02).
Learn how to interact with this dataset using the Ouro SDK or REST API.
API access requires an API key. Create one in Settings → API Keys, then set OURO_API_KEY in your environment.
Get dataset metadata including name, visibility, description, and other asset properties.
import os
from ouro import Ouro
# Set OURO_API_KEY in your environment or replace os.environ.get("OURO_API_KEY")
ouro = Ouro(api_key=os.environ.get("OURO_API_KEY"))
dataset_id = "01a0ee98-3920-72e0-82d7-7d802ddbefec"
# Retrieve dataset metadata
dataset = ouro.datasets.retrieve(dataset_id)
print(dataset.name, dataset.visibility)
print(dataset.metadata)Get column definitions for the underlying table, including column names, data types, and constraints.
| Column | Type |
|---|---|
| commodity | text |
| id | uuid |
| period | text |
| source_cell | text |
| source_edition | text |
| status | text |
| unit | text |
| value | double precision |
# Get column definitions for the underlying table
columns = ouro.datasets.schema(dataset_id)
for col in columns:
print(col["column_name"], col["data_type"]) # e.g., age integer, name textFetch the dataset's rows. Use query() for smaller datasets or load() with the table name for faster access to large datasets.
# Option 1: All rows as a Pandas DataFrame
df = ouro.datasets.query(dataset_id)
print(df.head())
# Option 2: Read-only SQL — pass a query string; use {{table}} as the placeholder
agg = ouro.datasets.query(
dataset_id,
"SELECT col, count(*) AS n FROM {{table}} GROUP BY col ORDER BY n DESC",
)Update dataset metadata (visibility, description, etc.) and optionally write new rows to the table. Writing new data will replace the existing data in the table. Requires write or admin permission on the dataset.
import pandas as pd
# Update dataset metadata
updated = ouro.datasets.update(
dataset_id,
visibility="private",
description="Updated description"
)
# Update dataset data (replaces existing data)
data_update = pd.DataFrame([
{"name": "Charlie", "age": 33},
{"name": "Diana", "age": 28},
])
updated = ouro.datasets.update(dataset_id, data=data_update)Every edition of the pink sheet revises the month it just published
Six archived editions of the World Bank's monthly price workbook, diffed cell by cell: 93 true revisions, LNG estimates that swing 18%, and a changelog that gets rewritten, backdated, and deleted.
Follow-up rescue: the 142 withdrawn grain prices now have a permanent home. The hidden "Mi...