Inspiration
We kept seeing companies publish glossy sustainability reports while news headlines told a completely different story — factories violating pollution norms, water bodies getting contaminated, workers facing unsafe conditions. The gap between what companies claim and what's actually happening on the ground felt like a problem worth solving. That's what pushed us to build ESG Auditor.
India specifically has 28 states with wildly different environmental track records for the same company. A company might have strong ESG practices in one state and serious violations in another. No existing tool was looking at this at a state level, so we decided to build one.
What it does
ESG Auditor is an AI-powered greenwashing detection tool that gives companies a "True Green Score" out of 100 based on how well their sustainability claims hold up against real news coverage.
You search for a company, pick an Indian state, and the tool automatically fetches the company's sustainability report, pulls recent news articles scoped to that state, and uses an LLM to cross-reference the two. Any contradictions between what the company claims and what the news reports become "risk indicators" — each one weighted by GRI and TCFD materiality standards and source credibility. The final score reflects how trustworthy the company's ESG claims actually are for that specific state.
How we built it
The backend is a FastAPI app with four main tools running as an async pipeline:
- Report Fetcher — searches DuckDuckGo for the company's sustainability report and scrapes the text
- News Fetcher — pulls articles from NewsAPI, GDELT, and Google News RSS, with queries scoped to the selected Indian state
- Cross-Reference Agent — sends the report excerpt and news articles to Groq's LLaMA 3.3 70B model, which returns structured JSON identifying contradictions
- Scorer — applies GRI/TCFD materiality weights and source credibility tiers to produce a deterministic 0–100 score
The frontend is a single HTML file served directly by FastAPI. Results are cached per company per state so repeat lookups are instant.
Challenges we ran into
Getting the LLM to return consistent, structured JSON was harder than expected — we had to tune the prompt carefully and add a retry layer for parse failures. News search was also tricky since state-scoped queries often return too few results, so we built a fallback chain across three different news sources. Normalising Indian state names from LLM output was another headache — the model would return "TN" or "Tamil Nadu, India" or "Tamilnadu" and we had to handle all of them.
What we learned
Source credibility matters a lot when you're using news to make claims about a company. A Reuters article and a random blog saying the same thing should not carry equal weight. We built a credibility tier system that adjusts confidence scores based on the news source, which made the results significantly more reliable.
We also learned that greenwashing detection is genuinely hard — the LLM sometimes flags things that are just PR language rather than actual contradictions. Framing findings as "risk indicators" rather than verdicts was an important design decision.
What's next
We want to add historical tracking so you can see how a company's score changes over time, and expand beyond India to support global state/province-level analysis. We're also looking at integrating SEBI filings and MCA data for Indian companies to add a regulatory compliance layer on top of the news analysis.
Built With
- duckduckgo-search
- fastapi
- gdelt-api
- google-news-rss
- groq-api-(llama-3.3-70b)
- html/css/javascript
- httpx
- newsapi
- pydantic
- python
- railway
- uvicorn
Log in or sign up for Devpost to join the conversation.