Oil Price API Documentation - Quick Start in 5 Minutes | REST API
GitHub
GitHub
  • Interactive Explorer

    • Interactive API Explorer
  • Price Data

    • API Reference
    • Get Latest Prices
    • Historical Prices
  • Commodities

    • List Commodities
    • Get Commodity Details
  • Marine Fuels

    • List Marine Fuel Ports
    • Get Port Details with Prices
  • Premium Endpoints

    • All Prices API - One Call, All Commodities
    • Cushing Oil Storage Intelligence API
    • Drilling Intelligence API
    • Marine Fuels API
    • ICE Brent Futures API
  • Futures

    • Futures API
    • ICE Brent Futures
    • ICE WTI Futures
    • ICE Gas Oil Futures
    • NYMEX Natural Gas Futures
  • Dark Data (Premium)

    • Dark Data API
    • Rig Counts
    • Oil Inventories
    • OPEC Production
    • Drilling Productivity
    • Forecasts (STEO)
  • Analytics

    • Analytics API
  • Account & Billing

    • Account API

Drilling Productivity

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

Endpoints

MethodEndpointDescription
GET/v1/dark_data/drilling_productivitiesList paginated reports
GET/v1/dark_data/drilling_productivities/latestLatest report
GET/v1/dark_data/drilling_productivities/summaryCurrent metrics summary
GET/v1/dark_data/drilling_productivities/duc_wellsDUC counts by basin
GET/v1/dark_data/drilling_productivities/by_basinFilter by basin
GET/v1/dark_data/drilling_productivities/historicalHistorical data
GET/v1/dark_data/drilling_productivities/trendsTrend analysis
GET/v1/dark_data/drilling_productivities/:idSpecific report by ID

List Reports

GET /v1/dark_data/drilling_productivities

Parameters

ParameterTypeDefaultDescription
pageinteger1Page number
per_pageinteger10Results per page (max 50)

Latest Report

GET /v1/dark_data/drilling_productivities/latest

Response

{
  "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
      }
    ]
  }
}

Summary

GET /v1/dark_data/drilling_productivities/summary

Response

{
  "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"
  }
}

DUC Wells

Drilled but Uncompleted well counts by basin.

GET /v1/dark_data/drilling_productivities/duc_wells

Response

{
  "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"]
  }
}

By Basin

GET /v1/dark_data/drilling_productivities/by_basin

Parameters

ParameterTypeRequiredDescription
basinsstringNoComma-separated basin names
monthsinteger12Months of data (max 60)

Valid Basins

BasinPrimary ProductRegion
permianOilTX/NM
bakkenOilND/MT
eagle_fordOilTX
niobraraOilCO/WY
appalachiaGasPA/WV/OH
anadarkoOil/GasOK
haynesvilleGasLA/TX

Response

{
  "data": {
    "basins": {
      "permian": [
        {
          "report_month": "2024-12",
          "duc_wells": 2104,
          "oil_productivity": 521,
          "new_wells_per_rig": 1.42
        }
      ]
    }
  }
}

Historical

GET /v1/dark_data/drilling_productivities/historical

Parameters

ParameterTypeRequiredDescription
basinstringYesBasin name
monthsinteger24Months of data (max 120)

Response

{
  "data": {
    "basin": "permian",
    "data_points": [
      {
        "report_month": "2024-12",
        "duc_wells": 2104,
        "oil_productivity": 521,
        "legacy_decline": 245
      }
    ]
  }
}

Trends

Cross-basin trend analysis.

GET /v1/dark_data/drilling_productivities/trends

Parameters

ParameterTypeDefaultDescription
monthsinteger12Analysis period (min 3, max 36)

Response

{
  "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"]
  }
}

Code Examples

Python - DUC Analysis

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'])}")

JavaScript - Productivity Comparison

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`);
});

Why DUC Data Matters

  • 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

Related

  • Rig Counts - Active drilling rigs
  • Oil Inventories - Storage levels
  • Forecasts - Production forecasts
Last Updated: 12/30/25, 12:33 PM
Prev
OPEC Production
Next
Forecasts (STEO)