Toluwalope AkinkunmiLoading…

Sketching things…

000
Skip to content
← All work

09 / Lab

Stock Bot

A scheduled agent that scans the Nigerian Exchange every day, checks recent price history, asks an LLM to assess each dip and sends me a short report on Telegram.

Company
Lab
Role
Designer & engineer
Period
Feb 2026 – PresentIn development
Links
Private / internal
Stack
PythonAWS LambdaEventBridgeDynamoDBGemini APITelegram Bot APIGitHub Actions
09

Stock Bot

An AI analyst for the Nigerian stock market

PythonAWS LambdaEventBridgeDynamoDB

Screenshots coming soon

What I built

  • 01A parallel scraper for the NGX daily losers
  • 02Five days of price history in DynamoDB to confirm a real dip
  • 03An LLM analysis step with a structured prompt per company
  • 04Daily Telegram reports with the top picks
  • 05Continuous deployment to AWS Lambda with GitHub Actions

The system

A daily run, from schedule to report

A daily run, from schedule to reportDaily schedule → Scanner; Scanner ↔ Market data; Scanner ↔ Price history; Scanner ↔ AI analyst; Scanner → Daily reportDaily scheduleEventBridgeScannerAWS LambdaMarket dataNGXPrice historyDynamoDBAI analystGeminiDaily reportTelegramtriggerfetch losers5-day checkanalysetop picks

Key decisions

  1. 01

    Serverless on a schedule

    The job runs for a couple of minutes a day. A scheduled Lambda costs almost nothing and needs no server to look after.

  2. 02

    Filter first, then think

    Cheap code narrows the list, and the LLM only sees the few stocks worth a closer look. It keeps both latency and cost down.

  3. 03

    Drop heavy dependencies

    Replacing pandas with a lightweight HTML parser made the Lambda package small enough to deploy without special layers.

01

The problem

Finding good dips on the NGX means checking dozens of stocks every day and reading the story behind each drop. I wanted the boring part automated and the judgement call summarised.

02

The process

A Lambda function runs on a daily EventBridge schedule. It scrapes the day's biggest losers, so only those get a closer look, compares them with five days of prices stored in DynamoDB and sends the candidates to Gemini for a short analysis. The top picks arrive on Telegram, and GitHub Actions deploys every push.

03

The outcome

In progress. Scraping, analysis and Telegram reports work locally; the Lambda deployment is being finalised.

04

What I learned

Filter before you spend tokens or requests. Starting from the day's losers instead of every ticker cut the work to a fraction.

Next projectTrendHubA hub for newsletters, podcasts and blogs