In the small village of Champaner, (now in the State of Gujarat, in western India) during the height of the British Empire in India in 1893, Captain Andrew Russell (Paul Blackthorne), the commanding officer of the Champaner cantonment, has imposed high taxes ("lagaan") on people from the local villages which they are unable to pay due to a prolonged drought.
Led by Bhuvan (Aamir Khan), the villagers beg Raja Puran Singh (Kulbhushan Kharbanda) to help them. He tells them that much to his regret, he is also bound by British law.
It is after their visit to the Raja that the people of the village first witness a cricket match. Bhuvan mocks the game and gets into a fight with one of the British officers. Taking an instant dislike to Bhuvan, Russell offers to cancel the taxes of the whole province for three years if the villagers can beat his men in a game of cricket. If the villagers lose, however, they will have to pay three times the amount of their normal taxes. Bhuvan accepts this wager on behalf of all the villages in the province, without their consent. When the other villagers find out about the bet, they are furious with Bhuvan. He argues that it is important for everyone to fight against British rule.
Bhuvan thus begins to prepare the villagers for the match. He initially finds only five people willing to join the team. He is aided in his efforts by Russell's sister Elizabeth (Rachel Shelley) who feels that her brother has mistreated the people in the villages. As she teaches them the rules of the game, she falls in love with Bhuvan, much to the anguish of Gauri (Gracy Singh) who is also in love with him. After Bhuvan reassures Gauri of his feelings for her, the woodcutter Lakha (Yashpal Sharma) becomes enraged as he is also in love with Gauri. In an attempt to discredit Bhuvan, Lakha offers himself as a spy for Russell and joins the villagers' team to destroy it. so
Eventually, as the villagers realise that winning equals freedom, and as a few of them are insulted by the British, they soon join the team. Still short one player, Bhuvan invites an untouchable, Kachra (Aditya Lakhia), who can bowl spinners. The villagers, conditioned by long term prejudice against untouchables, refuse to play if Kachra joins the team. Bhuvan chastises the villagers, shaming them into accepting Kachra.
The second half of the film focuses on the match itself. On the first day, Russell wins the toss and elects to bat, giving the British officers a strong start. Bhuvan brings Kachra into the match only to find that Kachra has somehow lost his ability to spin the ball, because new cricket balls do not spin as well as worn-down ones (like the team had been practising with). In addition, as part of his agreement with Russell, Lakha deliberately drops many catches. During the evening, however, Elizabeth sees Lakha meeting with her brother. She races to the village and informs Bhuvan of Lakha's deception. Rather than allow the villagers to kill him, Bhuvan offers Lakha the chance to redeem himself.
The next day as part of his promise to Bhuvan, Lakha takes a diving one-handed catch. However the British score almost 300 runs, losing only three wickets by the lunch break. Kachra is brought back to bowl and, bowling with a now-worn ball, takes a hat-trick which sparks the collapse of the British batting side. The villagers soon start their innings. Bhuvan and Deva (a Sikh, who has played cricket earlier when he was a British sepoy) give their team a solid start.
Deva misses out on his half-century when a straight-drive from Bhuvan ricochets off the bowler's hand onto the stumps at the non-striker's end, while Deva is backed up too far. When Lakha comes on to bat, he is hit by a bouncer to the head, and he falls on to his stumps. Other batsmen get out trying to score a boundary off each delivery. Ismail (Raj Zutshi), a good batsman, retires hurt as he is hit on his leg. The villagers' team ends the day with 4 batsmen out of action with barely a third of the required runs on board.
On the third and final day, Bhuvan passes his century, while most of the later wickets fall. Ismail returns to bat with the help of a runner and passes his half-century, reducing the required runs to a gettable total. The game comes down to the last over with Kachra on strike. With one ball remaining and the team down 5 runs, Kachra knocks the ball a short distance, managing only a single.
However, the umpire signals no ball and Bhuvan returns to bat, and swings extremely hard at the next ball. Captain Russell backpedals and catches the ball, gleefully believing that the British team has won, until he realises that he had actually caught the ball beyond the boundary which gives 6 runs, and the win, to Bhuvan's team. Even as they celebrate the victory, the drought ends as a rainstorm erupts.
Bhuvan's defeat of the British team leads to the disbanding of the humiliated cantonment. In addition, Russell is forced to pay the taxes for the whole province and is transferred to Central Africa. After realising that Bhuvan loves Gauri, Elizabeth returns to London. Heartbroken, she remains unmarried for the rest of her life. The narrator (Amitabh Bachchan) says that Bhuvan went on to marry Gauri with great pomp and show, but concludes by saying that despite the historic triumph, Bhuvan's name became lost in the pages of history.