finbot is a chat bot that follows your Sharesight portfolios and each chat's watchlist with Yahoo Finance data. It posts trades, price moves, earnings and ex-dividend dates, analyst rating changes and more on a schedule, and answers commands with reports and charts.
If you don't have Sharesight, you can still add your holdings manually via the watchlist (/watchlist add SYMBOL).
- Telegram, Slack and Discord (either the push or the pull method, depending on your environment)
- Sharesight trades as they happen, portfolio performance comparisons
- Charts with buttons to change the time period
- Alerts of daily price movements past a threshold, earnings and ex-dividend dates, analyst rating changes, short interest, record highs
- Stock lookup and comparisons, rankings by P/E, PEG, market cap or analyst rating
- /command, @bot, schedule, or button driven.
Run finbot with Docker or with Python.
On a Linux host with Docker:
sudo git clone https://github.com/robdevops/finbot /opt/finbotsudo /opt/finbot/util/docker_setup.sh, which makes/etc/finbot.envfrom its template- Set the keys of each network you use in
/etc/finbot.env(below) cd /opt/finbot && sudo docker compose up -d --buildsudo docker compose logs -f
On Linux, macOS or WSL, with Python 3.12 or later and its venv module:
sudo git clone https://github.com/robdevops/finbot /opt/finbot && cd /opt/finbotsudo python3 -m venv .venv && sudo .venv/bin/pip install -r requirements.txt -r requirements-optional.txtsudo cp defaults/finbot.env /etc/finbot.env && sudo chmod 600 /etc/finbot.env, then set the keys of each network you use in it (below)sudo .venv/bin/python util/check_config.py /etc/finbot.envsudo sh -c 'set -a && . /etc/finbot.env && exec .venv/bin/python bot.py', which logs to the terminal until Ctrl-C
To run it as a service, under systemd on a Debian host, see doc/install.md.
By default, finbot fetches its updates from each network itself (pull mode), which is what this quick start guide covers. Alternatively, if you prefer to run an HTTPS gateway (a reverse proxy on a domain with a valid certificate), push mode subscribes the bot to the updates each network pushes to it.
- Telegram: create the bot with @BotFather, set
TELEGRAM_BOT_TOKENin the env file, restart finbot (guide). - Slack: create the app from the manifest that
util/slack_manifest.pyprints, add an app-level token, setSLACK_BOT_TOKENandSLACK_APP_TOKENin the env file, restart finbot (guide). - Discord: create the application and its bot, turn on its Message Content intent, set
DISCORD_BOT_TOKENin the env file, restart finbot (guide).
Then send /help in a chat with the bot. Commands work as plain messages too (.help), which are quicker to type on a
phone (Commands). From its first command, each chat has the default scheduled
jobs, which /jobs switches on and off, adds to and runs (Scheduling).
- Commands and reports, with screenshots
- Scheduling: each chat's jobs, and the reports they can run
- Configuration:
finbot.envandsettings.conf, the data directory, Sharesight - Caching
- Installing: Docker · Python, or a Debian host with systemd
- Networks: Telegram · Slack · Discord
- Bug reports welcomed
- PRs are welcome, but not guaranteed to be merged
