신라 때 기목진(基木鎭)이었는데 고려초에 기주(基州)로 바꾸었다가 1018년(현종 9) 길주[吉州: 지금의 안동(安東)]에 예속시켰으며, 1172년(명종 2) 감무(監務)를 두었다가 뒤에 다시 안동으로 예속시켰다.
1390년(공양왕 2) 다시 감무를 두고 안동의 속현으로 삼았다가 1413년(태종 13) 기천(基川)으로 고쳐 현감을 두었다. 1451년(문종 1) 은풍현(殷豊縣)과 합쳐 풍기군(豊基郡)으로 승격시켰다. 1973년 풍기면이 읍으로 승격되었으며, 1995년 시ㆍ군통합으로 영주시와 영풍군이 통합되어 새로운 영주시가 되었다.
풍기는 우리나라 최초의 사액서원(賜額書院)인 소수서원(紹修書院)이 있는 곳으로, 1542년(중종 37) 당시 풍기군수였던 주세붕(周世鵬)이 안향(安珦)을 제사하기 위하여 그의 옛집에 사우(祠宇)를 짓고, 이듬해 백운동서원(白雲洞書院)을 건립하였다.
1550년 (명종 5) 이황(李滉)이 군수로 부임하면서 임금에게 소수서원이라는 사액을 받았다. 풍기는 전란을 피할 수 있는 피병지(避兵地)로 이름난 곳이며, 주세붕에 의하여 재배가 장려되었다는 풍기인삼으로 유명하다. 조선시대에는 예천에서 이곳을 거쳐 소백산맥을 넘어 영춘·영월과 이어지는 내륙도로가 발달하였다.