Flowgrammer

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 renewed or terminated
  • 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 embeddable query blocks. 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:

  1. file_pointer_url as a URL to the durable external store
  2. file_native_id as the Drive, Box, Dropbox, or SharePoint file id
  3. file_version_key as revision, version id, etag, or content hash
  4. Optional files_companion_wikilink for 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.

  1. Avery creates Register/REG-CQ-2026-0914.md from the core template. Owner is [[Avery Chen]]. Status is active. The note stores a Drive URL, native id FICTION-CQ-MSA-017, and version key 1.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.
  2. A nearer copy, REG-CQ-2026-0915, uses expiry 31 October 2026. Stored notice date 1 September 2026. Status becomes notice_window_open. Avery is due a notify-only reminder. Riley is the escalation target if there is no ack.
  3. REG-CQ-2026-0916 is active in spirit but the durable URL and ids are blank. Only a vault PDF wikilink exists. Status is exception_hold with missing_or_stale_file_pointer. Renewal stays blocked.
  4. A second intake for Northshore plus the same contract id becomes REG-CQ-2026-0917 with status duplicate. It links canonical REG-CQ-2026-0914. There is no second renewal track.
  5. A teammate not on the matrix sets a note to renewed. Register_Admin reverts it to exception_hold with unauthorized_status_change and writes DecisionRecord.
  6. REG-CQ-2026-0919 expired on 15 August 2026 with no renew, amend, or terminate note. Status is expired plus expired_without_renewal_decision.
  7. REG-CQ-2026-0920 has a reminder marked sent on 31 August 2026. Riley is unreachable on 7 September 2026. Status stays renewal_decision_needed with reminder_escalation_failed. If the path depended on a plugin or Sync being online, also record plugin_dependency_unproven or sync_or_offline_gap. The note does not become renewed.

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.

  1. Read Setup and acknowledge the legal-boundary, Bases-formula, core-vs-optional, no-gallery, and knowledge-workflow caveats.
  2. Copy vault/ into a local Obsidian vault. Official vault help: Create a vault.
  3. Enable core Templates, Search, and Bases if you want the hub views. Set the Templates folder to Templates.
  4. Confirm the inherited field list and the closed status model.
  5. Walk Case01 through Case07. Confirm case 3 blocks renewal and case 7 does not auto-renew.
  6. Create or open the Search queries and the shipped .base views.
  7. Reminders stay notify-only. Record timestamps by hand. Optional Sync, plugins, OS calendars, Git, and scripts stay in optional/ and are needs_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_operational is 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

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.