Systematic reviews with OQL

OQLWebAPI

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.
View as Markdown