If you need to track your PPO production and associated write-offs to understand your true revenue, this query provides the exact figures you need. By analyzing completed procedures and their linked insurance write-offs, you can see how much PPO activity is occurring in your practice each month.
The Query
Copy and paste the following code into your User Query window. This query calculates the total fees and total write-offs for completed procedures associated with PPO insurance plans.
SET @FromDate = '2026-01-01';
SET @ToDate = '2026-01-31';
SELECT
DATE_FORMAT(pl.DateComplete, '%Y-%m') AS Month,
SUM(pl.ProcFee) AS TotalFee,
SUM(cp.WriteOff) AS TotalWriteOff,
SUM(pl.ProcFee - cp.WriteOff) AS NetProduction
FROM procedurelog pl
INNER JOIN claimproc cp ON pl.ProcNum = cp.ProcNum
INNER JOIN insplan ip ON cp.PlanNum = ip.PlanNum
WHERE pl.ProcStatus = 2
AND pl.DateComplete BETWEEN @FromDate AND @ToDate
AND ip.PlanType = 'p' -- 'p' typically denotes PPO in Open Dental
GROUP BY Month
ORDER BY Month;
How to Run This Query
- In Open Dental, go to Reports in the Main Menu.
- Click User Query.
- Paste the query provided above into the large text box.
- Click Submit Query.
- The results will display in the grid below, showing your monthly totals for the specified date range.
Understanding the Results
- Month: The year and month the procedures were completed.
- TotalFee: The full office fee for all procedures performed under PPO plans during that month.
- TotalWriteOff: The total amount written off due to PPO fee schedules or insurance adjustments.
- NetProduction: The remaining balance after write-offs are subtracted from the total fees.
How to Customize
You can easily adjust this report to fit your specific needs by modifying the lines at the top of the query:
- Change the Date Range: Update the
@FromDateand@ToDatevariables. For example, to see data for the entire year of 2026, set@FromDate = '2026-01-01'and@ToDate = '2026-12-31'. - Filter by Clinic: If you have multiple locations, add a line to the
WHEREclause:AND pl.ClinicNum = 1(replace1with your specific Clinic Number found in Setup > Clinics). - Filter by Provider: To see totals for a specific provider, add
AND pl.ProvNum = 1to theWHEREclause (replace1with the provider's internal ID).
Variations
If you want to see this data broken down by individual insurance carrier rather than just a monthly total, you can modify the SELECT statement to include c.CarrierName and add INNER JOIN carrier c ON ip.CarrierNum = c.CarrierNum to the join section. This helps identify which PPO plans are impacting your bottom line the most.
Skip the Query — Use DentalCanvas Instead
Don't want to write SQL? DentalCanvas connects to your Open Dental database and shows you this data automatically in a visual dashboard — no queries required.
This article is provided by opendentalsupport.com, an independent community resource. We are not affiliated with Open Dental Software, Inc.