Hearts inflicted defending champions Celtic's first SWPL defeat of the season to move to within a point of Glasgow City in second place.
Maria McAneny's first-half own goal, when she deflected a Kayla Jardine shot past Kelsey Daugherty, proved to be enough for Eva Olid's side.
Lauren Wade should have doubled the hosts' advantage when she shot unmarked straight at Daugherty near the break.
And Daugherty had to be quick off her line to smother a second-half attempt by Bayley Hutchison, who had got in behind the Celtic defence.
Celtic's Saoirse Noonan came close to a leveller when she swept an effort bouncing wide of Rachael Johnstone's goal.
Wade threatened again with a dipping shot wide and, almost straight away, Celtic substitute Amy Gallacher curled wide at the other end.
The match continued to swing back and forth and Chloe Agnew was denied by Johnstone after blocking the keeper's clearance and Hutchison drew a save from Daugherty.
And Noonan turned an effort wide in added time as Celtic sustained a second defeat inside six days, having lost at home to opening Women's Champions League group opponents Twente on Tuesday.
On Thursday, Elena Sadiku's side take on Real Madrid in Spain.