The tragedy occurred in the town of Pasuran, about 800 km (500 miles) east of the capital, Jakarta. Thousands of people had lined up to receive traditional Islamic handouts of 30,000 rupiah ($3.17) from a wealthy Indonesian family.
"As of 12 noon, some 21 bodies have been sent to Dr Sudarsono Hospital in Pasuruan while dozens of others were left unconscious," Antara quoted a hospital official as saying.
Officials fear the death toll could rise, as at least eight people are in critical condition. Most of the victims were elderly women, who are believed to have collapsed through lack of oxygen as the crowd was pushed against a fence.
Zakat, or "religious obligation," is a form of customary Islamic charity, which is traditionally distributed among the poor during the holy month of Ramadan.