Let the null hypothesis be that all coins are fair. Then we can pool all the observations together (since they all essentially came from the 'same' fair coin). This will give you a proportion. From here you can do a simple binomial test to check if that proportion is equal to 0.5 or not.
The power of this test might not be so great depending on how sparse the signal is. It was the first thing that came to mind
> x <- c(rbinom(100, 100, 0.5), rbinom(100, 100, 0.45), rbinom(100, 100, 0.65), rbinom(100, 100, 0.3))
> binom.test(sum(x),length(x)*100)
Exact binomial test
data: sum(x) and length(x) * 100
number of successes = 19168, number of trials = 40000, p-value < 2.2e-16
alternative hypothesis: true probability of success is not equal to 0.5
95 percent confidence interval:
0.4742935 0.4841095
sample estimates:
probability of success
0.4792
>
> x <- c(rbinom(100, 100, 0.5), rbinom(100, 100, 0.5), rbinom(100, 100, 0.5), rbinom(100, 100, 0.45))
> binom.test(sum(x),100*length(x))
Exact binomial test
data: sum(x) and 100 * length(x)
number of successes = 19507, number of trials = 40000, p-value = 8.426e-07
alternative hypothesis: true probability of success is not equal to 0.5
95 percent confidence interval:
0.4827651 0.4925867
sample estimates:
probability of success
0.487675