Inspiration

  • In 2021, a WhatsApp message telling 3 million people that vaccines contained microchips spread faster than any fact-check could follow. By the time the truth arrived, the belief was already alive. We built BiasCheck to bring the truth back to life first.

What it does

  • BiasCheck analyses any news article or claim in the present. First, paste a headline or search a topic and within seconds you see:
  • where it sits on the political spectrum,
  • how a news outlet frames the story across persuasion and evidence,
  • any emotional language signals detected
  • what claims it makes,
  • and a plain-English verdict on what the bias looks like and why.

How we built it

  • We built BiasCheck with Django as the backend, feeding articles from Google News RSS and NewsAPI. Article content is extracted using Trafilatura, decoded from Google's redirect URLs using googlenewsdecoder, and filtered against a curated blocklist of unreliable domains. Bias and misinformation analysis is powered by Groq's GPT-OSS 20B model running async requests in parallel across all articles to keep response times fast. The frontend is a clean Django-templated UI with a real-time bias bar, qualitative labels and a graph to see how a story is framed.

Challenges we ran into

  • Speed vs accuracy: running LLM analysis on 5–10 articles sequentially was too slow. We rewrote the pipeline using asyncio.gather to fire all Groq requests in parallel, cutting wait times significantly.
  • URL extraction: Google News RSS serves redirect URLs, not real article links. We had to decode them before scraping, and even then many sites returned 403 errors blocking our requests.
  • LLM output consistency — getting the model to reliably return structured output (SCORE:, LABEL:, SUMMARY:) required careful prompt engineering and a parser
  • API rate limits - Gemini's free tier quota ran out quickly during testing, which pushed us toward Groq for a faster and more generous free tier. However since there is a token per day limit, in the Groq we change from LLaMA 3.3 70B to GPT-OSS 20B.
  • Convoluted prompts: It was hard to craft prompts to analyse bias when you are trying to tell the LLM what is bias and what is not. This became bias again.

Accomplishments that we're proud of

  • Built a fully working end-to-end bias and misinformation pipeline in a short timeframe Async LLM analysis that processes multiple articles simultaneously without blocking the Django request cycle A domain blocklist system that filters out known unreliable sources before analysis even begins A bias bar that translates a raw score out of 10 into something immediately understandable to any user A chart which plots news articles to make misinformation clear. We think this gives real value to users.

What we learned

  • Prompt structure matters a lot as bad prompts returns inconsistent output that breaks parsers and messy data
  • Real-world news scraping is messy - we needed many fallbacks
  • Free LLM tiers have limits, and working to efficiently make use of prompts helped

What's next for BiasCheck

  • Browser extension to analyse any article you're reading without leaving the page
  • Cross-source comparison to show how different outlets cover the same story side by side
  • Multilingual support to expand beyond English to tackle misinformation in other languages where fact-checking infrastructure is weaker

Built With

Share this project:

Updates