Skip to content
← Back to the work
ProjectAgentic scraping + LLM scoring2025

GeM TenderAutomation

An agent that reads Government e-Marketplace listings so a human does not have to, and only interrupts when something is worth bidding on.

Hover the panel to run it

Scoring tenders · match fires an alert

The problem

Someone was reviewing Government e-Marketplace tender listings by hand, on a schedule, inside a live procurement workflow. Almost everything they read was irrelevant. The cost was not the decision — it was the reading.

The constraint

The listings have to be reached the way a person reaches them, through the browser, and the useful signal is prose rather than fields. A keyword filter cannot tell 'we could win this' from 'this merely contains our keywords', so the judgment had to move into the pipeline.

What I built

  1. 01

    A Playwright agent over the listings

    The scraper drives a real browser through GeM listings and pulls the tenders back as structured records.

  2. 02

    LLM relevance and bid-readiness scoring

    Each tender goes to a Groq-hosted model that scores it twice: is this relevant to us, and are we in a position to bid on it.

  3. 03

    Sheets as the log, Telegram as the alert

    Every scored tender lands in Google Sheets so there is a record to audit, and only matches fire a Telegram alert — the same split as a dashboard and a pager.

What moved

removeda recurring manual review from a live procurement workflow
match-onlyalerting, so attention goes to tenders worth bidding on

Running

scored_tenders.gsheet
Google Sheet of scraped GeM tenders with bid numbers, deadlines and review status
GeMTenderBot · match alert
Telegram alerts from GeMTenderBot announcing new tender matches with buyer, quantity and deadline
Built with
PythonPlaywrightGroq LLMGoogle Sheets APITelegram API
Open to 2027 new-grad rolesGet in touch →