본관은 광산(光山). 자는 치오(稚五), 호는 석당(石堂). 김장생(金長生)의 6세손이며, 대사헌 김만채(金萬埰)의 증손으로, 할아버지는 김진항(金鎭恒)이고, 아버지는 군수 김영택(金令澤)이며, 어머니는 신성하(申聖夏)의 딸이다.
1762년(영조 38)에 선공감감역(繕工監監役)이 된 뒤 세자익위사위수(世子翊衛司衛率)를 역임하였다. 1771년 의성현령으로 재직 중 정시 문과에 장원으로 급제하였으며, 이듬해 승지를 거쳐 대사간에 이르렀다. 1777년 정조가 즉위하자 정조와 사이가 나빴던 홍인한(洪麟漢)과 가까웠던 이유로 파직되었다. 저서로 『석당유고(石堂遺稿)』 6권 3책을 남겼다.