← LeaderboardThe Skill Leaderboard

open-syllabus-api

Analyze most-taught books and texts via Open Syllabus analytics

Published by brycewang-stanford ↗brycewang-stanford/Auto-Empirical-Research-Skills

Try your first task

open-syllabus-api

Start a fresh conversation. Replace the highlighted placeholders.

Use open-syllabus-api to analyze the most-assigned texts for [discipline] in [country] during [year range], returning a ranked table with teaching score, syllabus count, rank, top fields, and notable co-assignment patterns.

Required inputs

  • [discipline]
  • [country]
  • [year range]

User-approved starter prompt based on a pinned source version; check current skill requirements before running. Task evidence ↗

SKILL.md

name: open-syllabus-apidescription: "Analyze most-taught books and texts via Open Syllabus analytics"metadata:   openclaw:     emoji: "📖"    category: "domains"    subcategory: "education"    keywords: ["Open Syllabus", "syllabi analytics", "teaching data", "textbook rankings", "curriculum analysis", "higher education"]    source: "https://opensyllabus.org/"

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

ParameterDescriptionExample
querySearch textquery=machine+learning
fieldAcademic disciplinefield=Computer Science
countryCountry filtercountry=US
institutionInstitution filterinstitution=Harvard
year_fromStart yearyear_from=2020
year_toEnd yearyear_to=2026
limitResults per pagelimit=50

Key Metrics

MetricDescription
Teaching Score0-100 normalized frequency of syllabi appearances
CountRaw number of syllabi featuring the title
RankPosition in overall or field-specific ranking
Co-assignmentTitles 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)

RankTitleAuthorField
1The Elements of StyleStrunk & WhiteWriting
2The RepublicPlatoPhilosophy
3A Manual for WritersTurabianWriting
~10Thinking, Fast and SlowKahnemanPsychology
~50Introduction to AlgorithmsCLRSCS

Use Cases

  1. Curriculum design: Find canonical texts in a discipline
  2. Textbook market research: Identify widely adopted materials
  3. Teaching trends: Track changes in assigned readings over time
  4. Interdisciplinary mapping: Discover texts bridging fields
  5. Academic publishing: Understand teaching impact vs. citation impact

References