Privacy Policy
Last Updated: July 23, 2026
Journalit is designed with privacy as a core principle. Your journal files live in your Obsidian vault, and features that send or store data on Journalit servers are optional and described below.
Overview
This Privacy Policy covers both the Journalit website (journalit.co) and the Journalit Obsidian plugin. We are committed to protecting your privacy and being transparent about what data we collect.
What We Collect
Website (journalit.co)
When you use our website:
- Account Information - Email address and name from your OAuth provider (Google, GitHub, Discord)
- Session Data - Authentication tokens stored in secure cookies
- Payment Information - Processed by Stripe (we never see your full card details)
- Operational Telemetry - Service-health metrics and essential error traces used to keep the web app reliable. This does not include your trading journal content.
- Referral Attribution Data - If you choose to credit a referring partner, we record the partner and link, landing path, consent version and time, and a random-token hash needed to attribute a later subscription. We do not store IP or User-Agent hashes in the affiliate click record.
For a detailed breakdown, see Data, privacy and offline.
Obsidian Plugin
The plugin operates locally by default. No data is transmitted unless you enable sync features:
- Local Data - Manual trades, notes, attachments, and journal files stay in your Obsidian vault
- Plugin Settings - Most settings are stored locally in your vault's plugin folder. Network-backed features transmit only the settings and identifiers described below.
- Cache Data - Query results and indexes for performance, never transmitted
Optional Sync Features
When you enable backend integration:
- Email Address - For authentication via verification code
- MetaTrader Trades - Synced trade data (symbol, times, prices, P&L)
- Vault Identifier - Random opaque identifier for sync and projection coordination. It does not contain your vault path or name.
- MT Account Info - Account IDs and display names
Optional Tradovate Sync
Tradovate Sync is an optional Pro feature. Authorization and connection management take place on Journalit.co. You may authorize multiple independent Tradovate identities. OAuth credentials, raw numeric provider identifiers, and provider tokens are encrypted and stored by the Journalit backend. They are never returned to the website UI or plugin. The Tradovate username for a connection may be shown only to its authenticated Journalit owner to distinguish their connections.
When you configure or run Tradovate Sync, the plugin sends:
- Selected backend account records and history boundaries
- Random vault, client-installation, and operation identifiers used to coordinate synchronization and projection
- The plugin version
- Privacy-safe synchronization event codes, timestamps, and aggregate counts
- Projection acknowledgements containing canonical trade IDs, versions, local paths for written notes, and success or failure codes
The anonymous client-installation identifier is stored in Obsidian's device-local storage rather than the vault settings file. Client diagnostics do not include note contents, frontmatter, account names, symbols, prices, quantities, P&L, raw exception messages, stack traces, response bodies, or Tradovate credentials and tokens.
The backend stores connection-scoped account configuration, normalized provider source data, canonical synchronized trades, durable sync jobs, reconciliation state, projection state, and restricted diagnostics required to operate and support the feature. Disconnecting one connection preserves cloud data. Deleting its cloud data removes only provenance owned by that connection, and a canonical trade is preserved while another source still owns it.
Optional Trade Import
Trade Import is an optional Pro feature that processes selected broker exports on Journalit backend servers. It is not part of the offline manual journalling workflow.
- Uploaded Files - When you choose to import a broker export, the selected CSV, XLSX, XLS, HTML, or broker statement file is uploaded for processing.
- Possible File Contents - Broker exports may contain account identifiers, trade history, symbols, timestamps, prices, quantities, fees, balances, and P&L.
- Import Context - The plugin may send the selected account name, broker/file/mapping choices, custom field definitions and saved options, and limited local open-trade context needed for broker-specific matching such as IBKR open-position matching.
- Processing Behaviour - Raw files are processed for the requested import and are not stored by default. The backend returns preview data; final note creation remains local in your Obsidian vault.
- Control - Trade Import requires sign-in and an active Pro subscription before upload. The plugin shows an upload acknowledgement before processing each view session.
What We Do NOT Collect
- Manual trades you create in Obsidian
- Trade notes or personal analysis
- Screenshots or attachments
- Contents of your Obsidian vault
- Third-party advertising trackers or ad-network profiles
- Your trading journal content for marketing analytics
- Trading account passwords or API keys
- General plugin usage analytics or behavioural telemetry unrelated to the operational diagnostics disclosed above
How We Use Your Data
- Authentication - To verify your identity and maintain your session
- Trade Synchronization - To process MetaTrader and Tradovate records and project synchronized trades into your Obsidian vault
- Trade Import Processing - To analyse selected broker exports, generate import previews, apply broker-specific matching logic, and return structured preview data to the plugin
- Subscription Management - To manage your premium subscription status
- Security - FTP login attempts are logged for abuse prevention
- Referral Attribution and Fraud Prevention - To understand which referral link led to a subscription sign-up or subscription checkout, enforce affiliate program rules such as self-referral blocking, and reconcile internal commission records
Data Security
- All network communications use HTTPS (TLS 1.2+)
- Authentication tokens encrypted locally with AES-256-GCM
- Passwords hashed with bcrypt
- Database protected by Row-Level Security - users can only access their own data
Third-Party Services
OAuth Providers
We use Google, GitHub, and Discord for authentication. Their privacy policies apply to data they collect during sign-in.
Stripe (Payments)
Subscription and one-time payments are processed by Stripe. We receive billing and subscription status updates but never see your full payment details.
Email Delivery
Verification codes are sent via email service provider. Only your email address and verification code are transmitted.
Tradovate
If you connect one or more Tradovate identities, Journalit communicates with Tradovate to authorize each connection and retrieve the account and trading data needed for synchronization. Tradovate's privacy policy applies to its services.
Website Analytics
We use Google Analytics on public website and documentation pages to understand page visits and selected actions such as starting signup or opening a download link. In the UK, EEA, Switzerland, and locations we cannot classify, Google Analytics does not load unless you allow it. It does not run on login, checkout, billing, or authenticated application pages. We do not send account, trading, or payment data to Google.
When you deliberately start signup, we temporarily store the current page, a source category, the referring hostname, and allowlisted campaign fields. The anonymous attempt expires after 30 minutes. If a new account is created, that limited context is attached to the account so we can measure signup, trial, activation, and subscription cohorts using our own records.
Data Retention
- Account Data - Stored until you request deletion
- Synced Trades - Stored until account deletion
- Tradovate Synchronization Data - Connected OAuth connections, account configuration, normalized source records, canonical trades, jobs, reconciliation state, and projection state are stored until you delete the relevant connection data or your Journalit account. Connection-scoped deletion preserves canonical trades that still have another source.
- Tradovate Diagnostic Evidence - Encrypted replay bundles and privacy-safe client and job events expire after 14 days. Diagnostic access is restricted and audited.
- Trade Import Files - Processed for the requested import and not stored by default
- Session Tokens - Expire after 30 days
- Authentication Codes - Deleted within 24 hours
- Uncompleted Signup Attempts - Deleted after 30 minutes
- Security Logs - Older entries periodically cleaned
- Referral Attribution Records - Kept only as long as reasonably necessary to reconcile affiliate referrals, investigate abuse, and maintain accounting records
Your Rights
Data Access
All your local data is accessible in your Obsidian vault. For backend data, contact us for an export.
Data Deletion
- Local Data - Delete by removing the plugin or deleting files
- Backend Data - Contact contact@journalit.co for complete account deletion
Opt-Out
You can use the plugin 100% offline with no network features. Disable network-backed features and disconnect broker integrations to stop their data transmission.
Cookies
We use a small number of first-party cookies:
- Session Cookie - Maintains your login state (expires when you sign out or after 30 days)
- Referral Attribution Cookie - Set for 30 days only after you explicitly choose “Credit partner” on an affiliate link. It lets us attribute a later subscription to that partner and does not change your price. Continuing without attribution creates no individual affiliate click or cookie.
- Analytics Preference Cookie - Remembers whether you allowed or declined website analytics for up to 180 days
- Google Analytics Cookies - Set only when website analytics is allowed; these distinguish website visits and can be removed by switching analytics off above
We do not use third-party advertising cookies, retargeting cookies, or ad-network trackers.
Children's Privacy
Journalit is not intended for users under 18 years of age. We do not knowingly collect data from minors.
Changes to This Policy
We will notify users of material changes through:
- Plugin update notes
- Discord community announcements
- GitHub release notes
Contact
Privacy questions or concerns:
- Email: contact@journalit.co
- Discord: Join our server
Compliance
This service adheres to:
- Obsidian Developer Policies
- Obsidian Plugin Guidelines
- GDPR principles (data minimization, purpose limitation, transparency)