This is probably not 100% on-topic here, but this site is closer to appropriate than others. Let me give it a try: I have collected about 50 publications relevant for a project of mine. For these publications, I have all the important information like author, title, journal, etc, but most importantly, I have the DOI for each paper.

I was asking myself, is it possible to retrieve the DOI of the references given in each publication through a web-service, an open database or any other service?

Background is that I would like to create a graph showing the connections between the selected publications. One semi-automatic approach which comes to my mind is to use Web of Science, go through the stack of my publications and copy the DOI of the listed references.

Any better ideas?

  • 1
    I believe the approach you suggest (using WoS) is the one used by the CiteSpace project Jan 23, 2014 at 14:18
  • @Fuhrmanator This is indeed what I had in mind. It took me a while to find out how the tool works, but it seems it's more or less exactly what I was looking for, except that I don't have to write a single line of code by myself.
    – halirutan
    Jan 24, 2014 at 6:28

3 Answers 3


Both Scopus and Web of Knowledge contain all the information that you need and have APIs that can be used to automate access:

I have never used them personally, but I hope this kind of information can be accessed using them. Each site indexes articles with their own unique key, so you can use those instead of DOIs if you only need them as unique keys.

Neither of them is free; you can probably access them through your university's subscription though. Be sure to check the usage limits.


It's backwards from your proposed approach, but you could also use Google Scholar. It (apparently) has no API yet. Thus, someone created a python module to parse its output. http://www.icir.org/christian/scholar.html

Google Scholar only gives you the articles that cite the given article. So you can build the links that are to the article, rather than from it.

Edit Google Scholar Citation Visualisation Tool seems to be based on this approach. However, the bookmarklet doesn't seem to work (for me in Chrome) when I browse Google Scholar as shown in the video on that page.

  • Especially the Google Visualization Tool looks promising. Unfortunately, I'm not able to get it working under Chrome, OSX Mavericks. The toolbar appears, but clicking the buttons has no effect :-(
    – halirutan
    Jan 24, 2014 at 6:29
  • @halirutan I think the Google Scholar page changed and it broke the bookmarklet code. If you enable the console in the developer tools of Chrome, you'll see the error. Such are the risks of hacking JavaScript that decodes web pages coming from a Google service... Jan 26, 2014 at 2:06
  • 2
    google scholar blocks you after some point. basically its not a free api.
    – Amir
    Jul 29, 2015 at 19:33

Slightly adapting my answer to this earlier, very similar question:

It seems that crossref.org is beginning to roll out providing a list of citations (the works that a given work cites):


[See the aptly named section "OMG! OMG! OMG! Does this mean I can get references from api.crossref.org?"]

Using the example doi from the above link (doi:10.7554/eLife.10288), you could obtain the list of citations in that work at: https://api.crossref.org/v1/works/10.7554/eLife.10288.xml

Alternatively, with content negotiation, you could just use:

curl -L -H "Accept: application/vnd.crossref.unixsd+xml" \
 https://doi.org/10.7554/eLife.10288 > data.xml

The citations are listed in the <citation_list> element. The list of 'doi's can be extracted with the following XPath query:


Warning: The citation data is, according to the link above, only available in the XML, not the JSON, representation. Also, the service is not available for all works, yet.

Toy python implementation

import requests
from lxml import html

def list_references(doi):
    """List an article's references, as raw DOIs. 

The input also has to be just the DOI (without doi: etc.)
    headers = {'Accept' : 'application/vnd.crossref.unixsd+xml' }
    r = requests.get("https://data.crossref.org/" + doi,
    tree = html.fromstring(r.content)
    return tree.xpath('//citation_list/citation/doi/text()')

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .