본관은 경주(慶州). 자는 경일(景日). 김두광(金斗光)의 증손으로, 할아버지는 김운경(金運慶)이고, 아버지는 영조의 장인인 김한구(金漢耉)의 사촌 동생 김한록(金漢祿)이며, 어머니는 서옥업(徐玉業)의 딸이다.
1765년 식년 문과에 병과로 급제해 정언·홍문관교리를 지냈다. 1772년에 청의(淸議)와 명분을 강조하는 집단을 탕평에 대한 반동으로 지목해 유배시킨 청명류사건(淸名流事件)이 일어나자, 이를 홍봉한(洪鳳漢) 일파의 사주로 보고 홍씨의 척신 정치 제거가 곧 의리라는 소를 올렸다. 이는 아버지 김한록과 의논한 것이었고, 김구주(金龜柱)도 가세했기에 영조의 노여움을 사 함경도 갑산에 유배되었다.
정조가 즉위하자 이 소는 당시 왕세손인 정조를 해치려는 음모로 비판되었고, 세칭 시벽당쟁(時僻黨爭)의 원인이 되었다. 1793년(정조 17)에 다시 서용되어 용궁현감이 되었으나 그 이상 크게 쓰이지 못하였다.
1800년 6월 정조가 죽은 뒤 정순대비가 수렴청정하자, 이조참판·이조판서·광주유수를 거쳐 2년 만인 1802년에 우의정으로 기용되었다. 이때 심환지(沈煥之)·정일환(鄭日煥)·김달순(金達淳) 등과 신유사옥을 일으켰다. 또한 권유(權裕)로 하여금 김조순(金祖淳)을 공격해 순조와 순원왕후의 국혼을 방해하도록 유도하였다.
1804년에 정순대비가 다시 수렴청정을 하려고 하자 이를 반대하다가 삭직되었다. 그 후 왕대비가 죽은 뒤 1806년에 사당(私黨)을 위해 정조의 뜻을 배신한 죄 및 삼간택(三揀擇)을 방해한 권유를 방조한 죄목으로 탄핵되어, 함경도 경흥으로 유배가는 도중 이원에서 죽었다. 뒤에 신원되었으며 시호는 문익(文翼)이다.