Awesome-Agent-Skills-for-Empirical-Research open-syllabus-api
Analyze most-taught books and texts via Open Syllabus analytics
install
source · Clone the upstream repo
git clone https://github.com/brycewang-stanford/Awesome-Agent-Skills-for-Empirical-Research
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/brycewang-stanford/Awesome-Agent-Skills-for-Empirical-Research "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/43-wentorai-research-plugins/skills/domains/education/open-syllabus-api" ~/.claude/skills/brycewang-stanford-awesome-agent-skills-for-empirical-research-open-syllabus-api && rm -rf "$T"
manifest:
skills/43-wentorai-research-plugins/skills/domains/education/open-syllabus-api/SKILL.mdsource content
Open Syllabus API
Overview
Open Syllabus analyzes 20M+ college course syllabi from 7,000+ institutions in 140+ countries, tracking which books, articles, and media are most frequently assigned in higher education. The Explorer provides teaching frequency rankings and co-assignment patterns. Useful for curriculum research, textbook selection, and understanding disciplinary norms. Free for basic search; institutional subscription for full API access.
Explorer Interface
Web Search
# The primary interface is the web explorer: # https://explorer.opensyllabus.org/ # Search by title, author, or field # Filter by country, institution, discipline, year range
API Access
# API requires institutional subscription # Base URL: https://api.opensyllabus.org/v1/ # Search titles curl -H "Authorization: Bearer $OS_TOKEN" \ "https://api.opensyllabus.org/v1/titles?query=republic+plato&limit=20" # Get title details curl -H "Authorization: Bearer $OS_TOKEN" \ "https://api.opensyllabus.org/v1/titles/12345" # Co-assignment analysis curl -H "Authorization: Bearer $OS_TOKEN" \ "https://api.opensyllabus.org/v1/titles/12345/co-assigned?limit=20" # Rankings by field curl -H "Authorization: Bearer $OS_TOKEN" \ "https://api.opensyllabus.org/v1/rankings?field=Economics&limit=50"
Query Parameters
| Parameter | Description | Example |
|---|---|---|
| Search text | |
| Academic discipline | |
| Country filter | |
| Institution filter | |
| Start year | |
| End year | |
| Results per page | |
Key Metrics
| Metric | Description |
|---|---|
| Teaching Score | 0-100 normalized frequency of syllabi appearances |
| Count | Raw number of syllabi featuring the title |
| Rank | Position in overall or field-specific ranking |
| Co-assignment | Titles frequently taught alongside this one |
Python Usage
import requests BASE_URL = "https://api.opensyllabus.org/v1" def search_titles(query: str, field: str = None, country: str = None, limit: int = 20, token: str = "") -> list: """Search Open Syllabus for assigned titles.""" headers = {"Authorization": f"Bearer {token}"} if token else {} params = {"query": query, "limit": limit} if field: params["field"] = field if country: params["country"] = country resp = requests.get( f"{BASE_URL}/titles", headers=headers, params=params, ) resp.raise_for_status() data = resp.json() results = [] for item in data.get("results", []): results.append({ "title": item.get("title"), "authors": item.get("authors"), "teaching_score": item.get("teaching_score"), "count": item.get("appearance_count"), "rank": item.get("rank"), "top_fields": item.get("top_fields", []), }) return results def get_co_assigned(title_id: int, limit: int = 20, token: str = "") -> list: """Get titles frequently co-assigned with a given title.""" headers = {"Authorization": f"Bearer {token}"} if token else {} resp = requests.get( f"{BASE_URL}/titles/{title_id}/co-assigned", headers=headers, params={"limit": limit}, ) resp.raise_for_status() return resp.json().get("results", []) def get_field_rankings(field: str, limit: int = 50, token: str = "") -> list: """Get most-taught titles in a field.""" headers = {"Authorization": f"Bearer {token}"} if token else {} resp = requests.get( f"{BASE_URL}/rankings", headers=headers, params={"field": field, "limit": limit}, ) resp.raise_for_status() return resp.json().get("results", []) # Example: find most-taught economics texts # results = search_titles("microeconomics", field="Economics") # for r in results: # print(f"#{r['rank']} {r['title']} — {r['authors']}") # print(f" Teaching Score: {r['teaching_score']} " # f"({r['count']} syllabi)")
Top Assigned Works (Examples)
| Rank | Title | Author | Field |
|---|---|---|---|
| 1 | The Elements of Style | Strunk & White | Writing |
| 2 | The Republic | Plato | Philosophy |
| 3 | A Manual for Writers | Turabian | Writing |
| ~10 | Thinking, Fast and Slow | Kahneman | Psychology |
| ~50 | Introduction to Algorithms | CLRS | CS |
Use Cases
- Curriculum design: Find canonical texts in a discipline
- Textbook market research: Identify widely adopted materials
- Teaching trends: Track changes in assigned readings over time
- Interdisciplinary mapping: Discover texts bridging fields
- Academic publishing: Understand teaching impact vs. citation impact
References
- Open Syllabus
- Open Syllabus Explorer
- Sinykin, D. & McLaughlin, T. (2021). "Mapping the Disciplinary Canon with Open Syllabus." Cultural Analytics.