People opening box of knowledge

Why Google’s Updated API & Billing Structure Should Matter To You

News flash

Well, it was good while it lasted. Google’s recent changes to its Maps API products might shock you – and your wallet. The search engine giant has restructured and repriced their Google Platform APIs, raising its prices over 1,400%.

Google Maps Platform

A few weeks ago, Google rolled out significant changes requiring customers to pay more for map product usage and making it necessary to have an official API key connected to a credit card to even use their APIs. With the new changes, customers will get the first $200 of monthly usage for free; however this credit will now only cover 28,000 page loads per month. This is important to understand, especially if you’re using Dynamic Maps, because previously Google allowed 25,000 free page loads per day. No, your eyes are not deceiving you – the change they made went from per day to per month. Furthermore, previously if the amount of requests or loads exceeded 25,000 you were charged $.50 for every 1,000 additional requests. This update will charge a whopping $7.00 for every 1,000 additional requests.

So what does that mean for you? It means that if you already have an API key attached to a billing account, you should absolutely check your credit card statement and Google Cloud account to see if there have been any substantial charges since the change took effect. To protect yourself from any massive, unexpected charges in the future, you can set a daily limit on the number of requests per day that your app will accept. The downside to this however is that once the limit is reached your users will see a blank space where the map should be.

One bright spot here is that if you’re a nonprofit, crisis responder, news media organization or startup, you can apply for additional Maps platform credit by following the instructions Google provides on how to enroll.

Google has stated that this change has come from listening to their audience – developers and business owners. “We’ve heard that you want simple, easy to understand pricing that gives you access to all our core APIs. That’s one of the reasons we merged our Standard and Premium plans to form one pay-as-you go pricing plan for our core products.”   While it’s true that this merger has created a simplification of their 18 individual APIs into three products – Maps, Routes, and Places, it could also be a huge financial hit for many and will undoubtedly send many developers looking for open-source alternatives.

In the likely event that this sounds like a foreign language leaving you scratching your head, let us know! Our tech-savvy experts are equipped with the knowledge to help you navigate these changes.

[gravityform id="10" title="false" description="false" ajax="true"]
<div class='gf_browser_unknown gform_wrapper gravity-theme' id='gform_wrapper_10' ><div id='gf_10' class='gform_anchor' tabindex='-1'></div><form method='post' enctype='multipart/form-data' target='gform_ajax_frame_10' id='gform_10' action='/blog/google-updates-api-and-billing-structure/#gf_10' novalidate novalidate="novalidate"> <div class='gform_body gform-body'><div id='gform_fields_10' class='gform_fields top_label form_sublabel_below description_below'><div id="field_10_4" class="gfield gfield--width-full gfield_contains_required field_sublabel_below field_description_below hidden_label gfield_visibility_visible" data-js-reload="field_10_4"><label class='gfield_label' for='input_10_4' >Email Address<span class="gfield_required"><span class="gfield_required gfield_required_text">(Required)</span></span></label><div class='ginput_container ginput_container_text'><input name='input_4' id='input_10_4' type='text' value='' class='large' placeholder='Email Address *' aria-required="true" aria-invalid="false" /> </div></div><div id="field_10_3" class="gfield gfield--width-three-quarter field_sublabel_below field_description_below hidden_label gfield_visibility_visible" data-js-reload="field_10_3"><label class='gfield_label' for='input_10_3' >Phone</label><div class='ginput_container ginput_container_phone'><input name='input_3' id='input_10_3' type='tel' value='' class='large' placeholder='Phone Number' aria-invalid="false" /></div></div><div id="field_10_5" class="gfield gform_validation_container field_sublabel_below field_description_below gfield_visibility_visible" data-js-reload="field_10_5"><label class='gfield_label' for='input_10_5' >Comments</label><div class='ginput_container'><input name='input_5' id='input_10_5' type='text' value='' autocomplete='new-password'/></div><div class='gfield_description' id='gfield_description_10_5'>This field is for validation purposes and should be left unchanged.</div></div><div id="field_submit" class="gfield gfield--width-quarter field_sublabel_below field_description_below gfield_visibility_visible" data-field-class="gform_editor_submit_container" data-field-position="inline" data-js-reload="true"><button type="submit" id="gform_submit_button_10" class="gform-button gform-button--white button gform-button--width-full" onclick='if(window["gf_submitting_10"]){return false;} if( !jQuery("#gform_10")[0].checkValidity || jQuery("#gform_10")[0].checkValidity()){window["gf_submitting_10"]=true;} ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_10"]){return false;} if( !jQuery("#gform_10")[0].checkValidity || jQuery("#gform_10")[0].checkValidity()){window["gf_submitting_10"]=true;} jQuery("#gform_10").trigger("submit",[true]); }'>Get Started</button></div></div></div> <div class='gform_footer top_label'> <input type='hidden' name='gform_ajax' value='form_id=10&amp;title=&amp;description=&amp;tabindex=0' /> <input type='hidden' class='gform_hidden' name='is_submit_10' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='10' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_10' value='WyJbXSIsIjNlMDgwMzI4ZGJhNjlmZjk1YmQwMGZmMWVkYjg5NWRmIl0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_10' id='gform_target_page_number_10' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_10' id='gform_source_page_number_10' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> <p style="display: none !important;"><label>&#916;<textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_2" name="ak_js" value="218"/><script>document.getElementById( "ak_js_2" ).setAttribute( "value", ( new Date() ).getTime() );</script></p></form> </div> <iframe style='display:none;width:0px;height:0px;' src='about:blank' name='gform_ajax_frame_10' id='gform_ajax_frame_10' title='This iframe contains the logic required to handle Ajax powered Gravity Forms.'></iframe> <script type="text/javascript"> gform.initializeOnLoaded( function() {gformInitSpinner( 10, 'https://www.brawnmediany.com/wp-content/plugins/gravityforms/images/spinner.svg' );jQuery('#gform_ajax_frame_10').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_10');var is_confirmation = jQuery(this).contents().find('#gform_confirmation_wrapper_10').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_10').html(form_content.html());if(form_content.hasClass('gform_validation_error')){jQuery('#gform_wrapper_10').addClass('gform_validation_error');} else {jQuery('#gform_wrapper_10').removeClass('gform_validation_error');}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */ jQuery(document).scrollTop(jQuery('#gform_wrapper_10').offset().top - mt); }, 50 );if(window['gformInitDatepicker']) {gformInitDatepicker();}if(window['gformInitPriceFields']) {gformInitPriceFields();}var current_page = jQuery('#gform_source_page_number_10').val();gformInitSpinner( 10, 'https://www.brawnmediany.com/wp-content/plugins/gravityforms/images/spinner.svg' );jQuery(document).trigger('gform_page_loaded', [10, current_page]);window['gf_submitting_10'] = 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_10').replaceWith(confirmation_content);jQuery(document).scrollTop(jQuery('#gf_10').offset().top - mt);jQuery(document).trigger('gform_confirmation_loaded', [10]);window['gf_submitting_10'] = false;wp.a11y.speak(jQuery('#gform_confirmation_message_10').text());}, 50);}else{jQuery('#gform_10').append(contents);if(window['gformRedirect']) {gformRedirect();}}jQuery(document).trigger('gform_post_render', [10, current_page]);} );} ); </script>
[gravityform id="10" title="false" description="false" ajax="true"]
<div class='gf_browser_unknown gform_wrapper gravity-theme' id='gform_wrapper_10' ><div id='gf_10' class='gform_anchor' tabindex='-1'></div><form method='post' enctype='multipart/form-data' target='gform_ajax_frame_10' id='gform_10' action='/blog/google-updates-api-and-billing-structure/#gf_10' novalidate novalidate="novalidate"> <div class='gform_body gform-body'><div id='gform_fields_10' class='gform_fields top_label form_sublabel_below description_below'><div id="field_10_4" class="gfield gfield--width-full gfield_contains_required field_sublabel_below field_description_below hidden_label gfield_visibility_visible" data-js-reload="field_10_4"><label class='gfield_label' for='input_10_4' >Email Address<span class="gfield_required"><span class="gfield_required gfield_required_text">(Required)</span></span></label><div class='ginput_container ginput_container_text'><input name='input_4' id='input_10_4' type='text' value='' class='large' placeholder='Email Address *' aria-required="true" aria-invalid="false" /> </div></div><div id="field_10_3" class="gfield gfield--width-three-quarter field_sublabel_below field_description_below hidden_label gfield_visibility_visible" data-js-reload="field_10_3"><label class='gfield_label' for='input_10_3' >Phone</label><div class='ginput_container ginput_container_phone'><input name='input_3' id='input_10_3' type='tel' value='' class='large' placeholder='Phone Number' aria-invalid="false" /></div></div><div id="field_10_5" class="gfield gform_validation_container field_sublabel_below field_description_below gfield_visibility_visible" data-js-reload="field_10_5"><label class='gfield_label' for='input_10_5' >Comments</label><div class='ginput_container'><input name='input_5' id='input_10_5' type='text' value='' autocomplete='new-password'/></div><div class='gfield_description' id='gfield_description_10_5'>This field is for validation purposes and should be left unchanged.</div></div><div id="field_submit" class="gfield gfield--width-quarter field_sublabel_below field_description_below gfield_visibility_visible" data-field-class="gform_editor_submit_container" data-field-position="inline" data-js-reload="true"><button type="submit" id="gform_submit_button_10" class="gform-button gform-button--white button gform-button--width-full" onclick='if(window["gf_submitting_10"]){return false;} if( !jQuery("#gform_10")[0].checkValidity || jQuery("#gform_10")[0].checkValidity()){window["gf_submitting_10"]=true;} ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_10"]){return false;} if( !jQuery("#gform_10")[0].checkValidity || jQuery("#gform_10")[0].checkValidity()){window["gf_submitting_10"]=true;} jQuery("#gform_10").trigger("submit",[true]); }'>Get Started</button></div></div></div> <div class='gform_footer top_label'> <input type='hidden' name='gform_ajax' value='form_id=10&amp;title=&amp;description=&amp;tabindex=0' /> <input type='hidden' class='gform_hidden' name='is_submit_10' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='10' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_10' value='WyJbXSIsIjNlMDgwMzI4ZGJhNjlmZjk1YmQwMGZmMWVkYjg5NWRmIl0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_10' id='gform_target_page_number_10' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_10' id='gform_source_page_number_10' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> <p style="display: none !important;"><label>&#916;<textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_3" name="ak_js" value="140"/><script>document.getElementById( "ak_js_3" ).setAttribute( "value", ( new Date() ).getTime() );</script></p></form> </div> <iframe style='display:none;width:0px;height:0px;' src='about:blank' name='gform_ajax_frame_10' id='gform_ajax_frame_10' title='This iframe contains the logic required to handle Ajax powered Gravity Forms.'></iframe> <script type="text/javascript"> gform.initializeOnLoaded( function() {gformInitSpinner( 10, 'https://www.brawnmediany.com/wp-content/plugins/gravityforms/images/spinner.svg' );jQuery('#gform_ajax_frame_10').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_10');var is_confirmation = jQuery(this).contents().find('#gform_confirmation_wrapper_10').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_10').html(form_content.html());if(form_content.hasClass('gform_validation_error')){jQuery('#gform_wrapper_10').addClass('gform_validation_error');} else {jQuery('#gform_wrapper_10').removeClass('gform_validation_error');}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */ jQuery(document).scrollTop(jQuery('#gform_wrapper_10').offset().top - mt); }, 50 );if(window['gformInitDatepicker']) {gformInitDatepicker();}if(window['gformInitPriceFields']) {gformInitPriceFields();}var current_page = jQuery('#gform_source_page_number_10').val();gformInitSpinner( 10, 'https://www.brawnmediany.com/wp-content/plugins/gravityforms/images/spinner.svg' );jQuery(document).trigger('gform_page_loaded', [10, current_page]);window['gf_submitting_10'] = 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_10').replaceWith(confirmation_content);jQuery(document).scrollTop(jQuery('#gf_10').offset().top - mt);jQuery(document).trigger('gform_confirmation_loaded', [10]);window['gf_submitting_10'] = false;wp.a11y.speak(jQuery('#gform_confirmation_message_10').text());}, 50);}else{jQuery('#gform_10').append(contents);if(window['gformRedirect']) {gformRedirect();}}jQuery(document).trigger('gform_post_render', [10, current_page]);} );} ); </script>
[gravityform id="4" title="true" description="true" ajax="true"]