Skip to content
Back to skills

Openalex Search

ASecurity

Query scholarly literature via the OpenAlex API: papers, authors, institutions, citations. Use for literature searches.

  • 10 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 24, 2026
ai-agentspythongitapi

Works with

  • cursor
  • cli
  • api

Security analysis

A100/100

Scanned September 29, 2026

npx -y skills add FOURTEEN1416/academic-agent-toolkit --skill openalex-search --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Openalex Search?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Openalex Search
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/fourteen1416-openalex-search/badge)](https://www.skillsdirectory.com/skills/fourteen1416-openalex-search)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: openalex-search
user_invocable: true
description: "Query scholarly literature via the OpenAlex API: papers, authors, institutions, citations. Use for literature searches."
---

# openalex — Scholarly Literature Search

Query the [OpenAlex](https://openalex.org) API for academic papers, authors, institutions, and citation data. No API key required.

## When to Use

- "find papers by", "search for papers on", "who cites this"
- Literature search, citation analysis, bibliometric queries
- Finding works by author, institution, or topic

## Client

```python
from scripts.openalex_client import OpenAlexClient

client = OpenAlexClient(email="user@example.edu")  # email → 10x rate limit
```

> Script paths are relative to this skill's directory.

The client handles rate limiting, retries with exponential backoff, and cursor-based pagination.

## Key Patterns

### Search works
```python
results = client.search_works(search="CRISPR", filter_params={"publication_year": ">2020", "is_oa": "true"}, sort="cited_by_count:desc")
```

### Two-step entity lookup (always get ID first, never filter by name)
```python
author = client.get("/authors", params={"search": "Jennifer Doudna", "per-page": 1})
author_id = author["results"][0]["id"].split("/")[-1]
works = client.search_works(filter_params={"authorships.author.id": author_id})
```

### Get entity by external ID
```python
work = client.get_entity("works", "https://doi.org/10.1038/s41586-021-03819-2")
author = client.get_entity("authors", "https://orcid.org/0000-0003-1613-5981")
```

### Batch DOI lookup (up to 50 per request)
```python
works = client.batch_lookup("works", doi_list, "doi")
```

### Paginate large results (cursor-based)
```python
all_papers = client.paginate_all("/works", params={"search": "quantum computing", "filter": "publication_year:2022-2024"}, max_results=5000)
```

### Aggregate by field
```python
by_year = client.group_by("works", "publication_year", filter_params={"authorships.author.id": author_id})
```

## Filter Syntax

```
Single:     publication_year:2023
AND:        publication_year:>2020,is_oa:true
OR:         type:journal-article|book
NOT:        type:!paratext
Range:      publication_year:2020-2024
Greater:    cited_by_count:>100
Both inst:  authorships.institutions.id:ID1+ID2    (AND)
Either:     authorships.institutions.id:ID1|ID2    (OR)
```

Common filters: `publication_year`, `is_oa`, `cited_by_count`, `type`, `authorships.author.id`, `authorships.institutions.id`, `primary_location.source.id`, `topics.id`, `has_doi`.

## Attribution

OpenAlex client adapted from [K-Dense-AI/claude-scientific-skills](https://github.com/K-Dense-AI/claude-scientific-skills) (MIT License).

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…