tailormade-eu28 downloadsExport outstanding tasks to CSV for time tracking integration (e.g. ManicTime).
Automatically export outstanding tasks from your Obsidian vault to CSV for ManicTime integration.
An Obsidian plugin that monitors your customer project files and automatically exports outstanding tasks to CSV format. Integrates seamlessly into your Obsidian workflow with command palette support, automatic file watching, and configurable export options.
This is a TypeScript port of the markdown-task-export C# console application, adapted for Obsidian with enhanced UI features.
Plugin not yet published to community store
main.js, manifest.json, and styles.css to:VaultFolder/.obsidian/plugins/task-export-to-csv/
# Clone repository
git clone https://github.com/tailormade-eu/obsidian-task-export-plugin.git
cd obsidian-task-export-plugin
# Install dependencies
npm install
# Build plugin
npm run build
# For development with auto-reload
npm run dev
Customers)Ctrl/Cmd + P → "Export Outstanding Tasks"outstanding_tasks.csv in your vault rootVia Command Palette:
Ctrl/Cmd + PVia Ribbon Icon:
.md file in Customers folderView last export time and status in bottom status bar:
| Setting | Description | Default | Type |
|---|---|---|---|
| Output Path | CSV file location (relative to vault) | outstanding_tasks.csv |
Text |
| Customers Folder | Root folder with customer files | Customers |
Text |
| Auto Export | Enable automatic export | false |
Toggle |
| Export on Save | Trigger on file save | true |
Toggle |
| Export on Modify | Trigger on any modification | false |
Toggle |
| Show Notifications | Display export notifications | true |
Toggle |
| CSV Delimiter | Choose comma or semicolon delimiter | , (comma) |
Dropdown |
| Compress Levels | Remove empty hierarchy columns | false |
Toggle |
| Include Header | Include CSV header row in output | true |
Toggle |
| Debounce Delay | Wait time after changes (seconds) | 3 |
Number |
Note for European Users: If Excel doesn't open the CSV correctly, try changing the delimiter to semicolon in settings. Many European locales use semicolon as the standard CSV delimiter since comma is used as the decimal separator.
Settings → Plugin Options → Task Export Tool
| Command | Description | Default Hotkey |
|---|---|---|
| Export Outstanding Tasks | Manually trigger export | None |
| Toggle Auto-Export | Enable/disable automatic export | None |
| Open Export Settings | Jump to plugin settings | None |
Assign hotkeys via: Settings → Hotkeys → Search "Task Export"
YourVault/
├── Customers/ ← Configured folder
│ ├── Customer A/
│ │ ├── Project 1.md
│ │ └── Project 2.md
│ └── Customer B/
│ └── SubFolder/
│ └── Project X.md
├── outstanding_tasks.csv ← Output file
└── .obsidian/
└── plugins/
└── task-export-to-csv/
Standard Markdown task checkboxes:
## Section
- [ ] Outstanding task
- [x] Completed task (ignored)
- [ ] Task with sub-items
- [ ] Sub-task (nested)
### Subsection
- [ ] Another task
CSV with dynamic columns (comma-separated by default, configurable to semicolon):
CustomerName,Level1,Level2,Level3,Task
Customer A,Project 1,Section,Outstanding task
Customer A,Project 1,Section,Task with sub-items
Customer A,Project 1,Section,Sub-task (nested)
Customer A,Project 1,Section,Subsection,Another task
Notes:
Level1..LevelN columns for hierarchical path data. These contain, in order: any subfolder segments under the customer folder, then the project (markdown file) name, followed by markdown header segments and parent task text as present.Compress Levels is enabled the CSV will omit empty trailing Level columns for each row; when disabled rows are padded to the maximum level depth.;) in the plugin settings for better compatibility with European Excel versions.Example
For a file under the Customers folder such as Customers/<CustomerName>/<Subfolder...>/<ProjectName>.md containing a top-level task in a Section, a produced CSV row will look like:
CustomerName,Level1,Level2,Task
<CustomerName>,<Subfolder>,<ProjectName>,Section - Outstanding task
obsidian-task-export-plugin/
├── src/
│ ├── main.ts # Plugin entry point
│ ├── settings.ts # Settings interface
│ ├── exporter.ts # Export logic
│ ├── parser.ts # Markdown parsing
│ ├── csv-writer.ts # CSV generation
│ ├── file-watcher.ts # File monitoring
│ └── types.ts # TypeScript interfaces
├── manifest.json # Plugin metadata
├── package.json # Dependencies
├── tsconfig.json # TypeScript config
├── esbuild.config.mjs # Build config
└── README.md
app.vault.getMarkdownFiles() - File enumerationapp.vault.read(file) - File readingapp.vault.adapter.write() - CSV writingapp.workspace.on('file-modified') - File watchingaddCommand() - Command registrationaddSettingTab() - Settings UIaddRibbonIcon() - Sidebar iconaddStatusBarItem() - Status barnpm install
# Development build with watch mode
npm run dev
# Production build (minified)
npm run build
# Type checking
npm run check
# Lint code
npm run lint
# Run tests
npm test
# Run tests with coverage
npm run test:coverage
Install Hot Reload Plugin for automatic plugin reload during development.
Ctrl/Cmd + Shift + Iconsole.log() in codeCtrl/Cmd + Shift + I.obsidian/plugins/task-export-to-csv/:main.jsmanifest.jsonstyles.css (optional)manifest.json.md formatContributions welcome!
git checkout -b feature/amazing-featuregit commit -m 'Add amazing feature'git push origin feature/amazing-featureMIT License - See LICENSE file for details
Created for personal use in managing customer project tasks with time tracking integration.