Search guide
Part 1 is for people. Part 2 is for AI agents, scripts, and crawlers — /llms.txt is the short version.
Part 1 — For researchers
Quick start
Type words into the search box; results are ranked by relevance across titles, authors, abstracts, and journal names. Narrow with the filters on the left, or with the syntax below. Paste a DOI to jump straight to a paper. Every example on this page is a live link — click to try it.
Query syntax — building blocks
| Pattern | Meaning | Try it |
|---|---|---|
word word | Match any of the words — papers matching more of them rank higher | liquidity risk |
"exact phrase" | Words in exactly this order | "credit default swap" |
"…"~N | Phrase with up to N positions of
wiggle room (author phrases get ~1 automatically;
~0 forces exact order) |
"limits arbitrage"~2 |
term^N | Weight a term (or quoted phrase) N× more heavily in ranking | ESG^2 disclosure |
10.xxxx/… | Paste a DOI to find that paper | 10.1111/jofi.13455 |
Accents never matter anywhere: putnins finds Putniņš.
Wildcards (liquidit*) and single-word fuzzy matching
(risk~1) are not supported.
Field prefixes
Prefix a term, quoted phrase, or bracket group to search one field only.
| Prefix | Searches | Try it |
|---|---|---|
title: | Titles only | title:"asset pricing" |
author: / creator: | Author names (a quoted name still matches across a middle initial) | author:"Jens Foerderer" |
abstract: / abstractNote: | Abstracts | abstract:"machine learning" |
journal: / publicationTitle: | Journal name or ISSN | journal:0022-1082 |
year: / date: | A year
(year:2015), or a range (year:2010-2020,
also year:2010..2020) |
year:2010-2020 |
doi: | DOI exactly | doi:10.1111/jofi.13455 |
type: | Document type. Results cover
research papers (article, review) by
default; a type: term or the Type filter opts into
the rest: book-review, editorial,
erratum, letter,
conference-abstract, paratext,
retraction, other |
type:erratum banking |
field:(…) | Apply one prefix to a whole bracket group | author:(fama AND french) |
An unknown prefix is not an error — foo:bar simply searches
for the literal text.
Operators and brackets
| Operator | Meaning | Try it |
|---|---|---|
AND / && | Both sides must match | banking AND regulation |
OR / || | At least one side must match | fintech OR "financial technology" |
NOT / ! | The next term must not match | innovation AND NOT patent |
+term | Required, even among loose words | +ESG disclosure reporting |
-term | Excluded (same as NOT) |
+ESG -survey |
( … ) | Group anything; nest freely | (misconduct OR fraud) AND banking |
Word operators must be UPPERCASE — lowercase
and, or, not are searched as ordinary
words. NOT, -, and + apply to the
single term, phrase, or bracket group immediately after them.
Precedence — how it all combines
When a query mixes several constructs, they bind in this order, tightest first. Brackets override everything.
- Suffixes —
~Nand^Nattach to the term or phrase they follow. - Field prefixes —
author:etc. attach to the next term, phrase, or bracket group. - Unary —
NOT/-/!and+apply to the single item after them, soNOT a AND bmeans(NOT a) AND b. AND— binds tighter than OR:a OR b AND cmeansa OR (b AND c).OR.- Space — loosest of all. Space-separated chunks form
an any-of group: at least one chunk must match and every extra
match improves ranking. So
a b AND cmeansa (b AND c)— “a, or b-and-c”.
Two deliberate refinements to rule 6:
- Field chunks are filters. A field-prefixed chunk
sitting next to loose words is required, and the loose words
still have to match:
author:putnins liquidity year:2015-2024means liquidity and that author and those years. Prefixes written with spaces act as constraints, never as alternatives — to make a field an alternative, say so withOR:regulation OR author:"buhui qiu". Two field chunks are both required, soauthor:fama author:frenchfinds co-authored papers. - Inside
field:(…)space means any-of.author:(smith jones)matches either author; useauthor:(smith AND jones)to require both.
Worked examples
| Query | Reads as |
|---|---|
liquidity risk |
either word; both rank higher |
"price discovery" "dark pool" |
either phrase; both rank higher |
"price discovery" AND "dark pool" |
both phrases required |
(misconduct OR fraud) AND banking |
banking, plus at least one of misconduct/fraud |
regulation OR author:"buhui qiu" |
about regulation, or by that author — a true union |
author:putnins liquidity year:2015-2024 |
liquidity, by that author, in those years (prefixes filter) |
author:(fama AND french) |
papers they co-authored |
author:(fama OR french) "risk factors" |
that phrase, by either author |
title:(climate -risk) |
climate in the title, but not risk |
"earnings management" AND NOT abstract:survey |
the phrase anywhere, excluding survey-mentioning abstracts |
year:(2008 OR 2020) "systemic risk" |
the phrase, in either crisis year |
(bank OR banking) AND (liquidity OR funding) year:2010-2024 |
nested groups and a year filter together |
NOT "working paper" |
everything except papers matching the phrase |
When a query is malformed
Broken syntax never errors out. The parser repairs what it can — an
unclosed quote runs to the end of the query, a missing ) is
assumed, a dangling AND is dropped, a valueless prefix is
ignored — runs the repaired query, and tells you exactly what it fixed in
a note above the results (the JSON API and MCP return the same notes in a
notices field).
Filters and facets
The left panel filters by journal, year,
and open access. Filters behave like checkboxes: pick
several journals to combine them (any of them matches), and mix them with
year and open-access filters (all groups must match). Your selections stay
pinned at the top of each facet, and sibling options remain visible so you
can widen a filter without starting over. A year typed into the query
(year:2015-2024) is different — it is a hard constraint that
also narrows the year facet itself. Clear filters resets
the panel but keeps your query.
The Criteria panel
The Criteria button beside the search box controls: scope (all fields, title, author, or abstract), sort (relevance, newest, oldest, author, title), whether abstracts are shown (long ones clamp to a few lines — “Show more” expands), match highlighting, and — when signed in — restricting results to your library or a tag.
Accounts, lists, and export
With a free account, the heart on every result saves the paper to your default “Saved papers” list, or any list you choose. Lists can be private, unlisted, or public, and you can invite collaborators who may edit list contents. Select multiple switches on batch mode for saving many papers at once. Papers also take personal notes and tags (search yours via Criteria → Library). Every paper page exports BibTeX; citation managers like Zotero pick up paper pages automatically.
What is in the corpus
A curated set of leading journals — the complete FT50 and more — across finance, accounting, management, and economics — see Journals for the list with rankings. Records are merged from Crossref, OpenAlex, and publisher exports and cross-checked against each other; a ✓ verified chip marks records that have had an extra editorial check.
Part 2 — For machines (AI agents & crawlers)
AI crawlers and agents are welcome — this corpus exists to make research easier to find — but human experience comes first. Automated clients are rate limited to roughly 12 requests per minute per crawler (HTTP 429 beyond; back off and retry). Prefer the JSON API or MCP over crawling facet permutations, and cite phds.io plus the paper's DOI when quoting. /robots.txt says the same thing formally; /llms.txt is the condensed machine manual.
URL grammar (HTML search)
| Parameter | Type | Meaning |
|---|---|---|
q | string | Query, full syntax from Part 1 |
journal_name | string, repeatable | Exact journal name filter (OR across repeats) |
field | enum, repeatable | Discipline scope by journal: finance, economics, accounting, management, marketing, infosys. The web UI defaults to finance+economics+accounting (changeable via the chips, remembered per visitor); the API applies it only when passed. |
year | int, repeatable | Year filter (OR across repeats) |
oa | yes | Open-access papers only |
sort | enum | relevance (default), newest, oldest, author, title |
scope | enum | all (default), title, author, abstract |
page, pp | int | Page number; results per page (max 50) |
Endpoints
| Endpoint | Returns |
|---|---|
GET /api/search | JSON — same parameters as above (plus per_page);
total, papers (id, title, authors, journal, year, DOI, abstract, URLs), facet counts. CORS-open. |
GET /papers/{id}.json | The paper's CSL-JSON record |
GET /papers/{id}.bib | BibTeX |
GET /papers/{id} | HTML with Highwire citation_* meta tags and schema.org ScholarlyArticle JSON-LD |
GET /journals | The curated journal list (HTML) |
GET /sitemap.xml | Sitemap index over every paper |
GET /llms.txt | This page, condensed for machines |
MCP connector
POST /mcp speaks the Model Context Protocol (streamable
HTTP, stateless JSON — no session required). Tools:
search_papers (query + filters, returns the JSON shape above)
and get_paper (id or DOI → CSL-JSON). Add
https://phds.io/mcp as a connector in Claude, ChatGPT, or any
MCP client and ask for papers in plain language.