Skip to main content
SnapTrade provides access to 9,000+ brokerage integrations, enabling users to connect their investment accounts, track holdings, and sync trading activity. It’s the preferred solution for connecting retirement accounts, taxable brokerages, and international investment platforms.

What SnapTrade Connects To

SnapTrade supports:
  • US Retirement Accounts: 401(k), 403(b), 457(b), IRA, Roth IRA, Roth 401(k), SEP IRA, SIMPLE IRA
  • Canadian Retirement Accounts: TFSA, RRSP, RRIF, RESP, RDSP, LIRA, LRSP, LIF, RLSP, PRIF
  • Taxable Brokerage Accounts: Individual, joint, margin, cash, non-registered accounts
  • Cryptocurrency: Crypto exchange accounts
  • 9,000+ Brokerages: Including major platforms like Fidelity, Schwab, Vanguard, Interactive Brokers, TD Ameritrade, Questrade, and more
Source: app/controllers/snaptrade_items_controller.rb:490

Prerequisites

1

Create a SnapTrade Account

Sign up for a SnapTrade partner account:
  1. Visit https://snaptrade.com
  2. Request access to the Partner API
  3. Complete partner onboarding
2

Get API Credentials

From your SnapTrade partner dashboard:
  1. Navigate to API Settings
  2. Copy your Client ID
  3. Copy your Consumer Key (secret)
  4. Note: Each user will have their own user_id and user_secret generated at runtime
3

Review Pricing

SnapTrade typically charges:
  • Per-user fees
  • Per-connection fees
  • May have minimum commitments
Contact SnapTrade for specific pricing for your use case.

Configuration

Users provide their own SnapTrade credentials in the application:
Unlike Plaid, SnapTrade credentials are stored per-user in Sure. Each family can configure their own SnapTrade connection with their own Client ID and Consumer Key.

Adding SnapTrade Credentials

1

Navigate to Providers

Go to Settings → Providers in your Sure instance.
2

Configure SnapTrade

  1. Find the SnapTrade section
  2. Click “Add SnapTrade Configuration”
  3. Enter your Client ID
  4. Enter your Consumer Key
  5. Optionally set a custom name
  6. Save
3

User Registration

Sure automatically registers a SnapTrade user when you save credentials:
  • Generates a unique user_id and user_secret
  • Stores them encrypted in the database
  • These are used for all subsequent API calls
Source: app/controllers/snaptrade_items_controller.rb:19

Credential Security

SnapTrade credentials are encrypted using ActiveRecord Encryption:
# Source: app/models/snaptrade_item.rb:19
encrypts :client_id, deterministic: true
encrypts :consumer_key, deterministic: true
encrypts :snaptrade_user_secret  # Non-deterministic for max security

Connecting a Brokerage Account

1

Open Connection Portal

  1. Navigate to Settings → Providers
  2. Find your SnapTrade connection
  3. Click “Connect Brokerage”
2

SnapTrade OAuth Flow

You’ll be redirected to SnapTrade’s connection portal:
  1. Search for your brokerage by name
  2. Enter your brokerage login credentials
  3. Complete any multi-factor authentication
  4. Grant read-only access to SnapTrade
3

Callback to Sure

After successful connection:
  • You’re redirected back to Sure
  • Automatic sync begins to fetch accounts
  • You’ll see “Accounts need setup” notification
4

Setup Accounts

  1. Click “Accounts need setup” or navigate to setup page
  2. Review discovered brokerage accounts
  3. Select which accounts to link
  4. Choose account types (Investment or Crypto)
  5. Set sync start date for each account
  6. Click “Link Selected Accounts”
Source: app/controllers/snaptrade_items_controller.rb:107

Account Type Mapping

SnapTrade automatically infers Sure account types based on brokerage account types:
# Source: app/controllers/snaptrade_items_controller.rb:490
Tax-Advantaged AccountsInvestment:
  - TFSA, RRSP, RRIF, RESP, RDSP, LIRA, LRSP, LIF, RLSP, PRIF
  - 401k, 403b, 457b, IRA, Roth IRA, Roth 401k, SEP IRA, SIMPLE IRA
  - Pension, Retirement, Registered

Standard BrokerageInvestment:
  - Margin, Cash, Non-registered, Individual, Joint

CryptocurrencyCrypto:
  - Crypto exchange accounts

Data Syncing

What Gets Synced

Holdings & Positions:
  • Security symbols and names
  • Quantity owned
  • Current market value
  • Cost basis (when available)
  • Asset class and type
Account Balances:
  • Total account value
  • Cash balance
  • Buying power (for margin accounts)
  • Multi-currency support
Investment Activities:
  • Buy/sell transactions
  • Dividends and interest
  • Fees and commissions
  • Corporate actions
  • Historical activity
Brokerage Metadata:
  • Brokerage name and logo
  • Account type and number
  • Institution information

Sync Frequency

  • Manual Sync: Click sync button on SnapTrade connection or individual accounts
  • Automatic Sync: Configure scheduled syncs (daily, weekly, etc.)
  • Post-Connection: Automatic sync triggers after linking new accounts
Source: app/controllers/snaptrade_items_controller.rb:96
SnapTrade does not provide real-time webhooks like Plaid. Syncs are always initiated by Sure (manual or scheduled).

Activities Fetching

SnapTrade fetches investment activities (trades, dividends, etc.) asynchronously:
# Source: app/models/snaptrade_item.rb:180
def syncing?
  super || snaptrade_accounts.where(activities_fetch_pending: true).exists?
end
The UI shows a “syncing” indicator until all activities are fully imported.

Managing Connections

Viewing Connected Brokerages

To see all connected brokerages:
  1. Go to Settings → Providers
  2. Click on your SnapTrade connection
  3. View the “Connections” tab
This shows:
  • All connected brokerages
  • Accounts per brokerage
  • Which accounts are linked to Sure
  • Orphaned connections (not linked to any account)
Source: app/controllers/snaptrade_items_controller.rb:237

Deleting a Brokerage Connection

To remove a specific brokerage without deleting the entire SnapTrade configuration:
1

Find Connection

Navigate to Settings → Providers → SnapTrade → Connections
2

Delete

  1. Find the brokerage connection to remove
  2. Click “Delete Connection”
  3. Confirm deletion
3

Cleanup

This will:
  • Remove the connection from SnapTrade API
  • Delete associated Sure accounts (if no transactions)
  • Preserve transaction history
Source: app/controllers/snaptrade_items_controller.rb:248

Orphaned Users

If you’ve registered multiple SnapTrade users with the same credentials, you may see “orphaned users” (users not currently active). To clean up:
  1. View orphaned users in the Connections tab
  2. Click “Delete” on any orphaned user
  3. This removes the user and all their connections from SnapTrade API
Source: app/controllers/snaptrade_items_controller.rb:303

Linking to Existing Accounts

If you already have manual investment accounts in Sure, you can link them to SnapTrade:
1

From Account Page

  1. Navigate to the manual account you want to link
  2. Click “Link to Provider”
  3. Select “SnapTrade”
2

Choose SnapTrade Account

  1. You’ll see a list of unlinked SnapTrade accounts
  2. Select the matching brokerage account
  3. Confirm linking
3

Sync Data

Sure will sync holdings and activities to the linked account, preserving any manual transactions.
Source: app/controllers/snaptrade_items_controller.rb:377

Troubleshooting

”SnapTrade is not configured”

Cause: No SnapTrade credentials have been added. Solution: Go to Settings → Providers and add your Client ID and Consumer Key.

”User not registered”

Cause: SnapTrade user registration failed. Solution:
  1. Delete the existing SnapTrade configuration
  2. Re-add with correct credentials
  3. User will be automatically registered on save
Source: app/models/snaptrade_item.rb:56

Brokerage Connection Failed

Common causes:
  • Invalid brokerage credentials
  • Multi-factor authentication not completed
  • Brokerage temporarily down for maintenance
  • Account locked or restricted
Solution: Try reconnecting and ensure credentials are correct.

No Holdings Showing

Checklist:
  1. Verify accounts are linked (not just connected)
  2. Trigger a manual sync
  3. Check if activities are still fetching (spinner indicator)
  4. Ensure brokerage supports holdings data

API Deletion Failed

Cause: Trying to delete a connection but credentials are missing or invalid. Solution:
  • Update SnapTrade credentials if they’ve changed
  • Or manually delete via SnapTrade dashboard
Source: app/controllers/snaptrade_items_controller.rb:281

Decryption Error

Cause: ActiveRecord Encryption keys have changed or are missing. Solution: Ensure these environment variables are set and match the original encryption keys:
ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=...
ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=...
ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=...
Source: app/controllers/snaptrade_items_controller.rb:114

API Reference

Creating a SnapTrade Configuration

# Source: app/controllers/snaptrade_items_controller.rb:19
@snaptrade_item = Current.family.snaptrade_items.build(
  name: "My Brokerage Connection",
  client_id: "your_client_id",
  consumer_key: "your_consumer_key"
)
@snaptrade_item.save
@snaptrade_item.ensure_user_registered!

Importing Data

# Source: app/models/snaptrade_item.rb:49
def import_latest_snaptrade_data(sync: nil)
  provider = snaptrade_provider
  SnaptradeItem::Importer.new(
    self, 
    snaptrade_provider: provider, 
    sync: sync
  ).import
end

Connection Portal URL

# Generates OAuth redirect URL
redirect_url = callback_snaptrade_items_url(item_id: @snaptrade_item.id)
portal_url = @snaptrade_item.connection_portal_url(
  redirect_url: redirect_url
)
Source: app/controllers/snaptrade_items_controller.rb:112

Supported Account Types

# All SnapTrade accounts map to Investment or Crypto
infer_accountable_type(snaptrade_type)
  # Returns: "Investment" or "Crypto"
  # Based on account type from SnapTrade API
Source: app/controllers/snaptrade_items_controller.rb:490

Best Practices

  1. Per-User Credentials: Store SnapTrade credentials per family/user, not globally
  2. User Registration: Always ensure users are registered before attempting connections
  3. Account Mapping: Guide users through account setup; don’t auto-create accounts
  4. Sync Start Dates: Allow users to set historical sync dates to avoid importing years of data
  5. Activity Fetching: Show “syncing” state until all activities are imported
  6. Connection Management: Provide UI for users to view and manage all connections
  7. Orphan Cleanup: Periodically clean up orphaned users and connections

Comparison: SnapTrade vs Plaid Investments

FeatureSnapTradePlaid Investments
Brokerages9,000+Limited
Retirement Accounts✅ Full support⚠️ Limited
Canadian Accounts✅ Extensive❌ None
Holdings✅ Detailed✅ Basic
Activities✅ Comprehensive⚠️ Limited
Real-time Updates❌ On-demand✅ Webhooks
Credential StoragePer-userGlobal API key
CostPer-user/connectionPer-item

Additional Resources

SnapTrade Documentation

Official SnapTrade API documentation

SnapTrade Partner Portal

Sign up for partner access

Supported Brokerages

View all 9,000+ supported brokerages

Build docs developers (and LLMs) love