Avec 99,7% des machines à voter décomptées, Lula était crédité de 48,4% des suffrages contre 43,3% pour Bolsonaro, a indiqué l'autorité électorale nationale (TSE) sur son site internet.
Un second tour sera organisé le 30 octobre, aucun des candidats n'ayant recueilli une majorité de suffrages.
Plusieurs sondages plaçaient Lula nettement devant Jair Bolsonaro, avec entre 10% et 15% d'avance. L'écart plus réduit qu'attendu va prolonger une situation politique tendue et les divisions dans le principal pays d'Amérique latine.
Jair Bolsonaro avait affirmé pendant la campagne ne pas croire les sondages le donnant battu au premier tour, estimant que ceux-ci ne mettaient pas en évidence l'enthousiasme aperçu lors de ses meetings électoraux.
Le président d'extrême droite sortant avait aussi mis en doute l'intégrité du système électronique de vote, sans preuve à l'appui, laissant entendre qu'il pourrait contester les résultats en cas de défaite.
En amont du scrutin, des observateurs politiques estimaient qu'une victoire de Lula avec une marge importante pourrait avoir pour effet d'amender le soutien dont disposerait Bolsonaro pour dénoncer l'issue du vote.
Mais les résultats du premier tour ont redynamisé la campagne du président sortant et vont prolonger de quatre semaines les tensions et la violence politique dans le pays.
Lula a accueilli les résultats du premier tour avec optimisme, déclarant que sa victoire était seulement retardée et qu'il était impatient de débattre en tête-à-tête avec Bolsonaro.