$npx -y skills add cookjohn/gs-skills --skill gs-cited-byFind 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.
| 1 | # Google Scholar — Cited By (Citation Tracking) |
| 2 | |
| 3 | Find all papers that cite a given paper. Uses Google Scholar's `cites` parameter with the paper's cluster ID (data-cid). |
| 4 | |
| 5 | ## Arguments |
| 6 | |
| 7 | $ARGUMENTS can be: |
| 8 | - A `data-cid` from a previous search result (e.g., `TFS2GgoGiNUJ`) |
| 9 | - A paper title (will search first to find the data-cid) |
| 10 | |
| 11 | ## Steps |
| 12 | |
| 13 | ### Step 1: Resolve data-cid |
| 14 | |
| 15 | **If $ARGUMENTS is a data-cid** (alphanumeric string, no spaces): use it directly. |
| 16 | |
| 17 | **If $ARGUMENTS is a title or description**: first search to find the data-cid: |
| 18 | 1. Use `gs-search` with the title as keywords |
| 19 | 2. Match the target paper in results by title similarity |
| 20 | 3. Extract its `dataCid` |
| 21 | |
| 22 | ### Step 2: Navigate to "Cited by" page |
| 23 | |
| 24 | Use `mcp__chrome-devtools__navigate_page`: |
| 25 | - url: `https://scholar.google.com/scholar?cites={DATA_CID}&hl=en&num=10` |
| 26 | |
| 27 | Replace `{DATA_CID}` with the resolved cluster ID. |
| 28 | |
| 29 | ### Step 3: Extract citing papers (evaluate_script) |
| 30 | |
| 31 | Same extraction script as gs-search: |
| 32 | |
| 33 | ```javascript |
| 34 | async () => { |
| 35 | for (let i = 0; i < 20; i++) { |
| 36 | if (document.querySelector('#gs_res_ccl') || document.querySelector('#gs_captcha_ccl')) break; |
| 37 | await new Promise(r => setTimeout(r, 500)); |
| 38 | } |
| 39 | |
| 40 | if (document.querySelector('#gs_captcha_ccl') || document.body.innerText.includes('unusual traffic')) { |
| 41 | return { error: 'captcha', message: 'Google Scholar requires CAPTCHA verification. Please complete it in your browser, then tell me to continue.' }; |
| 42 | } |
| 43 | |
| 44 | const items = document.querySelectorAll('#gs_res_ccl .gs_r.gs_or.gs_scl'); |
| 45 | const results = Array.from(items).map((item, i) => { |
| 46 | const titleEl = item.querySelector('.gs_rt a'); |
| 47 | const meta = item.querySelector('.gs_a')?.textContent || ''; |
| 48 | const parts = meta.split(' - '); |
| 49 | const authors = parts[0]?.trim() || ''; |
| 50 | const journalYear = parts[1]?.trim() || ''; |
| 51 | const citedByEl = item.querySelector('.gs_fl a[href*="cites"]'); |
| 52 | |
| 53 | return { |
| 54 | n: i + 1, |
| 55 | title: titleEl?.textContent?.trim() || item.querySelector('.gs_rt')?.textContent?.trim() || '', |
| 56 | href: titleEl?.href || '', |
| 57 | authors, |
| 58 | journalYear, |
| 59 | citedBy: citedByEl?.textContent?.match(/\d+/)?.[0] || '0', |
| 60 | dataCid: item.getAttribute('data-cid') || '', |
| 61 | fullTextUrl: (item.querySelector('.gs_ggs a') || item.querySelector('.gs_or_ggsm a'))?.href || '', |
| 62 | snippet: item.querySelector('.gs_rs')?.textContent?.trim()?.substring(0, 200) || '' |
| 63 | }; |
| 64 | }); |
| 65 | |
| 66 | const totalText = document.querySelector('#gs_ab_md')?.textContent?.trim() || ''; |
| 67 | const currentUrl = window.location.href; |
| 68 | return { total: totalText, resultCount: results.length, currentUrl, results }; |
| 69 | } |
| 70 | ``` |
| 71 | |
| 72 | ### Step 4: Report |
| 73 | |
| 74 | ``` |
| 75 | Papers citing [{original paper title}] (data-cid: {DATA_CID}): |
| 76 | {total} |
| 77 | |
| 78 | 1. {title} |
| 79 | Authors: {authors} | {journalYear} |
| 80 | Cited by: {citedBy} |
| 81 | Data-CID: {dataCid} |
| 82 | |
| 83 | 2. ... |
| 84 | ``` |
| 85 | |
| 86 | ## Follow-up |
| 87 | |
| 88 | - **See more citing papers**: use `gs-navigate-pages` (pagination works on cited-by pages too) |
| 89 | - **Export citing papers**: use `gs-export` with the data-cid(s) |
| 90 | - **Recursive citation tracking**: use `gs-cited-by` on any of the citing papers |
| 91 | |
| 92 | ## Notes |
| 93 | |
| 94 | - This skill uses 2-3 tool calls: optional search + `navigate_page` + `evaluate_script` |
| 95 | - The `cites` parameter uses the cluster ID (data-cid), NOT a DOI or paper ID |
| 96 | - Cited-by pages support the same pagination as regular search (`start` parameter) |
| 97 | - Citation count on Google Scholar is typically higher than PubMed because it includes non-PubMed sources (books, theses, preprints, etc.) |