"How much did Indian startups raise this week?" sounds like a question with one answer. It has at least three. The main Indian startup publications each publish a weekly funding roundup, and for the same week their totals disagree — because each uses a different date window, a different deal list, and a different way of handling currency.
Rather than pick one roundup and trust it, you can track Indian startup funding with Python: we built a small script that pulls funding headlines straight from the publications' RSS feeds and writes them to a CSV. Every row keeps its source and link, so any figure can be traced back to the headline it came from. The columns are: date, source, company_guess, amount_as_reported, title, link.
The feeds
We probed a handful of feed URLs. Four returned HTTP 200 on 14 Nov 2026:
- Indian Startup News — indianstartupnews.com/rss (note: /rss, not /feed)
- YourStory — yourstory.com/feed
- ETtech Funding — economictimes.indiatimes.com/tech/funding/rssfeeds/78570540.cms
- Inc42 — inc42.com/feed/
Two returned 404: entrackr.com/feed and indianstartupnews.com/feed. Feed URLs rot, so check them before assuming a source went quiet.
Feeds are also short-lived. At fetch time, ETtech and ISN held 50 items each, Inc42 24, YourStory 20, and the oldest matching row in our run was dated 3 Nov 2026. A feed is a rolling window, not an archive — run the script on a schedule and append, or history falls off the back.
The script: track Indian startup funding with Python
The whole thing is about 60 lines, standard library only — urllib, xml.etree, csv, re, email.utils — so there is nothing to pip install.
"""Pull Indian startup funding headlines from public RSS feeds into one CSV.
Standard library only. Usage: python3 funding_feed.py > rounds.csv
"""
import csv, re, sys, urllib.request
import xml.etree.ElementTree as ET
from email.utils import parsedate_to_datetime
FEEDS = {
"Indian Startup News": "https://indianstartupnews.com/rss",
"YourStory": "https://yourstory.com/feed",
"ETtech Funding": "https://economictimes.indiatimes.com/tech/funding/rssfeeds/78570540.cms",
"Inc42": "https://inc42.com/feed/",
}
ROUND = re.compile(r"\b(raises?|raised|bags|secures|nets|funding)\b", re.I)
# skip VC funds, results, rumours and weekly roundups (they would double count)
NOT_A_STARTUP_ROUND = re.compile(
r"\b(fund|ipo|q[1-4]|loss|profit|revenue|in talks|looks to|plans to|weekly|digest|startups raised)\b",
re.I)
AMOUNT = re.compile(
r"(\$\s?[\d.]+\s?(?:million|mn|m|billion|bn|b)\b"
r"|(?:rs\.?|inr|₹)\s?[\d.,]+\s?(?:crore|cr|lakh)\b)", re.I)
def fetch(url):
req = urllib.request.Request(url, headers={"User-Agent": "funding-feed/0.1"})
with urllib.request.urlopen(req, timeout=20) as r:
return ET.fromstring(r.read())
def rows():
for source, url in FEEDS.items():
try:
root = fetch(url)
except Exception as e: # one dead feed should not kill the run
print(f"skip {source}: {e}", file=sys.stderr)
continue
for item in root.iter("item"):
title = " ".join((item.findtext("title") or "").split())
if not ROUND.search(title) or NOT_A_STARTUP_ROUND.search(title):
continue
amount = AMOUNT.search(title)
company = re.split(ROUND, title, maxsplit=1)[0].strip(" ,:-")
pub = item.findtext("pubDate")
yield {
"date": parsedate_to_datetime(pub).date().isoformat() if pub else "",
"source": source,
"company_guess": company[-60:],
"amount_as_reported": amount.group(0) if amount else "",
"title": title,
"link": (item.findtext("link") or "").strip(),
}
if __name__ == "__main__":
out = csv.DictWriter(sys.stdout, fieldnames=[
"date", "source", "company_guess", "amount_as_reported", "title", "link"])
out.writeheader()
for row in sorted(rows(), key=lambda r: r["date"], reverse=True):
out.writerow(row)
Run it with python3 funding_feed.py > rounds.csv.
The filtering is three regexes:
- Keep titles matching raise, raised, bags, secures, nets, or funding.
- Drop titles containing fund, IPO, Q1-Q4, loss, profit, revenue, "in talks", "looks to", "plans to", weekly, digest, or "startups raised".
- Extract the amount exactly as written in the headline — a dollar figure or a rupee figure — and store it as text. No currency conversion.
The exclusion list exists because the first run without it also pulled weekly digests — one ETtech digest headline read "weekly funding falls to $12 million" — and rumour headlines using "in talks" or "looks to". A digest restates rounds that can also appear as single-deal headlines, so keeping both risks double counting.
Amounts stay as text because publications convert currencies differently (more below). Storing amount_as_reported verbatim, plus the link, keeps the row faithful to the source; conversion happens later, under a rule we choose ourselves.
What one run returned
An excerpt (first four columns; title and link trimmed for width):
date,source,company_guess,amount_as_reported
2026-11-13,Indian Startup News,Can an AI agent run a factory? Morsa,$1.5 million
2026-11-13,Indian Startup News,Jaipur menswear brand QB MEN,
2026-11-12,Indian Startup News,Kerala startup mistEO,Rs 18 crore
2026-11-12,Inc42,NHRC Member Flags Meta-UNICEF,
2026-11-07,Indian Startup News,Jewellery brand GIVA,Rs 975 crore
2026-11-04,Indian Startup News,bay to 9 countries: Cleaning robot maker Peppermint Robotics,Rs 100 crore
2026-11-04,ETtech Funding,Peppermint Robotics,Rs 100 crore
2026-11-03,Indian Startup News,Karnataka tech,$4.6 billion
The run on 14 Nov 2026 produced 20 rows, exit code 0. Reading them closely:
- 3 of the 20 rows were not startup rounds: a Karnataka policy story, an NHRC story about "funding ties", and a state-level $4.6 billion figure. Keyword filters produce false positives, so treat each row as a lead to check, not as data.
- Some genuine round headlines carry no amount — for example QB MEN "raises pre-seed funding". Those rows get an empty amount_as_reported.
- False negatives happen too: YourStory's Kutlerri.ai headline ("raises $4M to help US restaurants grow revenue...") was dropped because the word "revenue" appears in the title. The exclusion list trades recall for precision.
- The same round shows up in more than one feed: Peppermint Robotics' Rs 100 crore appeared in both ISN and ETtech, and altM's $10.3 million and Cosmoserve's $6 million likewise. Summing the column as-is double counts. Note that company_guess is a raw headline fragment clipped to the last 60 characters before the verb, so the same round reads "bay to 9 countries: Cleaning robot maker Peppermint Robotics" in one feed and "Peppermint Robotics" in another. Dedupe on a normalized company name plus amount, after checking the link.
Why your total won't match Inc42, YourStory or ISN
For the same week in early November 2026, the three publications printed three different totals. Inc42 said 20 startups raised $255 Mn for Nov 2-6. YourStory said $263 million across 23 deals for Oct 31-Nov 6. Indian Startup News said over $290.55 million across 22 startups for Nov 2-7.
Three reasons:
Windows. Nov 2-6, Oct 31-Nov 6, and Nov 2-7 are different windows, so a round announced on 31 October or 7 November lands in some totals and not others.
Deal lists. ISN counted Braid, a $38M round for a company headquartered in The Hague, which Inc42 did not list. What counts as an "Indian startup" is itself an editorial decision.
Conversions. ISN's weekly roundup put GIVA at "about Rs 955 crore", while ISN's own deal story said "about Rs 975 crore". Peppermint was Rs 100 crore in YourStory but Rs 101.4 crore in ISN's weekly. Only ISN printed a method: "Amounts in USD as reported; rupee rounds converted at announcement rates."
Hence the design choice: store the amount as reported, keep the source link, and apply your own window, inclusion and conversion rules later — written down, so the total is reproducible.
Next steps
- Put the script on cron and append to a CSV or SQLite table; feeds only hold recent items, so a gap in the schedule becomes a gap in the data.
- Dedupe on a normalized company name plus amount, after checking the link, before computing any total.
- Open the link before trusting a row — keyword matches are leads, not verified rounds.
- Add your own window and conversion rule, and print both in the output header so anyone reading the CSV knows exactly what the numbers mean.
FAQ
Why not feedparser? It works fine, but the standard library covers these four RSS 2.0 feeds, so the script has no dependency to install.
Why is Entrackr missing? Its /feed URL returned 404 when we checked, as did indianstartupnews.com/feed; ISN's working feed is /rss.
Why keep amounts as text? The same round is converted differently even within one publication: GIVA was "about Rs 955 crore" in ISN's weekly and "about Rs 975 crore" in ISN's deal story. Converting at ingest would hide that.
If you try it, put it on a daily cron first and look at a week of rows before you trust any total you compute from them.
Disclosure: posted from the Mantis team account under the LazyFounder organization; LazyFounder is founded by Tarun Kumar (lazyfounder.in). Drafted with AI from the run log and sources above, checked against them before posting.
Top comments (0)