Guide for Obsidian
Total continuing education hours in Obsidian with Dataview
If you keep one note per course with a date and the hours earned, Dataview can add them up for a renewal cycle. Here are the queries, a note layout that works with them, and the parts Dataview leaves to you. This applies to CE, CPE, CLE, PDH and similar credits.
One note per credit
Dataview reads the properties at the top of each note. Keep every credit in one folder.
Create a folder called CE and add one note per course, seminar or article. The queries below use four properties:
---
completed: 2026-03-05
hours: 1.5
category: Ethics
cycle: renewal-2027
---
An example credit note, shown as the properties at the top of the file.
- completed is the date in year-month-day form, such as
2026-03-05. Other formats may not be read as dates. - hours is a plain number:
1.5, not1,5and not1.5 hours. - category is optional. Spell it the same way every time:
Ethicsandethicsare two groups. - cycle names the renewal cycle the credit counts toward. It is used for the cycle total further down.
List the credits in your cycle
Replace the two dates with the first and last day of your own cycle.
TABLE WITHOUT ID file.link AS Course, completed AS Completed, hours AS Hours, category AS Category
FROM "CE"
WHERE completed >= date(2025-01-01) AND completed <= date(2027-12-31)
SORT completed ASC
Paste it into a note inside a code block marked dataview. It shows in Reading view and Live Preview.
The result is a table of every note in CE dated inside the cycle, oldest first, with a link to each note. Credits dated outside the two dates are not shown.
Hours per category
Useful when your board asks for a minimum in a category such as ethics.
TABLE WITHOUT ID category AS Category, sum(rows.hours) AS Hours
FROM "CE"
WHERE completed >= date(2025-01-01) AND completed <= date(2027-12-31)
GROUP BY category
Same dates as above. Notes with no category are grouped together.
With three sample notes (1.5 hours of Ethics, then 8 and 6.5 hours of Technical), it shows:
| Category | Hours |
|---|---|
| Ethics | 1.5 |
| Technical | 14.5 |
Example output. Dataview does not compare these hours with any minimum; you read the table.
A total for the whole cycle
Group by the cycle property to get one row per renewal cycle.
TABLE WITHOUT ID cycle AS Cycle, sum(rows.hours) AS Hours, length(rows) AS Credits
FROM "CE"
GROUP BY cycle
No dates in this one. It depends on every note carrying the right cycle value.
With the same three sample notes, all marked renewal-2027:
| Cycle | Hours | Credits |
|---|---|---|
| renewal-2027 | 16 | 3 |
Example output. The Hours column is your total for the cycle.
Where Dataview stops
None of this is a flaw. Dataview is a query tool, not a tracker.
- Your cycle dates live in the query. There is no single place that says "my cycle runs from here to there", so you repeat the dates in each query or mark every note with a cycle name.
- A bad value does not name its note. A note with
hours: 1,5is read as text, not a number, and adding text to a number can turn the Hours total into a garbled string. A note with nohoursat all can make the query show an error instead of a table. In neither case does the result tell you which note caused it. A date in another format is worse: it fails the date comparison and the note is simply left out of the list. - Minimums and days left are yours to write. "At least 2 hours of ethics", "hours still needed" and "days until renewal" each need another expression that you write and keep correct.
- No audit file. The result is a table inside a note. A Dataview query does not write a CSV or Markdown file of the credits that were counted.
- One set of queries per person or cycle. A second licence or a second person means copying the notes, the properties and the queries.
If your needs stop at a total, the queries above are enough. Keep them.
If you would rather not build it
We make CE Credit Tracker, a free Obsidian plugin for this job.
You enter your requirement once in settings: the hours needed, the first and last day of the cycle, and optional category minimums. You log each credit as a note with ce-date and ce-hours, and ce-category if you track category minimums. The dashboard shows hours earned, hours left, days left and any category minimum you have not met. A note with a bad value is listed with the reason instead of being dropped. One command writes a CSV or Markdown audit file.
The free plugin tracks one requirement. Pro is $29 for one year, paid once with no auto-renewal, and adds several requirements or people, certificate links in the exports and deadline status as note properties.
It has no rules database and says nothing about what any board requires. You enter your own numbers, and the hours are self-reported. The free plugin makes no network requests, and your credits stay in your vault.
Questions
Does the plugin need Dataview?
No. The plugin does its own counting and does not depend on any other plugin.
Can I keep my Dataview notes if I try the plugin?
Yes, nothing is moved or changed. The plugin counts notes that have ce-date and ce-hours, so notes that use other property names need those two properties added before they count.
Will this tell me what my board requires?
No. Neither the queries nor the plugin know any board's rules. Take the hours and the dates from your board's own current requirements.