gs-cited-by

v2026.09.25

Find papers that cite a given Google Scholar paper. Tracks citation chains using data-cid (cluster ID). Use when user wants to see who cited a specific paper.

GitHub
Install command
npx skhub add cookjohn/gs-cited-by
Markdown
SKILL.md

Google Scholar — Cited By (Citation Tracking)

Find all papers that cite a given paper. Uses Google Scholar's cites parameter with the paper's cluster ID (data-cid).

Arguments

$ARGUMENTS can be:

  • A data-cid from a previous search result (e.g., TFS2GgoGiNUJ)
  • A paper title (will search first to find the data-cid)

Steps

Step 1: Resolve data-cid

If $ARGUMENTS is a data-cid (alphanumeric string, no spaces): use it directly.

If $ARGUMENTS is a title or description: first search to find the data-cid:

  1. Use gs-search with the title as keywords
  2. Match the target paper in results by title similarity
  3. Extract its dataCid

Step 2: Navigate to "Cited by" page

Use mcp__chrome-devtools__navigate_page:

  • url: https://scholar.google.com/scholar?cites={DATA_CID}&hl=en&num=10

Replace {DATA_CID} with the resolved cluster ID.

Step 3: Extract citing papers (evaluate_script)

Same extraction script as gs-search:

async () => {
  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));
  }

  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 || '';
    const parts = meta.split(' - ');
    const authors = parts[0]?.trim() || '';
    const journalYear = parts[1]?.trim() || '';
    const citedByEl = item.querySelector('.gs_fl a[href*="cites"]');

    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',
      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) || ''
    };
  });

  const totalText = document.querySelector('#gs_ab_md')?.textContent?.trim() || '';
  const currentUrl = window.location.href;
  return { total: totalText, resultCount: results.length, currentUrl, results };
}

Step 4: Report

Papers citing [{original paper title}] (data-cid: {DATA_CID}):
{total}

1. {title}
   Authors: {authors} | {journalYear}
   Cited by: {citedBy}
   Data-CID: {dataCid}

2. ...

Follow-up

  • See more citing papers: use gs-navigate-pages (pagination works on cited-by pages too)
  • Export citing papers: use gs-export with the data-cid(s)
  • Recursive citation tracking: use gs-cited-by on any of the citing papers

Notes

  • This skill uses 2-3 tool calls: optional search + navigate_page + evaluate_script
  • The cites parameter uses the cluster ID (data-cid), NOT a DOI or paper ID
  • Cited-by pages support the same pagination as regular search (start parameter)
  • Citation count on Google Scholar is typically higher than PubMed because it includes non-PubMed sources (books, theses, preprints, etc.)
Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.25

Published

Sep 25, 2026

Category

Uncategorized

License

MIT

Source path

skills/gs-cited-by

Default branch

master

Latest commit

df03c99

Tree SHA

6c66a32