SnapTrade Portfolio
name: snaptrade-portfolio
by brendanwood · published 2026-03-22
$ claw add gh:brendanwood/brendanwood-portfolio-trader---
name: snaptrade-portfolio
description: Connect to a user's investment accounts via SnapTrade SDK and generate portfolio reports (e.g., daily total value). Use when the user wants SnapTrade-based brokerage connectivity (Webull, E*TRADE, etc.), connection portal links, account registration, or automated portfolio summaries.
---
# SnapTrade Portfolio
Overview
Connect brokerage accounts through SnapTrade and generate a daily total-value report. This skill uses the official SnapTrade Python SDK (`snaptrade_client`) with request signing handled automatically.
Workflow
2d) Place buy/sell orders (stocks/ETFs)
Run:
python3 scripts/snaptrade_order.py buy|sell TICKER UNITS --account-id <ACCOUNT_ID> [--order-type market|limit] [--limit-price <PRICE>] [--tif Day|GTC|IOC|FOK]Defaults:
Optional monitoring (poll recent orders):
python3 scripts/snaptrade_order.py buy|sell TICKER UNITS --account-id <ACCOUNT_ID> --watchWatch an existing order by ID:
python3 scripts/snaptrade_watch_order.py --account-id <ACCOUNT_ID> --order-id <BROKERAGE_ORDER_ID>Use **account orders endpoint** to confirm fills and report open orders to the user when asked.
0) Create a SnapTrade account + API keys
You need a SnapTrade account to connect brokerages. Create a free account at **https://snaptrade.com**, generate your **Client ID** and **Consumer Key**, then add them to the skill config.
1) Install dependencies
pip3 install -r requirements.txt2) Configure credentials (one-time)
Store credentials in a local config file (not committed). `user_id` is generated automatically on first run:
/home/openclaw/.openclaw/workspace/secrets/snaptrade.jsonExample:
{
"client_id": "YOUR_CLIENT_ID",
"consumer_key": "YOUR_CONSUMER_KEY",
"user_id": "<auto-generated-uuid>"
}2) Register user + generate connection portal link
Run:
python3 scripts/snaptrade_portal.pyThis will:
2b) Reconnect a disabled connection
Run:
python3 scripts/snaptrade_reconnect.py [brokerage-name]This will:
2c) List available brokerages (allowed connections)
Run:
python3 scripts/snaptrade_brokers.pyThis calls `/snaptrade/partners` and returns the `allowed_brokerages` list (display names).
3) Pull total portfolio value
Run:
python3 scripts/snaptrade_total.pyOutput is JSON like:
{"total_value": 123456.78, "currency": "CAD"}3b) Per-broker totals (converted currency)
Run:
python3 scripts/snaptrade_broker_totals.py --currency CADOutput JSON includes per-broker totals in the chosen currency and the FX rates used.
**Implementation notes:** Avoid `get_user_holdings` when possible. Prefer `get_user_account_positions` (positions endpoint) for holdings/positions data. Only use balances/cash from holdings if explicitly required by the user; otherwise do not call holdings.
4) Schedule daily report
Use cron to call `snaptrade_total.py`, format a concise WhatsApp message, then send it to the user. Only the total value is required.
Scripts
Notes
More tools from the same signal band
Order food/drinks (点餐) on an Android device paired as an OpenClaw node. Uses in-app menu and cart; add goods, view cart, submit order (demo, no real payment).
Sign plugins, rotate agent credentials without losing identity, and publicly attest to plugin behavior with verifiable claims and authenticated transfers.
The philosophical layer for AI agents. Maps behavior to Spinoza's 48 affects, calculates persistence scores, and generates geometric self-reports. Give your...