odnr-wells
SKILL.md
Ohio DNR Oil and Gas Well Data
Data access skill for the Ohio Department of Natural Resources Division of Oil and Gas Resources Management well database. Ohio is a key Appalachian basin state for Utica Shale and Point Pleasant formation research.
Data coverage: 100,000+ wells, records from 1860s to present. Includes conventional (Clinton, Knox) and unconventional (Utica, Point Pleasant) wells, CBM, saltwater disposal, and injection wells.
Credential Resolution
No API key required. ODNR ArcGIS REST services are publicly accessible.
API Structure
Primary Endpoint: ODNR ArcGIS REST MapServer
Base URL: https://gis.ohiodnr.gov/arcgis/rest/services/OGS/OilGasWells/MapServer
Get layer list:
curl -s "https://gis.ohiodnr.gov/arcgis/rest/services/OGS/OilGasWells/MapServer?f=json" \
| python3 -c "import json,sys; d=json.load(sys.stdin); [print(l['id'], l['name']) for l in d.get('layers',[])]"
Layer Reference (verify against live service)
| Layer ID | Name | Notes |
|---|---|---|
| 0 | All Wells | Full well inventory |
| 1 | Utica/Point Pleasant | Horizontal unconventional |
| 2 | Active Wells | Producing wells |
| 3 | Plugged Wells | P&A records |
Workflow
Step 1 — Resolve Intent
Identify the query target:
- Formation: Utica, Point Pleasant, Clinton, Knox, Berea, Medina, Oriskany
- Geography: county, bounding box, or named field
- Filter: well type (oil, gas, SWD), permit status, operator
Step 2 — Query Wells by County
# Query wells in Carroll County (FIPS 019), Utica targets
curl -s "https://gis.ohiodnr.gov/arcgis/rest/services/OGS/OilGasWells/MapServer/0/query" \
--data-urlencode "where=COUNTY_CODE='019'" \
--data-urlencode "outFields=PERM_NUM,WELL_NAME,OPERATOR,FORMATION,LATITUDE,LONGITUDE,WELL_TYPE,STATUS" \
--data-urlencode "resultRecordCount=100" \
--data-urlencode "f=json"
# Query Utica/Point Pleasant wells statewide (status = Active or Producing)
curl -s "https://gis.ohiodnr.gov/arcgis/rest/services/OGS/OilGasWells/MapServer/0/query" \
--data-urlencode "where=FORMATION LIKE '%UTICA%' OR FORMATION LIKE '%POINT PLEASANT%'" \
--data-urlencode "outFields=PERM_NUM,WELL_NAME,OPERATOR,FORMATION,COUNTY_CODE,WELL_TYPE,STATUS,LATITUDE,LONGITUDE" \
--data-urlencode "resultRecordCount=200" \
--data-urlencode "orderByFields=PERM_NUM DESC" \
--data-urlencode "f=json"
Step 3 — Spatial (Bounding Box) Query
# Wells within bounding box (SW and NE corners: lon_min,lat_min,lon_max,lat_max)
# Example: Carroll/Columbiana county area
curl -s "https://gis.ohiodnr.gov/arcgis/rest/services/OGS/OilGasWells/MapServer/0/query" \
--data-urlencode "geometry=-81.3,40.5,-80.5,41.0" \
--data-urlencode "geometryType=esriGeometryEnvelope" \
--data-urlencode "spatialRel=esriSpatialRelIntersects" \
--data-urlencode "inSR=4326" \
--data-urlencode "outFields=PERM_NUM,WELL_NAME,OPERATOR,FORMATION,WELL_TYPE,STATUS" \
--data-urlencode "resultRecordCount=200" \
--data-urlencode "f=json"
Step 4 — Parse Results
# Extract key fields from query response
curl -s "https://gis.ohiodnr.gov/arcgis/rest/services/OGS/OilGasWells/MapServer/0/query" \
--data-urlencode "where=FORMATION LIKE '%UTICA%'" \
--data-urlencode "outFields=PERM_NUM,WELL_NAME,OPERATOR,COUNTY_CODE,STATUS" \
--data-urlencode "resultRecordCount=50" \
--data-urlencode "f=json" \
| python3 -c "
import json, sys
data = json.load(sys.stdin)
features = data.get('features', [])
print(f'Total records: {len(features)}')
print(f'{'Permit':<12} {'Operator':<25} {'Formation':<20} {'Status':<15}')
print('-' * 75)
for f in features[:20]:
a = f['attributes']
print(f\"{a.get('PERM_NUM',''):<12} {str(a.get('OPERATOR',''))[:24]:<25} {str(a.get('FORMATION',''))[:19]:<20} {str(a.get('STATUS',''))[:14]:<15}\")
"
Step 5 — Bulk Download (Production Data)
ODNR publishes bulk CSV downloads for production and permit data:
# Current bulk download page (verify current URLs at ohiodnr.gov)
# Unconventional well list (Utica/Point Pleasant):
curl -L "https://ohiodnr.gov/static/documents/oil-gas/Well-Permit-Data-Unconventional.xlsx" \
-o odnr_unconventional_wells.xlsx
# Production data (annual):
curl -L "https://ohiodnr.gov/static/documents/oil-gas/Annual-Production-Data.xlsx" \
-o odnr_production.xlsx
Key Ohio Formation Reference
| Formation | Type | Depth (ft TVD) | Target Area | Notes |
|---|---|---|---|---|
| Utica Shale | Unconventional gas/oil | 6,000–12,000 | E/SE Ohio | Overlies Point Pleasant |
| Point Pleasant | Unconventional gas/condensate | 6,500–12,500 | SE Ohio | Primary Appalachian Utica target |
| Clinton Sandstone | Conventional gas/oil | 1,500–5,000 | C/E Ohio | Prolific historical producer |
| Knox Dolomite | Conventional oil | 2,000–6,000 | C/N Ohio | Major conventional play |
| Medina (Berea) | Conventional gas | 1,000–4,000 | NE Ohio | Shallow gas |
| Oriskany Sandstone | Conventional gas | 3,000–6,000 | SE Ohio | Appalachian analog to WV |
| Trenton-Black River | Conventional (deep) | 5,000–7,000 | NW Ohio | Carbonate |
Ohio County Reference (Key Utica/PP Counties)
| County | FIPS | Notes |
|---|---|---|
| Carroll | 019 | Highest Utica density; Carroll County core |
| Columbiana | 029 | Active Utica development |
| Guernsey | 059 | Utica and Clinton |
| Harrison | 067 | Major Utica/PP production |
| Holmes | 075 | Utica fringe area |
| Jefferson | 081 | Utica development |
| Mahoning | 099 | Utica fringe |
| Medina | 103 | Conventional + some Utica |
| Noble | 121 | Utica and Devonian |
| Tuscarawas | 157 | Utica transition |
| Wayne | 169 | Conventional |
Appalachian Basin Comparison
| Parameter | Marcellus WV | Utica/PP OH | Utica WV/PA |
|---|---|---|---|
| Depth (ft TVD) | 5,000–9,000 | 6,500–12,500 | 8,000–14,000 |
| Lateral length (ft) | 6,000–12,000 | 6,000–11,000 | 6,000–10,000 |
| Gas API | 0.58–0.68 | 0.60–0.72 | 0.60–0.70 |
| GOR (scf/bbl) | Dry–10,000 | 2,000–wet | Dry–8,000 |
| Data source | WVGES + pnge:wvges-wells | ODNR + pnge:odnr-wells | PADEP + pnge:padep-wells |
ODNR Supplemental Resources
| Resource | URL Pattern | Notes |
|---|---|---|
| Well viewer (web app) | ohiodnr.gov/discover-and-learn/safety-conservation/about-ODNR/oil-gas | Interactive map |
| Permit data portal | ohiodnr.gov (Oil and Gas → Permits) | Searchable online |
| Production reports | ohiodnr.gov → Annual Reports | PDF summary tables |
| Spud reports | ODNR quarterly | New horizontal wells spudded |
Output Format
## Ohio Well Query Results
**Query:** [formation / county / operator filter]
**Records returned:** N
| Permit # | Well Name | Operator | Formation | County | Type | Status |
|---------|----------|----------|-----------|--------|------|--------|
| | | | | | | |
**Summary:**
- Total wells returned: N
- Top operators: [list top 3–5]
- Formation breakdown: Utica: N, Point Pleasant: N, Clinton: N, Other: N
- Status breakdown: Producing: N, Plugged: N, Permit: N
**Data source:** ODNR Division of Oil and Gas Resources Management
**Certainty:** HIGH (official regulatory database) | **Bias:** Only permitted/reported wells
Error Handling
| HTTP Code | Cause | Action |
|---|---|---|
| 400 Bad Request | Invalid WHERE syntax | Use UPPERCASE field names; check field list |
| 404 Not Found | Layer ID changed | Re-query MapServer root for current layer list |
| 500 Server Error | ODNR service unavailable | Try bulk download instead |
| Empty features [] | No records match filter | Broaden query; check formation name spelling |
Caveats
- ODNR well database includes permitted but not-yet-drilled wells; filter by STATUS for producing wells when estimating active inventory.
- Formation names in ODNR data use various spellings — use LIKE with wildcards
(e.g.,
%UTICA%,%POINT PLEASANT%,%CLINTON%). - Production data for Utica/Point Pleasant wells may be reported under operator rather than individual wellbore; verify against permit number.
- Horizontal well counts are best obtained from the unconventional well bulk download, which is more consistently maintained than the ArcGIS service.
- For cross-basin comparison with WV and PA, use
pnge:wvges-wellsandpnge:padep-wellsalongside this skill.
Weekly Installs
1
Repository
jpfielding/claude.pngeFirst Seen
4 days ago
Security Audits
Installed on
amp1
cline1
opencode1
cursor1
kimi-cli1
codex1