Systematic reviews with OQL
A systematic-review search strategy is really a term tree: blocks of synonyms OR’d together, blocks AND’d with each other, a few exclusions, and some scope limits. That’s exactly the shape OQL — the OpenAlex Query Language — is built to express. This recipe walks through building one, start to finish.
The payoff over exporting from a classic database interface: the finished query is one readable string. It runs on the website and the API identically, it’s trivially shareable with co-reviewers, and you can paste it into your methods appendix as-is.
Start with your concept blocks
Say we’re reviewing the literature on vaping and adolescent health. Classic PICO-style decomposition gives three concepts, each with synonyms:
- Exposure: vaping, vape, e-cigarettes
- Population: adolescents, teens, youth
- Outcome: health, harm, risk
Each concept becomes an OR-block; the blocks join with and. In OQL, searching titles and abstracts at once is the title/abstract field:
works where title/abstract has (
(vaping or vape or "e-cigarette" or stemmed "electronic cigarette")
and (adolescent or teen or youth)
and (health or harm or risk)
)
You can type this straight into the OQL tab on the openalex.org search page — valid queries run as you type.
Choose exact or stemmed, term by term
OQL’s one search rule to internalize: bare words are stemmed, quotes are exact.
teen(bare) also matches teens — stemming gives you the recall a review wants, without tacking*onto everything."e-cigarette"(quoted) matches exactly that string — no stemming.stemmed "electronic cigarette"is the bridge: the words must be adjacent, as a phrase, but each still stems (electronic cigarettes matches).- Wildcards go inside quotes:
"adolescen*"covers adolescent, adolescents, adolescence. (*is any characters,?exactly one; neither may start a word.)
Published search strategies translate almost mechanically: a strategy line like (vap* OR e-cig*) becomes ("vap*" or "e-cig*").
Add scope filters
Reviews almost always limit by date, document type, and language. Those are ordinary filters, AND’d onto the search:
works where title/abstract has (
(vaping or vape or "e-cigarette" or stemmed "electronic cigarette")
and (adolescent or teen or youth)
and (health or harm or risk)
)
and year >= (2015) and year <= (2025)
and type is (article or review)
and language is (en)
Exclude what you don’t want
Negation is the not prefix, inside the parentheses, directly before the value to exclude — for example, to push animal studies out of the set:
and title/abstract has (not mice and not murine)
To exclude retracted works: and retracted is (false).
Sanity-check the set
Before screening, get a feel for what the query returns. group by aggregates the whole result set into buckets:
works where … group by year
works where … group by type
A weird year distribution or a pile of unexpected document types usually means a term block needs tightening. For a screening pilot, pull a reproducible random subset:
works where … sample 200 seed 42
(The seed makes the sample repeatable, so co-reviewers see the same 200 works.)
Run, export, and document
- Website: run the query in the OQL tab, then export your results to CSV. You can also flip between the visual advanced builder and the OQL text — they’re two views of the same query.
- API:
https://api.openalex.org/?oql=<your query>returns the same results as JSON — the query carries its own entity (works where …), so it goes to the API root. See the OQL API page. - Appendix: the OQL string is your documented search strategy — one line of provenance covers database, interface, and query.
Going deeper
- OQL overview — every construct with a copyable example.
- Specification — the formal spec: every rule and edge case.
- Cases — a browsable library of worked examples, including real published systematic-review strategies rendered in OQL.