Blog

How to Restrict Free Shipping in Magento

How to Restrict Free Shipping in Magento

Online stores often offer free shipping to their customers. But what if you want to restrict free shipping to certain locations or minimum cart totals? We recently had to set up free shipping on orders over $50 to the continental U.S. (sorry Alaska and Hawaii) for a client. We'll show you how we did it using Magento, our open-source eCommerce platform of choice.

With Magento's built-in settings, you can achieve free shipping in one of two ways: the free shipping method, or free shipping using a specific carrier method.

The free shipping method simply gives the store owner the option to offer generic free shipping not specific to any carrier. This is equivalent to Amazon.com's Free Super Saver Shipping. The customer can select the free shipping option, and the store owner ships the order using whichever carrier and method they would like to use. This shipping option allows the store owner to set a minimum order total to qualify for free shipping.

Free shipping method screenshot
Free shipping method settings

The second built-in setting is carrier free shipping. Using this method, you can specify in a carrier's shipping settings which method (if any) should be free. Like the generic free shipping method above, you can set a minimum order total for the customer to qualify for free shipping. For example, if I use UPS to ship all of my orders, I'll go to the UPS shipping settings in the Magento System Configuration. I can then specify a free shipping method (such as Ground), and a minimum order requirement.

Free shipping option screenshot
Free shipping using carrier method settings

These two built-in free shipping settings may work well for many online stores, but some store owners would like to only offer free shipping to certain geographic regions. In our case, we were working with a client who wanted to restrict free shipping to the continental U.S due to the high cost of shipping to Alaska and Hawaii. Unfortunately, Magento's shipping settings do not allow restricting free shipping based on geography. Luckily, however, there's an easy way to create free shipping based on geographical regions using Magento's built-in shopping cart price rules."

Shopping cart price rules
To access Magento's shopping cart price rules, go to the "Promotions" menu.

Magento calculates shipping costs for carriers like FedEx and UPS based on zip codes. In order to achieve free shipping for specific geographical regions, you need to determine the set of zip codes associated with those regions. For our example, we wanted to provide free shipping to the U.S. excluding Alaska, Hawaii, and U.S. territories. So we did some research about U.S. zip codes, and formulated a set of rules to apply free shipping to only the continental U.S. In addition, we also set a minimum order amount of $50 in order to qualify for free shipping. Click on the "Conditions" tab to define these rules.

Geographical shipping conditions
This set of rules includes orders $50 or greater, shipped to the continental U.S.

To reiterate this, the set of all zip codes for locations in the continental U.S. (excluding of course Alaska, Hawaii, and U.S. territories) can be defined as follows:

  • Zip code is greater than 00900 but less than 96200
  • Zip code is equal to or greater than 97000 but less than 99500

Finally, you just need to define what will happen when the conditions are met. In this case, we want tp provide free shipping when the conditions are met (the location is within the continental U.S. and the order total is $50 or greater). To do this, we click on the "Actions" tab. Under the "Free shipping" setting, change it to "For shipment with matching items."

Free Shipping Actions
Set the action to include free shipping on qualifying orders.

Congrats! You now have free shipping set up for any order equal or exceeding $50 shipped within the continental United States. To check it, take a look at the cart's shipping estimate calculator.

Georgia shipping screnshot Alaska shipping screnshot
Compare the shipping estimates for Anchorage, Alaska and Atlanta, Georgia.

Creating your own rules

What if you want to provide free shipping to Alaska and Hawaii, but you don't want to provide it to some other region? You can apply the same technique for mapping and excluding certain zip codes. Check out this map and list for reference:

The first digit of the ZIP code is allocated as follows:

  • 0 = Connecticut (CT), Massachusetts (MA), Maine (ME), New Hampshire (NH), New Jersey (NJ), Puerto Rico (PR), Rhode Island (RI), Vermont (VT), Virgin Islands (VI), Army Post Office Europe (AE), Fleet Post Office Europe (AE)
  • 1 = Delaware (DE), New York (NY), Pennsylvania (PA)
  • 2 = District of Columbia (DC), Maryland (MD), North Carolina (NC), South Carolina (SC), Virginia (VA), West Virginia (WV)
  • 3 = Alabama (AL), Florida (FL), Georgia (GA), Mississippi (MS), Tennessee (TN), Army Post Office Americas (AA), Fleet Post Office Americas (AA)
  • 4 = Indiana (IN), Kentucky (KY), Michigan (MI), Ohio (OH)
  • 5 = Iowa (IA), Minnesota (MN), Montana (MT), North Dakota (ND), South Dakota (SD), Wisconsin (WI)
  • 6 = Illinois (IL), Kansas (KS), Missouri (MO), Nebraska (NE)
  • 7 = Arkansas (AR), Louisiana (LA), Oklahoma (OK), Texas (TX)
  • 8 = Arizona (AZ), Colorado (CO), Idaho (ID), New Mexico (NM), Nevada (NV), Utah (UT), Wyoming (WY)
  • 9 = Alaska (AK), American Samoa (AS), California (CA), Guam (GU), Hawaii (HI), Marshall Islands (MH), Federated States of Micronesia (FM), Northern Mariana Islands (MP), Oregon (OR), Palau (PW), Washington (WA), Army Post Office Pacific (AP), Fleet Post Office Pacific (AP)

Zip code map
Map of U.S. Zip Code allocation

Posted in:
DiggThis

Comments

Consultantnomo's picture

Awesome post. Ironically, I just set up similar rules 3 days ago but was glitching related to a problem where I want only certain products to have free shipping. Today, when I went to search the issue, your very well laid out post made my rules mess much easier. Thanks.

Isaac's picture

Glad I could help! I struggled for a while to figure out to define the free shipping rules. It was kinda of fun to forensically figure out the zip codes though.

Barry's picture

This article is exactly what I'm looking for, problem is I have checked my work 3 times and it does not work. Every time this rule is active it automatically applies FREE shipping to UPS ground no matter what the order value. (I set it to be $100 or more). I know it is set up right because if I enter a coupon CODE for this it works perfectly. If I remove the coupon code so it apples automatically I just defaults to FREE Shipping no matter what.

Any thoughts?

Isaac's picture

If you don't need to restrict by geography...
Simply using the built-in carrier settings with NO promotion rules:
1. Set your free shipping method to Ground (or whatever you want).
2. Set "free shipping with minimum order amount" to enabled.
3. Set "minimum order amount for free shipping" to 100.

If you DO need to restrict by geography...
In the built-in carrier settings:
1. Set your free shipping method to Ground (or whatever you want).
2. Set "free shipping with minimum order amount" to disabled.
3. Set "minimum order amount for free shipping" to 100.

And then set the promotional rule as defined in the article. Make sure you have the "subtitle is equal to or greater than 100" rule set in place.

Let me know if it's still not working for you.

Tony's picture

Hello Isaac,

I was beating my head also due to the fact that I also kept getting $0 shipping for AK and HI after your conditions and actions. But after disabling the free shipping from my carrier (UPS), it works wonders!

Thank you so much for the post.

Anonymous's picture

Barry, did you ever get this resolved? I'm having the exact issue right now. Thanks :)

Nate's picture

Outstanding post and quite helpful. Do you have any insight into the following scenario:

My client ships perishable goods and ground ships them within a 6 state region (ground gets there in a day or 2) however they have to 2nd day air shipto all other states to prevent spoilage. They want the shipping method based on the location of the shipment, but do not want to offer the customer a choice between the two. Can you set up rules to force a particular method based on location as well? I haven't been able to get my head around this one.

Isaac's picture

Hey Nate,

Magento does have the ability to only allow a shipping method for specific countries. It does not, however, have the built-in ability to only allow a shipping method for specific states or zip codes. Theoretically, I suppose it would be possible to tweak the module to pay attention to a different geographical region (like states or zip codes) instead of countries. I haven't tried this, but I think I remember seeing a third-party module that does this without affecting the core code.

I think the best solution to your problem is Magento's built-in table rate shipping module. With the table rate module you can specify a table of fixed rates for destination vs. weight, price, or number of items ordered. The owner then chooses whichever shipping method they would like to use, rather than being tied to a specific carrier. So for example, you could charge everybody in Kansas $10 shipping per item and everybody in Florida $15 shipping per item. Or instead you could charge the shipping rate by the weight of the order or the order total crossed with the destination.

You can see an article about how to set up table rate shipping here:
http://www.magentocommerce.com/knowledge-base/entry/how-do-i-set-up-tabl...

Jason's picture

Great post, this is a much easier and more elegant method than using table rates as the Magento team suggest.

One question though, why is it necessary to both exclude Alaska and Hawaii AND include all other zip codes? Shouldn't the Shipping State/Province is not Alaska and Shipping State/Province is not Hawaii be sufficient?

I'm going to do some testing now on this right now, but figured you had probably exhausted the possible scenarios, so maybe you have some insight regarding this already.

Isaac's picture

Thanks.

I included the zip code rules for two reasons: because it's more precise and because shipping for the carriers (i.e. UPS and FedEx) is based on zip code, not state. By explicitly including just the zip codes of the lower 48 states, no one will get free shipping if they aren't in the contiguous U.S. This effectively excludes Alaska and Hawaii, but also excludes all U.S. territories like Guam, Puerto Rico, etc. that have U.S. zip codes.

In this sense, the zip code rules are necessary and the state rules are redundant and therefore optional.

Casey's picture

Isaac,
First off, thanks for the excellent walk through on how to set up this very useful rule. It has worked like a charm for us. However, I seem to have found a loop hole with the Puerto Rico (Possibly Guam, etc I haven't tested other territories yet) exclusion...

Free shipping is still being offered for Puerto Rico if the customer has United States selected for country, then Puerto Rico for the State. However, if the customer has Puerto Rico selected for the country it does not offer free shipping.

I've double/triple checked the rule was set up properly and checked to make sure only the United States was selected for the Magento free shipping option...

Is it possible to remove Puerto Rico from the list of States for the United States?
Or any other suggestions on resolving this issue or is this just a Magento bug?

Thanks again,
Casey

Isaac's picture

Hey Casey,

The best way to block free shipping to U.S. territories is to modify the rule to block out their zip codes as well as the Alaska and Hawaii zip codes. If you take a look at the map above, you can see that the following schema exists for territory zip codes:

AP: 962** - 966**
PW/FM/MH/MP/GU: 969**
AS: 96799
PR: 006-009

Just remove these zip code ranges from the matching zip codes and you're good!

Good luck getting it to work.

-Isaac

Casey 's picture

That worked! Thanks again Isaac for not only creating this walk through but staying on top of comments and helping others out....

Jason's picture

Ah ha! I hadn't thought about US Outlying islands, thanks!

Jason's picture

Thanks again for the great tip, this is working perfectly for us.

In addition to offering free shipping over a certain threshold, we also offer flat rate shipping on all orders in the Continental US below that point. Any creative ideas on how we can limit that flat rate shipping option to the lower 48? Obviously that can't be done with the default flat rate module, and I can't think of a way to do it using the same method as this article.

I would like to continue using the standard UPS lookup based on package weight for air shipments, so I really don't want to go to table rates if it can be helped.

Isaac's picture

My best advice is to use table rate shipping alongside the standard UPS module. Without table rates only defined for the lower 48, the method will only show up for the lower 48. The FedEx module will show up for everybody and the customer can choose whichever shipping method is cheapest (or whichever they prefer).

Jason's picture

Ah, I didn't realize table rate shipping could live "alongside" other shipping methods, I thought it would show up as it's own shipping method during checkout.

Clearly I'll have to experiment with this in our development platform.

Thanks for the feedback!

Isaac's picture

No problem. The table rates do show up as their own shipping method, but it will show up in addition to any other shipping methods (like UPS). If the table rate isn't defined for a region, the shipping method shouldn't show up at all, but I haven't personally tested this. You can label this shipping method whatever you like. For example, you can call it "flat rate shipping" if you want.

Jason's picture

Yep, that's exactly what I was thinking, I'll configure it for flat rate shipping, and then if the destination is outside the lower 48, or the order total is over our free shipping limit it should remain hidden.

Thanks a bunch!

Jason

รถมือสอง's picture

Good job! THANKS! You guys do a great website, and have some great contents. Keep up the good work.
best regards,

umesh sharma's picture

Thanks! great tutorial.

Caleb's picture

Is there any way to setup a rule to disable the flat rate shipping option for items over X weight? Looks like a cart rule would be the best way to go about it, but it isn't one of the available actions that I can tell.

Isaac's picture

My only thought right now would be to use table rate shipping using weight versus location. That way you can specify a flat rate under a certain weight and a higher rate or no rate at all for over a certain weight.

Scott's picture

Your example is great but I noticed that it also makes the Flat Rate $0 as well. I want to do the same thing you are doing but only have FedEx Ground as the free option. Do you know any trick to do that?

Isaac's picture

Scott, yes, you can do this by setting the shipping method as a condition for the free shipping. So, the shopping cart price rule would say: "Shipping Method is not [flatrate] Fixed," or similarly, "Shipping method is [ups] Ground."

Alternatively, if you don't even want the flat-rate option to even appear for areas where the person qualifies for free shipping, you can set up the flat rate shipping using table rate shipping by geographical region. Wherever the table rate shipping isn't defined, that shipping option should not appear.

Scott's picture

Isaac, thank you so much. It totally solved my problem. I can't believe I didn't think of it! Go treat yourself to something nice today knowing you helped a stranger...

Isaac's picture

No problem, glad I could help!

Allan's picture

Im just starting up my new webshop, and are using a "give-away" auktion on FB to test the shop with real customers.

I have had 2 trades with very low bids going through. 1 and2 Euros.

Problem is, that the code I put in Magento does not calculate correct if the rebate (incl. tax) is to high according to the price before tax.

ie: normal price incl. tax 19,75 (ex 16,60) Rebate should be 17,75 to buy the product for 2 Euro as the lucky new customer just did. The system will only calculate the 16,6 as max rebate and the price is 3,15 instead of 2,00 Euro

Is there a way around this?
Can you help?
Thanks!! ;)

Isaac's picture

You might try increasing the discount to see what effect it has. The other possible problem I can think of a set minimum order. Go to System > Configuration and then click on the "Sales" tab. Under the "minimum order amount" section you can check to see if a minimum order amount is in place. If it is, turn it off. Other than that, you may need to play around with tax settings. I'm not familiar with Magneto's way of dealing with VAT/built-in tax.

Allan's picture

Hello Isaac
The system will only calculate the discount up to the price before tax...
... and tax setup for calculation... hmm!!

I'll just have to not sell products that cheep ;)
(What I did instead was to make a new product only with 1 pcs. on stock with no showings on any catagories - priced at the discounted price - and gave the winner the url for that product directly)

Thank you for your answer anyway!

Regards
Allan

Isaac's picture

Another way to accomplish this would be to suspend the tax rules for your product. You can set a specific tax class for each product. Then the "discount" price can simply include whatever tax you want.

Allan's picture

Hello Isaac

That solved my problem!!

Thank you very much :)

BR Allan

Jen's picture

Isaac, great job with this! This is exactly what I was looking for.

However, I am having issues setting up free shipping for orders over 100.00 (excluding Alaska and Hawaii). I followed the shopping cart price rules word for word, I have table rate shipping in place for all orders (This is a necessity), I have tried disabling the "Free Shipping" method in the configuration, and I have also tried disabling the UPS "Free shipping over..." rule. The results are either the "Free Shipping" method is available for all states, or for none. Do you have any possible suggestions as to what I could be doing wrong?

Thanks in advance!

Isaac's picture

Hey Jen,

If you're using table rate shipping as your only shipping method, you actually don't need the cart promotion rule. My method is useful when you want to use a method other than table rate shipping. You'll want to set the table rate shipping condition to "Price vs. Destination" in the table rate shipping configuration. Then in a CSV file (you can use Excel to edit CSV files), you can specify the shipping cost for combinations of locations and order totals. For orders over $100 in locations that you specify, you can specify the table rate as $0 in order to achieve free shipping. For more information on setting up table rate shipping, check this article:

Magento Knowledge Base | How Do I Set Up Table Rate Shipping?

Jen's picture

Hey Isaac,

Thanks for getting back to me so quickly. I didn't realize I could set this up with table rate shipping (Can you tell I'm new to Magento?). Thanks for your help!

Isaac's picture

Hey Jen, no problem- glad to see the Magento community is expanding.

Brian's picture

Cool article... worth it just for the zipcode map. How do I set up magento to not offer free shipping on certain products (based on sku, or whatever), but DO offer it for all of USA?

Isaac's picture

Hey Brian, all you need to do is add a rule to your free-shipping promotion that restricts the free shipping to a range of SKUs, product titles, or categories. If you want free shipping to apply to the whole order if one of the qualifying items is present, you need to put the rules in the "conditions" tab. If you only want the free shipping to apply for certain items, you'll have to specify the qualifying products in the action tab.

Dave's picture

Good post, my question is if you want to setup a coupon code to do the same thing. The coupon code is invalid unless a customer will actually using the shipping estimator box to state they are in one of qualifying states. So unless I say I am in NJ first, I cannot add the coupon code.

I would much prefer for the coupon code to be accepted at first, but either provide the free shipping price or not depending on if the customer qualifies.

Any ideas?

Isaac's picture

The problem comes from the declaration: "Shipping Country is United States"

You could probably remove that clause of the rule. I just included it for redundancy.

Or, if you're not comfortable removing that rule, you can create a conditions combination that says:

If ANY of these conditions are TRUE :
Shipping Country is United States
Shipping Country is ...

Essentially, what that says is, "if the shipping country is the United States or if it is not set, then [apply free shipping]." Obviously the shipping country must be set when the customer goes to check out, so there's no way to abuse this to get free shipping.

Dave's picture

I don't think this solves the problem...It would basically allow the coupon code to be accepted without having a country set...but then when a customer is checking out, if they are not in the US, they will get the option for free shipping.

The difference between what I'm trying to do and what you're doing in the post is that you are creating a rule without a coupon code...and that works great. If you try to do the same without a coupon code, it will require the user to set one of the requirements in order for the coupon code to be validated.

Isaac's picture

Hey Dave,

In order to checkout, the customer must set a country. By allowing them to apply free shipping without a country set, you're allowing them see a shipping quote. The real shipping cost should update once the real shipping address has been entered during checkout.

Dave's picture

Ahhh ok, I see what you mean now, makes complete sense! Thanks!

Joby's picture

Thanks for the great info!

Is there a way to setup the free shipping as an option a customer service rep using the admin tool can access, but a normal end user on the site won't see? Specifically, some business clients with a PO. Or perhaps a way to setup free shipping per customer?

Isaac's picture

Yes. I can think of two ways to do this. First, you can use coupon codes (see the 5 comments immediately above yours). If you don't want to use a coupon code, you can set the promotional rule to only take effect for a certain group of users such as "NOT LOGGED IN, General, Wholesale, Reseller." This setting is under the "Rule Information" tab when editing the promotion.

Brian's picture

Hi Isaac - Just wanted to say thanks. This is a brilliant solution, especially the zip code addition.

Jean-Patrick Bisson's picture

I wanted to add lower 48 states and Canada so I built it like this

[Editor note: code redacted for clarity]

Is there something I am doing wrong here?

Thanks a lot!

Awesome blog by the way...I'm gonna stick around

Jean-Patrick Bisson's picture

Oh, and I added this addon so I could pull the prices all from Canada Post:

http://www.collinsharper.com/website-modules/magento-modules/magento-can...

Anyways, let me know if that is what is making the difference.

Thanks,

JP

Isaac's picture

Thanks, Jean-Patrick. I redacted the rules code you sent me for clarity. From what you sent me, it looks like you tried to include states/provinces from all around the world. The exclusion rule excluding Alaska and Hawaii is really more redundant than anything else. The most important part of the promotion is the range of zipcodes that must match for the free shipping promotion to activate. I'd recommend applying the same approach with the Canadian postal codes/districts.

If after you set it up like this and it's still not working, it could be a conflict with the shipping module you installed. Within that shipping module, you have to be able to select a method as "free" in order for the promotion to apply to the method.

Jonathan's picture

I setup the rules exactly as you have them but for some reason the free shipping option if given on every product regardless of price and regardless of the customer's location.

Any suggestions? I am running 1.4.1.0

Thanks!

jim's picture

Isaac - you've been incredibly helpful to people on here - i was wondering if you might be able to give me some advice?

the way i have things set up right now, a user gets the option to choose one of 3 different fedex rates. however - if he elects not to select any of them from the radio buttons and simply check out via paypal, no postage gets added.

do you have any idea how i can stop the user from checking out until he has selected a shipping rate?

cheers

jim

Isaac's picture

Hi Jim,

Have you tried setting up the shipping calculation on the PayPal end of things? You should be able to set up shipping settings in PayPal so that even if a customer doesn't select something in Magento before checking out, they shipping will still be charged.

-Isaac

jim's picture

cheers mate - i'll try that. i was thinking it might easier to remove the direct paypal link from the shopping cart page - but i'm wary of doing that as (despite the potential for users not updating the shipping cost) it all works..

Skye's picture

I am trying to set up a simple FREE SHIPPING coupon. I only only ships to the U.S. The above instructions are not working for me. My example is I am selling an item for $4.50 and I want them to have free shipping using a coupon code FREESHIP. Should be easy. I went into Promotions then Shopping Cart Price Rules and named the item Free Shipping. Status is active and all customer groups are highlighted. Uses per coupon 1000 and uses per customer 100. From 08/30/10 to 09/06/10. Priority 0. In RSS Feed: Yes. Done
Conditions: If All of these are True: Subtotal equals or greater than 3.
Actions: Apply percent of product discount: 0. Discount amount: 0. Maximum Quanitity Discount is applied to: 0. Discount Quantity Step (Buy X): 0. Free shipping: for shipment with matching items. Stop further rules processing: No.Left the last rule item blank because I want this to apply to all items. It doesn't work. What am I doing wrong?
I

Isaac's picture

Stopping further rules processing won't prevent it from being applied to multiple items, it just prevents customers from using other coupons on combination with the free shipping coupon. But this isn't your problem.

When you try to enter "FREESHIP" when checking out, do you get an error that says you entered an invalid coupon or does the free shipping fail to take effect?

If the first, it's a problem with your rule conditions. One thing you might try entering selectors in the "Apply the rule only to cart items matching the following conditions" section of the Actions tab.

In the second, you likely do not have a free shipping method set up. Go to your shipping configuration and make sure your method has a free shipping method specified. It doesn't need to be active in the configuration, but it needs to be specified.

Skye's picture

When I use it I get the message "Coupon code "_____" was applied successfully" but I see no change in shipping amount or method. I did not previously have a free shipping method set up, but I added one in the shipping methods section.

Do I have to somehow link it to this coupon? I'm totally confused.

Isaac's picture

Sorry, I should have been more clear. You don't want to set up the "Free Shipping" method of shipping, but rather, you want to specify in whatever shipping method you are using (i.e. FedEx, UPS, etc.) which shipping method should be designated as free in the event that free shipping is triggered. So if you're using FedEx, for example, you would set this under the FedEx shipping method settings.

Skye's picture

BINGO! It worked! Thank you so much. I've had three people look at this and all of them were baffled. You know your stuff, Isaac!
Thanks again.

Isaac's picture

Thanks and no problem- glad I was able to help!

John Beauford's picture

Are there any known issues with the successful applications of coupons not updating the subtotal or total correctly? We are seeing this on valid coupons. Any help or direction to resources would be appreciated.

Isaac's picture

Hey John, I don't know if any bugs that would cause that, however I do have one possible cause to your problem. Check your configuration settings to see if coupons are applied pre-tax or post-tax. Due to the way some European tax systems/VAT work, these is an option to apply discounts either pre-tax or post-tax. Could this be your issue?

John Beauford's picture

Our setting for "Apply Tax after Discount" is set to "No". And this is not something we have changed.

The really strange thing is that the price amounts sent to the payment gateway for collection on an order are the discounted amounts (correct), however the actual subtotals on the order within magento (and on the cart view) are incorrect and show a balance due from the customer in exactly the same amount as the applied coupon for the gateway transaction. So the coupon is applied but somewhere Magento is getting confused. I am just not sure where.

Our coupons were functional earlier today but for some reason now they are behaving this way and we havent been able to figure out the root cause yet.

Thanks for your insight.

John Beauford's picture

OK we figured out what the problem was. The sort order in "Check out totals sort order" under Configuration->Sales was not correct. This influences what you see in terms of the calculated total when coupons are applied. In our case subtotal was not the lowest in the sort order and this causes the coupon discounts (which in our case only apply to the subtotal) to not be applied. By changing the sort order so that subtotal was the lowest numeric value our problem was solved.

Our sort order ended up being:
Subtotal - 10
Discount - 20
Shipping - 30
Fixed Product Tax - 40
Tax - 50
Total - 100

I hope this helps someone else out there.

John

Teri's picture

Hi,
I set up my shopping cart with free shipping for purchases $75 and up excluding Alaska and Hawaii exactly like you demonstrated. I'm not sure what I'm doing wrong, because it doesn't seem to exclude Alaska & Hawaii. Do I need to disable the free shipping under shipping methods in order for this to work? I did try that and it just removed the free shipping all together and the flat rate is the only thing that is offered.
I want to offer free shipping for orders $75 and up excluding Alaska & Hawaii and charge a flat rate of $5 for orders below the minimum and for all orders that are shipped to Alaska & Hawaii. Could you please tell me what I might be doing wrong.
One more thing, when this is set up correctly will the shopping cart offer both the flat rate and the free shipping for the customer to choose from or will it select the right calculation for them? Thank you in advance.
Teri

Isaac's picture

Hi Teri,

Your problem is that you don't want to choose the free shipping shipping method, you just want to apply free shipping to the shipping method you're using. Flat rate (unlike UPS, FedEx, etc.) does not allow for a free shipping rate. In order to accomplish what you want to do, you need to use Table Rate shipping for destination vs. weight, price, or number of items ordered (whichever you prefer).

You can see an article about how to set up table rate shipping here:
http://www.magentocommerce.com/knowledge-base/entry/how-do-i-set-up-tabl...

Terry's picture

You've graciously spent a lot of time trying to help folks with this Free Shipping setup issue. But, I've noticed across this thread as well as others, that no one is able to address the simple question:
"What if I ONLY want to give a free shipping reward (coupon code) to current customers that I've sent an email offer to, with coupon code, if they spend over $100, and are in the continental U.S., within a specific time?"

I'm on v1.4.0.1.

I've set up a Free Shipping rule (with the coupon code in the name of the rule) and tested, and it says the Coupon code "XXXXXX" was applied successfully, but the shipping charges don't go away, and a "free shipping" choice doesn't appear as a choice in the shipping methods in the cart.

I've tried all combinations of your explanations, but the only way the free shipping works, is if Free Shipping is enabled in Shipping Methods. But then, one doesn't even need a coupon code, because as soon as anyone breaks the $100 subtotal, the "free shipping" choice pops up.

I got the same results when disabling the "Free Shipping" method in the Shipping Methods, and just changing the free shipping settings in UPS and USPS in Shipping Methods from "none" to "ground", active and $100, but once again, these will work with or without the coupon code.

Does the name or code of the rule need to be entered in a field of the Shipping Method's "Free Shipping" method?

Or is this a bug in v1.4?

Thanks

Terry's picture

Just figured it out....
Set the Free Shipping method to "enable" and order amount to "1000000".
Then the rule works on its own and the customer gets the additional choice of Free Shipping when the coupon code matches.
Thanks anyway.

Isaac's picture

Hey Terry,

Thanks for posting your solution. You can actually do it in the way that I posted in the article with the addition of a coupon code. Check the exchange between me and Skye for details.

Sean Molin's picture

Is there anyway to get it so conditional free shipping shows up as FREE SHIPPING separate from my UPS and USPS options? We don't want people to have an option for which carrier provides their free shipping. There really should be a way to conditionally enable and disable shipping methods.

Then we could set up conditions to turn on or off the free shipping module without even touching the carrier options.

This would be a piece of cake if we didn't have to restrict specific items (clearance) from free shipping.

Isaac's picture

Hi Sean,

Look a few posts up... Terry was kind enough to share a method that should do just that.

ChrisA's picture

How would I go about setting up:

Contiguous United States:
FedEx 2-Day (2 business days) - Free
FedEx Overnight (next business day) - $20

Alaska, Hawaii and all off-shore U.S. territories
FedEx 2-Day - $15
FedEx Overnight - $30

Thanks!
Chris

Isaac's picture

Hey Chris,

Because you're not using FedEx to calculate shipping rates, there's no need to use the FedEx shipping module for this. Instead, you can set up your rates using both the flat rate and table rate shipping modules.

Because table rate doesn't support different classes of shipping (i.e. 2-day versus overnight), you have to use both table rate and flat rate methods to accomplish what you want to do. This is a tad cumbersome, but it should get the job done.

Here's what you're going to want to do:

Set your flat-rate shipping at $15 and label it "FedEx 2 Day" (or something similar). Then employ a shopping cart promotion as I detailed in my article to provide free shipping for the contiguous United States.

Then, after that you can use table rate shipping to set up the FedEx Overnight rates based on the order vs. the destination. Check the following article for info on how to setup table rate shipping:
http://www.magentocommerce.com/knowledge-base/entry/how-do-i-set-up-tabl...

Now, one disclaimer: I haven't tested my shopping cart promotion rules with the flat rate shipping method, so it's possible this doesn't work. If it doesn't, my next recommendation would be to somehow duplicate the table rate shipping method as a local module (maybe rename it to "table rate 2") and then set up the shipping based on this. This would require some programing and module experience in Magento.

Post a comment and let me know if this works for you.

ChrisA's picture

Hi Isaac,

Thanks so much for your thorough explanation. Unfortunately the Rule didn't seem to work with Flat Rate shipping. It gave me the $15 flat rate shipping and didn't trigger the free rate when I checked out in the contiguous US.

I guess my only option left is your secondary solution...but I don't know a lot about it. If I duplicate the tablerate shipping module and call it tablerate2, wouldn't I still only be able to upload one tablerate.cvs doc in the back end? I believe it only allows you to store one tablerate.cvs. Can you give any further insight into this method? Are there any other workarounds?

Thanks Isaac! You've been so helpful to so many people on this forum...it blows my mind that you are taking so much time to help complete strangers....thats good karma at its best! :)

Chris

ChrisA's picture

Also, do you think this "multi tablerate" idea could be a solution? It looks like this extension allows you to specify different shipping methods within your tablerate.

Multiple Tablerates

Thanks,
Chris

Isaac's picture

Yes-- that looks like it does exactly what you need it to do-- and is an easier and better solution than trying to duplicate the table rates module. Good find.

Let me know if it works out for you.

-Isaac

Isaac's picture

Hey Chris,

No problem- it's my pleasure.

That's what I suspected since the flat rate shipping doesn't have a "free method." Unfortunately, it's not quite that simple. You're right that you can't use two different csv files. You'd have to go through and find the core files that allow table rate shipping and them duplicate those files (renaming the functions to something like "tablerate2") in the local code directory, in order to get another entirely separate shipping method that functions the same way the table rates method does. If I get some time later, I'll see if I can put together something that will do this.

Brady's picture

Great write-up and solution for this issue.

The problem I'm having is with usability. Magento reports the coupon code is invalid unless 1) The customer is already logged in with their account - OR - 2) The customer selects a country, state and zip from the "Estimate Shipping and Tax" box.

I'm sure that would lead to a lot of calls from customers saying the coupon code isn't working.

Any ideas on how to get around that?

Isaac's picture

Hey Brady,

You can remove the country and state rules -- they are just for redundancy. The zip code rules are sufficient to only allow the shipping discount within the contiguous U.S. Removing the U.S. and State rules should allow for your customers to use the coupon while only entering their zip code.

Brady's picture

Hi Isaac,

Thanks so much for the reply!

It's kind of a double-edged sword I guess. Either you have customers login prior to entering a coupon or you're going to have customers complain that the coupons don't work - because the site doesn't know their zip code.

I'll probably re-arrange the Cart screen so it looks like a Shipping/Tax quote is required, prior to entering a coupon code. Currently it looks like you need to enter a coupon, then enter the country/state/zip for the quote.

Thanks again. I'll definitely follow this thread!

Steve's picture

Nate,

Thank you for an excellent tutorial!

I've implemented these rules successfully, but I'd like to take them one step further and define specific carriers and/or shipping class.

1. Free shipping for certain items or categories and ship them USPS First Class Mail.

2. Free shipping for certain items or categories and ship them USPS Priority Mail.

3 Free shipping for certain items or categories and ship them either by FedEx Ground OR FedEx Home Delivery.

Thanks.

Craig's picture

Isaac,

Thank you for the excellent post!

My situation is that I need to configure it so that it will only accept orders from the lower 48 states. (And give free shipping.) In other words, even if Alaska & Hawaii would pay for shipping, we don't ship there.

Do you know how to do that?

Craig

Isaac's picture

Hey Craig,

So sorry for the delayed response! My site has been flooded with thousands of spam comments that broke through the CAPTCHA, so I've had to sift through to catch the legitimate comments.

Unfortunately Magento does not have any built-in functionality that will prevent users from certain U.S. states from ordering. But you may be able to pretty easily inset some PHP code into your template, or possibly extend core code, to block orders if certain states (i.e. Alaska and Hawaii). The alternative is to find where the list of states is stored in Magento (could be in the database or could be in an XML file) and delete Alaska and Hawaii.

Best of luck figuring this out. Let me know if you come up with a solution.

-Isaac

Craig's picture

Hi Isaac - Thanks for the tip. That is a good work-around and there's a good post on how to do it here:

http://doejo.com/blog/magento-how-to-remove-certain-states-from-state-re...

Isaac's picture

Hey Craig - thanks for posting that work-around. That's a good solution.

Jim's picture

Hi Isaac,

First of all I want to thank you for this great free shipping solution! It's exactly what I have been trying to accomplish.

I am having a bit of a problem and I am hoping you might have some insights on how it may be resolved.

I have set this up exactly as shown. However, Coupon and Coupon Code fields show as required fields on the General information page of Shopping Cart Rules. Even if I select "No Coupon" in the Coupon field drop down menu, the Coupon field still shows as a required field.

From what I understand, if you leave it blank the rules will apply once the customer reaches the shopping cart with an eligible order. If you enter a code in that field then a customer must enter the code at checkout for the promo to apply.

I do not want the customer to need to add a coupon code, so I tried leaving the Coupon Code field blank and saving the promo, but when I navigate away from it and then back to it all of the fields are blank. Apparently, it wouldn't save due to the required field "Coupon Code" being left blank.

Do you have any ideas of how I can make this work without requiring customers to enter a coupon code?

Thanks,
Jim

Isaac's picture

Hi Jim,

It seems there is a problem with your Magento installation. The correct behavior is that when you select "No Coupon" the required "Coupon" field disappears (and thus is not required. If your "Coupon" field is not disappearing when "No Coupon" is selected, you may have an issue with the admin javascript. What version of Magento are you using? Have you customized the admin panel theme at all?

-Isaac

Jim's picture

Hi Isaac,

Thanks for the quick reply. I just finished upgrading to 1.4.1.1. I have the Enhanced Grid module from WDCA installed but I haven't heard of any issues with that extension. Other than that there are no other customizations. I have had 2 firms working on this site over the last 20 months - I was hoping we were ready to launch but it sounds like there are some issues. Any ideas?

Thanks,

Jim

Jim's picture

Got it all figured out. Everything works great - thanks again for the great info!

Isaac's picture

Excellent, glad I could help. What ended up being the issue?

May's picture

Hi Issac, great article, I'll bookmark this for future reference. I've got a problem with my magento site, the estimate shipping and tax in the card page is not working anymore. I wonder what caused the issue. I hope you could help me with this.

thanks,

May

Isaac's picture

Hey May,

Sorry to hear you're having problems. What specifically is not working?

May's picture

Hi Isaac,

Thanks for the quick response, Im glad I saw what caused the problem. I added a javascript, sort of lightbox effects and that's what caused the problem. The site is running great. Thank you. ;-)

I have a problem with our product's category page, I want to display the magento pagination so that I could minimize the number of products to display in each page and use the pagination instead, but it's not displaying.

I cant find a solution for this. Does this happened to be a backend configuration or a code?

thanks a lot,

May Ann

Isaac's picture

This sounds like a template problem to me. Check your templates toolbar and pager template files to see if there are any differences between that and the base toolbar/pager files. I believe it's in /app/design/frontend/[your-interface]/[your-theme]/templates/catalog/...

Anonymous's picture

Isaac,
Quick question. I have read most of the posts but I am not sure if I am setting it up right. I have item 1 that I ship for free anywhere in the US including HI and AK. I also charge a flat rate for that item 1 to ship to Canada. I have item 2 that I would like to let the customer choose the shipping they would like ie. UPS or charge a flat rate for the USA and a different flat rate to Canada. I have the free shipping set up as above for item 1 but how would you suggest I set up the flat rate to Canada for item 1 and the flat rates to HI, AK, and Canada for item 2? Any help would be great!!!

Thanks!

Julie Taylor

Isaac's picture

Hi Julie,

For your second item, I'd recommend setting up table-rate shipping. See this article for more information:

http://www.magentocommerce.com/knowledge-base/entry/how-do-i-set-up-tabl...

Jason's picture

Hi Isaac,

First off, thanks for the great support on here! I do have a question though... Similarly to the Free Shipping module, we'd like to enable a minimum order amount for the Flat Rate module that coincides with the same Minimum Order Amount as the Free Shipping. I know that the table rates can do this, but we haven't used it before and are wary about adding it to the live website.

I posted this on the Magento forum, but perhaps you can help...

We recently installed the IG Multi-Flat Rate Shipping extension located here:
http://www.magentocommerce.com/magento-connect/IDEALIAGroup/extension/32...

Our client has been rather picky about shipping. I originally proposed using the table rates, but he has not given us any information about the weights/sizes of the products and wants to keep this "simple."

Originally, the Multi-Flat Rate Shipping extension did the trick for us as he wanted to implement a few different flat rates… including a flat rate for UPS 2-Day orders. We haven’t connected with UPS at this time, so rather than using the UPS shipping module that is built-in we just created another flat rate entitled "UPS 2-Day Shipping” using the extension above. Regardless, it doesn’t appear that the UPS shipping module allows for a minimum order amount, anyway.

He wants to have a minimum order amount of $75 for the 2-Day order flat rate to be available to the customer. For orders under $75, this shipping option should not be visible. Unfortunately, the extension does not include this as an option… the only one I could find that does this is the Free Shipping module, which coincidentally is also set at $75 for the minimum order amount. We just need to apply this to the one flat rate as well.

I searched around to different wikis and topics on the subject and although I could get the minimum to appear in the backend, we had no such luck in the frontend. No matter what, the flat rate is available to everyone whether the price is below or above $75.

The closest thread I could find that is relative to this subject is here: http://www.magentocommerce.com/boards/viewthread/5917/

...But this topic is a couple years outdated and there doesn’t seem to be a definitive answer.

If you have any ideas on how to enable this, it would be a huge help. I think a lot of people would benefit from having this feature. I realize that this isn’t the best way to setup shipping modules and that the table rate could maybe do the trick, but if we could code this into the flat rate module it’ll save a lot of time and effort as there are multiple countries that this applies to. Thank you very much.

Isaac's picture

Hey Jason,

It seems like you need table rates for Price vs. Destination instead of Weight vs. Destination.

Check this link for more information:
http://www.magentocommerce.com/knowledge-base/entry/how-do-i-set-up-tabl...

Julie Taylor's picture

Isaac,
I have Item 1 set up as free shipping. I have set up the table rate for weight vs destination. I am having problems with the table rates over riding the free shipping. Where could I be running into problems at? Here is my table rate:

Country Region/State Zip/Postal Code Weight (and above) Shipping Price
USA * * 32 50
USA * * 28 25
USA * * 16 25
USA * * 0 25
USA AK * 32 50
USA AK * 28 25
USA AK * 16 25
USA AK * 0 25
USA HI * 0 25
USA HI * 32 50
USA HI * 28 25
USA HI * 16 25

And here is my free shipping rule

If ALL of these conditions are TRUE :

* Shipping Country is United States
* If an item is FOUND in the cart with ANY of these conditions true:
o Product Type is LEVELING KIT DODGE SOLID AXLE
o Product Type is LEVELING KIT DODGE IFS
o Product Type is LEVELING KIT FORD F150
o Product Type is LEVELING KIT TOYOTA TACOMA
o Product Type is SWAY BAR BUSHINGS DODGE SOLID ...
o Product Type is DROP BRACKETS DODGE SOLID AXLE
o Product Type is END LINKS DODGE SOLID AXLE
o Product Type is HBS SKULL DECAL
o Product Type is DECAL
o Product Type is T-SHIRT

* If ALL of these conditions are TRUE :

not UPS

Any Ideas?

Thanks,
Julie Taylor

Isaac's picture

Hi Julie,

The table rates method does not allow a method designated as "Free Shipping" method. The promotion conditions call the action to enable the "Free Shipping" method, not to make the price of shipping 0. So when you use the UPS module, for example, you are allowed to set one of the methods (i.e. Ground) as the "Free Shipping" method. You either need to use table rates to define the free shipping explicitly, or use a method that supports a free shipping option. Keep in mind that you can set up your table rate by price vs. destination rather than weight vs. destination. This would allow you to create rules like, "any order over $100 gets free shipping within the U.S."

May's picture

Hi Isaac,

Thanks again for your suggestion, I was able to find the problem in toolbar.phtml

thanks,

May Ann

Dipti's picture

Isaac,

Just wondering if you could help with my problem.
We ship via UPS and USPS, so when a person enters the address and looks for quotes, both options are provided.

I was testing today, and entered an address for Qatar-Doha with a PO box and found out the UPS was showing quotes for even a PO box address. But UPS does not actually ship to PO boxes.

Is there a way to handle this in magento and put a message under UPS saying "UPS does not deliver to PO boxes" whenever a PO box is entered as an address for shipping?

Much Thanks,
Dipti

Isaac's picture

The cheap and dirty solution would be to create some javascript code that scans the address for the word "PO BOX" (or something like that) when UPS shipping is selected and prevents the form from being submitted if "PO BOX" is found. Other than that, I can't think of a better solution. An alternative is to just ship via USPS for anybody who orders UPS shipping with a PO BOX regardless of what shipping method they choose.

Andew @ Website Designers's picture

Sorry if my question was answered before, but will the same rules apply if one wanted to restrict shippment to sertain states at all (say by special enquiry only).

Thank you Isaac for your post btw.

Andrew

Isaac's picture

Hi Andrew,

Using the cart promotions methods I outlined in the article is very flexible. The rules I gave just exclude Alaska and Hawaii, but thanks to the logic of the U.S. postal code system, it's not to hard to exclude other states from free shipping too. You could also apply this to states/provinces in other countries with the proper knowledge of how they zone their postal codes.

-Isaac

George's picture

Isaac,

Thanks for your great post. Actually I need to pull off exactly what the original purpose of this post was. To exclude Hawaii and Alaska from the free shipping offer. I am also only using UPS as our shipper.

I have set up the conditions exactly like your tutorial has explained. It's not working. It still includes Alaska within the free shipping offer. Within the UPS shipping configuration I have set the "Free Shipping with minimum order amount" to enabled. If I disable I don't get free shipping at all.

Any ideas?

Isaac's picture

Hey George,

Sorry to hear your having trouble getting this to work and sorry for the slow response. You do not need to have "Free Shipping with Minimum Order Amount" enabled. In fact, on my site, I have it disabled and the free shipping works as it should. Try disabling "Free Shipping with Minimum Order Amount" and seeing if this fixes your problem. Let me know if it still isn't working after this.

-Isaac

George's picture

Isaac, Thanks again for taking the time to consider my problem. We'll I went in and disabled the "free shipping with minimum order". It just made it so free ground shipping isn't an option for the visitor to select within the cart.

I'm betting I'm missing something obvious and simple, this is driving me nuts!

Sorry to be such a woosie, any other ideas?

Isaac's picture

Hey George,

It's hard to tell what could be going wrong without seeing the configuration. Here are my suggestions to debug your problem:

1. Try to repeat my guide to see if you missed anything.
2. If you are still having problems, try to do a quick test install of Magento and see if you can get the free shipping to work. If you can get it to work on a clean install, you may have an issue with your installation or conflicting modules.

Best of luck figuring out the culprit!

Mike's picture

Hello

this seems like it might apply to this situation (but in reverse???)

If you look here:

http://www.magentocommerce.com/boards/viewthread/224931/

You see I want to ship free using only USPS (not the Magneto free shipping feature)

And I want US and Abroad

any ideas??

Isaac's picture

Hi Mike,

You can use table rate shipping with price versus destination to specify free shipping for any order over $50 to anywhere in the world. You can then label it "standard shipping" and just choose whatever actual shipping method is most appropriate.

Anonymous's picture

You can use table rate shipping with price versus destination to specify free shipping for any order over $50 to anywhere in the world. You can then label it "standard shipping" and just choose whatever actual shipping method is most appropriate.

I see i can turn on Table Rate and price versus destination but I dont see where I would set an amount at which it would be used.

Isaac's picture

You need to upload a CSV file containing the table rate information. See here for more information:
http://www.magentocommerce.com/knowledge-base/entry/how-do-i-set-up-tabl...

Rick's picture

Great tutorial. Exactly what I needed. Thanks!

One tip for a newbie (like me). Make sure you include "NOT LOGGED IN" @ Rule Information > General Information > Customer Groups if you want it to work for Guests.

Like a dope, I did not and wasted an hour trying to figure out what was wrong when testing as a guest.

John's picture

Isaac - this is quite a time-saver - thank you so much for posting.

I've got a slight bend on what I need to do - not sure it is possible.

We want to offer free shipping to lower-48 states with orders over $60, under that amount is a flat $4.95.
AK HI are always charged based on weight - most always will go USPS.

We pick best carrier for free shipping (so just tagging FedEx Ground as the free option doesn't work.)

Your solution would work if Table Rate could be selected as the free shipping method in the shopping cart promotion, but Magento doesn't work that way.

We are on 1.4.1.0.

Any thoughts?

Thanks!

John

Isaac's picture

Hey John,

You still should be able to use the Table Rate method to achieve the result you want. Instead of using the promotion rules, you would simply need to setup table rate shipping with price vs. destination. For any destination within the lower 48, with a cart price above $60, you set the shipping cost to $0.

Dan's picture

Thank you for the great solution!

We have this rule working great for orders with subtotal of $100 or more except in some cases.

We will get customers contacting us stating they don't see the free shipping even though their order is over $100 and they are within the correct geographic location.

The customer will enter his state and zip code but UPS will not show the $0 rate but rather shows a low ball rate for all the shipping methods available.

We have discovered that if we click the rate that should be $0, in this case UPS ground. Click Update Total the cart page refreshes and the rate is now $0 for ground.

So it's not that the rule is not working it just seems like it needs to be refreshed.

We never had this issue on Magento version 1.3.2.4 but it pops up in version 1.5.0.1

Have you had this experience? Or heard of anything like this?

Thanks again!

Isaac's picture

Hi Dan,

I haven't experienced this issue, and the most recent version of Magento I've tested this with is 1.4.2.0.

To me this sounds like some sort of theme/js issue. I would recommend taking a look at your theme to see if there are base files you are overriding that may have been changed since 1.3.2.4 that may cause this issue.

-Isaac

Anonymous's picture

Hello, thanks for your help.

I have a store and when a clients order the Y product from X location they get a ground price and 3-4 other prices with fedex.

Now when the very same client orders again the very same product to be shipped at the very same location then the price changes.

Can someone show me what I should fix on that, please?

Thank you again for your help.
For additional information i will make sure to respond fast.

Isaac's picture

Unfortunately there's no functionality that I'm aware of that allows you to apply discounts based on reorders. This looks like a job for a custom module.

Casey's picture

This worked perfect, thanks for the great post Isaac!

Magento Extensions's picture

Isaac bro i never think thats customizing shipping rules can be so easy like you mentioned above thanks for sharing this awesome tutorial or thanks as well for saving my time.

Joe's picture

Hey, great post. Very informative and the images made it easier to follow. I have a question about the way we are setting things up:
- We ship to US and Canada only
- We offer free shipping over $75 to Canada and 48 continental US states
- Anything under $75 is a flat rate $20
- For items being shipped to Alaska and Hawaii, I want the user to be able to check out, but they will have the following in their shipping method: "A customer representative will contact you with a shipping price. Your credit card and order will not be processed until you agree to the shipping price."

How would I do this? I tried your method and I was able to get the free shipping off of Alaska and Hawaii, but I don't know how I would add a note like the line above.

Any advice is much appreciated. Thank you.

Isaac's picture

Hi Joe, the best way to set up your shipping prices is through table rate methods. Look through the comments above and you'll see a few links to directions to setting it up. In your case, you'll want to set it up with order total vs. destination. Using table rate shipping will also allow you to set a different price for over $75 and under $75 for Alaska and Hawaii, so you shouldn't need to show that message in the first place.

Joshua Jarman's picture

Hello Isaac,

Thanks for all your pointers here.

I have a slightly different but related question.
We have a store that we set Free Shipping over $60 on.
When the order subtotal is over $60 we can select this option.

If the customer applies a coupon to the order total and brings the total below $60 the free shipping is not removed as an option.

Is there any way to get Magento to calculate if you get free shipping or not based on the after coupon subtotal amount? I've tried everything and it seems to only calculate off of the pre-coupon subtotal.

Thanks,
Josh

Isaac's picture

Hi Josh,

Ah, that is a little bit tricky. One to accomplish this easily is just to include free shipping in the coupon rule. That way if they're using the coupon, they're guaranteed to get free shipping. It's not perfect, but maybe this would be a good enough solution.

Another thing to play around with is the promotional rule priority. Set the promotional rule that gives free shipping to priority 0 and the rule that give the discount to a lower priority (higher number), like 5. This may not work, but it's worth a try.

Good luck!

-Isaac

Joshua Jarman's picture

Thanks for the reply and tips Isaac. I think I tried changing the priorities without success. If I come up with a solution I'll be sure to post back here.

I'm thinking the easiest way may just be to write a module that inherits and overrides that one function and change the subtotal check to a calculated order total check that includes shipping. i wish this was more flexible by default.

Thanks again for the helpful posts!!!

MikeyG's picture

Thanks for this great article. It has worked great for the last 2 years. I have come upon a small problem with the lower 48 free shipping.

When a customer entered their zip+4 with a dash like 33334-1234 it works fine. UPS calculates and the free shipping works.

However, if they enter zip+4 like this "333341234" without the dash the rule fails. UPS still calculates correctly, but no free shipping.

Any ideas to handle zip+4 when there is no dash?

Mike's picture

Isaac,

I had been racking my brain for hours trying to get this to work, and after your tutorial it worked like a charm (after I disabled the rule in the shipping itself) Thank you so much!

Mike

Keith's picture

Thanks for the great post. I did this on my own, but was admittedly much messier and had a few issues. This seems to work like a charm. Unless I am mistaken (wouldn't be the first time), I would say for anyone looking at this method, however, if you offer several different carriers (UPS and FEDEX, for example), this will apply the free shipping to both and not just one or the other.

Alli Reviews's picture

Thanks Isaac, for creating this great post and staying on top of comments to help others

ghanu's picture

Plz help me....

I want to set shipping rules like

if order subtotal is less then or equal >= 60$ then shipping charges is 5$ and
grater then or equal =<60 then 10$.

can you help me. how it possible in magneto?

Isaac's picture

Hi Ghanu,

Sorry for the slow response. All you need to do to get this to work is to use table rate shipping with destination vs. price. See above for links to how to set up table rate shipping.

Nick's picture

Great post! Thanks for sharing the result of your hard work!

Dion's picture

Hi Isaac

Came across your page in my quest to create a restricted free shipping rule.

Your solution is almost perfect for me except, I'm in the UK and need the free shipping rule to only work on certain addresses. What I'm offering to the customer is free shipping only to Military personnel posted overseas.

This can only be checked by a unique number. In the UK we have a postal system for overseas troops. Its called: British Forces Mail (BFPO) a unique address is given to each individual with a BFPO number as the last line of the address. For example: BFPO 987. So I need a rule that checks for the letters 'BFPO' in the last line of the address. Do you think this is possible?

Any help would be appreciated.

Regards

Dion Mack

Isaac's picture

Hi Dion,

Sorry for the slow response. Unfortunately I can't think of any way to do this with the core functionality. I'm afraid you'll probably have to get a separate shipping module to do this. I'll post if I find anything that would do this.

-Isaac

Ray's picture

Thank you very much for this write up but unfortunately I am having trouble getting it to work properly. I am using Magento 1.5.1. I have the conditions for restricting shipping to the lower 48 setup exactly as shown above and I also included a cart sub total condition of $500.

The problem occurs when I set "Free Shipping with Minimum Order Amount" inside the UPS shipping option. If the option is enabled then then the free shipping method works (but without restrictions) and if it is disabled no free shipping will happen no matter what the cart sub total.

Do you have any ideas what I could be doing wrong?

Isaac's picture

Hi Ray,

"Free Shipping with Minimum Order Amount" should not be enabled in the UPS shipping configuration. Leave this off. If your shipping promotion rules are not working, either the rule is incorrectly configured or a third-party module is conflicting with your promotional rules.

If you still can't figure our your shipping rules, send me a message through my Quick Contact form and I'd be glad to help.

-Isaac

Arturo's picture

Hi isaac

Is there any way to configure the free shipping only when the subtotal is less than $ 1000 and while maintaining the other shipping options, so that the customer can choose between free shipping which will have a delivery time of 9 days, or payment deliveries will have a delivery time of 3 days.

Any help is appreciated

Mr. Arthur

Isaac's picture

Hi Mr. Arthur,

I would recommend you take a look at this free module for your needs:
http://www.webshopapps.com/us/free/matrixrate-shipping-extension.html

It allows you to specify multiple table rates (i.e. Free Shipping, Express, etc.)

-Isaac

Post new comment

The content of this field is kept private and will not be shown publicly. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

More information about formatting options

CAPTCHA
The following question helps us prevent spam submissions.