Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Track scholarly mentions across the web via Crossref Event Data
.claude/skills/brycewang-stanford-crossref-event-data-api/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 146% | 0% |
| case-22 | ✗→✓ | ▲ Improved | 67% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 49% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 64% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 53% | 0% |
Crossref Event Data tracks where scholarly publications are discussed, shared, and referenced across the open web — Wikipedia citations, Twitter/X mentions, Reddit posts, blog references, policy document citations, and more. Unlike traditional citation counts, Event Data captures real-time online attention to research. Free, no authentication required.
https://api.eventdata.crossref.org/v1bash# Get events for a specific DOI curl "https://api.eventdata.crossref.org/v1/events?obj-id=10.1038/nature14539&rows=20" # Filter by source curl "https://api.eventdata.crossref.org/v1/events?\ obj-id=10.1038/nature14539&source=wikipedia" # Filter by date range curl "https://api.eventdata.crossref.org/v1/events?\ from-occurred-date=2024-01-01&until-occurred-date=2024-12-31&source=twitter&rows=100" # Get events about a DOI prefix (publisher level) curl "https://api.eventdata.crossref.org/v1/events?obj-id.prefix=10.1371&rows=50" # Events from a specific source curl "https://api.eventdata.crossref.org/v1/events?source=reddit&rows=50"
| Source | Description | What it tracks | |--------|-------------|---------------| | wikipedia | Wikipedia article references | DOIs cited in Wikipedia | | twitter | Twitter/X posts | Tweets linking to DOIs | | reddit | Reddit posts/comments | Reddit links to papers | | hypothesis | Hypothesis annotations | Web annotations on papers | | newsfeed | News articles | Media coverage of research | | stackexchange | Stack Exchange Q&A | Technical discussions | | web | General web pages | Blog posts, reports | | wordpressdotcom | WordPress blogs | Blog references | | datacite | DataCite DOIs | Dataset-paper linkages | | crossref | Crossref metadata | Reference list updates |
| Parameter | Description | Example | |-----------|-------------|---------| | obj-id | DOI of the paper | obj-id=10.1038/nature14539 | | obj-id.prefix | DOI prefix (publisher) | obj-id.prefix=10.1371 | | source | Event source | source=wikipedia | | from-occurred-date | Events from date | 2024-01-01 | | until-occurred-date | Events until date | 2024-12-31 | | rows | Results per page (max 10000) | rows=100 | | cursor | Pagination cursor | Returned in response |
json{ "status": "ok", "message-type": "event-list", "message": { "total-results": 245, "events": [ { "obj_id": "https://doi.org/10.1038/nature14539", "source_id": "wikipedia", "subj_id": "https://en.wikipedia.org/wiki/Deep_learning", "relation_type_id": "references", "occurred_at": "2024-03-15T10:30:00Z", "subj": { "title": "Deep learning - Wikipedia", "url": "https://en.wikipedia.org/wiki/Deep_learning" } } ], "next-cursor": "abc123..." } }
pythonimport requests from collections import Counter BASE_URL = "https://api.eventdata.crossref.org/v1" def get_events(doi: str, source: str = None, rows: int = 100) -> list: """Get Event Data events for a DOI.""" params = {"obj-id": doi, "rows": rows} if source: params["source"] = source resp = requests.get(f"{BASE_URL}/events", params=params) resp.raise_for_status() data = resp.json() events = [] for ev in data.get("message", {}).get("events", []): events.append({ "source": ev.get("source_id"), "subject_url": ev.get("subj_id"), "subject_title": ev.get("subj", {}).get("title", ""), "relation": ev.get("relation_type_id"), "date": ev.get("occurred_at", "")[:10], }) return events def get_attention_summary(doi: str) -> dict: """Summarize online attention for a paper.""" events = get_events(doi, rows=10000) source_counts = Counter(e["source"] for e in events) return { "total_events": len(events), "by_source": dict(source_counts), "first_event": min((e["date"] for e in events), default=None), "latest_event": max((e["date"] for e in events), default=None), } def find_wikipedia_citations(doi: str) -> list: """Find Wikipedia articles that cite a paper.""" events = get_events(doi, source="wikipedia") return [ {"wikipedia_page": e["subject_title"], "url": e["subject_url"], "date": e["date"]} for e in events if e["relation"] == "references" ] # Example: analyze online attention for a paper doi = "10.1038/nature14539" summary = get_attention_summary(doi) print(f"Total events: {summary['total_events']}") for source, count in sorted(summary["by_source"].items(), key=lambda x: -x[1]): print(f" {source}: {count}") # Example: find Wikipedia coverage wiki_refs = find_wikipedia_citations(doi) for ref in wiki_refs: print(f"Cited in: {ref['wikipedia_page']} ({ref['date']})")
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-21 | fail→fail | 18,541 | 12,641 | -32% | 1 | 1 | 0% | 3,334 | 4,121 | +24% | 0 | 0 | — |
case-01 | pass→pass | 17,187 | 44,261 | +158% | 1 | 1 | 0% | 2,681 | 4,007 | +49% | 0 | 0 | — |
case-02 | fail→pass | 12,801 | 15,882 | +24% | 1 | 1 | 0% | 2,027 | 4,988 | +146% | 0 | 0 | — |
case-03 | pass→pass | 11,441 | 10,403 | -9% | 1 | 1 | 0% | 2,396 | 3,935 | +64% | 0 | 0 | — |
case-04 | pass→pass | 7,330 | 3,208 | -56% | 1 | 1 | 0% | 1,478 | 2,256 | +53% | 0 | 0 | — |
case-05 | pass→pass | 7,067 | 3,335 | -53% | 1 | 1 | 0% | 1,550 | 2,336 | +51% | 0 | 0 | — |
case-20 | pass→pass | 9,787 | 9,061 | -7% | 1 | 1 | 0% | 1,859 | 3,625 | +95% | 0 | 0 | — |
case-06 | pass→pass | 11,155 | 2,403 | -78% | 1 | 1 | 0% | 2,142 | 2,170 | +1% | 0 | 0 | — |
case-07 | pass→pass | 7,568 | 2,058 | -73% | 1 | 1 | 0% | 1,464 | 2,123 | +45% | 0 | 0 | — |
case-08 | pass→pass | 39,018 | 5,839 | -85% | 1 | 1 | 0% | 1,744 | 3,006 | +72% | 0 | 0 | — |
case-09 | pass→pass | 15,920 | 9,851 | -38% | 1 | 1 | 0% | 3,288 | 3,833 | +17% | 0 | 0 | — |
case-10 | pass→pass | 10,217 | 4,324 | -58% | 1 | 1 | 0% | 1,733 | 2,682 | +55% | 0 | 0 | — |
case-11 | pass→pass | 5,325 | 2,901 | -46% | 1 | 1 | 0% | 766 | 2,147 | +180% | 0 | 0 | — |
case-12 | pass→pass | 38,249 | 2,478 | -94% | 1 | 1 | 0% | 1,425 | 2,123 | +49% | 0 | 0 | — |
case-13 | pass→pass | 5,097 | 2,419 | -53% | 1 | 1 | 0% | 991 | 2,188 | +121% | 0 | 0 | — |
case-14 | pass→pass | 5,661 | 2,052 | -64% | 1 | 1 | 0% | 1,071 | 2,099 | +96% | 0 | 0 | — |
case-15 | pass→pass | 3,603 | 2,710 | -25% | 1 | 1 | 0% | 584 | 2,237 | +283% | 0 | 0 | — |
case-16 | pass→pass | 3,941 | 2,637 | -33% | 1 | 1 | 0% | 813 | 2,184 | +169% | 0 | 0 | — |
case-17 | pass→pass | 6,671 | 3,907 | -41% | 1 | 1 | 0% | 1,085 | 2,383 | +120% | 0 | 0 | — |
case-18 | pass→pass | 8,922 | 5,990 | -33% | 1 | 1 | 0% | 1,433 | 2,983 | +108% | 0 | 0 | — |
case-19 | pass→pass | 4,623 | 3,432 | -26% | 1 | 1 | 0% | 815 | 2,443 | +200% | 0 | 0 | — |
case-22 | fail→pass | 9,355 | 2,677 | -71% | 1 | 1 | 0% | 1,398 | 2,333 | +67% | 0 | 0 | — |
case-23 | pass→pass | 6,431 | 3,648 | -43% | 1 | 1 | 0% | 1,061 | 2,316 | +118% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +9 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.