본관은 반남(潘南). 초명은 박상갑(朴相甲), 자는 동보(同甫). 할아버지는 박사임(朴師任)이고, 아버지는 공조정랑 박인원(朴麟源)이며, 어머니는 윤용(尹容)의 딸이다.
경사(經史)를 탐독하고 여러 서책을 섭렵해 사우(士友)들이 우러러보았다. 1770년(영조 46) 정시 문과에 병과로 급제, 설서(說書)에 임명되었다.
이어 홍문록(弘文錄: 홍문관의 교리·수찬을 선발하기 위한 제1차 추천기록)에 들고 호당(湖堂)에 뽑혔으며, 천거(薦擧)로 세자시강원(世子侍講院)에 들어가서 서유신(徐有臣)·이의준(李義駿)과 같이 세손을 잘 보좌하니, 사람들이 그들을 ‘삼춘방(三春坊)’이라 하였다.
일마다 간곡한 말을 했고 품은 뜻이 있으면 숨기는 것이 없었으며, 오직 임금의 마음을 바로잡는 것을 제일의(第一義)로 삼았다. 여러 관직 및 우부승지(右副承旨)를 거쳐, 외직으로 춘천부사(春川府使)가 되어서는 정사(政事)의 처리가 깨끗하고 간결하였다.
1777년(정조 1) 벽파로 지목한 대계(臺啓)의 탄핵으로 향리(鄕里)로 쫓겨났다. 양주(楊州)의 병려(丙廬)에 살면서 띠 풀로 입힌 지붕이 비바람을 가리지 못하고 먹을 양식이 떨어져도 조금도 걱정하거나 탄식하는 기색이 없었다.
그 뒤 다시 복직되어 형조참의·안주목사(安州牧使)·형조참판을 거쳐 평안감사(平安監司)가 되었는데, 상원군(祥原郡) 관아가 백성들에게 불편한 곳에 있다고 조정에 건의해 옮기도록 하였다. 그리고 청렴과 검약으로 자신을 다스리니 사람들이 감히 비도(非道)로 대하지 못하였다.
1798년 정경(正卿)에 올라 공조판서가 되었고, 이어 전설사제조(典設司提調)·한성부판윤을 거쳐 지의금부사(知義禁府事)·오위도총부도총관(五衛都摠府都摠管)·지돈녕부사(知敦寧府事)·형조판서·지경연사(知經筵事)·사직서제조 등을 역임하였다. 대대로 벼슬한 가문에 태어나서 청렴한 관료로 이름을 떨쳤다. 시호는 문정(文貞)이다.