Повесть открывает рассказ о семье Петруши Гринева и о детстве недоросля. Стремясь обучить ветреного сына «языкам и всем наукам» отец Андрей Петрович нанимает француза Бопре, который больше пьянствует. Спустя некоторое время француза увольняют, после чего Андрей Петрович принимает решение отправить сына на службу, чтобы сделать его настоящим дворянином. Но вместо традиционной блестящей карьеры петербургского офицера отец предпочитает для своего сына суровую службу в одной из крепостей на Яике. По дороге в Оренбург Петр останавливается в Симбирске, где знакомится с гусаром Иваном Зуриным. Гусар берется обучить Гринева игре в бильярд, а затем, воспользовавшись простотой Петра, с легкостью выигрывает у него 100 рублей. Желая избавиться от опеки посланного с ним дядьки Савельича, Петр возвращает долг, несмотря на протесты старика.
Во время езды по оренбургской степи Петр попадает в буран. Ямщик уже отчаялся вывести коней, как вдруг рядом с возком оказывается некий мужик, который напрашивается в вожатые. Незнакомец верно указал путь, и ямщику удалось вывести своих седоков, включая нового попутчика, на постоялый двор (умёт). Там вожатый затевает иносказательный разговор с хозяином, что выдавало в незнакомце «лихого человека». Проведя ночь на умёте, Гринев вновь собирается в дорогу, предварительно отблагодарив вчерашнего вожатого заячьим тулупом. В Оренбурге Петр попадает в распоряжение генерала Андрея Карловича, старого приятеля его отца, и генерал дает юноше направление в Белогорскую крепость, затерянную в сорока верстах от города, на границе с «киргизскими степями».
По прибытии в крепость, оказавшуюся на вид крохотной деревушкой, Петр знакомится с местными жителями и в первую очередь с семьей старого коменданта. Большой интерес у Гринева вызывает остроумный офицер Швабрин, переведенный в крепость из Петербурга за нарушение дисциплины и «смертоубийство».
Пожив некоторое время в крепости, Гринев начинает испытывать симпатию к Маше Мироновой, дочери коменданта. Швабрин из ревности оговаривает Машу перед Гриневым, за что юноша вызывает офицера на дуэль. Во время дуэли Швабрин ранит Гринева.
Раненый Гринев благодаря уходу за ним полкового цирюльника и Маши быстро идет на поправку. Он прощает Швабрина, поскольку видит в его действиях признак уязвленного самолюбия отвергнутого воздыхателя. Сам Петр просит руки Маши и получает согласие девушки. Молодой человек сочиняет трогательное письмо для отца с целью выпросить у него благословение на союз с Марьей Мироновой. Отец, узнавший о дуэли, негодует и отвечает отказом.
Комендант получает извещение из Оренбурга о появлении на Яике «шайки» Емельяна Пугачева и дает указание всем офицерам в крепости готовиться к возможному нападению. Между тем в крепости появляются лазутчики восставших. Одного из них — башкирца — удается схватить, но допросить не получается, поскольку тот нем. Тревожные новости продолжают поступать, и Миронов решает отослать Машу из крепости.
Отправить девушку в Оренбург не удалось, поскольку в день предполагаемого отъезда крепость уже была окружена мятежниками. Комендант, предчувствуя поражение, простился с женой и дочерью, велев переодеть девушку крестьянкой, чтобы она не стала жертвой восставших. Легко захватив крепость, Пугачев приступил к суду над теми, кто не признает его государем. По наущению переметнувшегося к пугачевцам Швабрина главарь восставших намеревался казнить и Петра Гринева, но за «дитятю» вступился верный Савельич. Дядька на коленях вымолил прощение у Пугачева.
Главарь мятежников потому помиловал молодого барина, что после появления Савельича узнал в Петре своего благодетеля. Гринев не узнал в казачьем атамане вожатого, пока ему не напомнил дядька. Пугачев по завершении всех церемоний, связанных с присягой ему жителей крепости, потребовал к себе Гринева. Атаман предложил Петру служить ему, на что молодой дворянин ответил твердым отказом. Пугачеву понравилась честность Гринева, он пообещал офицеру отпустить его в Оренбург.
На следующий день Гринев получил от Пугачева поручение, что передать на словах генералам в Оренбурге и отправился в путь. Перед самым отъездом осмелевший Савельич попытался было получить с Пугачева компенсацию за разворованное казаками барское добро, но «царь» только пригрозил старику. Несмотря на развеселившее его поведение дядьки, Гринев покинул крепость с мрачными мыслями, так как новым комендантом был назначен Швабрин.
По прибытии в Оренбург Гринев сообщает генералу все, что знает о шайке Пугачева, а затем приходит на военный совет. Здесь доводы Гринева в пользу стремительной атаки восставших воспринимаются с явным неодобрением. Один из военных рекомендует «подкупательную тактику». В конечном итоге большинство сходится на необходимости держать оборону города. Спустя несколько дней город оказался осажден восставшими. Во время вылазок за городские стены Гринев получил через урядника письмо от Маши. Девушка просила защитить ее от Швабрина, вознамерившегося силой принудить ее выйти за него замуж. Будучи не в силах уговорить генерала дать ему взвод солдат для освобождения крепости, Петр начинает искать другой выход из создавшегося положения.
Отчаявшийся Гринев покидает Оренбург и направляется в Белогорскую крепость. Уже близко к крепости Петра и Савельича схватили мятежники, которые повели их к Пугачеву. Гринев признается, что едет спасать свою невесту от Швабрина. Атаман с радостью слышит это известие и готов лично поженить молодых и благословить их. Петр уговаривает Пугачева оставить «воровство» и понадеяться на милость государыни. В ответ на это атаман рассказывает ему калмыцкую сказку об орле и вороне, сравнивая себя с орлом.
Пугачев прибывает вместе с Гриневым в Белогорскую крепость и велит Швабрину показать ему сироту. Швабрин нехотя соглашается, тогда обнаруживается, что он держал Машу взаперти на хлебе и воде. Пригрозив Швабрину, Пугачев отпускает на волю девушку и разрешает Петру увезти ее, простив заодно вынужденную ложь Гринева касательно того, кто такая Маша на самом деле.
На обратном пути у одного из небольших городков Гринева задержали караульные, принявшие его за мятежника. На счастье юноши, майор, который должен был разобраться в происшествии, оказался уже известным Петру гусаром Зуриным. Зурин посоветовал не возвращаться в Оренбург, а для большей безопасности остаться при нем, отправив невесту в родовое имение Гриневых. Проводив Машу вместе с Савельичем, Петр в составе гусарского полка выступил в поход против пугачевцев. В ходе преследования гусарами отрядов восставших Гриневу открываются страшные картины опустошения в деревнях, охваченных крестьянской войной. Спустя некоторое время Зурин получает тайный указ об аресте Гринева и под конвоем отправляет Петра в Казань.
В Казани Гринев предстал перед следственной комиссией, в которой к его рассказу отнеслись недоверчиво. Предвзятое мнение о Гриневе и его нежелание упоминать о своих отношениях с Машей Мироновой привели к тому, что судьи признали Петра виновным в дружбе с главарем бунтарей. Как оказалось, обвинение строилось главным образом на ложных показаниях Швабрина. Гринев попадает в тюрьму, а после он узнает о решении государыни отправить его на вечное поселение в Сибирь. Тогда Маша принимает решение ехать в Петербург и просить помощи у самой императрицы. В Петербурге девушка узнает, что двор переехал в Царское Село и направляется туда. В одном из царскосельских садов Маша встречает даму, с которой вступает в беседу и излагает суть своего прошения государыне. Дама делает вид, что согласна передать слова Маши императрице. Только потом Миронова узнает, что говорила с самой Екатериной II, когда в тот же день явилась во дворец по приказу императрицы. Государыня даровала Гриневу помилование.
Автор заканчивает повествование, которое велось от имени Гринева, собственным примечанием. В кратком послесловии он сообщает, что Гринев был освобожден в 1774 г. по именному указу Екатерины II и в январе 1775 г. присутствовал на казни Пугачева, который кивнул Петру, восходя на плаху.
В этой недописанной черновой главе рассказывается об обстоятельствах посещения Гриневым (выведен как Буланин) родного имения. Полк Гринева находился неподалеку от деревни, где жили его родители и невеста. Отпросившись у командования, Петр ночью переправился через Волгу и пробрался в свою деревню. Здесь молодой офицер узнает, что его родители заперты в амбаре земским Андрюхой. Гринев высвобождает родных, но велит им по-прежнему укрываться в сарае. Савельич сообщает, что отряд пугачевцев во главе со Швабриным берет деревню. Гриневу удается отбить первую атаку и запереться в амбаре. Швабрин решает поджечь амбар, что вынуждает отца и сына Гриневых совершить вылазку. Пугачевцы берут в плен Гриневых, но в это время в деревню въезжают гусары. Как оказалось, их привел в деревню Савельич, тайно пробравшийся мимо бунтарей. Гринев, получив у родителей благословение на брак с Машей, вновь возвращается в армию. По прошествии какого-то времени он узнал о поимке Пугачева и получил разрешение вернуться к себе в деревню. Гринев был счастлив, но какое-то предчувствие омрачало эту радость.