WooCommerce: How to add different shipping rates per country

Updated September 4, 2023

WooCommerce shipping rates
WooCommerce is great and is the best plugin for most WordPress e-commerce websites. However its shipping options can be quite limited.

On the face of it, WooCommerce offers a good choice of delivery and shipping options - flat rate, free shipping, international flat rate, local delivery and local pickup.

Unfortunately this isn't as good as it looks for two reasons:

  • A lot of WordPress online shops need more granular control over their shipping rates - particularly if they ship to multiple countries or regions with different postage costs.
  • As it comes, WooCommerce only shows customers the shipping cost - or even whether you will ship to their country - on the checkout page. That's a disaster for WooCommerce stores that ship internationally! Customers get incredibly frustrated to add products to their cart and then discover that you either don't ship to their country, or that the shipping cost is too high.

Fortunately, there's an excellent solution to each of these problems:

  • Solution 1 - A lot of people add more flexible international shipping costs by using YITH's WooCommerce Product Shipping plugin
  • Solution 2 - The WooCommerce Shipping Calculator plugin lets customers check whether you ship to their country, and calculate the cost, directly on the product page. This is a super-simple way to avoid the frustration of getting bad news on the checkout. Either use it on its own or with YITH's plugin.

Don't lose sales due to unexpected shipping costs!

How to set up Flat Rate per State/Country/Region for WooCommerce

  1. Find the 'Flat Rate per State/Country/Region for WooCommerce 'plugin in the WordPress plugin repository. (Plugins → Add New in the WordPress admin for your website). Install and activate it as usual.
  2. Go to WooCommerce → Settings → Shipping in the WordPress admin. You will see that the plugin has added a new link to the right hand side of the list of shipping options: Flat Rate per State/Country/Region.
  3. Ignore all the information about which countries belong to different regions - you probably don't need this. Scroll down to the actual plugin settings and set up the plugin as required. It's pretty self-explanatory and you can hover over the question mark icons for an explanation of each option.

Note: If you use this plugin then it will control ALL your shipping options, replacing WooCommerce's built-in Flat Rate and International Flat Rate options. This means that you need to disable Flat Rate and International Flat Rate and use the 'Flat Rate per State/Country/Region' section to add ALL your postage costs, including your domestic shipping rate and the overseas shipping. If you forget to disable the other shipping options then they will appear as alternate shipping methods in the checkout.

Flat Rate per State/Country/Region for WooCommerce screenshotAn example of how to use the plugin

Although setting up the plugin is fairly self-explanatory, here's a screenshot showing how to set it up to achieve the following scenario:

  • Shipping cost of $6.95 per order for the United States only (this example assumes that the website is based in the US).
  • Shipping cost of $15.00 for Canada.
  • Shipping cost of $22.50 for the rest of the world.

But what about shipping to individual countries within the UK?

TheFlat Rate per State/Country/Region for WooCommerce plugin is ideal for setting separate shipping rates for each country or region. However there are times when you want to break down your shipping zones further. For example you might want to charge different postage for England, Scotland and Wales - which WooCommerce treats as a single country (United Kingdom).

Since writing this post, WooCommerce has introduced shipping zones into its core plugin. This gives extra shipping options without needing any further plugins, so it's worth experimenting with. I've written a separate post about how to charge different shipping rates for each UK country.

Let customers calculate international shipping costs on the product page

Add shipping tab to WooCommerce product page

So far, you've learned how to solve the problem of not being able to add fine-grained shipping costs per country. The second problem was how to let customers check international shipping costs without having to add products to their cart first.

You can easily solve this by installing the WooCommerce Shipping Calculator plugin. This handy plugin adds a domestic or international shipping calculator to your chosen location on the product page. That way, customers can enter their country and see the shipping cost straight away. As a result, they can make an informed decision on whether to add it to their cart.

Don't lose sales due to unexpected shipping costs!

It's your turn

We've looked at two of the best WooCommerce shipping plugins:

I'd love to hear how you use them to improve how you charge for shipping per country. Please share your experiences in the comments below.


  1. Judith Shaw
    November 16, 2019 Reply

    Hi Katie, Thanks for the info - I really hope it helps. I had previously set up shipping rates to vary between the U.S., Europe and Canada for one item I sell. I had used WooCommerce’s built-in Flat Rate and International Flat Rate options and yet my orders from Europe have not charged the shipping fee (it ships free in the US.) Hopefully this plug in and your great tutorial on installing and setting will work. Having to eat those shipping costs myself is really eating into my profit in a big way.

    • EJ
      December 10, 2019 Reply

      Hi, Judith. I'm glad this is useful to you. Please let us know how it goes with the shipping costs to Europe, which hopefully are now included in the order so you'll no longer need to shoulder them. Thanks!

  2. anon person
    January 23, 2019 Reply

    You are intermixing and confusing Country with County.

    • Katie Keith
      January 24, 2019 Reply

      I have checked the article and I use the word 'Country' to indicate the country and 'Region' to indicate the county - it doesn't refer to 'County' at all because I use 'Region' for this instead. Hope that helps to clarify it.

  3. Saed Ahmed
    August 29, 2018 Reply

    Hi katie
    Is there any way i can make one country which my site locates free of shipping and others charge shipping rate

    • Katie Keith
      August 29, 2018 Reply

      Yes, you just need to create a shipping zone for your country and charge free shipping to this zone, and create other shipping zones for the other countries with paid shipping.

  4. Prabhu
    August 22, 2017 Reply

    if it is possibe to add cost in %

    • Katie Keith
      August 22, 2017 Reply

      Do you mean as a % of the order? I haven't seen this but it's worth looking at the WooCommerce Table Rate Shipping plugin as you can be quite creative with it.

  5. Bola Afarait
    February 11, 2017 Reply

    Nice plugin...am from Nigeria too,but please how can i do it to set it has country/state/Local government Area..... Because in Nigeria,we have different localities that are far from each other and d prices will be different from each other,,,please help me,how can u configure this..,

  6. Emmanuel
    November 4, 2016 Reply

    I am in Nigeria, is there a way i can set diffferent different prices for different states?

    • Katie
      November 4, 2016 Reply

      Since I wrote this post, WooCommerce has added shipping zones to its core plugin. You can create a different shipping zone for each Nigerian state and assign different postage costs to each one.

  7. Derrick
    October 20, 2016 Reply

    Great article. Could you send a better image of the example?

    • Katie
      October 20, 2016 Reply

      Hi Derrick, the problem with the image is that it's very tall and your browser will only show it the full height of your screen. When you open the image, right click on it and save it to your computer. You can then open it directly on your computer and zoom in to see it better.
      I hope that helps.

Please share your thoughts...

Your email address will not be published.