Amazon has multiple teams developing systems for Seller Fulfilled Prime. You’d think these teams would talk to one another. You’d be wrong.
A Story About Maps
Amazon Prime is free two-day delivery. Amazon sellers can get their products on Prime by using FBA (Fulfillment by Amazon). Your products sit in an Amazon warehouse, ready to ship. At Customized Girl, we print on demand. Youc an see how custom printing is not compatible with FBA. Our items could not be on Prime.
That was true until we were invited to join Seller Fulfilled Prime (SFP) in 2016.
To offer Prime on our products we would have to take the cost of two-day shipping and bake it into the product price. But nationwide two-day shipping is very expensive. The price markup would be much too high.
Luckily, Amazon had a solution for us. We could offer Prime to only those parts of the country that were within range of two-day FedEx Ground shipping. Well, almost.
Here’s how it worked. We looked at the two-day delivery region on our FedEx Ground map. Then we looked at our Amazon Shipping Template. We tried our best to match them up.
To do this, we dove into a sea of drop down menus. Florida was split up into three different regions. Which one matched our FedEx Ground map? Well, none of them. We had to guess. We went with Northwest Florida and hoped for the best.
As I was making a decision on each and every drop down menu in the shipping template, I kept thinking: “Why are they making me do this? They know the location of our warehouse. They know exactly which streets are two days away via FedEx Ground. Just let us enter our warehouse address and automate it!”
Three Years Later
Three years later, they did exactly that. In 2019 Amazon launched Automated Shipping Rules, and it was just as I described.
You enter your warehouse address. You enter exactly which carriers you want to use (we chose FedEx Ground but NOT FedEx 2Day). Bing bang boom. Amazon displays the Prime option to only those customers who live within a FedEx Ground two-day shipping range!
This worked just fine until a week before Christmas. Amazon was not satisfied with the performance of FedEx Ground. We would no longer see Ground as an option when we go to actually ship the order.
The method for actually shipping your Seller Fulfilled Prime orders is called “Buy Shipping”.
You can use Buy Shipping directly in the Seller Central interface, or you can access it via the API. We needed to be able to mark that package as shipped in our own backend, so we built a sophisticated API integration with barcode scanners and everything.
For a variety of reasons, we had to disable Prime on December 16th. So this particular FedEx Ground outage did not impact us. We were lucky. But we wanted to get back on Prime soon and we had to wait.
Finally, we got an email in mid-January saying that FedEx Ground would be available again. We were very happy to re-enable Prime.
During the peak holiday season, shipping prices can fluctuate in painful ways. In December, I was worried about how much Buy Shipping was charging us for each order, and I was checking that number regularly. After peak, I relaxed.
If I had checked more often in late January, I would have been alarmed. It usually costs us around $9 per order to ship Prime. Our new average was closer to $16 per order.
What was happening?! These orders are all supposed to ship Ground for $9. But most of our orders were being shipped FedEx 2Day Express for $20.
But this didn’t make sense. We were using Automated Shipping Rules. We had only enabled certain carrier options.
Was the FedEx 2Day checkbox accidentally checked? No.
That’s when I realized: “Oh my god. They’re using two maps.”
The entire point of Automated Shipping Rules is to accurately display Prime shipping as an option to the customer based on the location of that customer. They do this using the options that we enable inside Seller Central.
But someone at Amazon HQ was angry at FedEx. They were paying close attention to certain routes and realizing that Ground only delivered on time 95% of the time. The threshold was 97%. (I am guessing here.)
So they built a new map. In theory, Ground shipping from Columbus to Manhattan was going to be two days. Not in the new map. If you needed to get it there in two days, you had to upgrade to FedEx 2Day Express.
Did they apply this map to the Automated Shipping Rules system? No.
Did they apply this map to the Buy Shipping system? Yes.
So Amazon was using one map to determine which customers could get Prime shipping.
And they were using a very different map when it came time for us to ship. Most of our orders were now going FedEx 2Day.
We disabled Prime. We filed a support ticket. We emailed everyone we could. I yelled into the void.
Please stop using two maps! We’re fine if you want to limit the number of customers who can place Prime orders, just please, use one map!
Finally, I reached out to my contact at CNBC. They reached out to Amazon PR.
The next day, all SFP sellers got a new email: FedEx Ground performance has significantly improved! You’ll see even more access to FedEx Ground inside Buy Shipping!
Remember, we had already gotten an email saying FedEx Ground was available again. Should we trust them this time?
That’s the beauty of being an Amazon seller. You don’t have to think about it too hard because you don’t have a choice.
We reenabled Prime on a Wednesday. Things looked good. The FedEx 2Day shipments disappeared.
Then Friday came. My production manager came and said “we can’t access the Buy Shipping API”. I tested it in Seller Central. The error message said:
Services are not currently available. Please try again later.
I checked Amazon’s Seller Forums. Everyone was freaking out.
You can always use another method to go around Buy Shipping, but if you do, you will be immediately suspended from Prime.
There was one Amazon employee trying to answer questions on the forum. By 2 PM, she finally had an answer: just go outside of Buy Shipping. We won’t penalize you this time.
Of course the FedEx pick-up time for most sellers (including us) is around 5 PM. That gives us three hours. We wrote new code to go around the API for these orders. We deployed that update at 2:29 PM. At 2:30 PM, Buy Shipping was working again.
Rats! Revert! We reverted the code and barely managed to get all orders shipped in 2.5 hours.
The system felt very shaky. Again, we have to ask ourselves: do we disable Prime?
Valentine’s Day was a week away. One of our most important days of the year. It was my call. I enabled Prime.
I was nervous. I checked Seller Central all weekend. Clicking on orders. Clicking Buy Shipping. Checking those options. Was FedEx Ground appearing? Yes. Good… until, no.
On Sunday, there was no Ground. Buy Shipping was back to charging us $20 for FedEx 2Day. Oh no.
Again, I start filing support tickets. I start emailing. From the void, no one could hear my cries.
Except I did get a reply on my support ticket. A quick one! They said: you have to add a phone number to your warehouse location in Seller Central to see FedEx Ground.
What? How could those two things possibly be related? That form didn’t even have a field for a phone number when I first filled it out.
Also, you can’t just edit a warehouse location. You have to add a new, fake warehouse location, change your shipping templates to use the fake location, and then your original location can be edited. I did that. I added the phone number. Went back to update the shipping templates.
It worked. Somehow, it worked. FedEx Ground appeared in Buy Shipping.
On Monday I got to my desk and checked our shipping cost data. We had shipped 10 Prime orders. Every single one cost $20. They were all going FedEx 2Day.
No! I ran back to the ship station. Stop shipping!
This could not be happening. Over the weekend, we had accumulated hundreds of Prime orders for Valentines Day.
I tried to ship one in the Seller Central interface. I saw FedEx Ground. The price is reasonable. I chose it. Everything worked.
The API was returning one result and the Seller Central interface was returning another.
Unfortunately, we weren’t set up to ship via the Seller Central interface. We could do it, but each order took 5x as long. As usual, we didn’t have a choice.
I set up a new ship station in production. All hands were on deck. We shipped until 8:00 PM, and one minute before the final emergency FedEx pickup arrived, we printed the last label. We did it.
I immediately disabled Prime and began yelling into the void again. Support tickets. Emails. Phone calls. Why was the API different from Seller Central?
I only got one reply: “it’s supposed to work like that”.
This obviously could not be true. I re-opened the tickets. I heard the same answer. This went on for two weeks. My friend Ben sent me a LinkedIn profile of someone on the Buy Shipping dev team at Amazon.
I messaged them. They replied! We exchanged emails. They called me on the phone! I spoke to a human! He was nice.
He did not know what happened, but he had a suggestion. In the API, we were returning data for the “Needs By Date” column. But that field was optional. Why not leave it blank?
That’s what we did, and it worked.
Remember that Friday when Buy Shipping was broken for every seller? They were working on that code. They must have changed a setting related to the Needs By Date in the API. We had not changed anything on our end. But regardless, it is fixed.
Even better, we saw that FedEx One Rate was now enabled inside Buy Shipping (as long as you enter the exact right dimensions).
We’re using One Rate now. If we had this in place 4 months ago, we could have avoided almost all of these issues.
I wish I could say that this was my only kafkaesque experience as an Amazon seller. Unfortunately, I have four more stories just like it. Those are for another day.
As far as I know, Amazon is still using two maps. If you ship a product that is too large for One Rate packaging, and if you’re using Seller Fulfilled Prime, then I say to you: good luck.
If you get tired of yelling into the void, tweet at me.