Skip to content
Data Directory

Query these datasets with Claude

Install a skill and Claude can query this data directly with DuckDB — the catalogs, the schemas and the query patterns, with nothing between it and the files.

For your AI agentRecommended

npx skills add your-org/data-directory

Installs the query-datasets skill — the catalog URLs, the schemas and the query patterns — into Claude Code, Codex or any agent that reads skills.

For your machine

curl -fsSL https://data.bunnytech.app/skill.sh | sh

Checks for the DuckDB CLI, writes a ./datadirectory/ folder with an attach script and per-dataset notes, then connects to all 2 published catalogs and prints the schema it finds. It never installs anything without asking.

Both end up in the same place. Read the script before you run it — it is generated from the published manifests, so it cannot describe data that is not there.

← Datasets

Apple App Store charts

Daily snapshots of Apple App Store charts (top free / paid / grossing / new) per storefront and genre, taken from the public iTunes RSS feed generator, plus a dimension table describing every app that has appeared in one.

appsmobileappleioschartsrankingsapp-store

All three stay inside Apple App Store charts: the assistant is given this dataset’s schema and nothing else, and the playground attaches only these tables. Ask across every dataset from the home page instead.

Cadence
daily
Rows
198
Size
113 KB
Tables
2
Snapshot
2026-08-22
Last ingest
1 day ago
Manifest written
1 day ago
Version
01M0NJGCQQ2DKP82KNNEPYSP2J

Source: https://itunes.apple.com/us/rss/
Machine-readable: manifest.json · catalog

Query it yourself

Generated from this exact manifest version, so the URLs are the ones actually published.

Fastest — Parquet exports (immutable, sorted)
INSTALL httpfs; LOAD httpfs;

CREATE OR REPLACE VIEW rankings AS
  SELECT * FROM read_parquet('https://data-directory.fsn1.your-objectstorage.com/public/itunes-charts/v/01M0NJGCQQ2DKP82KNNEPYSP2J/rankings.parquet');

CREATE OR REPLACE VIEW apps AS
  SELECT * FROM read_parquet('https://data-directory.fsn1.your-objectstorage.com/public/itunes-charts/v/01M0NJGCQQ2DKP82KNNEPYSP2J/apps.parquet');

SELECT * FROM rankings LIMIT 10;
Live lake — DuckLake catalog, time travel included
INSTALL ducklake; LOAD ducklake;
ATTACH 'ducklake:https://data-directory.fsn1.your-objectstorage.com/catalog/itunes-charts/catalog.ducklake' AS lake (READ_ONLY); SELECT * FROM lake.main.rankings LIMIT 5;
USE lake;

Worked examples

Sample rankings
SELECT * FROM rankings
LIMIT 10;

Reads the first rows in published order (snapshot_date, country, feed_type, genre_id, rank), which is also the order the parquet file is physically sorted in.

Sample apps
SELECT * FROM apps
LIMIT 10;

Reads the first rows in published order (name_lc), which is also the order the parquet file is physically sorted in.

Schema

One row per app per chart position per day. A full daily snapshot of an Apple App Store chart; re-running a day rewrites exactly that day.

Rows
99
Size
2.5 KB
Write mode
snapshot_history
Sorted by
snapshot_datecountryfeed_typegenre_idrank
Files
1
Columns of rankings
ColumnTypeNullDescriptionMinMax
snapshot_date sortDATEnoThe chart day (UTC) this snapshot was captured for.2026-08-222026-08-22
country sortVARCHARnoTwo-letter storefront code the chart was read from.usus
feed_type sortVARCHARnoWhich chart: topfreeapplications, toppaidapplications, …topfreeapplicationstopfreeapplications
genre_id sortINTEGERnoApple genre id the chart was scoped to; 0 means the all-genres chart. Part of the snapshot key, so it is never NULL.60076007
rank sortINTEGERnoChart position, 1-based, in the order Apple returned it.199
app_id BIGINTnoApple track id of the ranked app; joins to apps.app_id.
price_amount DECIMAL(12,4) (currency of price_currency)noListed price on the snapshot day, from the feed price attribute.
price_currency VARCHARnoISO 4217 currency of price_amount.
ingested_at TIMESTAMPnoWhen this row was produced by the ingest run (UTC).

One row per app ever seen in a chart, with the descriptive fields from the feed. Upserted: first_seen_date/last_seen_date widen over time, everything else reflects the latest sighting.

Rows
99
Size
110 KB
Write mode
upsert
Sorted by
name_lc
Files
1
Columns of apps
ColumnTypeNullDescriptionMinMax
app_id BIGINTnoApple track id. Stable primary key of the dimension.
bundle_id VARCHARyesReverse-DNS bundle identifier, e.g. com.openai.chat.
name VARCHARnoApp name as shown in the store.
name_lc sortVARCHARnoname, lowercased and accent-folded. The sort key and the prefix-search column.ai chat assistant – chatnowzeely: ai marketing platform
artist_id BIGINTyesApple developer id, parsed from the artist URL. NULL when absent.
artist_name VARCHARnoDeveloper name as published in the feed.
artist_lc VARCHARnoartist_name, lowercased and accent-folded, for search.
artist_url VARCHARyesStore URL of the developer page.
summary TEXTyesThe app description text from the feed.
rights VARCHARyesCopyright line published with the app.
content_type VARCHARyesFeed content type, e.g. "Application".
category_id INTEGERyesApple genre id of the app’s primary category.
category_name VARCHARyesHuman name of the primary category.
release_date TIMESTAMPTZyesRelease (or latest update) timestamp reported by the feed.
icon_url_53 VARCHARyes53×53 icon URL, picked by the image height attribute.
icon_url_75 VARCHARyes75×75 icon URL, picked by the image height attribute.
icon_url_100 VARCHARyes100×100 icon URL, picked by the image height attribute.
app_url VARCHARyesCanonical App Store URL of the app.
first_seen_date DATEnoFirst chart day this app was seen in any chart we ingest.
last_seen_date DATEnoMost recent chart day this app was seen.