This is a demonstration version of the tool developed by the PBS NewsHour to track the size of the Deepwater Horizon oil spill in the Gulf of Mexico. It is NOT CORRECT. This version will not be updated.
For the correct, up-to-date version, see our complete coverage of the Deepwater Horizon oil spill.

840,000 GAL/DAY
Department of Energy 1,470,000 gal/day
BP (Worst Case) 2,520,000 gal/day
Experts' Worst Case 4,200,000 gal/day
The basic formula for calculating how much oil has spilled since the Deepwater Horizon rig sank on April 22 is fairly simple: Total = Rate * Time. However, since estimates of how much oil is leaking per day vary widely, we let you choose the rate you find most credible, using the slider above.
We've also adjusted the flow rate to account for BP's efforts to siphon oil directly out of the ruptured well. The formula now breaks the leak into discrete segments of time, creating a new one each time BP or the government reports the amount of oil captured, then reporting the total of all segments.
Here's the JavaScript code that calculates the total amount spilled:
function getRate(perDay) {
var perHour = perDay / 24;
var perMinute = perHour / 60;
var perSecond = perMinute / 60;
return perSecond
};
var spillChanges = [
// start, diff
[new Date(2010, 3, 20, 10, 0, 0), 0], // initial rate
[new Date(2010, 4, 17, 7, 0, 0), (42 * 1000)], // tube inserted
[new Date(2010, 4, 18, 7, 0, 0), (42 * 2000)],
[new Date(2010, 4, 20, 11, 25, 0), (42 * 5000)], // full suck
[new Date(2010, 4, 21, 0, 0, 0), (42 * 2200)], // reduced suck
[new Date(2010, 4, 26, 0, 0, 0), 0], // siphoning stopped for Top Kill
[new Date(2010, 5, 4, 0, 0, 1), (42 * 6077)], // new containment dome in place
[new Date(2010, 5, 5, 0, 0, 1), (42 * 10500)],
[new Date(2010, 5, 6, 0, 0, 1), (42 * 11100)],
[new Date(2010, 5, 7, 0, 0, 1), (42 * 14800)], // capture rate exceeds lowest flow rate estimate
[new Date(2010, 5, 8, 0, 0, 1), (42 * 15000)],
[new Date(2010, 5, 9, 0, 0, 1), (42 * 15800)],
[new Date(2010, 5, 10, 0, 0, 1), (42 * 15400)],
[new Date(2010, 5, 11, 0, 0, 1), (42 * 15550)],
[new Date(2010, 5, 12, 0, 0, 1), (42 * 15040)],
[new Date(2010, 5, 13, 0, 0, 1), (42 * 15200)]
];
function totalSpilled(baseRate, changes, end) {
/********** Updated May 20
Making this adaptable to each change in siphon rate.
Given a list of start dates and rate changes,
we create isolated increments of the spill,
each calculating the amount spilled, then
adding to the total.
**********/
var total = 0;
var endRate
$.each(changes, function(i) {
// get an end date
if (i == (changes.length-1)) {
endRate = end || new Date(); // the leak rate ongoing
} else {
var next = i + 1;
endRate = changes[next][0];
};
var start = changes[i][0];
var time = (endRate - start) / 1000;
var diff = changes[i][1];
var rate = baseRate - diff;
var segment = (getRate(rate) * time);
total += segment;
});
return Math.round(total);
};