Hello to our blog readers!

Everyone involved in e-commerce has a certain idea about the way delivery works. A very vague idea, to be honest. That is why most vendors feel bewildered when dealing with real-life situations.

In this article, I’m going to discuss real cases from my support experience. So if you are new to delivery issues or if you need a bit of advice on what module to chose, this article is just for you.

The article will also be useful for those who want to pass Magento 2 Solution Specialist certification or similar exams.

Please note that I explain shipping in Magento 2 modules. Nevertheless, the explanations are also valid for Magento.

But first things first. To meet your goals, you need to know the peculiarities of Magento delivery, as well as native Magento shipping features and their limitations.

So there we go.

Try out our new Magento 2 Shipping Suite to combine the powers of the three basic shipping extensions. Set up a flexible shipping process with complex rules and most suitable shipping options.

Magento delivery workflow: introduction

When you place an order in a webshop, you need to choose a delivery option. To ship an order, the store needs the following information from your side.

Cart content

These are products added to the cart. They may have a different weight or size that define the delivery cost. Sometimes, a product is not something you can touch. For example, it may be a virtual book. It can be stored as a downloadable product in Magento. If so, a customer can download it as a file at their Account page. Hence, assuming this product doesn’t have a hard copy, it cannot be shipped.

You can also render a virtual product shippable. Just record the file to a disk. In this case, the disk becomes a simple product in Magento. Obviously, this product is shippable, and you can send it in a parcel.

Conclusion: shipping is applicable to deliverable (physical) products. In case your cart contains virtual products only, there should be no Magento Shipping Options section on the checkout page.


In other words, it’s the address to which the order should arrive. The location is very important because the price and delivery options available depend on this. For example, shipping from Paris to London is cheaper than from Paris to Wellington. Note that the destination is not always covered by the delivery service.

As you can see, the delivery cost is always different. It can be estimated on the cart or the checkout page only. That is why it is not usually provided on catalog pages.

Magento Shipping options

This feature defines how the order will be shipped. Here a customer is to choose a service provider (DHL, UPS, USPS, webshop delivery team, etc.) and the way to send the order (by air, ground, courier, dropshipping, etc.)

In Magento, service providers are called shipping carriers, and the ways to deliver an order – shipping methods.

The basics explained, we move on to actual shipping process in Magento.

Magento 2 built-in shipping functionality

Magento provides standard shipping methods out of the box.  Let’s review each of them.

This is quite simple. We are just to set a Minimum Order Amount (MOA) and specify the ?ountries where the delivery is free of charge. We need to set a Minimum Order Amount and specify the zone of coverage. If the destination is in this zone and the subtotal is equal to or greater than MOA, the new method is shown on the storefront:

In Magento, Free Shipping has its own carrier. It is not connected to any existing service provider. Still, as a store owner, you can send packages in any convenient way

This shipping method is a bit more complicated, as we have to set a fixed shipping rate for an order or for each purchase in the order. Additionally, you can specify an extra fee.

Just like Free Shipping, Flat Rate is a default Magento setting. It is not assigned to any delivery service provider (e.g. UPS) allowing webstore owners to engage a delivery service they prefer.

This is the basic functionality that establishes the dependency between the shipping price and destination. Normally, shipping expenses for the nearby locations remain the same. So, the delivery to 221B Baker Street is very likely to cost just as much as to 221A or 210 Baker Street.

Hence, it is handy to group shipping cost into zones. Usually, a zone is specified by using postcodes.

To learn more about these options in Magento and Magento 2, please, refer to the corresponding Magento and Magento 2 user guides.

By default, Magento allows you to choose one method and one address per order only. The whole order (even if it comprises several products) is treated as one physical unit, which cannot be split. So, you can’t send a part of the order by sea, say, to Madagascar, and the other part by air to Japan. However, in some cases splitting an order is the only reasonable solution, and for this matter, you can use Multiple Address Checkout.

To enable it in Magento 1, go to Admin panel > System > Configuration > Sales > Shipping Settings:

After that, you can split the order.

If you use Magento 2, please, go to Admin panel > Stores > Configuration > Sales> Multishipping Settings:


Syncing Magento 2 with popular shipping carriers

Magento 2 offers out-of-the-box integrations with the popular service providers (UPS, USPS, DHL, FedEx and more).

Here’s how it works: (a) the webstore sends API queries to the carrier and (b) fetches the available shipping options and their cost. When an order is submitted, the carrier will take care of the shipment: they assign tracking number, hire a courier, etc.

These shipping carriers usually deliver parcels according to the pre-set schedule, so your customers are very unlikely to experience a “lost-at-the-post” situation. And this, in its turn, contributes to positive customer relationships with your store.

In offline delivery,  the orders are processed and shipped by the store staff independently, and they don’t usually take measures to validate the address. On the contrary, delivery service integrations require a validated address for cost estimation. If the postcode-and-city combination is incorrect, the service provider will not find the destination. Hence, Magento will not show any available shipping methods.

Using these options is quite easy. You only need to connect your webshop with your account. To learn more, please check the relevant user guides for  Magento and Magento 2.

All in all, it looks like Magento specialists have all the shipping bases covered. But why then users complain about scarce options, limited features, etc.?

In fact, the platform provides basic functionality, but its realization for every store depends on a particular store owner’s needs, which may vary greatly. That’s why it makes sense to develop additional Magento modules to cover the issues owners can’t solve with native tools.

Amasty shipping extensions

Below we provide a set of extensions we developed to help our customers ensure seamless deliveries.

Magento 2 Shipping Table Rates

This extension is an advanced version of default Magento table rates.

The module creates an additional shipping carrier in Magento. The standard title is Shipping Table Rates, but you can easily change it.

A webshop admin can create an unlimited number of custom shipping methods associated with the carrier:

The rate depends on the destination, weight, size, price and number of items, or the combination of all these parameters.

Please, check the user guide to see the examples.

Besides, this extension supports alphanumeric postcodes. Our leading support manager provides some advice on configuring shipping table rates in this case.

Magento 2 Shipping Rules

This module is totally different. It doesn’t add new shipping methods to your Magento store. Instead, it modifies the delivery cost calculated by both Magento 2 and Amasty Shipping Table Rates.

For example, you want to offer free shipping for particular products. This means that the delivery charges will remain unchanged when you add or remove items in question from the cart.

To achieve this, a shipping rule with the following configuration is required:

To activate this rule with a coupon code you need to link the Shipping Rule with a Shopping Cart Rule:

Magento 2 Shipping & Payment by Customer Groups

This module disables certain shipping and payment options for customers.

Suppose you have individual and business customers shopping in your webstore, and the latter enjoy free shipping. Meanwhile, individual customers shouldn’t be eligible for that.

With this extension, you’ll easily assign a delivery method to each allowed or banned group.

Magento 2 Shipping Restrictions

This module offers more flexible restriction options than the previous one. It works in the following way. You set a condition by using Magento rules interface. When the condition is satisfied, the selected shipping method is not available anymore.

For example, your delivery area is Canada only. If the destination is out of Canada, the purchase can’t be shipped. In this case, you need the following configuration:

So, the restricted shipping method won’t be available.

By contrast, if the order is to be shipped to Canada, this delivery option will appear in the cart and at the checkout again.

There’s another possibility. Some products are banned in, say, California. If this product is in the cart and the destination is in California, there should be no shipping options available.

It’s also possible to disable particular payment methods by using Magento 2 Payment Restrictions.

Magento 2 Delivery Date

This module enables customers to select days and time of delivery. As a store owner, you can improve the delivery schedule by disabling all the unavailable periods from the calendar. All your customers will be notified immediately.

A customer can specify the comfortable schedule: weekday morning (before going to the office), Sunday afternoon, etc. There’s no need to call anyone if you need to schedule an immediate or postponed delivery:

Magento 2 Default Shipping Method

This functionality is included in our Magento 2 One Step Checkout extension. It allows determining a visitor’s location and instantly calculates the shipping cost.

If geo information is not available, the module will use default values. As a result, your customers will see the pre-calculated delivery price and proceed to the checkout immediately. For more information on setting up this extension please check the Default Values section in the user guide.

Haven’t you migrated to Magento 2 yet?

Don’t worry, you can use the same logic in the corresponding Magento extensions. Besides, there are more extensions you can use in your Magento store. Please, check the list below.

Magento Free Shipping After Discount

“Wait a second, but free shipping is a native functionality, isn’t it?” you may think.

Well, it is, but practice shows that free shipping in most cases needs some further customization.

The thing is, native calculation ignores the discount applied to the cart. When you apply a coupon code, the subtotal decreases and takes the free magento shipping option away from you.

Free Shipping After Discount calculates costs precisely and displays the relevant delivery options only.

In Magento 2, this functionality makes part of Shipping Rules extension.

Magento Shipping per Product and Percent Shipping

Shipping per Product adds a custom shipping carrier with one new method. The delivery cost of each product is its attribute. When you estimate the shipping cost, these rates are just summed up:

Percent Shipping offers an unlimited number of shipping methods. The charge is a percent of the order total, and it may differ for various products or categories:

These extensions are prototypes of our Table Rates and Shipping Rules.

What’s more, one extension can’t always address a task efficiently. Luckily, you can combine them for better results, and this approach works perfectly well for advanced shipping tasks.

Real-life examples from support team

In this section, I will discuss common use cases reported by our clients as well as our recommendations on addressing them. (The examples are for Magento 2, but they are relevant for Magento as well.)

The core extension in these examples is Shipping Table Rates. This module offers solutions for a number of cases, and it gets more effective when mixed with other modules. Before you dive in, please read about the most essential patterns of this product.


Proceed with the popular questions about How to…

In Shipping Table Rates user guide, we explain how to offer free shipping for particular shipping types. Let’s check what else we can do in order to achieve this.

You can use Magento default Cart Price Rules. This is a default functionality, so please refer to Magento or Magento 2 user guide to learn more.

Every rule has a Free Shipping field. It allows shipping the order either with a discount or for free.

Suppose we have a simple shipping method – $10 per kg:

Now we can create a coupon-based cart price rule. In this example, we offer a 70% discount:

When it is set to “For shipment with matching items”, there will be a discount equal to the shipping charge. The order will be sent for free.

If you choose “For matching items only”, it will work as if products from “Actions” tab were absent from the cart:

In the previous example, we had two delivery options available – $5 and $10. We reduced the delivery charge to zero. In this case, the cost is the same, so the customer can choose the option they like.

When the delivery is free for a customer, the store owner still has to pay for it. Hence, it makes sense to limit the offer by applying the discount to particular methods only.

We will extend the previous example by creating a shipping rule. Flat Rate is cheaper, so our goal is to make only flat rate delivery free.

To achieve this, you have to disable free shipping in the cart price rule and put 0 in the Delivery Cost field:

With Shipping Table Rates, you can also offer free shipping for particular products only.

In the case above, we reduced the delivery charge for one method. We can also disable all the other options and make this price the only one available.

To achieve this, we use Amasty Shipping Restrictions:





Let’s discuss this with the help of an example.

At Amasty, we like the orange color. So, I will offer free shipping for orange clothes only. To achieve this, I need to specify the condition in the Products tab:

Now, if I remove orange products from the cart, the shipping cost will remain the same.

To inform clients about promotions of the kind, you can use Magento 2 Product Labels:

Some products are fragile and they need to be treated gently. For a store manager, this means that there are additional delivery expenses. Magento 2 Shipping Rules allows making the shipping cost higher to cover these fees.

Magento 2 Product Labels can help you with informing the customer about the increased shipping cost.

Customer Groups is a built-in Magento functionality that classifies customers. Here are the respective user guides for Magento and Magento 2.

Magento extensions help to combine this classification with a particular task, for example, setting Cart Price Rules:

It’s possible to define the scope for Shipping Table Rates, Shipping Rules and Restriction Rules in the same way.

Customer Group is a static entity. Every customer can be assigned to a single group, and a webshop manager can change the group only manually. In its turn, a segment is a dynamic unit: people who have a birthday soon, people who have more than 3 completed orders, people who spent more than $1000, etc.

When we set a rule (whatever the type) in Magento 2 Customer Segmentation, customer attributes and customer segments can be a condition: 




Summing up

From my experience in support, I see that shipping is a critical Magento function. Seemingly simple, it grows more and more complex when applied to a particular store. I hope this comprehensive guide will clear the fog for you, and you’ll be able to resolve the issues you deal with and manage your store efficiently.

If you still have troubles, please contact the support team for further assistance.

Have a few thought to share? Drop us a line below!