John Cole

Jul 22, 2026 • 3 min read

How to Track a Researcher's Citation Count with One API

Pull any author's h-index, i10-index, and year-by-year citations from Google Scholar as clean JSON, from code or Claude via MCP.

I keep a short list of researchers whose work I follow, and for a long time the only way to see how their citation counts moved was to open Google Scholar and eyeball each profile. That does not scale past a handful of names, and it gives you no history. So I started using a scraper that turns any Google Scholar author profile into structured JSON I can store and chart over time.

What the Google Scholar API does

The Google Scholar API is a scraper that returns an author's profile, citation metrics, and year-by-year citation graph as clean JSON, so you can track how a researcher's h-index and total citations change over time.

What it returns

For an author profile, each run gives you the author's name, affiliations, and research interests; total citations for the all-time and recent windows; the h-index and i10-index; and a year-by-year citation graph. Switch modes and the same actor also searches papers, pulls citation formats, lists an author's full bibliography, or maps a co-author network.

Run it in three steps

First, run a search for the author's name to find their author ID. Second, set the mode to author_profile and pass that ID. Third, run it and read the citation metrics from the dataset. That is the whole loop.

Use it as a REST API

You can call the actor from your own code. Start a run with a request to the Apify API and read the dataset when it finishes:

POST /v2/acts/johnvc~google-scholar-api/runs
{
 "mode": "author_profile",
 "author_id": "LSsXyncAAAAJ"
}

The run's dataset holds the profile and the citation graph as rows you can pull as JSON, CSV, or Excel.

Wire it into Claude with MCP

The actor runs over the hosted Apify MCP server, so any MCP client can call it as a tool. In Claude, add the server and ask "pull this author's h-index and citation history," and the agent runs the right mode and returns the numbers, no code needed.

What people build with it

A researcher watchlist that refreshes citation counts every Monday. An h-index dashboard for a department. A citation-growth chart for a grant report. A feed of the newest papers on a topic for a literature review. The citation-counts example task is a ready-to-run starting point, and the full Google Scholar API project lists every example in one place.

FAQ About Scraping Google Scholar

Where does the citation data come from?

It comes from the public Google Scholar author and result pages, read the same way a browser sees them and returned as structured JSON. Coverage reflects what Scholar shows, so it mirrors Scholar's own gaps rather than a separate curated database.

Can I call this Google Scholar scraper as a REST API?

Yes. Start a run with a request to the Apify API, passing the same input JSON you would use in the console, then read the results from the run's dataset as JSON, CSV, or Excel. The apify-client packages for Python and Node make it a few lines.

Can I use this scraper from Claude or another AI agent via MCP?

Yes. Add the actor to any MCP client with the hosted Apify MCP server, then ask in plain language for an author's h-index or the newest papers on a topic. The agent picks the right mode and runs it, so no scraping code is involved.

How much does it cost to track one author with this scraper?

An author profile is the $0.02 setup fee plus one $0.02 call, so about $0.04 per run. Paging through a full publication list adds $0.02 per page.

Can I schedule this Google Scholar scraper?

Yes. Save a task with an author ID, then attach a schedule from the actor's Actions menu, for example every Monday at 9 AM.

One schedule can refresh a whole watchlist of authors in a single run.

Found a bug or need a language that is not listed? Open an issue and it usually gets a same-week reply.

Join John on Peerlist!

Join amazing folks like John and thousands of other builders on Peerlist.

peerlist.io/

It’s available... this username is available! 😃

Claim your username before it's too late!

This username is already taken, you’re a little late.😐

0

0

0