Your transaction data never sits on our servers. Here's the complete data flow:

What this means: Transaction data exists in our backend for less than 1 second during sync. No persistence, no storage, no logs of your financial activity.

Encrypted using Fernet (AES-128-CBC + HMAC). Only decrypted during sync operations.

Your email or stable Google ID. Used to restore your Plaid Items across devices.

Sheet ID and title. Used to write transactions to the correct destination.

Item IDs, institution IDs, sync cursors, and timestamps. No transaction content.

Stored in Chrome's secure storage (chrome.storage.sync). Tokens are never persisted on our servers. They expire after 60 minutes and are automatically deleted.

Your subscription tier (FREE/BASIC/PRO) to enforce feature limits and data retention policies. Not encrypted as it's not sensitive data.

Transaction Line Items

No amounts, merchants, categories, or dates

Account Balances

Your current or historical balances are never stored

Bank Credentials

Handled exclusively by Plaid, never seen by SheetLink

Google OAuth Tokens

Remain in your browser, never sent to our servers

Sheet Contents

We write data but never read your spreadsheets

SheetLink uses industry-standard JWT (JSON Web Token) authentication to securely identify users and enforce subscription tier limits.

  • Cryptographic signatures: Tokens can't be tampered with
  • 60-minute expiry: Limited validity window
  • HTTPS only: Encrypted transmission
  • Stateless design: No server-side session tracking
  • Google OAuth: Trusted identity provider
  • ID token verification: Backend validates with Google
  • Prevents impersonation: Can't fake user identity
  • Re-auth on expiry: Continuous security validation

The following endpoints require JWT authentication:

  • /tier/status - Get subscription tier and features
  • /plaid/sync - Sync transactions with tier-based field filtering
  • /plaid/backfill - Fetch historical data within tier limits

Tier-Based Access Control: Backend enforces limits based on authenticated user's subscription tier. FREE users can't access PRO features even if they modify the extension code.

The Chrome extension requests only what's needed to function:

storage

Store user preferences and connection status

identity

Google OAuth for Sheets access

tabs

Open Plaid Link flow in new tab

We do NOT request: Browsing history, access to all websites, clipboard access, or any unnecessary permissions.

  • CORS restrictions: Only SheetLink domains and extension ID allowed
  • Rate limiting: All endpoints protected against abuse
  • Input validation: All user input sanitized and validated
  • Privacy middleware: Sensitive data suppressed from logs
  • Sheet permission verification: Tests write access before connecting
  • HTTPS/TLS 1.2+: All communication encrypted in transit
  • Handles all bank authentication
  • SOC 2 Type II certified
  • Trusted by thousands of companies
Learn more about Plaid Security →
  • OAuth 2.0 authentication
  • Sheets API for write-only access
  • Industry-leading security standards
Learn more about Google Security →

We take security seriously. If you discover a vulnerability, please report it responsibly:

Email: security@sheetlink.app

Response time: Within 48 hours

Disclosure: We'll coordinate responsible disclosure with you

Please do not publicly disclose the vulnerability before we've had time to patch it. We acknowledge security researchers in our release notes (with permission).