Full catalog

list() always returns the full catalog, keyless or not.

list() always returns the full catalog and never sends the API key even if the Client has one configured:

client = Client()
datasets = client.list(category="finance")
for ds in datasets:
    print(ds.slug, ds.keyless)  # keyless tells you which need a key to load

This is deliberate: the catalog is public for discovery/marketing purposes. What's gated is loading actual data (see Loading data).

Filters

All filters are optional and combine with AND. license, category, and tags each accept either a single string or a list (sent as a comma-joined value):

client.list(
    query="housing",                    # free-text search over name/description
    license=["MIT", "CC-BY-4.0"],       # or a single string, e.g. license="MIT"
    category="real-estate",
    tags=["kenya", "prices"],
    min_size=0, max_size=50_000_000,    # bytes
    min_rows=100, max_rows=1_000_000,
)

Pagination

page (default 1) and page_size (default 20) control pagination; a call always returns at most page_size results for that page:

page_2 = client.list(category="finance", page=2, page_size=50)

Result fields

Each result is a DatasetSummary with the catalog metadata needed to decide whether to load a dataset — no schema or column detail yet (that requires load_dataset(), see Quickstart):

ds = datasets[0]
ds.slug            # e.g. "kenya-housing-prices"
ds.name
ds.description
ds.license
ds.category
ds.tags            # list[str]
ds.size            # bytes
ds.row_count
ds.column_count
ds.keyless         # loadable without an API key right now?
ds.keyless_until   # if temporarily keyless, when that ends (else None)
ds.created_at
ds.updated_at

On this page