Create The Ultimate Invoicing System Using WooCommerce

  1. Blogging for Benjamin Competition
  2. Why I'm Grateful to Work on the Web
  3. 24 Pull Requests
  4. Update Downloadable Product's Expiration Date in WooCommere
  5. Get Lost in the Flow and Work for More Than a Salary
  6. Why A Plugin's Popularity Matters
  7. Why You Should (Or Shouldn't) Use Premium Plugins
  8. WooCommerce Terms & Conditions
  9. Only Ship to Continental United States with WooCommerce
  10. Just Talk
  11. Why I Love Jetpack
  12. Making Jetpack Better
  13. Remove Billing Address for Free Virtual Orders in WooCommerce
  14. Notify Admin of Customer Address Change in WooCommerce
  15. Open Your Self Up To New Possibilities
  16. 2013 Resolutions Review
  17. Create a Community
  18. Tips for Starting a Community
  19. The Intent of Goals
  20. Create The Ultimate Invoicing System Using WooCommerce
  21. Change From Address in Ninja Forms
  22. Work With People Who Inspire You
  23. Contact Form 7 & MailPoet Integration
  24. Monotasking
  25. Giving Back to The Community
  26. Adding Fuctionality to Lean Plugins
  27. Choose Stripe For a Payment Gateway
  28. A Dip Into Entrepreneurship
  29. Reward Yourself
  30. Blogging for Benjamin Plugin
  31. Blogging for Benjamin Wrap Up

I'm constantly amazed at the sheer number of ways that WooCommerce can be used. As soon as you think you have all of the possible use cases our customers come up with a new idea that they suggest and we get to implement! How fun! But unfortunately this isn't all that well documented on the website. It would be really great if there was a way we could share all of these really cool solutions so that our customers don't have to figure it all out on their own. With that I wanted to present one of my favorite WooCommerce solutions which is an invoicing system.

A Bare Bones Invoicing System

Let's start with the basics. If you want an invoicing system what is the most important thing you have to do with your store? You have to disable the payment gateway. If you have a standard payment gateway like Stripe or PayPal you force your client to pay right then and there with a credit card / PayPal account. You most likely don't want to force your clients to pay in full right that second. You also probably prefer a check over a credit card due to the expensive credit card fees.

Invoice Payment Gateway

Rename the Cheque Gateway to Invoice

Invoicing Payment Gateway

People have asked us to create an invoicing gateway but you don't need to do that! You can actually just rename the built in Cheque gateway to “Invoice” and the customer message to “We will invoice you shortly.” Now your orders will be put on hold automatically.


If you're invoicing clients you may or may not be sending them actual deliverables. If you're not doing any shipping at all just disable it entirely in the WooCommerce -> Shipping settings. This way you don't have to mark every product as “Virtual”.


Unlike retail if you're sending clients invoices there's usually some sort of contract involved. Make sure you set a terms page in your WooCommerce settings so that the client has to agree to the terms before pressing the submit button.

A Well Built Invoicing System

The cool part is that up till now all of this is free. You don't have to spend a dime on anything. If you however you want to start automating things and saving your self a ton bunch of time you can use Freshbooks with the WooCommerce Freshbooks extension. Quite simply it will automatically create and send invoices to your clients.

And if you don't already have information for this client it will be automatically created and stored in Freshbooks. I love automation like this. Once we have Freshbooks installed I like to change the Cheque gateway's customer message to: “We will invoice you via Freshbooks.”

Invoice Checkout

We will invoice you via Freshbooks.

The Ultimate Invoicing System

We already have a pretty darn awesome invoicing system which automatically creates orders, puts them on hold, and sends an invoice to the client but there's a few more things we can do to make it better yet!

Get Client Information Before Order

You may have a different way of getting a clients information ahead of time like a contact form on your site. Well you can actually capture that information when they fill out a contact form and put it in Freshbooks ahead of time. You can use Ninja Forms to create a contact form and use the Freshbooks extension to capture that information.

You could also use the Front End Editor extension to automatically add the users to your site. Why would you want to do this? Well let's say that you want to limit your orders to existing clients…

Limit Orders to Existing Clients

It might make sense to limit these invoices to people you actually know and have dealt with. You don't just want anyone to place an order without meeting with them first. You may want to use something like the WooCommerce Catalog Visibility Options extension to prevent regular users from checking out / seeing prices.

All Done!

Well if you did all that you now have the ultimate invoicing system for WooCommerce!

  • You have a really smooth checkout experience for your clients
  • You are automatically creating invoices and saving you time
  • You are automatically saving client data in Freshbooks ahead of time
  • You are optionally restricting the store to existing clients

Now what are you going to do with all of that extra time!? I guess you'll have to go out and get more clients! 🙂

Photo Credit: miguelb via Compfight cc

32 thoughts on “Create The Ultimate Invoicing System Using WooCommerce

  1. Javier Hinojosa

    Awesome article! We’ll be implementing this in our website for our print orders.

  2. just want to ask if it is possible if the customer can pay online via paypal or stripe using the invoice?

    • Yeah – definitely. Once the customer creates an invoice you can set the order to pending in the backend and then they can pay for it via the My Account page.

      • Hi Patrick,
        Can Woo provide enough distinguished options to put orders “on-hold” (via cheque) so that the order can be reviewed by the order fulfillment department, then put into “processed” status so that credit credit cards gateways be used in “My Account”? The problem as I see it is that the “other” payment gateways would be present next to the cheque option on checkout…

        Any ideas?
        Thanks, Andy

        • Hey Andy – not sure exactly what you want here but it sounds like you want an extra order status? Something your fulfillment department can use? There’s a tutorial here for creating custom order statuses:

          • Hi, sorry I get wordy sometimes. Essentially, we need to be able to review the order after checkout before they pull the trigger and get charged (we have to calculate freight shipping and such)….


          • Not really – you could use Stripe and change it to “authorize” a charge only and then manually capture it later. but you’d have to give them a shipping estimate or dig into the code to authorize a higher amount.

            Better options would be:

            • Using something like Table Rate Shipping and specify the exact rates you’re going to use
            • Or having the user submit a form with the products they want and then manually creating the order which they would login and then pay
            • You could also have them submit an order – and then figure out the rates, trash the order, and manually recreate the order with the rates

            None of those are awesome but without doing any custom programming that’s the best way I can think of off the top of my head. Good luck!

  3. Hi Patrick, I want to sell to consumers as well as retailers. Can I use your invoicing method above for retailers but on the spot credit card payments for consumers? I am thinking of having a retailer page with prices disabled so that they have to log in to see prices and place orders so I would use your method above for this group..would that work?

  4. I actually want to invoice retailers rather than have them pay on the spot though ,I save on the payment gateways fees as I have them do a direct bank transfer and they get up to 30 days credit on their purchases. I really like the sound of the automated invoices. The dynamic pricing and conditional content would get around the need to disable retailer prices until they logged in however. I have been told that the function to separate customers into groups does not work well on woo though…is this your experience?

  5. Hi Patrick, thanks very much for the info, not being a developer its a lot to get my head around but i’ll do a bit more reading and see i can make more sense of what might work best on my site. thanks again


  6. For Ray,

    Role based payment plugin allows you to set specific payment gateways to show up for specific roles, then you use any role editor plugin to add “retailers” so when they login they have only “invoice me” while guest and other purchasers have “paypal” or whatever you are using.

    You might not need role editing but i use it in combination with dynamic pricing to have different discounts for different groups of members.

  7. Hey Jason and Ray,

    Our situation is similar. We have “dealers’ who get a 30% discount and pay by PO/Invoice net 30 days, and we have regular customers who pay MSRP by credit card.

    1. Can you provide the name of the Role Based Payment plugin and your recommendation for the best Role Editor plugin. Thanks!

    2. Also, we need to give our Dealers a discounted price, while showing them the full MSRP, when they shop. Do you have a recommendation for a good plugin for that. Woocommerce Dynamic Pricing in $129, which seems like overkill.

    Thanks for the great article. This is just what we need.

  8. I’m trying to figure out how we can accept an offline check payment or cash payment from a customer using WooCommerce using the invoice method you described. I would like to receive the payment and details (cheque number, amount, etc) and apply it to the invoice as you would in Quickbooks or Freshbooks. Saving this information in a note, and changing the status to paid doesn’t seem very elegant. Any thoughts or suggestions?

    • Hey Matt,

      Most e-commerce platforms don’t focus on check payments so they don’t usually dedicate a ton of features / or space in the user interface towards it. If you are expecting a ton have you thought about integrating WooCommerce with Freshbooks or Quickbooks?

      • We’ve looked at the Quickbooks integrations but haven’t found one that we felt confident to try. 61extensions’ solution has a lot of mixed reviews. Any suggestions?

  9. Thanx for the useful tutorial / post.

    Can you please tell me how to invoice a client for “consumables” and custom services, which are not stock items / products in Woocommerce?

    For example, as a solar installer, we sell solar panels, inverters, batteries, etc – these are all standard stock items. But with installations we would need wire, lugs, clamps, metal / wood, etc – these are all consumables which change for every job so it’s nearly impossible to add a product for Woocommerce for every possible consumable.
    Another item would be labor – this also changes from job to job. For example, on one job we would send two workers and spend two days, another job may only require one worker, and another job three workers for 5 days.

    How would I invoice these customizable items?

    • Hey Rudi, well your setup is definitely a bit harder to do. You could sell these materials as separate products. Owen you’re editing the product in admin there’s a section called ‘catalog visibility’. You can use that to hide it from the store but still be able to manually add it to an invoice. You could do the same thing with hours.

      I hope that helps. 🙂

  10. Hi…
    How would you handle an order form or page that makes it easy, fast, simple… Like so:

    One page.
    Many products.
    For each item to add to invoice, just change quantity from zero to number wanted.
    At bottom, button to see all selected item.

    Then customer confirms or edits invoice again.

    You see my point, fast and easy for customer to create their own invoice.


  11. Is there a way for customers to make several payments towards one balance using this method?

  12. I want to generate different receipt per product. if i purchase two product i want two different receipt with my existing account. so let me tell what change required in woocommerce plugin.
    do the needful

  13. Thanks for such a great post and the many options you shared. This post should stay alive as folks are always seeking information on how to create opportunities instead of road blocks…

    Have you figured out a way to add a previous payment “credit” to the new invoice manually so that existing paper payment previously received is noted on the new invoice?

  14. Hi, I situation where people can purchase immediately but for some we send them invoice that they can go and pay in the bank, not online.

    How would we set this up?

    Practically we need to set up invoice for them to print our and take to bank.

  15. Hi
    Is it possible to send an automatically Woo commerce invoice 15 days after the purchase? I need this option.

  16. Does the invoice plugin work with roles? I don’t want everyone to have net 30 invoice as a check out choice. I only want a couple selected clients to have net 30 invoice.

    I am using Word Press 4.7.3


  17. Invoicing Payment Gateway

    … Now your orders will be put on hold automatically. -> How does this work?

    Can I change the field for every payment gateway?

    Thank your very much for your answer in advance

  18. Hello, I really like the process you defined for using WC to invoice. I was wondering how WC could be setup to automatically”register” a new customer so that their payment method (they would also provide us authorization to automatically charge the payment method) is setup but no charges are applied. Then after services were rendered an invoice would be generated and the amount due would be automatically collected using the payment method that was created.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.