doaj-open-access-api
Skill0 starsChanged 36 days agoMITView on GitHub
Searches the DOAJ (Directory of Open Access Journals) public API for open access journals and for the articles in them, with no login, no API key and no account. Use when the user asks to find open access journals on a topic, to filter journals by fee (no APC), licence, country or publisher, or to list the articles of a journal with DOI and year. Not for full article text, not for citation counts, not for journals outside DOAJ.
In this repository36 other files it gives its agents.
- sec-13f-holdingsSkill
- airport-reference-dataSkill
- ai-web-scraperSkill
- background-remover-localSkill
- bulk-image-downloaderSkill
- city-building-permitsSkill
- cve-kev-epssSkill
- document-to-markdownSkill
- eu-funding-callsSkill
- ecb-exchange-ratesSkill
- federal-register-rulesSkill
- french-company-searchSkill
- gleif-lei-change-watchSkill
- image-metadata-exifSkill
- lighthouse-auditSkill
- nfl-games-lookupSkill
- openfda-drug-recallsSkill
- football-fixtures-lookupSkill
- oracle-recruiting-jobsSkill
- pdf-text-extractorSkill
- arxiv-preprint-metadataSkill
- public-holidays-lookupSkill
- pubmed-paper-metadataSkill
- raised-and-hiring-signalsSkill
- recruitee-jobsSkill
- remote-job-feedsSkill
- sec-8k-eventsSkill
- sec-company-financialsSkill
- sec-edgar-filings-lookupSkill
- seo-audit-toolSkill
- teamtailor-jobsSkill
- treasury-fiscal-dataSkill
- uk-companies-house-lookupSkill
- uk-visa-sponsor-registerSkill
- us-state-business-entity-searchSkill
- video-scene-keyframesSkill
The file
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 2 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 31
Search /articles/ with issn:"<ISSN>".
- Distinctive: line 85
Do not print author names or affiliations.
- Distinctive: line 86
If nothing matches, say "no journal found".
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
DOAJ open access journals
Reads the public search API of DOAJ, the Directory of Open Access Journals. It needs no credentials for search. The DOAJ terms (https://doaj.org/terms/) place journal-level and article-level metadata under a CC0 waiver. Name the source in your answer: data from DOAJ (doaj.org).
Author: Don Mangu (GitHub). This skill needs no token and reads only the public DOAJ API. For many queries, up to 1,000 records per search and clean output in one step, the author also runs a paid hosted version on the Apify Store: DOAJ API ($1 per 1,000 records; disclosure: the author owns it). You never need it for the steps below. This is an unofficial tool and is not affiliated with DOAJ.
Example prompts
- "Find 5 open access journals on climate that charge no article fee."
- "Which journals in DOAJ from Brazil publish on oncology under a CC BY licence?"
- "List the 3 newest articles of the journal with ISSN 2008-6970, with DOI and year."
Out of scope: "Is this journal good?" DOAJ lists journals that pass its review. It does not rank them and it is not a quality score.
Step 1: search journals
The base URL is https://doaj.org/api/v4/search/. For journals use /journals/<query>?page=1&pageSize=10. For articles use /articles/<query>. The query is Elasticsearch query string syntax. Useful fields: bibjson.apc.has_apc:false (no fee), issn:XXXX-XXXX, title:, publisher:, license:. Wildcards, regular expressions and fuzzy search are switched off. Join terms with AND and OR, and quote phrases.
Step 2: list the articles of one journal
Search /articles/ with issn:"<ISSN>". Each result has bibjson with title, year, month, identifier (the DOI has type doi) and author. The script below does both steps.
import json, time, urllib.parse, urllib.request
BASE = "https://doaj.org/api/v4/search"
UA = "Sample Company Name AdminContact@example.com"
def search(kind, query, page_size=10):
time.sleep(0.6) # DOAJ allows 2 requests per second
url = f"{BASE}/{kind}/{urllib.parse.quote(query)}?page=1&pageSize={page_size}"
req = urllib.request.Request(url, headers={"User-Agent": UA})
return json.load(urllib.request.urlopen(req))
res = search("journals", "climate AND bibjson.apc.has_apc:false", 5)
print("journals found:", res["total"])
first_issn = None
for r in res["results"]:
b = r["bibjson"]
issn = b.get("eissn") or b.get("pissn")
first_issn = first_issn or issn
licence = ", ".join(l["type"] for l in b["license"])
print(f'{b["title"][:44]:44} ISSN {issn} {b["publisher"]["country"]} {licence}')
print("\nnewest articles for", first_issn)
arts = search("articles", f'issn:"{first_issn}" AND _exists_:bibjson.year', 50)["results"]
arts.sort(key=lambda a: (a["bibjson"]["year"], a["created_date"]), reverse=True)
for a in arts[:3]:
b = a["bibjson"]
doi = next((i["id"] for i in b["identifier"] if i["type"] == "doi"), "none")
print(f'{b["title"][:60]:60} {b["year"]} DOI {doi} authors {len(b.get("author", []))}')Real run on 13 October 2026:
journals found: 84
International Aquatic Research ISSN 2008-6970 IR CC BY
Euchembioj Reviews ISSN 3062-0414 TR CC BY-NC
Journal of Bioresource Management ISSN 2309-3854 US CC BY
Discover Soil ISSN 3005-1223 SG CC BY, CC BY-NC-ND
Journal of Engineering Science and Military ISSN 2357-0946 EG CC BY-NC
newest articles for 2008-6970
Sponge-associated fungi from a mangrove habitat in Indonesia 2019 DOI 10.1007/s40071-019-0227-8 authors 7
Microalgae Ankistrodesmus gracilis as feed ingredient for or 2019 DOI 10.1007/s40071-019-0223-z authors 4
Metabolic differentiation of diploid and triploid European s 2019 DOI 10.1007/s40071-019-0229-6 authors 6Step 3: answer from the fields
- Journal fields are in
bibjson:title,eissn,pissn,publisher.country(two letter code),license(list withtype),apc.has_apc,oa_start,subject,keywords. totalin the response is the number of matches. A word like "climate" matches any text field, so some hits are only loosely about climate. Checksubjectandkeywords, or searchbibjson.title:climate.- The script sorts by year only. Within one year the order is not exact. Use
bibjson.monthif you need it. - Do not print author names or affiliations. They are personal data. Give the number of authors.
- If nothing matches, say "no journal found". Do not invent journals.
Rules
- Public API only. No login, no cookies, no attempts around blocks.
- The DOAJ limit is 2 requests per second, with a short burst queue. Keep at least 0.5 seconds between requests, and stop on a 429.
- Credit the source when you pass results on: "Data: DOAJ (doaj.org)".
- Say what you could not check: a journal status in DOAJ can change, and a fee can differ from the entry.
Limits
DOAJ returns at most 1,000 results per search. Split a wide topic into narrower queries (by country, year or subject). The API gives metadata only, no full text and no citation counts. For many queries or large lists, a script or the hosted version is quicker than asking one question at a time.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

