Skip to main content

‘Tis The Season: The Do’s and Don’ts For Tipping When You Dine Out at a Restaurant



In a time where some restaurants automatically add a service charge, others have all-inclusive prices, and others stick to the old fashioned method where the customer gets to decide how much tip to leave, tipping etiquette feels more confusing than ever.

In order to figure out the rules once and for all, we talked to Jay Bordeleau, owner of Maven and Mr. Tipple’s Recording Studio in San Francisco. It’s interesting to note that Bordeleau decided adding an automatic 20 percent service charge to the bill was the best way to go at Mr. Tipple’s, where the focus is craft cocktails, small plates, and live jazz. From a customer perspective, he says, “This allows the guest to have a fantastic time without worrying about awkward social norms or doing math.” From a restaurant perspective, it makes even more sense as it allows for a tip pool environment that includes the entire house of hourly employees, including the kitchen staff who would not normally receive tips. He explains, “It’s a legal way to share the tips with everyone.”

Still, though we are seeing more and more restaurants head in that direction, the majority of restaurants still ask customers to decide how much gratuity they’re going to leave at the end of the meal when they sign the bill. For those that aren’t always sure how much to leave or what to do when the service or food isn’t what they expected, Bordeleau helped us come up with this list of do’s and don’ts.

DO: Tip 18 to 20 Percent

Bordeleau says an 18 to 20 percent tip is now the expected norm. “Unfortunately,” he adds, “that number has shifted to the grand total and not the pre-tax subtotal.” Basically, while it’s customary and technically acceptable to tip before tax, everyone from your server to your friends is socially judging you on the after-tax math.

DON’T: Skip Tipping on Alcohol

There are people who believe you don’t need to tip at all on alcohol or that you can tip a smaller percentage. Those people are wrong. Certainly, you could rationalize tipping a smaller percentage on a $2800 bill if your food was $800 and a bottle of wine made up the other $2000. But if you can afford a $2000 bottle of wine, then you can afford to tip 20 percent and that’s really all there is to say about that.

DO: Tip the Sommelier

Bordeleau suggests that if you have a spectacular experience with the sommelier, you should slide them a tip on the side. Five percent of the total cost of the bottle is a good amount. If you know when you arrive at the restaurant that you want great attention from the sommelier, tip him with cash before you sit down and tell him you’re looking forward to drinking great wine with your meal.

DO: Leave a Bigger Tip if You’re a “Difficult” Table

When Bordeleau says “difficult,” he doesn’t mean it in a sense that you demand the quality of product for which you’re paying, as that’s something you should absolutely do. Rather, he means “difficult” in that you’re a large group that’s splitting the bill a million ways or that you’re a group of 20 and half of you show up late and you dine for three hours instead of two. He says, “If you take extra time at a table, it makes up for it if you tip more; effectively, you’re paying rent on the server’s time while you’re sitting there since the table can’t be turned.” In those situations, 30 percent (or more) is appropriate.

DO: Speak with a Manager Immediately if You Receive Bad Service

If you take issue with the service, it’s imperative that you speak with the manager, Bordeleau says. You can also leave a smaller tip, but if you fail to talk to someone about the problem, the server might not even realize there was one, which means you’ll be slapping him on the wrist and he won’t even understand why. It’s also important to speak to the manager as soon as the infraction happens and to allow the restaurant an opportunity to make it right. Whether it’s undercooked food, inattentive service, or something else, Bordeleau says the restaurant absolutely wants to make it right. That being said, if they do fix the issue, you need to acknowledge that and tip accordingly. And whatever you do, never ever leave a passive aggressive note.

DO: Ask for a Refund Instead of Refusing to Tip

This one may come as a shock, but Bordeleau thinks that if you’re going to dock the tip, you need to be prepared to ask for a refund on your meal. Sound crazy? Well, he figures that if there was a problem with the food or service that was so horrific a tip isn’t deserved, then the customer should deal with the meal as though it’s a business transaction: the restaurant delivered a sub-par product, so you should deliver a sup-par payment. The good news is that restaurant managers will almost always go out of their way to make it right because they want you to leave feeling good. But they can’t do that unless you give them an opportunity to do so.

DON’T: Leave a Cash Tip on a Credit Card Transaction

That may sound weird in a world where cash is king, but Bordeleau says dealing with a single transactionary flow is much easier for everyone involved.

DO: Tip Extra if You Aren’t Charged for Something You Order

This one gets a little tricky. If the kitchen sends out a gift–something you did not order–give a warm thank you, preferably to the chef and the people in the kitchen, and leave it at that. However, if you order something, but get it as a “comp” (aka: aren’t charged for it), then Bordeleau says you should tip on the assumed full value.

DO: Buy Beer for the Kitchen if You Want an Extra-Special Experience

Bordeleau says any time you can front load the concept of “paying it forward,” you’ll find people have a lot more generosity. That’s why it’s always best to tip the bartender big at a wedding the first time you order a drink (yes, even if it’s open bar). That same logic also works for rewarding the kitchen staff, a team that in most restaurants is paid by the hour and doesn’t receive any part of the tip. If you want extra dishes sent out, Bordeleau says to bring a six-pack or a case of beer for the kitchen and drop it off with the hostess when you arrive. Basically that’s your way of saying, “Here’s some beer for the end of your shift; let’s have a fantastic evening.”

DO: Tip for the Service and Not Race or Gender

Bordeleau says one thing people often don’t think about when it comes to tipping is how statistically sexism and racism affect tips. “Tip for service,” he says. “Not the person’s gender, hair color, or race… And not if they draw a smiley face on your check.” Nationwide it’s been statistically proven that the best way to get better tips is to change your gender, not to improve your service, and that’s something we all need to be aware of when we’re dining out.

For more insider industry insights, check out our blog and follow us on Facebook, Twitter and Instagram!

Did you find this post valuable?

Click on a star to rate it.

Since you found this post valuable...

Follow us on social media for more great business resources!

We're sorry you didn't find this post valuable.

How could we improve it?

The information above is provided for educational and informational purposes only. It is not intended to be a substitute for professional advice and may not be suitable for your circumstances. Unless stated otherwise, references to third-party links, services, or products do not constitute endorsement by Yelp.

Business resources, delivered to your inbox

Get the latest blog content, info on virtual events, and the occasional freebie.

  • This field is for validation purposes and should be left unchanged.

By continuing, you agree to Yelp’s Terms of Service and acknowledge Yelp’s Privacy Policy.

[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='/businesses/tis-season-dos-donts-tipping-dine-restaurant/#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' >Name</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='/businesses/tis-season-dos-donts-tipping-dine-restaurant/#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>