Skip to main content

Top Places to Eat in Kansas City



Bay Boy Specialty Sandwiches

Yelp’s Top 25 Places to Eat is a list unlike any other “best of” out there. Sure, you’ll see your obvious local favorites on the list, but it’s also chock full of hidden gems and off-the-beaten-path joints like Scott’s Kitchen and Catering at Hangar 29 tucked away just outside the airport. From fine dining to shawarma — find them all in Yelp’s Top 25 Places to Eat in Kansas City.

Did your favorite restaurant make it into the top 25? Let us know on Instagram. Remember, we only know how good a spot is if you take the time to review it. So share your thoughts on Yelp, and maybe your favorites will be on next year’s list! 

Topping this year’s best 25 list is Bay Boy Specialty Sandwiches, a spot nestled into the quiet homes of the West Plaza neighborhood and known for their take on delicious dutch crunch bread.  

Pro tip: You’re going to want to make a note of these spots, so we made it easy for you. For great businesses at your fingertips, get the Top 25 to-go. Follow this collection on Yelp.

  1. Bay Boy Specialty Sandwiches (Kansas City, MO/West Plaza)
The Nebraskan Sandwich at Bay Boy Specialty Sandwiches

Cuisine:  American/ Sandwiches

What they’re known for: Their famous dutch crunch bread!

Yelpers say: “What is this place? Heaven. Or pretty close to it I suppose.  Small menu offering an enormous satisfaction (and maybe slightly hot breath). The sandwiches are filling and the bread is just out of this world.  Each day of the week there is a different specialty sandwich. I went with the classic BB and it was so satisfying I wanted more!” – Megan R. 

  1. Willow Spring Mercantile (Excelsior Springs, MO)
Pear, Gorgonzola, Bacon, with an Apricot Chipotle sauce on flatbread at Willow Spring Mercantile

Cuisine:  American (New)

What they’re known for: Missouri wines and fresh ingredient lunches

Yelpers say: “If you’re looking for a place with an amazing menu in the heartland, that seems too “exotic” to find in the heart of America, look no further. Even better, the upstairs has a cute little store to purchase local jams, novelties, and wines.” – Maggie C. 

  1. Vested Garment District Coffee (Kansas City, MO/ Garment District)
Coffee and danish at Vested Garment District Coffee

Cuisine:  Coffee & Tea, Breakfast & Brunch

What they’re known for: Specialty coffee and pastries 

Yelpers say: “Vested is the new girl in high school of every 90s movie. All the characters have to do is give her a chance and in the end they all fall in love. As an invested patron of the Kansas City coffee scene, I often choose my favorite spots over new spots. Today I took a chance and wandered into Vested. Be the Freddy Prince Jr. of your life’s movie and give the new coffee shop a try, your coffee story will definitely have a happy ending. ” – Chris W. 

  1. Scott’s Kitchen and Catering at Hangar 29 (Kansas City, MO/ Northland)
Barbeque platter from Scott’s Kitchen and Catering at Hangar 29

Cuisine:  Barbeque

What they’re known for: Smoked meats, bbq tacos, and bbq burritos 

Yelpers say: “What kind of nutjob BBQ joint serves burritos?  Scott’s Kitchen does and they are super delicious.  … The star of the show was the shrimp burrito.  When I unwrapped it I got that whiff of hickory smoke.  Biting into it was a wonderful and complex taste experience.  You got the shrimp with that smokiness, lime rice, cilantro, etc.  Truly one of the best burritos I think I have ever had. ” – Sean S. 

  1. Aroma Bistro (Smithville, MO)
Salmon at Aroma Bistro

Cuisine:  American (New)

What they’re known for: Fine dining, steak, seafood 

Yelpers say: “LOVE this place. A friend introduced me for brunch one day. I had fairly low expectations because it’s just a little hole in the wall in a small town. But their eggs Benedict was SO good, I had to come back and try dinner. Again, it didn’t disappoint!! We had a nacho appetizer, my husband had chicken and I had steak with shrimp. Every bite was amazing start to finish.  ” – Michelle V. 

  1. Café Corazón (Kansas City, MO/ Westport)
Specialty coffee and tamale at Café Corazón

Cuisine:  Latin American 

What they’re known for: Specialty coffee drinks, empanadas, tamales, and pastries

Yelpers say: “Yes to EVERYTHING happening here!! This is exactly what the neighborhood needed. There’s a Latin influence in the menu, and all the staples are there. Add tamales (for a good cause) to boot and this place is just about perfect. The horchata is to die for, baristas are friendly and helpful, plenty of seating and amazing decor. There’s also a decent amount of street parking. Don’t ask questions, just GO and thank me later! ” – Natalie M. 

  1. Shagan’s Chicken & Paranthas (Overland Park, KS)
Curry Chicken, Butter Chicken and Dal Makhani, basmati rice and naan at Shagan’s Chicken & Paranthas

Cuisine:  Indian 

What they’re known for: butter chicken, pakora, samosas

Yelpers say: “Shagan’s is not just a restaurant. It’s a reminiscence of a lovely punjabi chef and mother cooking authentic food for us. It’s also a lot more than that because you just can’t get enough of her food. You feel full, satisfied, calm and very comfortable after enjoying ghar di roti (a connotation for home cooked meal) from Shagan’s. ” – Harmanjeet K. 

  1. GG’s Birria Barbacoa Cafe (Kansas City, KS)
Birria tacos at GG’s Birria Barbacoa Cafe

Cuisine:  Mexican 

What they’re known for: Birria tacos, enchilada casserole, sandwiches 

Yelpers say: “Ready to have your mind blown? My friend got the birra tacos and I had the chilaquila sandwich on a cold rainy day when we were up north for work.  Both were SO good!  My sandwich had nachos on it!!!! Gabriel (GG) the owner is so sweet- I got out of my car even though it was rainy to tell him how much we enjoyed our food. ” – Jessica F. 

  1. The Russell (Kansas City, MO)
Tacos, chicken, and a sandwich at The Russell

Cuisine:  American, Salad, Sandwiches

What they’re known for: Salads, sandwiches, and baked goods

Yelpers say: “I will be adding this to the list of reasons I love KC. … I could really go overboard talking about the vibe, and interior design of this space , but it would make for some really long reading. I felt like I was in someone’s house for lunch. You will never want to leave. …The olive oil chocolate chip cookie, mouthful I know,is the best chocolate chip cookie I have ever eaten. The texture was the perfect amount of chewy , but not overly sweet. There was a distinct flavor that reminded me of speculoos cookie butter…… secret ingredient?! I’m not mad at it.  Visit this place immediately, you will not be disappointed. ” – Andrea D. 

  1. Excellent Choice (Leavenworth, KS)
Catfish at Excellent Choice

Cuisine:  Southern

What they’re known for: Fried catfish, hush puppies, shrimp 

Yelpers say: “So so so so so delicious!!!! The catfish filet is light and tasty. The cornbread is like cake. Sweet potato pie is like grandma used to make. But most of all, the personalities of the ladies who own the place, absolutely fantastic.” – Maraea F. 

  1. Joe’s Kansas City Bar-B-Que (Kansas City, KS)
  2. Wiener Kitchen (Overland Park, KS)
  3. Boulevard Brewing Tours & Rec Center (Kansas City, MO)
  4. M & M Bakery and Deli (Kansas City, MO)
  5. Betty Rae’s Ice Cream (Kansas City, MO/ Waldo)
  6. Seva Cuisine of India (Kansas City, MO)
  7. Fresh Donuts (Kansas City, MO/ Northland)
  8. Q39 (Kansas City, MO/ Midtown)
  9. Queen Sweets & Bakery (Kansas City, MO)
  10. Oscar’s Authentic Mexican Grill (Olathe, KS)
  11. Messenger Coffee (Kansas City, MO/ Downtown)
  12. Ruby Jean’s Kitchen & Juicery (Kansas City, MO)
  13. Game Day Chicken Wings (Kansas City, MO)
  14.  The Depot (Leavenworth, KS)
  15.  Urban Cafe (Kansas City, MO)

Methodology: Top Places to Eat in Kansas City Methodology: This is an all-time list of the Top Places to Eat in the Kansas City area according to Yelp. We identified businesses in the restaurant category on Yelp, then ranked those spots using a number of factors, including the total volume and ratings of reviews. This list looked at businesses in and around the Kansas City area. All businesses were marked open on Yelp as of May 16, 2022. When available, all businesses on this list have a passing health score as of May 16, 2022.

[gravityform id="4" title="false" ajax="true"]
<script type="text/javascript">var gform;gform||(document.addEventListener("gform_main_scripts_loaded",function(){gform.scriptsLoaded=!0}),window.addEventListener("DOMContentLoaded",function(){gform.domLoaded=!0}),gform={domLoaded:!1,scriptsLoaded:!1,initializeOnLoaded:function(o){gform.domLoaded&&gform.scriptsLoaded?o():!gform.domLoaded&&gform.scriptsLoaded?window.addEventListener("DOMContentLoaded",o):document.addEventListener("gform_main_scripts_loaded",o)},hooks:{action:{},filter:{}},addAction:function(o,n,r,t){gform.addHook("action",o,n,r,t)},addFilter:function(o,n,r,t){gform.addHook("filter",o,n,r,t)},doAction:function(o){gform.doHook("action",o,arguments)},applyFilters:function(o){return gform.doHook("filter",o,arguments)},removeAction:function(o,n){gform.removeHook("action",o,n)},removeFilter:function(o,n,r){gform.removeHook("filter",o,n,r)},addHook:function(o,n,r,t,i){null==gform.hooks[o][n]&&(gform.hooks[o][n]=[]);var e=gform.hooks[o][n];null==i&&(i=n+"_"+e.length),gform.hooks[o][n].push({tag:i,callable:r,priority:t=null==t?10:t})},doHook:function(n,o,r){var t;if(r=Array.prototype.slice.call(r,1),null!=gform.hooks[n][o]&&((o=gform.hooks[n][o]).sort(function(o,n){return o.priority-n.priority}),o.forEach(function(o){"function"!=typeof(t=o.callable)&&(t=window[t]),"action"==n?t.apply(null,r):r[0]=t.apply(null,r)})),"filter"==n)return r[0]},removeHook:function(o,n,t,i){var r;null!=gform.hooks[o][n]&&(r=(r=gform.hooks[o][n]).filter(function(o,n,r){return!!(null!=i&&i!=o.tag||null!=t&&t!=o.priority)}),gform.hooks[o][n]=r)}});</script> <div class='gf_browser_unknown gform_wrapper gform_legacy_markup_wrapper' id='gform_wrapper_4' ><div id='gf_4' class='gform_anchor' tabindex='-1'></div> <div class='gform_heading'> <span class='gform_description'></span> </div><form data-form-name='Newsletter Signup Popup' method='post' enctype='multipart/form-data' target='gform_ajax_frame_4' id='gform_4' action='/community/top-places-to-eat-in-kansas-city/#gf_4' novalidate> <div class='gform_body gform-body'><ul id='gform_fields_4' class='gform_fields top_label form_sublabel_below description_below'><li id="field_4_1" class="gfield field_sublabel_below field_description_below hidden_label gfield_visibility_visible gf-email" data-field-class="gf-email" data-js-reload="field_4_1"><label class='gfield_label screen-reader-text' for='input_4_1' >youremail@address.com</label><div class='ginput_container ginput_container_email'> <input name='input_1' id='input_4_1' type='email' value='' class='large' placeholder='youremail@address.com' aria-invalid="false" /> </div></li><li id="field_4_2" class="gfield gform_validation_container field_sublabel_below field_description_below gfield_visibility_visible" data-js-reload="field_4_2"><label class='gfield_label' for='input_4_2' >Comments</label><div class='ginput_container'><input name='input_2' id='input_4_2' type='text' value='' autocomplete='new-password'/></div><div class='gfield_description' id='gfield_description_4_2'>This field is for validation purposes and should be left unchanged.</div></li></ul></div> <div class='gform_footer top_label'> <input type='submit' id='gform_submit_button_4' class='gform_button button' value='Submit' onclick='if(window["gf_submitting_4"]){return false;} if( !jQuery("#gform_4")[0].checkValidity || jQuery("#gform_4")[0].checkValidity()){window["gf_submitting_4"]=true;} ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_4"]){return false;} if( !jQuery("#gform_4")[0].checkValidity || jQuery("#gform_4")[0].checkValidity()){window["gf_submitting_4"]=true;} jQuery("#gform_4").trigger("submit",[true]); }' /> <input type='hidden' name='gform_ajax' value='form_id=4&amp;title=&amp;description=1&amp;tabindex=0' /> <input type='hidden' class='gform_hidden' name='is_submit_4' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='4' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_4' value='WyJbXSIsImE0YjFiMmUxY2IxMWVhYTljM2FhNzdkODk4NDUzZmY0Il0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_4' id='gform_target_page_number_4' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_4' id='gform_source_page_number_4' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> </form> </div> <iframe style='display:none;width:0px;height:0px;' src='about:blank' name='gform_ajax_frame_4' id='gform_ajax_frame_4' title='This iframe contains the logic required to handle Ajax powered Gravity Forms.'></iframe> <script> gform.initializeOnLoaded( function() {gformInitSpinner( 4, 'https://blog.yelp.com/wp-content/plugins/gravityforms/images/spinner.svg' );jQuery('#gform_ajax_frame_4').on('load',function(){var contents = jQuery(this).contents().find('*').html();var is_postback = contents.indexOf('GF_AJAX_POSTBACK') >= 0;if(!is_postback){return;}var form_content = jQuery(this).contents().find('#gform_wrapper_4');var is_confirmation = jQuery(this).contents().find('#gform_confirmation_wrapper_4').length > 0;var is_redirect = contents.indexOf('gformRedirect(){') >= 0;var is_form = form_content.length > 0 && ! is_redirect && ! is_confirmation;var mt = parseInt(jQuery('html').css('margin-top'), 10) + parseInt(jQuery('body').css('margin-top'), 10) + 100;if(is_form){jQuery('#gform_wrapper_4').html(form_content.html());if(form_content.hasClass('gform_validation_error')){jQuery('#gform_wrapper_4').addClass('gform_validation_error');} else {jQuery('#gform_wrapper_4').removeClass('gform_validation_error');}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */ jQuery(document).scrollTop(jQuery('#gform_wrapper_4').offset().top - mt); }, 50 );if(window['gformInitDatepicker']) {gformInitDatepicker();}if(window['gformInitPriceFields']) {gformInitPriceFields();}var current_page = jQuery('#gform_source_page_number_4').val();gformInitSpinner( 4, 'https://blog.yelp.com/wp-content/plugins/gravityforms/images/spinner.svg' );jQuery(document).trigger('gform_page_loaded', [4, current_page]);window['gf_submitting_4'] = false;}else if(!is_redirect){var confirmation_content = jQuery(this).contents().find('.GF_AJAX_POSTBACK').html();if(!confirmation_content){confirmation_content = contents;}setTimeout(function(){jQuery('#gform_wrapper_4').replaceWith(confirmation_content);jQuery(document).scrollTop(jQuery('#gf_4').offset().top - mt);jQuery(document).trigger('gform_confirmation_loaded', [4]);window['gf_submitting_4'] = false;wp.a11y.speak(jQuery('#gform_confirmation_message_4').text());}, 50);}else{jQuery('#gform_4').append(contents);if(window['gformRedirect']) {gformRedirect();}}jQuery(document).trigger('gform_post_render', [4, current_page]);} );} ); </script>
[gravityform id="4" title="false" ajax="true"]
<div class='gf_browser_unknown gform_wrapper gform_legacy_markup_wrapper' id='gform_wrapper_4' ><div id='gf_4' class='gform_anchor' tabindex='-1'></div> <div class='gform_heading'> <span class='gform_description'></span> </div><form data-form-name='Newsletter Signup Popup' method='post' enctype='multipart/form-data' target='gform_ajax_frame_4' id='gform_4' action='/community/top-places-to-eat-in-kansas-city/#gf_4' novalidate> <div class='gform_body gform-body'><ul id='gform_fields_4' class='gform_fields top_label form_sublabel_below description_below'><li id="field_4_1" class="gfield field_sublabel_below field_description_below hidden_label gfield_visibility_visible gf-email" data-field-class="gf-email" data-js-reload="field_4_1"><label class='gfield_label screen-reader-text' for='input_4_1' >youremail@address.com</label><div class='ginput_container ginput_container_email'> <input name='input_1' id='input_4_1' type='email' value='' class='large' placeholder='youremail@address.com' aria-invalid="false" /> </div></li><li id="field_4_2" class="gfield gform_validation_container field_sublabel_below field_description_below gfield_visibility_visible" data-js-reload="field_4_2"><label class='gfield_label' for='input_4_2' >Email</label><div class='ginput_container'><input name='input_2' id='input_4_2' type='text' value='' autocomplete='new-password'/></div><div class='gfield_description' id='gfield_description_4_2'>This field is for validation purposes and should be left unchanged.</div></li></ul></div> <div class='gform_footer top_label'> <input type='submit' id='gform_submit_button_4' class='gform_button button' value='Submit' onclick='if(window["gf_submitting_4"]){return false;} if( !jQuery("#gform_4")[0].checkValidity || jQuery("#gform_4")[0].checkValidity()){window["gf_submitting_4"]=true;} ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_4"]){return false;} if( !jQuery("#gform_4")[0].checkValidity || jQuery("#gform_4")[0].checkValidity()){window["gf_submitting_4"]=true;} jQuery("#gform_4").trigger("submit",[true]); }' /> <input type='hidden' name='gform_ajax' value='form_id=4&amp;title=&amp;description=1&amp;tabindex=0' /> <input type='hidden' class='gform_hidden' name='is_submit_4' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='4' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_4' value='WyJbXSIsImE0YjFiMmUxY2IxMWVhYTljM2FhNzdkODk4NDUzZmY0Il0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_4' id='gform_target_page_number_4' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_4' id='gform_source_page_number_4' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> </form> </div> <iframe style='display:none;width:0px;height:0px;' src='about:blank' name='gform_ajax_frame_4' id='gform_ajax_frame_4' title='This iframe contains the logic required to handle Ajax powered Gravity Forms.'></iframe> <script> gform.initializeOnLoaded( function() {gformInitSpinner( 4, 'https://blog.yelp.com/wp-content/plugins/gravityforms/images/spinner.svg' );jQuery('#gform_ajax_frame_4').on('load',function(){var contents = jQuery(this).contents().find('*').html();var is_postback = contents.indexOf('GF_AJAX_POSTBACK') >= 0;if(!is_postback){return;}var form_content = jQuery(this).contents().find('#gform_wrapper_4');var is_confirmation = jQuery(this).contents().find('#gform_confirmation_wrapper_4').length > 0;var is_redirect = contents.indexOf('gformRedirect(){') >= 0;var is_form = form_content.length > 0 && ! is_redirect && ! is_confirmation;var mt = parseInt(jQuery('html').css('margin-top'), 10) + parseInt(jQuery('body').css('margin-top'), 10) + 100;if(is_form){jQuery('#gform_wrapper_4').html(form_content.html());if(form_content.hasClass('gform_validation_error')){jQuery('#gform_wrapper_4').addClass('gform_validation_error');} else {jQuery('#gform_wrapper_4').removeClass('gform_validation_error');}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */ jQuery(document).scrollTop(jQuery('#gform_wrapper_4').offset().top - mt); }, 50 );if(window['gformInitDatepicker']) {gformInitDatepicker();}if(window['gformInitPriceFields']) {gformInitPriceFields();}var current_page = jQuery('#gform_source_page_number_4').val();gformInitSpinner( 4, 'https://blog.yelp.com/wp-content/plugins/gravityforms/images/spinner.svg' );jQuery(document).trigger('gform_page_loaded', [4, current_page]);window['gf_submitting_4'] = false;}else if(!is_redirect){var confirmation_content = jQuery(this).contents().find('.GF_AJAX_POSTBACK').html();if(!confirmation_content){confirmation_content = contents;}setTimeout(function(){jQuery('#gform_wrapper_4').replaceWith(confirmation_content);jQuery(document).scrollTop(jQuery('#gf_4').offset().top - mt);jQuery(document).trigger('gform_confirmation_loaded', [4]);window['gf_submitting_4'] = false;wp.a11y.speak(jQuery('#gform_confirmation_message_4').text());}, 50);}else{jQuery('#gform_4').append(contents);if(window['gformRedirect']) {gformRedirect();}}jQuery(document).trigger('gform_post_render', [4, current_page]);} );} ); </script>