One can use the API of OpenCitations. Here is an example code in R based on two DOIs as visible in the form of https://w3id.org/oc/index/coci/api/v1/citations/[DOI]
:
library(jsonlite)
work1 <- jsonlite::fromJSON("https://opencitations.net/index/coci/api/v1/citations/10.1017/s0020818313000337")
work2 <- jsonlite::fromJSON("https://opencitations.net/index/coci/api/v1/citations/10.1177/1354066106067346")
citingworks <- intersect(work1$citing, work2$citing)
Then, citingworks
lists 32 DOIs that have cited both work1
and work2
:
> citingworks
[1] "10.1017/9781108644082" "10.1017/9781108644082.001"
[3] "10.1017/9781108644082.002" "10.1017/9781108644082.003"
[5] "10.1017/9781108644082.004" "10.1017/9781108644082.005"
[7] "10.1017/9781108644082.006" "10.1017/9781108644082.007"
[9] "10.1017/9781108644082.008" "10.1017/9781108644082.009"
[11] "10.1017/9781108644082.010" "10.1177/1354066119889401"
[13] "10.1093/jogss/ogy021" "10.31338/uw.9788323542988"
[15] "10.1080/13533312.2020.1753513" "10.1080/13569775.2020.1795372"
[17] "10.1007/978-3-030-51521-8_1" "10.1007/978-3-030-51521-8_2"
[19] "10.1080/13600826.2020.1828298" "10.1057/s41268-018-0147-z"
[21] "10.1146/annurev-polisci-040711-135425" "10.1111/pops.12616"
[23] "10.1093/isq/sqz055" "10.1093/isr/viy006"
[25] "10.1093/isr/viz002" "10.1017/s0260210516000176"
[27] "10.1017/s026021051600019x" "10.3384/cu.2000.1525.1572479"
[29] "10.1177/1354066117745365" "10.1163/24056006-12340008"
[31] "10.1177/0010836716653161" "10.1080/09662839.2018.1497985"
But note that OpenCitation's data sample is CrossRef, which is not the same as Google Scholar.