₹47,000 every month. That's what my friend Rohit was paying a fund advisory service to tell him which stocks matched his criteria. Six filters — RSI below 40, volume spike above 200% of 20-day average, 200-DMA crossover, sector rotation signals, delivery percentage above 60%, and promoter holding changes in the last quarter. The advisory ran these filters on the same NSE data that's freely available to every broker account holder in India.
One Sunday afternoon, a Python script, and a free broker API later — Rohit doesn't pay that ₹47,000 anymore.
The Problem: 2 Hours Every Morning, Staring at Screens
Rohit is a swing trader based in Pune. He's been trading for seven years, and his edge has always been discipline — he never enters a trade without all six of his filters confirming. The problem was execution speed. Every morning before market open, he'd manually check 150+ stocks across three different screening tools, cross-reference the results, and build his watchlist.
Two hours. Every single trading day. That's roughly 500 hours a year spent on a task that follows the exact same logic every time.
The advisory service he subscribed to ran similar filters, but their shortlist arrived at 9:30 AM — 15 minutes after market open. By then, the best entry prices on momentum stocks were already gone. He was paying ₹47,000 a month for a list that arrived late.
The Solution: A Python Script That Runs Before You Wake Up
Here's what we built over that weekend. I'm not going to dump code — if you want the technical template, it's in my GitHub repo. Instead, let me walk you through the architecture.
The Flow
The script connects to the broker API at 9:15 AM — one minute before market opens. It pulls the previous day's closing data for all NSE-listed stocks (roughly 2,000 symbols). Then it runs six filters in sequence: RSI calculation using a 14-day window, volume spike detection against the 20-day moving average, 200-DMA crossover check, sector rotation scoring based on relative strength, delivery percentage from NSE's Bhavcopy data, and promoter holding changes from the latest SAST filings.
The entire filtering process takes about 12 seconds. By 9:16 AM, Rohit receives a WhatsApp message with a shortlist of 5-12 stocks that passed all six filters. He's looking at his curated watchlist before the market even opens for trading.
The numbers that matter: 2 hours/day reduced to 0 active time. ₹47,000/month advisory cancelled. The broker API costs a one-time ₹2,000 fee (Kite Connect). The WhatsApp Business API is free under 1,000 messages per month. Total recurring cost: ₹0.
Why This Works Better Than an Advisory Service
The advisory service wasn't bad. Their analysts were competent. But they had three structural disadvantages.
Speed. An automated script delivers results in seconds. A team of analysts formatting a report takes 30-45 minutes after market data is available. In momentum trading, those minutes matter.
Customisation. Rohit's six filters are specific to his trading style. The advisory used their own proprietary filters, which overlapped about 70%. That 30% mismatch meant he was still doing manual screening on top. With his own script, the filters match exactly.
Adaptability. When Rohit wanted to add a seventh filter (institutional buying from bulk deal data), it was live by Saturday evening. Try asking an advisory service to customise their methodology for one subscriber.
The Cost Breakdown: ₹5.64L/Year Saved
| Item | Advisory Service | Python Script |
|---|---|---|
| Monthly cost | ₹47,000 | ₹0 |
| Annual cost | ₹5,64,000 | ₹2,000 (one-time) |
| Delivery time | 9:30 AM (15 min late) | 9:16 AM (before open) |
| Customisation | Fixed filters | Fully custom |
| Daily time spent | 45 min | 0 min |
The ROI isn't subtle. ₹5.64 lakh saved in year one and 500+ hours of screen time reclaimed.
What You Actually Need to Build This
You don't need to be a software engineer. Rohit isn't one — he's a commerce graduate who learned basic Python from YouTube. Here's the stack:
Python 3.x with Pandas for data crunching. A broker API account — Kite Connect from Zerodha at ₹2,000 one-time, or Fyers API v3 which is completely free. A server — a ₹500/month DigitalOcean droplet or an old laptop running Ubuntu. WhatsApp Business API for notifications — free under 1,000 messages/month.
The approach: authenticate with your broker API using OAuth, fetch historical OHLCV data for your stock universe, calculate technical indicators with Pandas and NumPy, apply conditional filter logic, and send results via WhatsApp or Telegram.
If you've written an IF statement in Excel, you can understand the logic behind a stock screener script.
The Bigger Lesson
Rohit's story isn't really about stock screening. It's about a pattern I see everywhere: the most expensive services often run the simplest logic on publicly available data.
I've seen the same in CA firms spending lakhs on seasonal staff for repetitive ITR work. In businesses paying for SaaS when a ₹0 stack of free tools does the job. And in the opposite direction — automating things that should stay manual.
The sweet spot: repetitive tasks with clear rules and expensive human execution. Before automating anything, ask three questions. Is the logic explicit enough to explain to a 10-year-old? Does the task repeat predictably? Is the manual cost higher than the one-time build cost? Three yeses = your next automation project.
What Happened After
Six months in, Rohit's trading improved — not because the script picked better stocks, but because it freed his mornings for what actually matters: reading quarterly results, analysing management commentary, and making judgment calls. The screening was never the value-add. His analysis was. The script removed the busywork sitting between him and the work that moves the needle.
That's good automation. It doesn't replace expertise. It removes the mechanical layer so you spend 100% of your time on the 20% that requires human judgment.
Archit Mittal helps businesses automate chaos. Follow on LinkedIn: @automate-archit
Get automation insights every Saturday — join The Automation Dispatch
Top comments (0)