Open Syllabus API
SkillDatabases & dataAnalyze most-taught books and texts via Open Syllabus analytics
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; ahel provides instructions and does not run this skill.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
Then ask your AI: use the Open Syllabus API skill
What this skill tells your AI
The instructions your AI receives, as published by brycewang-stanford/auto-empirical-research-skills in skills/43-wentorai-research-plugins/skills/domains/education/open-syllabus-api/SKILL.md and read by ahel’s review.
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 |
|---|---|---|
query | Search text | query=machine+learning |
field | Academic discipline | field=Computer Science |
country | Country filter | country=US |
institution | Institution filter | institution=Harvard |
year_from | Start year | year_from=2020 |
year_to | End year | year_to=2026 |
limit | Results per page | limit=50 |
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.
Signals
- GitHub stars
- 4k
- Forks
- 531
- Last commit
- Sep 2026
ahel review
K2info
exfiltration
Automated review, not a security audit. Ruleset v1+k2.
Advanced
- Item type
- skill
- Key
open-syllabus-api- Source
- github.com/brycewang-stanford/auto-empirical-research-skills
github.com/brycewang-stanford/auto-empirical-research-skills
Related picks
Skill · wshobson
The pick for Pythonpython-pro
Skill · jeffallan
The pick for Pythonsearch
Skill · davila7
The pick for Searchsummarize
Skill · zhouguoqing
The pick for Summarizeacademic-paper-composer
Skill · brycewang-stanford
The pick for Academic03-academic-writing
Skill · 24kchengye
The pick for Academic