Google Scholar Basic Search
SkillSearchLets your agent find academic papers on Google Scholar with titles, authors, journals, years, and citations.
Use Google Scholar Basic Search in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add Google Scholar Basic Search and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the Google Scholar Basic Search skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; ahel provides instructions and does not run this skill.
No other account needed.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
About this skill
Search Google Scholar for academic papers by keywords. Returns results with title, authors, journal, year, citation count, and full-text links. Use when the user wants to search Google Scholar.
What this skill tells your AI
The instructions your AI receives, as published by cookjohn/gs-skills in skills/gs-search/SKILL.md and read by ahel’s review.
Search Google Scholar for papers using keyword(s). Returns structured result list via DOM scraping.
Arguments
$ARGUMENTS contains the search keyword(s).
Steps
1. Navigate
Use mcp__chrome-devtools__navigate_page:
- url:
https://scholar.google.com/scholar?q={URL_ENCODED_KEYWORDS}&hl=en&num=10
2. Extract results (evaluate_script)
Wait for results to load, check for CAPTCHA, then scrape the DOM:
async () => {
// Wait for results or CAPTCHA
for (let i = 0; i < 20; i++) {
if (document.querySelector('#gs_res_ccl') || document.querySelector('#gs_captcha_ccl')) break;
await new Promise(r => setTimeout(r, 500));
}
// CAPTCHA check
if (document.querySelector('#gs_captcha_ccl') || document.body.innerText.includes('unusual traffic')) {
return { error: 'captcha', message: 'Google Scholar requires CAPTCHA verification. Please complete it in your browser, then tell me to continue.' };
}
const items = document.querySelectorAll('#gs_res_ccl .gs_r.gs_or.gs_scl');
const results = Array.from(items).map((item, i) => {
const titleEl = item.querySelector('.gs_rt a');
const meta = item.querySelector('.gs_a')?.textContent || '';
// Parse "Author1, Author2 - Journal, Year - publisher"
const parts = meta.split(' - ');
const authors = parts[0]?.trim() || '';
const journalYear = parts[1]?.trim() || '';
const citedByEl = item.querySelector('.gs_fl a[href*="cites"]');
const relatedEl = item.querySelector('.gs_fl a[href*="related"]');
const versionsEl = item.querySelector('.gs_fl a[href*="cluster"]');
return {
n: i + 1,
title: titleEl?.textContent?.trim() || item.querySelector('.gs_rt')?.textContent?.trim() || '',
href: titleEl?.href || '',
authors,
journalYear,
citedBy: citedByEl?.textContent?.match(/\d+/)?.[0] || '0',
citedByUrl: citedByEl?.href || '',
dataCid: item.getAttribute('data-cid') || '',
fullTextUrl: (item.querySelector('.gs_ggs a') || item.querySelector('.gs_or_ggsm a'))?.href || '',
snippet: item.querySelector('.gs_rs')?.textContent?.trim()?.substring(0, 200) || '',
relatedUrl: relatedEl?.href || '',
versionsUrl: versionsEl?.href || '',
versions: versionsEl?.textContent?.match(/\d+/)?.[0] || ''
};
});
const totalText = document.querySelector('#gs_ab_md')?.textContent?.trim() || '';
const currentUrl = window.location.href;
return { total: totalText, resultCount: results.length, currentUrl, results };
}
3. Report
Present results as a numbered list:
Searched Google Scholar for "$ARGUMENTS": {total}
1. {title}
Authors: {authors} | {journalYear}
Cited by: {citedBy} | [Full text]({fullTextUrl})
Data-CID: {dataCid}
2. ...
Always show the dataCid — it's the unique identifier used for citation export and "cited by" tracking.
If fullTextUrl is available, highlight it (means open-access PDF/HTML).
4. Follow-up
When the user wants to:
- See more results: use
gs-navigate-pagesto go to next page - See who cited a paper: use
gs-cited-bywith the data-cid - Export to Zotero: use
gs-exportwith the data-cid(s)
CAPTCHA Handling
If the result contains {error: 'captcha'}:
- Tell the user: "Google Scholar is requesting CAPTCHA verification. Please complete it in your browser."
- Wait for user confirmation
- Retry the evaluate_script extraction
Notes
- This skill uses 2 tool calls:
navigate_page+evaluate_script - Google Scholar has NO public API — all data extraction is via DOM scraping
data-cidis the primary identifier (cluster ID) — used across all GS skills- Keep request frequency low to avoid triggering CAPTCHA
- Default
num=10results per page (max 20)
Signals
- GitHub stars
- 519
- Forks
- 26
- Last commit
- Mar 2026
Advanced
- Item type
- skill
- Key
gs-skills-gs-search- Source
- github.com/cookjohn/gs-skills
Related picks
Skill · firecrawl
The pick for Scrapescrape
Skill · davila7
The pick for Scrapesearch
Skill · davila7
The pick for Searchimage-to-data
Skill · leoyeai
The pick for Data Extractionagent-browser
Skill · 101-skills
The pick for Data Extractionacademic-paper-composer
Skill · brycewang-stanford
The pick for Academic