Here at TaxJar we work with a lot of interesting datasets to help online sellers figure out sales tax:
Amazon FBA warehouses
Due dates and filing deadlines
Product tax exemptions
Sales tax holidays
And more
We also provide sales tax content across a variety of static and dynamic websites using Middleman, Nanoc, and WordPress. Some of this content overlaps on multiple sites. As our marketing team continues to grow, we need a way to collaborate on this type of presentational data in a single location so it can remain up-to-date and relevant everywhere.
At TaxJar, our goal is to make sales tax compliance easy. Executing on this ambition while staying lean requires above-average efficiency. We do a lot with a little by being data-driven. Naturally we use Stripe for payments. We could have written our own payments code, but we wanted to write sales tax code. And the Stripe API is just so… pretty. That was an easy decision. (They’re not all like that).
The imperative in the early days was to get high-level metrics with as little work as possible. Boom! Stripe webhooks. (Okay, that was another easy one). We saved these to our application database and exposed them in a lightweight admin. This gave us enough insight into conversions, churn and revenue to make decisions for years.
But as TaxJar grew, decisions got harder, and our need to be data driven became even more pressing. My crude measure of this is the “Hey Bernd” Index (HBI). For the first few years at TaxJar, when people yelled things in the chat like Hey Bernd, how many customers are enrolled in AutoFile? or Hey Bernd, how much sales tax did we remit to California last year? I would query app and webhook data from the DB to answer in real time. The “Hey Bernd’s” never piled up — HBI == 0.
Building a SaaS application with Laravel and wondering how to collect sales tax? You’ve come to the right place! In this guide we’ll cover how to use TaxJar’s sales tax API with Laravel Cashier, an interface to Stripe’s subscription billing services. After including TaxJar’s API client in your Laravel project, you’ll be able to calculate sales tax on the fly when creating a new subscription or single charge.
If you’re not familiar with SaaS taxability in the United States, review this blog post first to determine if you actually need to collect sales tax in the states where you have nexus. At this time, only a handful of states consider SaaS products taxable. We update our posts frequently to reflect new changes, so make sure to keep an eye on it. Remember, always ask your accountant for advice if you have unique sales tax requirements you’re unsure about.
Here at TaxJar, customers occasionally ask us if we support address validation through the TaxJar API or cart integrations such as WooCommerce or Magento. In order to provide the most affordable and fastest sales tax calculations, we opted to keep this out of our API in favor of lighter validation around states and zip codes. This way you have the opportunity to save money and take advantage of free or low-cost address validation APIs already on the market, usually provided by shipping services such as Shippo and carriers like UPS / USPS.
In this guide I’ll show you where to find these address verification APIs for your eCommerce website or app. I’ll also cover several plugins / extensions for handling address verification on popular eCommerce platforms.
At a recent JarFest (our biannual, company-wide team meetup) we resolved to increase our investment in open source software. We’re already totally dependent on Rails, Postgres and other open source projects. We provide open source clients to our API in various languages. But we wanted to do more. I was intrigued by the idea of dogfooding - using our own product internally.
One of the first scaling steps required here at TaxJar was summary tables. We have customers with millions of receipts within one tax period. When the first of these customers hit their reports, they timed out. Even with good indices we just couldn’t query fast enough for Heroku’s timeout.
Here’s some important advice I always give to developers unfamiliar with the intricacies of sales tax:
You only have to collect sales tax in states where you have nexus if you’re based in the United States. When calculating sales tax using one of our endpoints, first compare the customer’s shipping state with your nexus states. Skip the call if it’s not in one of your nexus states. This ensures you only calculate sales tax when necessary and comes with the added benefit of saving money. Our new Magento integration does this out of the box and even caches API responses until the order or checkout details change.
In the event that one of your APIs suddenly goes down or becomes too slow, it’s always good to have a contingency plan. At TaxJar, we’re helping you better prepare for those moments with a new endpoint called /v2/summary_rates. This endpoint allows you to periodically back up a collection of rates in your own database as a fallback. You make the call, we return a JSON array of summarized rates by state/region.
A summarized rate includes a minimum and average sales tax rate. Minimum rates are state-only tax rates, while average rates take the mean of state and local sales tax across all postal codes. These two rates can be used to collect sales tax as accurately as possible given the situation. Summarized rates are updated on a monthly basis among all of our supported jurisdictions.
Recently I built TaxJar’s new API demo to demonstrate how we calculate sales tax for orders and the gotchas you may come across in states such as New York with product exemptions. Using the presets panel you can select a nexus address, product, and destination address to generate an editable API call on the fly. Upon clicking the “Run” button, the call is parsed into a JSON object to make a request to our sales tax API. On top of that, I added a map with tooltips explaining specific sales tax rules based on the location.
Using React, CodeMirror, and Mapbox I created an incredible first impression for developers new to our platform. In this article I’m going to show you how it was built and the tools I used to make it happen. If you’d like to check it out for yourself, it’s completely open source and available on GitHub.
If you’ve done any research into handling sales tax with Stripe, you’ve probably discovered it’s going to be your next super fun DIY project. Congratulations! Stripe makes payments easier for developers, but they leave the sales tax to you. And for good reason — rates can vary by jurisdiction across the entire United States based on many factors. That’s why I’m writing this guide. First we’re going to learn how to add sales tax for charges and subscriptions using Stripe’s API. Next, we’ll jump into an implementation using the TaxJar API for calculating sales tax.
We’ll cover payments for products and subscriptions in the United States, Canada, and European Union. If you’re using Stripe with an existing eCommerce platform such as Magento, WooCommerce, or Shopify, there’s plenty of plugins and extensions out there that don’t require any additional work. This guide is strictly for developers looking to calculate sales tax in their own custom applications and services.
Update June 2016: TaxJar is now fully integrated with Stripe’s product and order APIs. Check out the Stripe documentation to learn more!
Updates from the TaxJar product development team behind the TaxJar API. We share what we've learned building TaxJar, API updates, and technical content around sales tax.
Newsletter
Stay connected by signing up for our dev newsletter. Get product updates and articles on building great eCommerce websites: