# harvard-artifacts-etl-streamlit-analytics

Walks your agent through building an ETL pipeline and an analytics dashboard on Harvard Art Museums API data with Python, SQL and Streamlit.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 1900 installs · ★ 5
- Author: reason-machines
- License: LicenseRef-Unknown · policy=link-only · description only; the file stays with the author
- Source: https://github.com/reason-machines/data-skills/tree/HEAD/skills/harvard-artifacts-etl-streamlit-analytics/SKILL.md
- Updated: 2026-10-09
- HTML: https://affpapa.org/en/nevibecode/skills/harvard-artifacts-etl-streamlit-analytics

## What it does

This skill covers the full loop for working with the Harvard Art Museums collection. The agent fetches objects from the API page by page, reshapes the response into three tables and loads them into a relational database. Metadata, media and colour data each get their own table, and the skill ships the `CREATE TABLE` statements so the schema does not have to be invented.

Python code inside handles the requests, turns the payload into `pandas` dataframes and connects to MySQL or TiDB Cloud through `mysql-connector-python`. A separate layer holds analytical SQL: culture, century, whether images exist, colour patterns. Streamlit renders the query output with Plotly charts.

You need a Harvard Art Museums API key and a reachable database before anything runs. Credentials come from environment variables: `HARVARD_API_KEY`, `DB_HOST`, `DB_USER`, `DB_PASSWORD`, `DB_NAME`. No key means the API calls fail; no connection means there is nowhere to load the tables. The fetch loop pauses between pages because the API caps how many requests you get per day.

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add reason-machines/data-skills --skill harvard-artifacts-etl-streamlit-analytics -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/harvard-artifacts-etl-streamlit-analytics/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/harvard-artifacts-etl-streamlit-analytics/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add reason-machines/data-skills --skill harvard-artifacts-etl-streamlit-analytics -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/harvard-artifacts-etl-streamlit-analytics/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add reason-machines/data-skills --skill harvard-artifacts-etl-streamlit-analytics -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/harvard-artifacts-etl-streamlit-analytics/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install reason-machines/data-skills harvard-artifacts-etl-streamlit-analytics
```

2. **Manually: put the files in place**
- File: `.github/skills/harvard-artifacts-etl-streamlit-analytics/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add reason-machines/data-skills --skill harvard-artifacts-etl-streamlit-analytics -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/reason-machines/data-skills --path skills/harvard-artifacts-etl-streamlit-analytics
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/harvard-artifacts-etl-streamlit-analytics/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add reason-machines/data-skills --skill harvard-artifacts-etl-streamlit-analytics -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/reason-machines/data-skills/tree/HEAD/skills/harvard-artifacts-etl-streamlit-analytics/SKILL.md

## When to use it
- pull museum objects from the Harvard Art Museums API page by page
- split the API response into metadata, media and colour tables
- create a SQL schema for museum artifact data
- count works by culture and century
- render analytical query results in Streamlit

## Example prompts
- Build an ETL pipeline that pulls objects from the Harvard Art Museums API and loads them into MySQL
- Create a Streamlit dashboard with Plotly charts for the culture and century queries
- Write a SQL query: how many works have images, and which colours dominate

## Similar
- [xlsx](https://affpapa.org/en/nevibecode/skills/xlsx.md) — skill · 187223 installs
- [google-agents-cli-observability](https://affpapa.org/en/nevibecode/skills/google-agents-cli-observability.md) — skill · 511300 installs
- [caveman-evidence-review](https://affpapa.org/en/nevibecode/skills/caveman-evidence-review.md) — skill · 104500 installs
- [migration](https://affpapa.org/en/nevibecode/skills/migration.md) — skill · 103900 installs
- [performance-optimization](https://affpapa.org/en/nevibecode/skills/performance-optimization.md) — skill · 65200 installs
- [supabase](https://affpapa.org/en/nevibecode/skills/supabase.md) — skill · 8 installs

From the same set: [reason-machines/data-skills](https://affpapa.org/en/nevibecode/by/reason-machines/data-skills.md) — 31 cards

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
