Obsidian Contract Tracker
Implement the published contract register as local Obsidian notes with owners, dates, durable file pointers, and operational notice flags. Not legal advice and not a CLM.
— Craig Major
An Obsidian contract tracker is the published Contract Tracker register built as local Markdown notes. Each note names an owner, a closed status, a durable URL plus native id and version key, and the key dates. YAML properties, core Templates, Search, and optional Bases views help a person record renew, amend, or terminate. Obsidian does not give legal advice, replace a CLM, or treat a reminder as legal notice. Vault paths, backlinks, tags, Sync history, Publish, File Recovery, and Git are not a permanent file store and not legal authority.
The shared field list lives in the published Contract Register and Renewal Template. The paired Obsidian Contract Register Template is the original vault starter, YAML map, Search queries, and documented .base file. This is not an Obsidian invoice tracker and not a full document approval workflow. Approval status is a pointer only. It is also not the unpublished knowledge-cluster Document Workflow vault. If you already run the same schema in Drive, Microsoft 365, monday.com, Notion, or Airtable, the published Google Sheets contract tracker, SharePoint / Microsoft Lists contract tracker, monday.com contract tracker, Notion contract tracker, and Airtable contract tracker are the platform twins.
Who this is for
Use this when signed files already live in Drive, Box, Dropbox, or SharePoint and the immediate job is one visible Register folder in a local Obsidian vault: who owns the note, which file version is authoritative, which notice window is open, and which decision is still missing.
Prerequisites:
- One contract family for the first folder. The worked example is fictional Cedar & Quay Fabrication Ltd.
- Agreement that this is an operational register, not legal advice and not a CLM
- A named owner, written as text email and/or a quoted
[[Person]]wikilink. Obsidian has no native People type - A durable file pointer: URL plus native id and version key. A vault attachment is an optional companion, not the system of record
- A written rule for what happens when a reminder gets no reply
- Agreement that Bases formulas, Search, Tasks, Sync, plugins, Git hooks, and OS calendars never set
renewedorterminated - Agreement that Sync, Publish, and community plugins are optional. The v1 happy path is core-only and needs no paid add-on
Stay out of this first vault: clause interpretation, auto-renewal legality, e-sign send, a full approval matrix, invoice amounts, tax, PO, payment fields, and any claim that vault ACLs, Sync collaborators, Publish passwords, File Recovery, or Git history are certification.
If you still need the platform-neutral model, stay on the parent tracker. Do not copy invoice money fields into these notes. Planner lists Obsidian invoice tracker as a separate phrase with no reported data. The knowledge-cluster phrase Obsidian document management is 10-100 Volume reported and belongs to a different unpublished job. Do not steal that H1.
Keyword Planner reports Obsidian contract tracker as No reported data. This child is operator-added beyond the parent roadmap. Do not invent demand.
What Obsidian implements
The parent template defines the shared field list. This pack uses the same names so you can move data without remapping it.
| Parent piece | Obsidian twin |
|---|---|
| Field dictionary | YAML properties, same names |
| Status model | Closed text values on status |
| Duplicate key | Stored text plus a Bases or Search filter |
| Roles and exceptions | RolesAuthority and ExceptionTaxonomy notes in the pack |
| Sample records REG-CQ-2026-0914-0920 | Same fictional Cedar & Quay cases |
| Notice formulas | Stored notice_date and day-count helpers versus Config as_of |
| Approval pointer | approval_status only |
Do not rename fields for Obsidian convenience. The same names make later imports and migrations easier.
Obsidian-native additions that are not a second schema:
- YAML property types: Text, List, Number, Checkbox, Date (
YYYY-MM-DD), Date & time (ISO 8601), and Tags. Official page: Properties - Quoted wikilinks in YAML for owner, escalation, and reviewer. Official Help requires quotes around
[[Link]] - Core Templates with
{{title}},{{date}}, and{{time}}. Official page: Templates - Search
[property:value]and embeddablequeryblocks. Official page: Search - Bases, a current core plugin, for table, cards, and list views over local Markdown. Official page: Introduction to Bases
- An optional vault-attachment wikilink that is not the durable SoR
Property names share types vault-wide. If status is Text in one note, it is Text everywhere.
Notes, properties, Templates, and Bases
Pick one system of record for status. Do not keep a second live status on the PDF.
| Pattern | Use when | Status lives | File identity |
|---|---|---|---|
| Single Register folder | Internal operators, local vault | The register note | URL plus native id. Vault attachment optional |
| Folder plus Bases hub | You want a table of the same notes | The register note | Same pointers. .base files store views, not the contract |
| Core Search only | You do not want to enable Bases yet | The register note | Same pointers. [status:renewal_decision_needed] is enough for a queue |
| Optional Sync shared vault | Multi-device or up to 20 collaborators | The register note | Same pointers. Sync is paid, plan-gated, and needs_live_proof |
Bases reads files from the vault and displays their properties. Enable it under Settings → Core plugins. Views can be a .base file or a base code block. Official syntax: Bases syntax. Map view needs the community Maps plugin and is not part of this v1 pack.
Core Templates insert a snippet into the active note. They merge properties. They do not run scripts. Templater is a community plugin. It is optional, not official, and needs_live_proof if you use it.
Wikilinks, backlinks, and tags help you find notes. They are not a CLM, not an approval system, and not legal notice.
Durable identity and vault-path fragility
Path-only vault links break when someone renames a note or moves a PDF. Prefer a stack:
file_pointer_urlas a URL to the durable external storefile_native_idas the Drive, Box, Dropbox, or SharePoint file idfile_version_keyas revision, version id, etag, or content hash- Optional
files_companion_wikilinkfor a working copy in the vault
Proof gate: open the durable pointer as a named reviewer and set access_test_result. A material file replace without a new register note is missing_or_stale_file_pointer or a superseding note. Treating a vault path or attachment as the permanent SoR is vault_path_fragile.
Accepted local file types include Markdown and PDF companions. Official page: Accepted file formats. A PDF in the vault is still a companion.
Formulas and Config as_of
Bases formulas create calculated columns. A formula property does not exist in the note frontmatter. It is computed on the fly. Official page: Formulas. You can reference note properties, file properties such as file.mtime, and other formulas. today(), now(), and if() are documented. Subtracting two dates returns milliseconds.
Packaged samples use Config as_of_date at 8 September 2026 so the seven cases stay deterministic. Store notice_date, days_to_notice, days_to_expiry, and the four notice flags as YAML helpers. Use those stored helpers for process queues.
Live vaults may add Bases formulas that call today() for display. That is operational date math only. It is not legal notice and not DecisionRecord. Live today() behaviour is needs_live_proof.
notice_date is expiry_date minus notice_window_days when both exist. Blank evergreen expiry stays unknown. Do not invent a notice date.
duplicate_key is lower(counterparty_id or counterparty_name) plus | plus lower(contract_id). Obsidian has no native unique constraint. A Bases or Search filter plus a human duplicate status is the control.
These formulas and helpers are planning aids. They are not statutory interpretation or an auto-renewal rule. Formulas never write status.
If notice flags live only as Bases formulas with no stored helper and no human reminder process, record bases_formula_only_flag.
Reminders stay notify-only
A reminder is an operational nudge. It is not proof that contractual or statutory notice was validly delivered. No reminder timeout may set renewed or terminated.
| Pattern | When | What it may do | What it must not do |
|---|---|---|---|
| Manual ReminderEscalation | Always valid. Use this first | Owner reviews Notice and Decision queues. Record reminder_sent_at and evidence_ref |
Auto-renew |
| Embedded Search query | Always valid | Show [status:renewal_decision_needed] or [status:notice_window_open] |
Treat the query as access control or legal authority |
| Bases notice or decision view | Bases enabled | Filter and sort the same notes | Auto-decide renewal |
| Optional community reminder plugin | Later, if you accept third-party code | Notify only | Require the plugin for v1. Auto-renew. Hidden dependency |
| Optional OS calendar or script | Later, OS-dependent | Notify only | Auto-renew. needs_live_proof |
| Optional Sync presence | Later, paid add-on | Multi-device visibility while the app is running | Treat Sync as a reminder engine or certification |
Obsidian core is not a Coda-style or monday-style automation engine. Community plugins require Restricted mode off. They are not official products. They can read files and use the network. Official page: Community plugins. This pack does not install them and does not include their code.
Sync, Publish, Git, and plugins are not certification
Map pack roles operationally:
| Pack role | Typical local mapping |
|---|---|
| Register_Admin | Person who can edit the vault folder or optional Sync remote |
| Contract_Owner | Editor on own notes |
| Reviewer | Read or limited edit |
| Escalation_Owner | Named person who receives a failed owner ping |
| Counsel_OutOfBand | Advice stays outside the vault. Do not rename a Sync collaborator Counsel |
| Auditor_Read | Read-only |
| Unauthorized_Actor | Anyone who changes status off the matrix |
Obsidian Sync is an optional paid add-on. Cite plan categories only. Standard: 1 remote vault, 1 GB storage, 5 MB maximum file size, 1 month version history. Plus: 10 remote vaults, 10 GB to 100 GB storage, 200 MB maximum file size, 12 month version history. Shared vaults invite up to 20 collaborators. Files sync while the app is running. Do not store the local vault inside Dropbox, iCloud, OneDrive, or Google Drive while using Sync. Official pages: Obsidian Sync and Sync marketing. Marketing USD is mutable. Do not invent CAD prices. Recheck on publish day.
Obsidian Publish hosts selected notes as a website, with an optional password. Official page: Obsidian Publish. Password protection is not SoD certification. Do not publish a confidential contract register.
File Recovery is a core plugin for local snapshots. It is device-scoped. Official core-plugin list: Core plugins. Git is an external backup. Neither is certified legal version control or valid contractual notice. Keep DecisionRecord. Treating Git as audit certainty is git_history_overclaim. Treating Sync or Publish as certification is sync_publish_certification_overclaim.
Live Sync, Publish, plugin, OS, collaboration, and automation behaviour is needs_live_proof. No live vault was created in this pass.
Worked example
Fictional Cedar & Quay Fabrication Ltd keeps vendor MSA CTR-CQ-MSA-2024-017 with Northshore Logistics.
- Avery creates
Register/REG-CQ-2026-0914.mdfrom the core template. Owner is[[Avery Chen]]. Status isactive. The note stores a Drive URL, native idFICTION-CQ-MSA-017, and version key1.0|rev-017-c. Effective date 1 October 2024. Expiry 30 September 2027. Notice window 60 days. Stored notice date 1 August 2027. Against Config as_of 8 September 2026, days to notice is 327 and days to expiry is 387. No exception. - A nearer copy,
REG-CQ-2026-0915, uses expiry 31 October 2026. Stored notice date 1 September 2026. Status becomesnotice_window_open. Avery is due a notify-only reminder. Riley is the escalation target if there is no ack. REG-CQ-2026-0916isactivein spirit but the durable URL and ids are blank. Only a vault PDF wikilink exists. Status isexception_holdwithmissing_or_stale_file_pointer. Renewal stays blocked.- A second intake for Northshore plus the same contract id becomes
REG-CQ-2026-0917with statusduplicate. It links canonicalREG-CQ-2026-0914. There is no second renewal track. - A teammate not on the matrix sets a note to
renewed. Register_Admin reverts it toexception_holdwithunauthorized_status_changeand writes DecisionRecord. REG-CQ-2026-0919expired on 15 August 2026 with no renew, amend, or terminate note. Status isexpiredplusexpired_without_renewal_decision.REG-CQ-2026-0920has a reminder marked sent on 31 August 2026. Riley is unreachable on 7 September 2026. Status staysrenewal_decision_neededwithreminder_escalation_failed. If the path depended on a plugin or Sync being online, also recordplugin_dependency_unprovenorsync_or_offline_gap. The note does not becomerenewed.
These seven notes are in the download. They are not customer results.
Views and searches
Use either core Search or Bases. You do not need both.
| Queue | Core Search | Bases view in the pack |
|---|---|---|
| Active | [status:active] tag:#contract-register |
Table named Active |
| Notice window | [status:notice_window_open] |
Table named Notice window |
| Decision needed | [status:renewal_decision_needed] |
Table named Decision needed |
| Exceptions | [exception_code] |
Table named Exceptions |
| Duplicates | group or search duplicate_key |
Table named Duplicates |
| Missing pointer | [file_pointer_url:null] |
Table named Missing durable pointer |
Search can be embedded with a query code block. Official Search Help documents [property:value], tag:, path:, boolean operators, and regex. Excluded files do not appear.
The shipped Contract Register.base uses the official YAML sections: filters, formulas, properties, and views. Global filter is file.inFolder("Register") and file.hasTag("contract-register"). Live today() formulas are labeled as display aids. They are not stored DecisionRecord.
Decision table
| Situation | Automatic | Review | Human only |
|---|---|---|---|
| New note from the template | Template insert | Completeness | Owner assignment |
| Notice window reached | Stored flag or Bases display | Queue review | Reminder send |
| Duplicate_key match | Filter or grouped view | Confirm it is the same contract | Mark duplicate |
| Missing URL or native id | Exception flag | Access test | Restore the pointer before a decision |
Unauthorized renewed |
None | DecisionRecord | Revert or hold |
| Renew, amend, or terminate | None | Counsel out of band if policy requires | Named owner writes decision_note |
| Reminder timeout | None | Escalation | Keep renewal_decision_needed |
Human gates
A person retains these decisions:
- Who owns the note before it goes
active - Whether the durable file pointer is good enough
- Whether two notes are the same contract
- Whether to renew, amend, or terminate
- Whether counsel must review out of band
- Whether optional Sync, Publish, Git, or a community plugin is even allowed
A vault cannot silently approve legal sufficiency. A Sync merge is not an approval. A Publish password is not a permission model. A Git commit is not contractual notice.
Failure paths
| Failure | Expected status | Renewal decision |
|---|---|---|
| Missing or stale file pointer | exception_hold + missing_or_stale_file_pointer |
Blocked |
| Vault path used as SoR | exception_hold + vault_path_fragile |
Blocked until durable pointer restored |
| Duplicate counterparty and contract id | duplicate |
No second track |
Unauthorized status change to renewed |
exception_hold + unauthorized_status_change |
Revert or hold |
| Expired without a decision | expired + expired_without_renewal_decision |
Escalation required |
| Reminder or escalation failed | renewal_decision_needed + reminder_escalation_failed |
Still required; no auto-renew |
| Bases formula-only flags | Process exception | Manual process; no auto-renew |
| Plugin or Sync path unproven | Keep the decision open | Fall back to the human process |
| Confidential notes sent to Publish | Process exception | Still required |
Formula or plugin sets renewed |
Out of scope | Remove that action |
Test cases
The seven Cedar & Quay cases are operational fixtures. They are not customer stories and they do not measure accuracy.
| Case | Input | After the control |
|---|---|---|
| Clean active | URL and native id present | active, no exception |
| Approaching notice | Same family, nearer expiry | notice_window_open |
| Missing pointer | Blank URL and ids, or vault-path-only SoR | Decision blocked |
| Duplicate | Second Northshore + same contract id | duplicate; canonical continues |
| Unauthorized change | Teammate marks renewed |
Exception, revert or hold |
| Expired, no decision | Expiry 15 August 2026 | expired plus escalation |
| Failed handoff | Reminder sent, Riley unreachable, or plugin/Sync gap | Decision still open |
The Obsidian Contract Register Template walks each case.
What to measure
Record notes with a URL plus native id and version key, active notes with an owner, notice-window notes with a scheduled reminder, blocked unauthorized status changes, suppressed duplicates, hours from reminder to ack, and whether the vault uses Bases, Search only, or an optional later reminder path. Put your numbers in the pack. Keep them as operational counts, not as a savings, accuracy, or ranking result.
There is no live production Obsidian contract-tracker metric here, and no Flowgrammer customer case. Keyword Planner reports Obsidian contract tracker as No reported data. Adjacent automation and document-management phrases stay different jobs. Do not invent a volume.
How to use the Obsidian template
The paired asset is an original Markdown vault starter plus CSV and XLSX portability companions. It is not an official Obsidian gallery or marketplace listing, not a CLM, and not legal advice.
- Read Setup and acknowledge the legal-boundary, Bases-formula, core-vs-optional, no-gallery, and knowledge-workflow caveats.
- Copy
vault/into a local Obsidian vault. Official vault help: Create a vault. - Enable core Templates, Search, and Bases if you want the hub views. Set the Templates folder to
Templates. - Confirm the inherited field list and the closed status model.
- Walk Case01 through Case07. Confirm case 3 blocks renewal and case 7 does not auto-renew.
- Create or open the Search queries and the shipped
.baseviews. - Reminders stay notify-only. Record timestamps by hand. Optional Sync, plugins, OS calendars, Git, and scripts stay in
optional/and areneeds_live_proof.
CSV import is a portability path, not a live Obsidian importer. Official import help covers other apps: Import notes. Rebuild YAML types after any spreadsheet round-trip.
Realistic limitations
- A checkbox, Search query, Sync ping, or community-plugin reminder is not proof that contractual notice was validly delivered.
auto_renew_flag_operationalis an operations flag. It does not mean the clause is enforceable.- Vault ACLs, Sync collaborators, Publish passwords, File Recovery, and Git history are not certification.
- Bases formulas are not stored in frontmatter. Prefer stored helpers for process-critical flags.
- Sync and Publish are paid add-ons with mutable marketing prices. Cite plan categories and recheck on publish day. Do not invent CAD prices.
- There is no native unique constraint on counterparty plus contract id.
- Community plugins are not official Obsidian products. Restricted mode is on until you turn it off.
- This package is a vault starter. No live vault was created or verified in this pass. Do not treat the download as an official gallery or marketplace listing.
- This guide does not rank CLM or e-sign vendors, and it is not a live Obsidian product walkthrough.
- A signature-complete event is not a renewal decision. Invoice money fields belong on a different page. The knowledge Document Workflow vault is a different job.
Next step
Download the Obsidian Contract Register Template and copy the vault folder. Keep the parent Contract Tracker open while you fill owner, dates, URL plus native id, and the seven cases.
If owners, notice windows, or the destination vault are still unclear, start with an AI Success Audit. If one contract family, named owners, and one Obsidian register folder are already defined, book a fit call to scope an AI Automation Systems build.
Sources
- Flowgrammer, "Contract Tracker", Flowgrammer, accessed 2026-09-08, /insights/contract-tracker
- Flowgrammer, "Contract Register and Renewal Template", Flowgrammer, accessed 2026-09-08, /resources/contract-tracker-template
- Flowgrammer, "Document Approval Workflow", Flowgrammer, accessed 2026-09-08, /insights/document-approval-workflow
- Flowgrammer, "Google Sheets Contract Tracker", Flowgrammer, accessed 2026-09-08, /insights/google-sheets-contract-tracker
- Flowgrammer, "SharePoint / Microsoft Lists Contract Tracker", Flowgrammer, accessed 2026-09-08, /insights/sharepoint-lists-contract-tracker
- Flowgrammer, "monday.com Contract Tracker", Flowgrammer, accessed 2026-09-08, /insights/monday-contract-tracker
- Flowgrammer, "Notion Contract Tracker", Flowgrammer, accessed 2026-09-08, /insights/notion-contract-tracker
- Flowgrammer, "Airtable Contract Tracker", Flowgrammer, accessed 2026-09-08, /insights/airtable-contract-tracker
- Flowgrammer, "Document Processing Automation: What to Automate First", Flowgrammer, accessed 2026-09-08, /insights/document-processing-automation
- Obsidian, "Properties", Obsidian Help, accessed 2026-09-08, https://help.obsidian.md/properties
- Obsidian, "Introduction to Bases", Obsidian Help, accessed 2026-09-08, https://help.obsidian.md/bases
- Obsidian, "Bases syntax", Obsidian Help, accessed 2026-09-08, https://help.obsidian.md/bases/syntax
- Obsidian, "Formulas", Obsidian Help, accessed 2026-09-08, https://help.obsidian.md/bases/formulas
- Obsidian, "Templates", Obsidian Help, accessed 2026-09-08, https://help.obsidian.md/plugins/templates
- Obsidian, "Search", Obsidian Help, accessed 2026-09-08, https://help.obsidian.md/plugins/search
- Obsidian, "Core plugins", Obsidian Help, accessed 2026-09-08, https://help.obsidian.md/plugins/overview
- Obsidian, "Community plugins", Obsidian Help, accessed 2026-09-08, https://help.obsidian.md/extending/community-plugins
- Obsidian, "Obsidian Sync", Obsidian Help, accessed 2026-09-08, https://help.obsidian.md/sync/introduction
- Obsidian, "Obsidian Sync", Obsidian, accessed 2026-09-08, https://obsidian.md/sync
- Obsidian, "Obsidian Publish", Obsidian Help, accessed 2026-09-08, https://help.obsidian.md/publish/introduction
- Obsidian, "Obsidian Publish", Obsidian, accessed 2026-09-08, https://obsidian.md/publish
- Obsidian, "Create a vault", Obsidian Help, accessed 2026-09-08, https://help.obsidian.md/getting-started/create-vault
- Obsidian, "Accepted file formats", Obsidian Help, accessed 2026-09-08, https://help.obsidian.md/files/accepted-formats
- Docusign, "Contract Lifecycle Management Software | Docusign CLM", Docusign, accessed 2026-09-08, https://www.docusign.com/products/clm
- Adobe, "Acrobat Sign", Adobe, accessed 2026-09-08, https://www.adobe.com/acrobat/business/sign.html
Frequently asked questions
What is an Obsidian contract register?
It is the published contract register implemented as local Markdown notes: ownership, status, durable file identity, dates, and operational notice flags so a person can record an explicit renew, amend, or terminate decision.
Is an Obsidian contract register a CLM?
No. Contract lifecycle management products handle negotiation, clause libraries, and repository workflows. An Obsidian register tracks operational ownership, dates, and notice flags.
Is this the same as an Obsidian invoice tracker?
No. Invoice trackers focus on amounts, POs, and payment states. This register uses the parent contract field map and must not share invoice money schema. Planner lists `Obsidian invoice tracker` as a separate phrase with no reported data.
Is this the knowledge Document Workflow vault?
No. The boarded knowledge-cluster page owns `Obsidian document management`. That job is document-to-knowledge, not a contract register. This child does not replace it and does not link it while it stays unpublished.
Do I need community plugins?
No for v1. Prefer core Properties, Templates, Search, and Bases. Plugins are optional, not official, and `needs_live_proof`.
Are Bases formulas stored in the note?
No. Official Help says formula properties are computed in views and do not exist in frontmatter. Keep DecisionRecord in stored properties or the note body.
Is Sync required?
No. Sync is an optional paid add-on for multi-device or shared vaults. It is not security certification. Cite plan categories only.
Does Git make this audit-proof?
No. Git may help backup and review. It is not certified legal version control or audit certainty. Keep DecisionRecord and the external file version key.
Can reminders auto-renew contracts?
No. Humans decide renew, amend, or terminate. Reminders are operational only.
Should we publish the register with Obsidian Publish?
Not for confidential contracts. Publish is for selected public or playbook notes. A password is not a certified access model.
Where is the template listed officially?
Flowgrammer ships original downloadable assets. Do not claim an official Obsidian gallery or community-plugin marketplace listing without a verified URL.