Sales Tax


The legacy sales tax docs have moved to this page: Legacy Sales Tax.  If you are still using the old tax engine, please consult those pages.

Ways to Manage Sales Tax

UltraCart provides four ways to manage sales tax.  They are listed below with their pros and cons.

MethodProsCons
UltraCart Managed
  • Default Method
  • Easy to setup
  • No additional Fees
  • United States only
  • Basic sales tax collection
Self Managed
  • All countries
  • Fine grained control of minute details
  • Manual setup of everything
  • Time intensive setup
  • Requires external tax tables
Avalara
  • Easy to setup
  • Complete tax solution
TaxJar
  • Easy to setup
  • Complete tax solution
  • Requires TaxJar plan
  • See TaxJar for additional restrictions
Sovos
  • Easy to setup
  • Complete tax solution



UltraCart Managed

The default and easiest way to collect sales tax for U.S. merchants is to allow UltraCart to manage tax collection. 
UltraCart Managed Rates is the defaulted selection unless another Sales Tax integration is selected.

Important Notice Regarding UltraCart Managed Rates

Important Notice regarding Sales Tax Calculation

UltraCart Managed Rates: The rates are provided by Avalara and are only accurate to the zip code level. 

There can be addresses within those zip codes that may have a higher rate, but to get that higher rate you will have to use an API style integration like Avalara or TaxJar service which can calculate that. 

The free UltraCart Managed rates are simply the import of the free tax tables from Avalara.  We can't modify those rates or guarantee perfect accuracy.

Important Note

United States Only

The "UltraCart" managed sales tax configuration pertains to the United States only.

For international support please contact one of the integrated Sales Tax processing services:

  • TaxJar (United States & Canada)
  • Avalera (Worldwide - Please contact Avalera directly for specific details)

As of 06/19/2019, the UC managed tax provider will populate the tax county automatically. This information can be backfilled upon request.

Required Steps:

  • Activate UltraCart Managed as your tax provider.
  • Select all states where you wish to collect sales tax.


Activating UltraCart Managed as your tax provider

Selecting states to collect tax

Click the Settings button for UltraCart Managed.  On the settings screen, select a state and click the plus button to add it to the list of states where tax is collected.  When finished, click the Save button.


Editing State Level Options

You can edit the configured states to modify the state level options, by clicking the "pencil" icon:

State Level Options

Select the options you wish to enable or disable:

Then click the OK button to save the changes.

.

Self Managed State Editor Settings

FieldDescription
Tax ShippingWhen enabled, Tax will be applied to Shipping cost for the selected shipping method.
Tax Gift ChargeWhen enabled, Tax will be applied to any configured Gift Charge configured in the gift giving configuration page.
Tax Gift WrapWhen enabled, Tax will be applied to any configured Gift Wrapping fee's configured in the in the gift giving configuration page.



Self Managed

Self managed sales tax collection allows merchants to configure every level of sales tax collection for both domestic and international sales.  

Required Steps:

  • Activate Self Managed as your tax provider.
  • Configure U.S. states for tax collection
    • Add counties to each state
    • Add cities to each county
  • Configure other countries for tax collection


Activate Self Managed as your tax provider


Configure U.S. states for tax collection

WIthin the settings for Self Managed, select a U.S. state from the drop down and click the plus button.  This will add it to your taxable states.

Configuring all states

To add all 50 states, simply continue to click the plus button, as the drop-down list will automatically populate with the next unconfigured state, in alphabetical order.

Self Managed Options

For self managed, you must either supply the tax rate for the state and local jurisdictions OR select the "Use UltraCart Managed Rates". 
The dialog window displays the following following settings:

FieldDescription
Quickbooks CodeSelf managed tax states may provide a custom QuickBooks Code for assigning a tax rate within QuickBooks.  All other tax providers merely send down the actual state, county, and city names to QuickBooks and the tax jurisdictions are automatically created.
Use UltraCart Managed Rates

Allow UltraCart to manage the Tax rates, eliminating the need to manually configure the rates for the State/County/City & Postal Code levels.
(*This option combines the best benefits of the UltraCart Managed option while also supporting the configuration of non-USA sales tax rates.)

Tax ShippingIf active, shipping is added to the taxable subtotal amount
Tax Gift WrapIf active, any gift wrap is added to the taxable subtotal amount
Don't collect state taxIf active, the state tax rate is not collected, while the other jurisdictions may (or may not) be collected
Don't collect county taxIf active, the county tax rate is not collected, while the other jurisdictions may (or may not) be collected
Don't collect city taxIf active, the city tax rate is not collected, while the other jurisdictions may (or may not) be collected
Don't collect postal code taxIf active, the postal code tax rate is not collected, while the other jurisdictions may (or may not) be collected




After saving, the state will appear in the list of states configured for taxation.


Click the plus button at the right of the state to add county tax rates.   The process is the same as the state tax rates.



Once the county is saved, click the plus sign next to the county to add city rates.


The Add City dialog contains the same fields as the state and county.   Repeat this process for as many states, counties, and cities needed.


If you need to add postal code tax rates to a city, click the plus sign at the right of the city and follow the same process as the other jurisdictions.

Configure other countries for tax collection

Other countries are located to the right of the screen.   The process for other countries is the same except it begins at the country level.  




Avalara Configuration

NAVIGATE: Main Menu → Configuration → (middle menu) Checkout → Sales Tax

Steps

First we will select Avalara , then we will configure the Avalara settings

  1. Activate the Avalara provider by clicking on the radio button at the top left and then clicking the ‘Save’ button.

  2. Once activated, click the Settings button:
    On the settings screen, you must provide four values at a minimum to configure your Avalara integration.
    Save the changes before testing the connection!

    Configure the Account ID, License Key, select the Active & Sandbox slider buttons.

    See also: https://help.avalara.com/Avalara_AvaTax_Update/Get_your_license_key

  3. When finished, save your settings and click the Test Connection button to ensure everything is working.  You will see output similar to that below if you have connected Avalara to UltraCart successfully.

Configuring Items with Proper Avalara Tax Codes

Your items will need to be configured with the proper Avalara Tax Code in order to calculate the sales tax for the item. 

So, you’ll edit each item then click the "tax" tab in the item editor:

Tax Code

Avalara tax code

Description (optional)

Optional description of the Tax Code.

Search Avalara Tax Codes

A search tool for the Avalara Tax Codes.

See also: 
https://taxcode.avatax.avalara.com/

https://help.avalara.com/Avalara_AvaTax_Update/Guidelines_for_mapping_items_to_tax_codes

Configuring Shipping Methods with Avalara Tax Codes

Next up, your shipping methods need to be configured with the appropriate Avalara tax codes in order to properly calculate the sales tax associated with Shipping.

To configure the Avalara Tax code to your shipping methods, edit each method one at a time, navigating to the "Tax Codes" tab in the shipping method editor:

Tax Code

Required Avalara Tax Code for proper sales tax calculation for shipping.

Description

Optional description of the Tax Code.

Search Avalara Tax Codes

A search tool for the Avalara Tax Codes.

See also: 
https://taxcode.avatax.avalara.com/

https://help.avalara.com/Avalara_AvaTax_Update/Guidelines_for_mapping_items_to_tax_codes


TaxJar Configuration

Navigate: Main Menu → Configuration → (middle menu) Checkout → Sales Tax

TaxJar Configuration

Activate the TaxJar provider by clicking on the checkbox at the top left and then clicking the Save button.


Once saved, click the Settings button to configure TaxJar.

Select the desired settings:

Field

Description

API Token

Paste your TaxJar API token here.

Active

Slider button actives and deactivates Tax Jar.
This must be on for TaxJar to provide tax rates.

Use Distribution Center Location as the From Address When Calculating Taxes

If on, UltraCart will send your Distribution Center address as the 'from' address for tax calculations.

Estimate Tax Only
(Do not transmit orders or refunds to TaxJar)


Send test orders through to TaxJar

Allows test orders to be sent over to TaxJar. This is useful for initial testing of the integration.

Send orders outside your nexuses to TaxJar

Sending orders outside your nexuses will result in more API calls (and possibly higher TaxJar bill), but will allow TaxJar to create new nexuses for states where your orders exceed their minimum threshold for reporting.

Do not send channel partner orders to TaxJar

If enabled, orders coming in from channels partner integration will not be sent to TaxJar.



TaxJar API Token

You can obtain your Taxjar API token by following the steps below:

  1.  Login to www.taxjar.com

  2. Navigate to Account (https://app.taxjar.com/account)

  3. Then click the link on the left side of the screen for SmartCalcs API.

  4. The Live Token will display as shown below.

Test TaxJar Connection

After configuring the TaxJar token, you'll want to test the  connection by clicking the "Tex Connection" button:

The test results will appear like this:

There should always be about 29 categories. These categories are managed by Taxjar and may vary, but it should always be around 30. Zero means a problem!


To minimize the number of API calls to TaxJar, UltraCart will look up the TaxJar Nexus Regions and only send them orders for those particular regions.  You can see the Nexus regions in the "Test Connection" output as shown below.


Tax Codes

Item Tax Codes

Item tax codes have their own screen within the Item Editor.   Edit an item, and then select the last tab.  You may search for a tax code if needed.

Customer Tax Codes

You may provide a tax code for a customer profile by editing a customer, scrolling to the bottom, and providing codes.   The tax section is located at the very bottom of the customer screen.

ATTENTION: In order to apply customer specific tax settings (such as non taxable customers) you’ll need to log into TaxJar and create the customer there, then copy and paste the TaxJar Customer Code (TaxJar customer identifier) into the Taxes tab of the customer profile editor, as displayed above.

Shipping Method Tax Codes

You may assign a tax code to each shipping method.   Avalara supports shipping tax codes and will use the code to determine if that particular shipping method should be taxed.


FAQ

Q: Refunding and order seems to replace the original transaction in Tax Jar, is this expected behavior?

A: This is how TaxJar handles refunds within their API.

Q: We are getting about twice as many API calls as orders, is this to be expected or can anything be done?

A: Yes, it's expected as we have to make rating calls throughout the checkout process as data changes.  We have as much caching as possible in place to minimize calls, but it's still going to be greater than a 1:1 between API calls and orders placed.

TaxJar Knowledgebase Articles

https://support.taxjar.com/article/116-add-or-remove-states-from-your-dashboard


Tax Exempt Customers

For tax exempt customers you will need to utilize UltraCart's customer profiles functionality.  Customer profiles can be marked as tax exempt.  Typically merchants will allow tax exempt customer profiles to signup as wholesale customers and upload their tax exemption certificate (link available under Operations → Customer Profiles → Settings).  Please note that if you're utilizing TaxJar and Avalara you will also need to perform additional setup to link the UltraCart customer profile to the tax exempt profile within their tax management system.

Troubleshooting


Troubleshooting Tool

If you need to verify or troubleshoot a tax calculation for an order, please first compare the rate using this simple sales tax look up tool: 

https://www.taxjar.com/sales-tax-calculator/

If you see a discrepancy between the recorded sales tax in an order compared to the tax displayed in the look up tool, then you can further troubleshoot the issue by reviewing the logs for either Avalara or TaxJar.

Logs

Avalara and TaxJar record important communications for review.  Shopping cart tax calculations are not stored to logs, but any operation against an order is logged.  This means the final tax calculation is stored, as well as any transaction notifications (order placed and order refunded).

Within the Avalara and TaxJar settings screens are log buttons.  Clicking either button will display a log history.


The log files will contain the request and response make to the tax service.  

Here is an example.  If the logs fail to assist you in solving any problems, notify UltraCart support and involve them.

estimateTax for order [START]
===== estimate tax request start =====
{
  "lines": [
    {
      "number": "1",
      "quantity": 3,
      "amount": 58.5,
      "itemCode": "Bone",
      "description": "TJ\u0027s DOGGIE BONES (6 lbs.)\nCode: 4W5S41JXG4\nCode: B2BJZVM1PF\nCode: JMK9XQRRRZ"
    }
  ],
  "type": "SalesOrder",
  "companyCode": "",
  "date": "Nov 8, 2018 1:57:19 PM",
  "customerCode": "GuestCustomer",
  "purchaseOrderNo": "",
  "addresses": {
    "singleLocation": {
      "line1": "30 Pryor Street",
      "line2": "",
      "city": "Atlanta",
      "region": "GA",
      "country": "US",
      "postalCode": "30303"
    }
  },
  "description": "DEMO-0009104135",
  "email": "joe@somewhere.com"
}
===== estimate tax request end =====
===== estimate tax response start =====
{
  "id": 0,
  "code": "dfaf643b-d866-407b-a1a4-3f3499e7fd1d",
  "companyId": 0,
  "date": "Nov 8, 2018 12:00:00 AM",
  "paymentDate": "Nov 8, 2018 12:00:00 AM",
  "status": "Temporary",
  "type": "SalesOrder",
  "customerVendorCode": "GuestCustomer",
  "reconciled": false,
  "purchaseOrderNo": "",
  "totalAmount": 58.5,
  "totalExempt": 0.0,
  "totalDiscount": 0.0,
  "totalTax": 5.21,
  "totalTaxable": 58.5,
  "totalTaxCalculated": 5.21,
  "adjustmentReason": "NotAdjusted",
  "locked": false,
  "version": 1,
  "exchangeRateEffectiveDate": "Nov 8, 2018 12:00:00 AM",
  "exchangeRate": 1.0,
  "description": "DEMO-0009104135",
  "email": "joe@somewhere.com",
  "modifiedDate": "Nov 8, 2018 6:57:17 PM",
  "modifiedUserId": 1152574,
  "taxDate": "Nov 8, 2018 12:00:00 AM",
  "lines": [
    {
      "id": 0,
      "transactionId": 0,
      "lineNumber": "1",
      "description": "TJ\u0027s DOGGIE BONES (6 lbs.)\nCode: 4W5S41JXG4\nCode: B2BJZVM1PF\nCode: JMK9XQRRRZ",
      "discountAmount": 0.0,
      "exemptAmount": 0.0,
      "exemptCertId": 0,
      "isItemTaxable": true,
      "itemCode": "Bone",
      "lineAmount": 58.5,
      "quantity": 3.0,
      "reportingDate": "Nov 8, 2018 12:00:00 AM",
      "tax": 5.21,
      "taxableAmount": 58.5,
      "taxCalculated": 5.21,
      "taxCode": "PP051195",
      "taxCodeId": 38011,
      "taxDate": "Nov 8, 2018 12:00:00 AM",
      "taxIncluded": false,
      "details": [
        {
          "id": 0,
          "transactionLineId": 0,
          "transactionId": 0,
          "country": "US",
          "region": "GA",
          "exemptAmount": 0.0,
          "jurisCode": "13",
          "jurisName": "GEORGIA",
          "stateAssignedNo": "",
          "jurisType": "STA",
          "nonTaxableAmount": 0.0,
          "rate": 0.040000,
          "tax": 2.34,
          "taxableAmount": 58.5,
          "taxType": "Sales",
          "taxName": "GA STATE TAX",
          "taxAuthorityTypeId": 45,
          "taxCalculated": 2.34,
          "rateType": "General",
          "rateTypeCode": "G"
        },
        {
          "id": 0,
          "transactionLineId": 0,
          "transactionId": 0,
          "country": "US",
          "region": "GA",
          "exemptAmount": 0.0,
          "jurisCode": "121",
          "jurisName": "FULTON",
          "stateAssignedNo": "060A",
          "jurisType": "CTY",
          "nonTaxableAmount": 0.0,
          "rate": 0.030000,
          "tax": 1.76,
          "taxableAmount": 58.5,
          "taxType": "Sales",
          "taxName": "GA COUNTY TAX",
          "taxAuthorityTypeId": 45,
          "taxCalculated": 1.76,
          "rateType": "General",
          "rateTypeCode": "G"
        },
        {
          "id": 0,
          "transactionLineId": 0,
          "transactionId": 0,
          "country": "US",
          "region": "GA",
          "exemptAmount": 0.0,
          "jurisCode": "04000",
          "jurisName": "ATLANTA",
          "stateAssignedNo": "060A",
          "jurisType": "CIT",
          "nonTaxableAmount": 0.0,
          "rate": 0.015000,
          "tax": 0.88,
          "taxableAmount": 58.5,
          "taxType": "Sales",
          "taxName": "GA CITY TAX",
          "taxAuthorityTypeId": 45,
          "taxCalculated": 0.88,
          "rateType": "General",
          "rateTypeCode": "G"
        },
        {
          "id": 0,
          "transactionLineId": 0,
          "transactionId": 0,
          "country": "US",
          "region": "GA",
          "exemptAmount": 0.0,
          "jurisCode": "ENVK0",
          "jurisName": "ATLANTA TSPLOST TL",
          "stateAssignedNo": "060A",
          "jurisType": "STJ",
          "nonTaxableAmount": 0.0,
          "rate": 0.004000,
          "tax": 0.23,
          "taxableAmount": 58.5,
          "taxType": "Sales",
          "taxName": "GA SPECIAL TAX",
          "taxAuthorityTypeId": 45,
          "taxCalculated": 0.23,
          "rateType": "General",
          "rateTypeCode": "G"
        }
      ]
    }
  ],
  "addresses": [
    {
      "id": 0,
      "transactionId": 0,
      "boundaryLevel": "Address",
      "line1": "30 Pryor Street",
      "line2": "",
      "line3": "",
      "city": "Atlanta",
      "region": "GA",
      "postalCode": "30303",
      "country": "US",
      "taxRegionId": 2131921,
      "latitude": "33.753427",
      "longitude": "-84.389125"
    }
  ],
  "summary": [
    {
      "country": "US",
      "region": "GA",
      "jurisType": "State",
      "jurisCode": "13",
      "jurisName": "GEORGIA",
      "taxAuthorityType": 45,
      "stateAssignedNo": "",
      "taxType": "Sales",
      "taxName": "GA STATE TAX",
      "rateType": "General",
      "taxable": 58.5,
      "rate": 0.040000,
      "tax": 2.34,
      "taxCalculated": 2.34,
      "nonTaxable": 0.0,
      "exemption": 0.0
    },
    {
      "country": "US",
      "region": "GA",
      "jurisType": "County",
      "jurisCode": "121",
      "jurisName": "FULTON",
      "taxAuthorityType": 45,
      "stateAssignedNo": "060A",
      "taxType": "Sales",
      "taxName": "GA COUNTY TAX",
      "rateType": "General",
      "taxable": 58.5,
      "rate": 0.030000,
      "tax": 1.76,
      "taxCalculated": 1.76,
      "nonTaxable": 0.0,
      "exemption": 0.0
    },
    {
      "country": "US",
      "region": "GA",
      "jurisType": "City",
      "jurisCode": "04000",
      "jurisName": "ATLANTA",
      "taxAuthorityType": 45,
      "stateAssignedNo": "060A",
      "taxType": "Sales",
      "taxName": "GA CITY TAX",
      "rateType": "General",
      "taxable": 58.5,
      "rate": 0.015000,
      "tax": 0.88,
      "taxCalculated": 0.88,
      "nonTaxable": 0.0,
      "exemption": 0.0
    },
    {
      "country": "US",
      "region": "GA",
      "jurisType": "Special",
      "jurisCode": "ENVK0",
      "jurisName": "ATLANTA TSPLOST TL",
      "taxAuthorityType": 45,
      "stateAssignedNo": "060A",
      "taxType": "Sales",
      "taxName": "GA SPECIAL TAX",
      "rateType": "General",
      "taxable": 58.5,
      "rate": 0.004000,
      "tax": 0.23,
      "taxCalculated": 0.23,
      "nonTaxable": 0.0,
      "exemption": 0.0
    }
  ]
}
===== estimate tax response end =====
estimateTax for order [END]

Reporting

The "Custom Period Sales" report contains sections pertaining to the Sales Tax collected for the orders during the reporting period.

To run the Custom Period Sales Report, navigate:
MAIN MENU → OPERATIONS  REPORTING  (REPORTS SECTION) CUSTOM PERIOD SALES

  • Sales Tax by State - (This section shows the sales taxes collected for the state level sales tax jurisdictions.)
  • Sales Tax by State / County - (This section shows the sales taxes collected for the State & County level jurisdictions.)
  • Sales Tax by State / County / City - (This section shows the sales taxes collected for the State ,County & City level jurisdictions.)


Frequently Asked Questions

Q: What is the best option for collecting V.A.T. for orders shipped to the E.U.?
A: The best Sales tax integration option for merchants that will be processing orders where V.A.T. (Value Added Tax) are collected, is the TaxJar integration.

Q: Where can I review a summary regarding the recent changes to the laws and regulations pertaining to Sales Tax collection for online merchants?
A: A great place to start is here: https://www.avalara.com/us/en/learn/sales-tax/south-dakota-wayfair.html
(*Please make sure to consult your CPA/Tax Professional to ensure that your business is in compliance with all tax jurisdictions, as this is outside the scope of the UltraCart service.)

Q: How can I determine the number of sales and revenue per state for a particular time period?
A: The custom period sales report (located under Operations > Reporting) has a section for Sales by US State which will provide those details.

Q: How is Sales Tax calculated if the item being sold is not shippable?
A: The sales tax calculation will use the customer billing address to calculate sales tax, if tax is being collected.

Q: How can I investigate the sales tax calculation in an order? 
A: Please review the troubleshooting section earlier in this document. You can use the tax rate calculation tool to compare the recorded sales tax in an order. If a discrepancy is observed, then you can further troubleshoot the calculation by viewing the logs to see the underlying calculation details.