Damn Good Content To Grow Your Business In The Digital World
Insights, Ideas and Innovations from the brains of the Saucal NERDS.
Our Shipping Game Stepped Up
03 Aug

ShipStation and Saucal

Formally starting today, we’d like to introduce our newest partner, ShipStation.

Shipstation is awesome, they:

  • are the most powerful shipping management tool in the industry
  • provide the lowest rates for shipping
  • allow you to easily print your own shipping labels
  • have GREAT metrics that help you constantly perfect your shipping rules and prices

 
You know us. We’re Saucal. We’re pretty awesome too. We:

  • always give you that crucial extra technical help whenever you need it so you can keep being awesome.
  • share your values. We’re:
  • reliable
  • constantly improving ourselves to better meet our clients’ needs
  • strive to make your life easier
  • all about making your customer experience the best it can be

 

ShipStation and Saucal Together?

We can take over the world. Or at least the part of it that has to do with shipping. With ShipStation’s leading shipping and fulfillment software and our eCommerce expertise, there is no limit to how you can grow your business.

Check out ShipStation today! Or book a free consultation to see how we can help integrate ShipStation into your WooCommerce store.

Configuring the Canada Post Custom Declarations Form via the API
11 Apr

I had a question roll through on the WooCommerce Slack, which I think could be of assistance to our readers –

When shipping using Canada Post, the majority of orders go from CA to USA. So there needs to be a “customs declaration” form for each order. Apparently this “customs declaration” form is somewhere readily available in the Canada Post account. How do I know?

Well, the client is sick and tired of having to bounce back and forth for every order and jumping back into the Canada Post dashboard just to retrieve the “customs declaration” form. Is there a way to ‘pull’ this info from the Canada Post API?

Lol, somewhat dramatic – anyhow, it’s completely possible. Thanks to the helpful folks at Canada Post, here is a guide on how to get it done.

Via the API, Canada Post always return the custom forms for USA/Intl destination. It can be combined with the shipping labels, or in some instances it comes separately. This is where it becomes important to make available all copies when you get an answer back from Createshipments. It would require also that on the front end, you offer the capability for the end user to fill in the customs information.

Reference:
Soap: shipping web service : https://www.canadapost.ca/cpo/mc/business/productsservices/developers/services/shippingmanifest/soap/createshipment.jsf
Rest: shipping web service : https://www.canadapost.ca/cpo/mc/business/productsservices/developers/services/shippingmanifest/createshipment.jsf

Below are 2 examples where you see the customs info combined with the shipping labels. The 2nd example shows where it is a separate copy. It all depends on the shipping service and paper format opted for.

#1 Xpresspost USA (Canada Post combines the custom info on the shipping label)

Notice the answer, we only one instance of the endpoint name : LABEL

<root>
<shipment-info xmlns="http://www.canadapost.ca/ws/shipment-v4"><shipment-id>383611490629946833</shipment-id><shipment-status>created</shipment-status><tracking-pin>EM070235895CA</tracking-pin><links><link rel="self" href="https://soa-gw.canadapost.ca/rs/0004567/0004567/shipment/383611490629946833" media-type="application/vnd.cpc.shipment-v4+xml"/><link rel="details" href="https://soa-gw.canadapost.ca/rs/0004567/0004567/shipment/383611490629946833/details" media-type="application/vnd.cpc.shipment-v4+xml"/><link rel="price" href="https://soa-gw.canadapost.ca/rs/0004567/0004567/shipment/383611490629946833/price" media-type="application/vnd.cpc.shipment-v4+xml"/><link rel="group" href="https://soa-gw.canadapost.ca/rs//0004567/0004567/shipment?groupId=PICKUP" media-type="application/vnd.cpc.shipment-v4+xml"/><link rel="label" href="https://soa-gw.canadapost.ca/rs/artifact/0185703c30xxxxx/10017530553/0" media-type="application/pdf" index="0"/></links></shipment-info></root>

Result:
Xpresspost USA Sample

#2 Here is an example where Canada Post returns 2 labels, one outgoing and the second is a commercial invoice needed with the shipments for customs purposes.

Answer from Canada Post:

<?xml version="1.0"?>
<root>
<shipment-info xmlns="http://www.canadapost.ca/ws/shipment-v4"><shipment-id>384861490630238430</shipment-id><shipment-status>created</shipment-status><tracking-pin>304611863552</tracking-pin><links><link rel="self" href="https://soa-gw.canadapost.ca/rs/0004567/0004567/shipment/384861490630238430" media-type="application/vnd.cpc.shipment-v4+xml"/><link rel="details" href="https://soa-gw.canadapost.ca/rs/0004567/0004567/shipment/384861490630238430/details" media-type="application/vnd.cpc.shipment-v4+xml"/><link rel="price" href="https://soa-gw.canadapost.ca/rs/0004567/0004567/shipment/384861490630238430/price" media-type="application/vnd.cpc.shipment-v4+xml"/><link rel="group" href="https://soa-gw.canadapost.ca/rs/0004567/0004567/shipment?groupId=PICKUP" media-type="application/vnd.cpc.shipment-v4+xml"/><link rel="label" href="https://soa-gw.canadapost.ca/rs/artifact/0185703c30xxxx/10017531513/0" media-type="application/pdf" index="0"/><link rel="commercialInvoice" href="https://soa-gw.canadapost.ca/rs/artifact/0185703c30xxxx/10017531514/0" media-type="application/pdf" index="0"/></links></shipment-info></root>

When receiving the answer back from Canada Post, I always read the entire answer back using for each, so I can capture everything back from Canada Post and translate in a button:

Canada Post Admin

Here is the printout of the second test showing 2 different copies for this shipment:

Canada Post FedEx Sample

Canada Post Invoice

There you have it folks. Thanks again to the team at Canada Post for helping to put this together.

Woo vs. Shopify, The Definitive Discussion
03 Apr

So, as per usual, I was chatting with someone about the inner workings of WooCommerce. In this case, it was Patrick Garman. Reason being, I get a lot of questions of whether or not a business should use Shopify, or WooCommerce. For me, the answer is simple: with WooCommerce, you own your shit. That alone is enough reason to end the conversation. However, let’s take it a bit deeper. More often than not, this boils down to technical expertise vs. convenience.

Please note that some text has been redacted and replaced with equivalent statements, omitting references to individuals or projects.

cally
Hey Patrick amigo, quick q for you..

I’m working on getting a pretty good sized retailer onto WooCommerce. They’re very much a recognized brand. However, for bandwidth/usage it’s not too intense1.

cally
They asked about “clunkiness” in WooCommerce, and I was wondering if you had a chart, or threshold where you start to see this?

pmgarman
Really depends on the site and how it’s built, to be honest REDACTED [we’ve built and run WooCommerce sites with databases over 100GB in size, which ran better than some sites that have databases less than 1GB].

Do you have new relic or anything running?

cally
It’ll be built from scratch and put on an entry level dedicated box at WP Engine, so we could run New Relic.

At this time they’re contemplating platforms, and it’s between Woo and Shopify.

They’re familiar with REDACTED. 😉

pmgarman
Well if you need to bring in some expertise,
I’m not longer at REDACTED 😉 REDACTED is my sole focus.

cally
I saw.
I creep you once and a while, y’know? 😉

pmgarman
Ha keeping tabs on me

cally
Lol
Mostly wanna know what you have your hands in!

pmgarman
We’re working with REDACTED on their managed platform and part of that is *the* feature plugin for custom order tables

cally
Deep down tho, you still hardcore Woo? Or, if a large brand lands on your doorstep, would you ever recommend Shopify? What would that tipping point be?

pmgarman
Just to start 😀

cally
I’m like 100% against Shopify, lol. But I haven’t put it all into words yet.

pmgarman
I work heavily on both now, depends on their level of customization and how much they want to “manage” it

cally

*the* feature plugin for custom order tables

You’ve always got your hands in something good!

pmgarman
It’s good for someone who has a simple site and doesn’t want to deal with the headache of WP/WC

cally

depends on their level of customization

How far can you customize Shopify? For example, could you easily add subscriptions, or multi-language as an add-on? I’ve never built on it.

pmgarman
multi language basically means you run multiple stores, thats essentially your only real option

customizations, you can customize the html essentially. and then whatever you can do via the API.

with enterprise “plus” plans, you can do a bit more. but thats minimum $2k/mo. and that is now going to go up a lot from my understanding

unless you are paying $2k/mo, your checkout URL is my.shopify.com or something

cally
Yea they’re definitely considering Plus, and it’s funny you mention price, because that is definitely an uncertainty I wondered about.

pmgarman
plus: it can handle a significant number of orders/min. REDACTED

con: all customizations are significantly more involved

cally
To me it sounds like the advantage of Shopify is:
– Allows for a lot of orders.
– No worries for maintenance

Is that about it?

pmgarman
apps have long term costs you can’t ever get away from. customizations of your own if it touches the API means you need to host and run your own custom application

yeah thats the main points

a lot as in, it handles the biggest flash seller in the world

cally
lolol
Good to know.

pmgarman
REDACTED

cally
So a very extreme edge case.
What about the payment gateway, too? I think they penalize you for not using their’s, correct?

pmgarman
they don’t “penalize” you, but, you don’t get the benefits their white label stripe offers.
stripe won’t even talk to you if you are using shopify, you *must* use their shopify payments

cally
I heard they add a % point for using a 3rd party.

pmgarman
which you don’t get your own stripe
yeah you have transaction fees unless you use theirs. but i’m not sure if plus changes that

cally
So the benefits really aren’t that much.
IMO
Then concerns if the company goes bankrupt, restricts features, etc. It’s a lot to pay for some convenience.

About Woo scalability, progress is being made then, as you’re working on it now?

pmgarman
the benefits to the lay person is “you dont have to manage your site, they do it for you” where WP/WC you *really* have to manage it. you need someone monitoring it if you are doing any sort of volume or want to run it right, you need to deal with updates/etc

cally
Okay, so assuming they have a Saucal or Patrick Garman, they’re covered. Plus, all the benefits of full flexibility and ownership.

Patrick Garman REDACTED

pmgarman
yeah basically
tl;dr – if you are paying more than $2k/mo to run your site (hosting and maintenance), then it’s worth considering, if you have a simple site that doesn’t require much customization.

without plus you can’t even use the discounts api
so you can’t create coupons unless you do it by hand
$2k/mo to have the power to import coupons

at the end of the day i’ve worked on the largest WC site ever, and now the two largest Shopify stores ever. I’ve broken things on both, Shopify has banned my API keys because i was stressing things.

cally
Lol, you’re the man.
And that’s at current pricing. If pricing goes up at Shopify, things change.

What are the two sites on Shopify?

pmgarman
Which, it is going up
i don’t know if they have publicly said it or not. plus is now also a transaction or % based model

cally
You know by how much?

pmgarman
let me look it up, i can find out from some other people. REDACTED was grandfathered in

REDACTED was #2 at shopify, REDACTED was #1

cally
That would be great. And, is it okay if I share this information? Ofc, I want to ask you first.
Dude, how do you land these all star customers?

pmgarman
REDACTED wasn’t a client, REDACTED was my full time job, REDACTED was under the umbrella of REDACTED and REDACTED was the second brand. REDACTED < i built that site

cally
I’m gonna wear a Patrick Garman t-shirt at WooConf2

pmgarman
theres a lot of separation and similarities at the same time. but at the end of the day architecturally what my role became when on shopify was connecting things together and building internal tools and applications

ha you should. some mindsize jerseys, garman on the back

cally
hahahaha, i was thinking more like those rapper t’s.. your face on the front.
Maybe wearing a crown ?

Notorious B.I.G.

my role became when on shopify was connecting things together and building internal tools and applications

And these were hosted off-site, therefore putting you back in the realm of maintenance, etc.

pmgarman
haha

yeah it was a custom application that i developed myself (built on laravel spark) from the “ground” up

thats how we did reporting, i exported all shopify data through the API, thats why ops hated me

would run 20 threads of API calls

cally
wow, so exporting the data pounded the API and they didn’t like it..
ha damn.

pmgarman
their API kind of sucks for large data

cally
Metorik for that type of thing.

pmgarman
yep – which doesn’t support shopify, yet
bryce has promised me an API 🙂

cally
lol

So, there you have it. Whether you like it or not, you’re going to need some technical chops. Might as well suit up, or let us handle it. Trust me, it’s a lot better than censorship, or this.


  1. I have a breakdown of this, but I cannot share it all. However, per day, it’s estimated to be 600-800 page views and 30-40 orders. 

  2. I guess you’ll know how to find me! 

WooCommerce Subscriptions and Payment Gateways, Who Manages What?
21 Feb

We had a question come through, followed by a tweet. The tweet went on it’s own tangent talking about things not previously discussed, however it did raise a good question about payment gateways and WooCommerce Subscriptions.

Q:
I was always under the impression that in Subscriptions, it does not set up a recurring profile on the payment provider, rather Subscriptions sends single charges each month to the payment gateway1. I know at least it’s that way in Stripe. But I had a guy come through, and said I was wrong for PayPal.

A:
You are right for almost all gateways. With PayPal Standard (and one or two other gateways, like WorldPay), the only option is to create a subscription at the payment provider. With all other gateways, including PayPal Reference Transactions (also built into Subscriptions, but requires special approval from PayPal’s end before it can be used) we just need a payment token, and can do everything else ourselves2. Although that said, for PayPal Reference Transactions, the “token” is actually a billing agreement, so the custom can still cancel/suspend that billing agreement at PayPal. AFAIK, there is no PayPal product which does not allow the customer to also manage the recurring payments. Something like PayPal Pro, which is just a credit card gateway, might do that though. But in those cases, you’d just want to use Stripe or something better anyway.

So there you have it. If you’re using PayPal Standard, or 1 or 2 other gateways, the subscription is managed on their platform. Otherwise, it’s managed within Subscriptions directly. And by “manage” I don’t mean it’s storing credit card data locally.

I hope that clears things up. Cheers to the team at Prospress for the answer. 😉


  1. By no means are we implying storing credit card data on the local server. This is a question of using a token and where and when charges are authorized from. This is explained in the answer. 

  2. This is what I was referring to. 

Bundle WooCommerce Products for All Your Greedy Shoppers
09 Nov

Do you want to increase profits and improve customer satisfaction?

Silly question, we know. But the reason we ask is that many ecommerce stores often overlook a simple competitive pricing strategy that could easily incentivize more purchases, they just never do it.

It’s called bundling, and if you’re not already doing it, you should be. Here’s why.

Here are 5 tips for pricing your bundled products.

The Power of Bundling

Bundling is exactly what it sounds like: Combining similar products together into one kick-ass product.

The reason bundling is so appealing from a consumer perspective is that customers are inherently greedy. They want the most value for the least amount of money, which bundling gives them.

product_bundling
They’re essentially receiving way more value for their single purchases than they would by buying each product individually, and they usually save a bit of money in the process. They also don’t have to waste time searching for other products that they may need, which means they’re more likely to return to your store to find what they’re looking for in the future.

From a business perspective, bundling is great because you’re making more money on the total value of the order. Sure, you may lose some margin here if you’re offering an extreme discount, but you also have the potential of selling more products.

But how exactly do you bundle? Maybe your products don’t readily lend themselves to bundling, or you’re not exactly sure which products to combine with others. Well, take a deep breath.

There are several ways you can approach it.

Bundling Techniques to Try

If one bundling strategy won’t work for your products, chances are that another will. Here are a few options you can try to maximize your earning potential.

Pure Bundling

Pure bundling is where you offer certain products that are only available in a bundle. Customers either won’t be able to find them separately, or wouldn’t necessarily need or want to purchase them separately.

purebundle
A real life example of this would be cable providers bundling their channels together, or how Adobe or Microsoft bundle their software services together in one suite. The plus side is that customers purchase products they would otherwise never consider.

If you have several products that work really well together (or really don’t work well without each other), consider packaging them together as one offering. You can even use subscription pricing with pure-bundled products, like how Microsoft Office 365 uses a month-to-month subscription.

Mixed Bundling

Mixed bundling is similar to pure bundling except customers can also purchase the products individually. This is probably the most popular type of bundling out there, and for good reason. Mixed bundling gives customers the option to purchase products individually, so even if they can’t decide on your bundle, you’re still more likely to make a sale.

The goal here is to:

  • Choose products that are already best sellers, so you can charge a special price to package them together
  • Choose products that are okay sellers individually, but would be a better deal for the customer if sold together
  • Choose one product that sells well and another that doesn’t sell well, so that you can sell more of both products

The nice thing about mixed bundling is that shoppers often can’t resist a great deal. If they’re already paying for something they want, and they get a little something extra along with it, they’re more than happy to spend a few extra dollars.

Cross-Sell Bundling

If you’ve ever shopped on Amazon, you’ve seen an example of cross-sell bundling. They usually have a section on each product page with items that are “Frequently Purchased Together” featuring the original product along with other recommended products.

crosssellbundle
This can work well for many online shops depending on what you sell. But, even if you don’t necessarily have products that are “frequently purchased together,” you can use data and analytics to bundle products that could be purchased together.

By analyzing customer data and tracking product performance, you can create “recommendations” based on other products you think would benefit the customer. You can also create groups of users who may be more interested than others in purchasing your bundle, and target them specifically.

If you have two or more products that could benefit from being used together, or you have products that could benefit a single user group, consider cross-promoting them as a bundled offering.

Bundling in WooCommerce

The good news for WooCommerce users is that they offer a variety of bundling options like:

  • Product Bundles – Where you can create combos of bundled products
  • Chained Products – Where you can gift other products to customers when they make a purchase
  • Forced Sells – Where you can required certain items to be bundled, like a service and a part, for example
  • Grouped Products – Where customers can directly add items to their cart from a range of products
  • Mix and Match Products – Where you can bundle up products based on customer preference, like picking the different fruit they want in a fruit basket, for example
  • Composite Products – Where customers can select between different, compatible product alternatives and adjust quantities as needed

WooCommerce also has documentation, tips, and additional tricks for helping you bundle your products together here. (Of course, if you need more help with specific bundling advice, we’re always available to help.)

Other Considerations

If and when you’re ready to start bundling, there are a few other details you may want to keep in mind.

Focus on customer experience. As much as possible, tailor the experience to your customer’s needs and wants. Give them options to customize, add, remove, or edit products from your base bundles if possible. This will make the buying process more satisfying overall.

Mitigate decision exhaustion. Customers are a fickle bunch, and while they love choices, they don’t want to be overwhelmed by a million options all at once. So even though they want the ability to customize their bundles, you shouldn’t necessarily provide them with every option out there.

Make sure you direct customers toward choices you think would be beneficial, and eliminate anything that would confuse them or otherwise keep them from buying the bundle outright. The best way to do this is by recommending bundled options. You get the benefit of eliminating decision-making from customers while also being seen as the “authority” on what products go best together.

Use customer feedback to drive confidence. It’s important to let the customer drive his or her own experience. You certainly don’t want to force them to purchase a bundle if they don’t want to (that’s why mixed bundling is more popular than pure bundling).

You can also use customer feedback to help with this while first starting out. If your bundling endeavor is a success, you can also use feedback to help drive confidence for other customers considering purchasing bundled items.

Get advice on pricing your bundles with these 5 tips.

Final Thoughts

Bundling can be a great solution to improve your bottom line while giving something of value to your customers.

Remember that not all of your products need to be bundled together, but if you have some products that you believe really should be purchased together, offer them as a bundle at a competitive price. (This also works for products that aren’t selling as well as they should.)

You can choose from any type of bundling to fit you and your customer’s needs, just remember to get feedback during the process to see what works and what doesn’t work. Use that feedback to create better bundles and to boost confidence for customers looking for a good deal.

written by
Suffering from Slow Search Speeds in WooCommerce? Give Your Site a Boost with this Free Upgrade
28 Sep

This post originally appeared on Codeable.

We’ve recently experienced some serious issues with WooCommerce search on eCommerce sites that process a large number of orders. The postmeta table needs to be queried when looking for a specific meta_value, which causes a major slowdown. For example, querying the “my orders” section would take 5s or possibly even more, depending on the server environment. To make matters worse, performing searches on the “Orders” screen for orders belonging to a specific email or person can take 30s or more (due to the involvement of extra JOINs on the postmeta table).

Both of the above examples are unacceptable for a website with high amount of traffic and had to be addressed.

Current Solutions And Associated Limitations

After doing some research, we’ve found that these issues are currently handled in one of two ways:

The ElasticSearch solution sounds good in theory, but our experience leads us to believe that it is not a good thing to integrate with WordPress. This is due to the huge number of differences between the base WP datasource (which is MySQL tables) and the ElasticSearch indexes.

While ElasticSearch performs partial searches very well and is pretty good at “guessing” what you intend to write in the search query, these minor benefits are definitely not outweighed by the downsides of integrating these two data sources:

  • latency between the ElasticSearch instance and your hosting provider (note that this won’t be an issue if you have ElasticPress installed on the same server as your PHP environment, but this is not a common scenario with today’s managed WordPress hosting solutions), and
  • the number of orders covered in each result (across all pages) is narrowed down to just a couple hundred.

In this case, we would need to query the ElasticSearch instance and then pass on the matched post IDs to WP_Query (while adhering to the max length of the SQL query being sent to MySQL). This breaks the workflow for wide range searches, and could potentially provide a misleading number of total results to the store manager searching the Orders screen.

Now, onto the secondary index table. The original solution was presented to us by Patrick Garman, a fellow WordPress developer. He originally intended to just improve the “My Orders” section of WooCommerce, but we thought that this fell a bit short for our needs.

We know that his current implementation is just meant to be a temporary fix until the release of WooCommerce 3.0 and the huge database revamp that is planned for it (which will fix the issues we are discussing in this post). We also know that WC 3.0 is not slated to be released until mid-2017, and since we need to make our customers happy before then, we forked Patrick’s implementation.

Our Proposed Solution

The original implementation of the order index only indexes the Order IDs and the Customer IDs in a secondary table (which is what Patrick set out to fix). His solution is to modify the “My Orders” WP_Query to use his index.

We extended this in a couple of ways:

  1. We’ve included the customer emails (both the billing email on the order and the customer email which is derived from the customer assigned to the order). Whenever you search an email in the orders view of the admin section, we trigger the use of the index instead of postmeta.
  2. We’ve included the customer names (billing, shipping, and display name of the assigned customer).

Here we come across an issue; we don’t want to completely remove WooCommerce’s existing search features, but we need to have some way of using the index conditionally for faster searches. This is because our index doesn’t support Address search, for example, and WooCommerce functionality covers that.

In order to achieve this, we’ve included a parameter like search. Whenever your search parameter is “name:John D,” we return all orders with names that match John D using a wildcard search. You could search for the Order ID in WooCommerce but we felt we could make it easier, so with our solution, you can just enter the search term “#1456” and have order 1456 returned to you.

How To Implement It

In order to install this index, all you have to do is install our fork of the plugin and then enable it. Here’s the URL: https://github.com/saucal/wc-customer-order-index

The only complication at the moment is that you need access to WP-CLI to create the initial index. We’re working on enabling an AJAX interface which will allow you to build the index without WP-CLI.

For now, after you enable the plugin, you need to open up your WP-CLI interface and enter the command “wp wc_coi reset_index” for it to start generating the index for you. The time this process takes will vary depending on the number of orders you have on your site.

How Things Have Changed

WooCommerce Search Before

With the use of this plugin, we have been able to vastly improve the performance of our customers’ large stores. Here above you can see an example where the time was up to almost 40 seconds. In one of our worst performing cases, email search on WP-Admin was taking over 50 seconds.

WooCommerce Search After

Using this plugin, we reduced the search time to less than 5 seconds, improving it by 867%!

Wrapping Things Up

We tried the ElasticSearch solution for one of our customers and it had too many moving parts for our liking. We prefer something that stays within the scope of WordPress and doesn’t require our customers to sign up for any external services.

To be clear, this is not a problem of ElasticSearch as a technology. It’s just that it’s too different from how WordPress works, so integrating the two created a few downsides that for us were deal breakers considering what we were trying to achieve. Additionally, we had to rely on a complex third party plugin (10up’s ElasticPress).

We iterated on Patrick’s approach and extended it to fulfill our customer’s most common needs. As a trusted WordPress agency, we know that this is not the prettiest solution since it duplicates a lot of the data. We just want to provide our customers with a solid workaround until WooCommerce 3.0 is released and renders this solution unnecessary.

Would you have done something different? Feel free to send us a pull request on our repository, we’d love to see alternatives!

High fives to our lead developer Matias for helping me with this article.