Monthly drilling productivity and DUC (Drilled but Uncompleted) well data from the EIA Drilling Productivity Report.
Source: EIA Drilling Productivity Report (DPR) Release: Around the 15th of each month Tier Required: Reservoir Mastery
| Method | Endpoint | Description |
|---|
| GET | /v1/dark_data/drilling_productivities | List paginated reports |
| GET | /v1/dark_data/drilling_productivities/latest | Latest report |
| GET | /v1/dark_data/drilling_productivities/summary | Current metrics summary |
| GET | /v1/dark_data/drilling_productivities/duc_wells | DUC counts by basin |
| GET | /v1/dark_data/drilling_productivities/by_basin | Filter by basin |
| GET | /v1/dark_data/drilling_productivities/historical | Historical data |
| GET | /v1/dark_data/drilling_productivities/trends | Trend analysis |
| GET | /v1/dark_data/drilling_productivities/:id | Specific report by ID |
GET /v1/dark_data/drilling_productivities
| Parameter | Type | Default | Description |
|---|
page | integer | 1 | Page number |
per_page | integer | 10 | Results per page (max 50) |
GET /v1/dark_data/drilling_productivities/latest
{
"data": {
"report_month": "2024-12",
"total_duc_wells": 5847,
"basins": [
{
"basin": "permian",
"duc_wells": 2104,
"new_wells_per_rig": 1.42,
"oil_productivity_bpd_per_rig": 521,
"gas_productivity_mcf_per_rig": null
},
{
"basin": "bakken",
"duc_wells": 423,
"new_wells_per_rig": 1.38,
"oil_productivity_bpd_per_rig": 487
}
]
}
}
GET /v1/dark_data/drilling_productivities/summary
{
"data": {
"report_month": "2024-12",
"total_duc_wells": 5847,
"average_oil_productivity": 487.2,
"average_gas_productivity": 8234,
"basins": [
{
"basin": "permian",
"duc_wells": 2104,
"oil_productivity": "521 bbl/d per rig",
"gas_productivity": null
},
{
"basin": "haynesville",
"duc_wells": 687,
"oil_productivity": null,
"gas_productivity": "12,450 mcf/d per rig"
}
],
"headline": "Total DUC inventory at 5,847 wells, Permian leads with 2,104"
}
}
Drilled but Uncompleted well counts by basin.
GET /v1/dark_data/drilling_productivities/duc_wells
{
"data": {
"report_month": "2024-12",
"total_duc": 5847,
"by_basin": [
{
"basin": "permian",
"duc_wells": 2104,
"month_over_month": 17,
"pct_of_total": 36.0
},
{
"basin": "eagle_ford",
"duc_wells": 687,
"month_over_month": -12,
"pct_of_total": 11.7
}
],
"declining_basins": ["eagle_ford", "bakken", "niobrara"]
}
}
GET /v1/dark_data/drilling_productivities/by_basin
| Parameter | Type | Required | Description |
|---|
basins | string | No | Comma-separated basin names |
months | integer | 12 | Months of data (max 60) |
| Basin | Primary Product | Region |
|---|
permian | Oil | TX/NM |
bakken | Oil | ND/MT |
eagle_ford | Oil | TX |
niobrara | Oil | CO/WY |
appalachia | Gas | PA/WV/OH |
anadarko | Oil/Gas | OK |
haynesville | Gas | LA/TX |
{
"data": {
"basins": {
"permian": [
{
"report_month": "2024-12",
"duc_wells": 2104,
"oil_productivity": 521,
"new_wells_per_rig": 1.42
}
]
}
}
}
GET /v1/dark_data/drilling_productivities/historical
| Parameter | Type | Required | Description |
|---|
basin | string | Yes | Basin name |
months | integer | 24 | Months of data (max 120) |
{
"data": {
"basin": "permian",
"data_points": [
{
"report_month": "2024-12",
"duc_wells": 2104,
"oil_productivity": 521,
"legacy_decline": 245
}
]
}
}
Cross-basin trend analysis.
GET /v1/dark_data/drilling_productivities/trends
| Parameter | Type | Default | Description |
|---|
months | integer | 12 | Analysis period (min 3, max 36) |
{
"data": {
"report_month": "2024-12",
"trends": [
{
"basin": "permian",
"current_duc": 2104,
"previous_duc": 2087,
"duc_change": 17,
"duc_trend": "up",
"productivity_oil": 521.4,
"productivity_gas": null,
"productivity_trend": "stable"
}
],
"declining_duc_basins": ["eagle_ford", "bakken"],
"increasing_duc_basins": ["permian", "haynesville"]
}
}
import requests
response = requests.get(
"https://api.oilpriceapi.com/v1/dark_data/drilling_productivities/duc_wells",
headers={"Authorization": "Token YOUR_API_KEY"}
)
data = response.json()
print(f"Total DUC Wells: {data['data']['total_duc']}")
for basin in data['data']['by_basin']:
trend = "▲" if basin['month_over_month'] > 0 else "▼"
print(f"{basin['basin'].title()}: {basin['duc_wells']} DUCs {trend}")
print(f"\nDeclining: {', '.join(data['data']['declining_basins'])}")
const response = await fetch(
"https://api.oilpriceapi.com/v1/dark_data/drilling_productivities/by_basin?" +
"basins=permian,bakken,eagle_ford",
{ headers: { "Authorization": "Token YOUR_API_KEY" } }
);
const data = await response.json();
Object.entries(data.data.basins).forEach(([basin, records]) => {
const latest = records[0];
console.log(`${basin}: ${latest.oil_productivity} bbl/d per rig`);
});
- Production Timing: DUCs can be completed quickly when prices rise
- Capital Efficiency: High DUC = deferred capex, ready production
- Basin Health: Declining DUCs may signal reduced activity
- Supply Forecasting: DUC drawdown precedes production increases