Drilling KPI Analyzer
What this skill does
Extracts, computes, and benchmarks drilling key performance indicators from daily drilling reports, morning reports, and bit records. Produces section-level and well-level performance summaries including ROP, MSE, flat time, NPT classifications, and cost per foot. Benchmarks against offset wells when context is provided.
When to use
- User uploads daily drilling reports (DDRs), morning reports, or bit records
- User asks to analyze drilling performance, compute KPIs, or benchmark a well
- User wants to identify performance improvement opportunities
- User needs a drilling performance summary for end-of-well reporting
Trigger phrases
- "Analyze drilling performance for this well"
- "Compute drilling KPIs from these DDRs"
- "Benchmark ROP against offset wells"
- "How does our drilling efficiency compare?"
- "Summarize NPT breakdown for the past 30 days"
- "What is the flat time percentage for this section?"
- "Calculate mechanical specific energy for this bit run"
- "Generate end-of-well drilling performance report"
Inputs
- Daily drilling reports (PDF, DOCX, TXT)
- Morning reports
- Bit records or bit performance sheets
- Drilling parameter time series (CSV, XLSX)
- Optional: offset well KPI benchmarks
- Optional: AFE cost data for cost-per-foot calculation
Outputs
- Section-level KPI summary (surface, intermediate, lateral per section)
- Well-level KPI summary
- NPT breakdown by category with Pareto ranking
- Flat time analysis (tripping, circulating, WOC, rigging)
- ROP comparison by formation and bit type
- MSE trend if WOB/RPM/torque/ROP data available
- Cost per foot if AFE or day rate data provided
- Benchmark comparison table if offset data provided
- Quality flags and data gap warnings
Core KPIs extracted
Drilling efficiency
| KPI | Definition | Units |
|---|---|---|
| Average ROP | Total footage / rotating hours | ft/hr |
| Instantaneous ROP | Per-stand or per-30-min interval | ft/hr |
| Mechanical ROP | ROP during pure rotary drilling | ft/hr |
| Slide ROP | ROP during motor sliding | ft/hr |
| Slide percentage | Slide footage / total footage | % |
| MSE | Mechanical Specific Energy = (480 × RPM × Torque + WOB) / (ROP × bit area) | psi |
Time distribution
| Category | Description |
|---|---|
| Rotating time | Drill string rotating, bit on bottom |
| Sliding time | Downhole motor, bit on bottom, string not rotating |
| Reaming time | Rotating but not drilling new formation |
| Tripping time | Pulling out of hole or running in hole |
| Connection time | Per-stand time including wiper trips |
| Flat time | All non-drilling time (tripping + connections + NPT) |
| NPT | Non-productive time with cause classification |
NPT classifications
- Mechanical failure (equipment)
- Wellbore instability (stuck pipe, tight hole, washout)
- Mud/fluid related (losses, gains, influx)
- Directional issues (stuck BHA, survey problems)
- Rig equipment (top drive, pump, hoisting)
- Weather / environmental
- HSE / safety stop
- Waiting on orders / personnel
- Third-party service failure
Cost performance (when AFE data available)
- Day rate cost per foot
- Service company cost per foot
- Projected vs. actual AFE
- Cost overrun by NPT category
Output schema
{
"well_summary": {
"well_name": "string",
"rig_name": "string",
"spud_date": "string",
"total_depth_ft": 0.0,
"total_drilling_days": 0.0,
"overall_rop_ft_hr": 0.0,
"total_npt_hrs": 0.0,
"npt_percentage": 0.0,
"flat_time_percentage": 0.0,
"rotating_percentage": 0.0
},
"sections": [
{
"name": "string",
"from_depth_ft": 0.0,
"to_depth_ft": 0.0,
"footage_ft": 0.0,
"avg_rop_ft_hr": 0.0,
"rotating_hrs": 0.0,
"sliding_hrs": 0.0,
"tripping_hrs": 0.0,
"npt_hrs": 0.0,
"slide_pct": 0.0
}
],
"npt_breakdown": [
{
"category": "string",
"total_hrs": 0.0,
"event_count": 0,
"percentage_of_total_npt": 0.0
}
],
"bit_runs": [
{
"run_number": 0,
"bit_size_in": "string",
"bit_type": "string",
"from_depth_ft": 0.0,
"to_depth_ft": 0.0,
"footage_ft": 0.0,
"rop_ft_hr": 0.0,
"avg_wob_klbs": 0.0,
"avg_rpm": 0.0,
"dull_grade": "string"
}
],
"benchmark": {
"offset_well_avg_rop": 0.0,
"this_well_rop": 0.0,
"rop_delta_pct": 0.0,
"offset_well_npt_pct": 0.0,
"this_well_npt_pct": 0.0
},
"quality_flags": ["string"]
}
Calculation notes
ROP calculation
- Use rotating + sliding hours only (exclude tripping, flat time)
- If hourly data unavailable, compute from depth intervals between DDRs
- Report separate ROP for each bit run and each wellbore section
MSE calculation
MSE (psi) = (480 × RPM × Torque_ft-lbs) / (ROP_ft_hr × Bit_area_in²) + WOB_lbs / Bit_area_in²
MSE < 2× UCS (unconfined compressive strength) indicates efficient drilling. Flag runs where MSE exceeds 3× formation strength.
Flat time
Flat Time % = (Total hours - Rotating hours - Sliding hours) / Total hours × 100
NPT percentage
NPT % = Total NPT hours / Total elapsed hours × 100
Industry benchmark: best-in-class unconventional wells achieve < 5% NPT.
Benchmarking logic
When offset well data is provided:
- Match sections by formation or depth range
- Compute ROP percentile (P10/P50/P90) for the offset population
- Identify which NPT categories are outliers vs. offset average
- Flag bit runs with significantly below-P50 ROP as improvement opportunities
Example response
DRILLING KPI SUMMARY — Wolfcamp B 3H
═══════════════════════════════════════
Well Total Depth: 12,450 ft MD
Total Drilling Time: 18.3 days
Overall Average ROP: 147 ft/hr
Total NPT: 12.8 hrs (2.9%)
Flat Time: 22.4%
SECTION BREAKDOWN
─────────────────
Surface (0–2,400 ft): Avg ROP 45 ft/hr, NPT 0.5 hrs
Intermediate (2,400–7,200 ft): Avg ROP 92 ft/hr, NPT 3.2 hrs
Lateral (7,200–12,450 ft): Avg ROP 168 ft/hr, NPT 9.1 hrs
NPT PARETO (Lateral Section)
─────────────────────────────
1. Mechanical failure (pump liner) 4.8 hrs (53%)
2. Wellbore instability (stuck pipe) 2.5 hrs (28%)
3. Third-party (MWD tool failure) 1.8 hrs (20%)