본관은 강릉(江陵). 자는 사능(士能). 아버지는 김시석(金始錫)이며, 첨지중추부사 김시영(金始煐)에게 입양되었다.
1755년(영조 31) 정시 문과에 을과로 주1, 사관(史官)을 거쳐 1761년 정언(正言)이 되고, 이듬해 김상숙(金相肅) · 유한길(兪漢吉) 등을 탄핵하였다.
1763년 3월에는 송명흠사건(宋明欽事件)으로 홍양한(洪良漢)과 함께 주2 정언으로 있을 때 경현당(景賢堂)의 문신 제술에서 장원하여 문명을 떨쳤다. 1763년 경기도 · 강원도의 암행어사를 지냈는데, 강원도어사로 있을 때는 영남과 호남의 곡식을 옮겨다가 6읍의 백성을 진휼하기도 하였다.
1766년 부수찬(副修撰) · 교리(校理) · 헌납(獻納)을 역임하고, 1771년 필선(弼善) · 장령(掌令) · 수찬(修撰)을 거쳐 이듬해 이조참의 · 승지를 지냈으며, 1773년에 대사간에 올랐다. 1784년(정조 8) 이조판서로 사은 겸 진주부사(謝恩兼陳奏副使)로 청나라에 다녀왔다.
그 뒤 대사헌 · 형조판서에 올랐다. 1787년에는 경상도관찰사로서 화전(火田)이 늘어나는 것을 사전에 방지하지 못한 책임으로 한때 주3, 다시 한성부판윤을 거쳐 병조 · 공조 · 예조의 판서와 우참찬을 지냈다.