NetSuite Sales Tax Integration Guide
- Last Updated
- January 6, 2019
We put together this integration guide for NetSuite users looking to better understand TaxJar’s integration for sales tax calculations, reporting, and filing.
You’ll learn how TaxJar provides calculations directly through SuiteTax and syncs invoices, cash sales, and credit memos for reporting / filing. Along the way, we’ll configure your NetSuite account to collect sales tax where you have nexus, handle product / customer exemptions, and much more. For a primer on everything sales tax, read our Sales Tax 101 guides before getting started.
TaxJar for NetSuite requires a TaxJar Plus subscription. To sign up for Plus or upgrade your existing account please contact our sales team.
To use TaxJar’s integration with NetSuite, you’ll need to enable SuiteTax for your NetSuite account. Keep in mind that SuiteTax is currently in beta with known limitations. Please review these limitations before continuing. If you have any questions, contact us before continuing this guide.
Behind the scenes, SuiteTax allows TaxJar to provide rooftop-accurate calculations down to the jurisdiction-level directly inside NetSuite. It’s an easier, more accurate way to calculate sales tax compared to the old way of manually adding state or zip-based rates (known as Legacy Tax). SuiteTax lets you use different tax calculation engines for nexuses and override tax details on transactions.
The SuiteTax feature must be shared to your NetSuite account before it can be enabled. Contact your NetSuite account manager and submit a SuiteTax enablement request with the help of NetSuite Customer Support. Your SuiteTax enablement request will be reviewed by the SuiteTax approval team. If your request has been approved, the SuiteTax feature will be shared to your NetSuite account.
Before you can enable the SuiteTax feature, your account must meet the following prerequisites:
- For existing NetSuite accounts where migration of legacy records to SuiteTax is required, a Sandbox account must be available.
- Backup of your entire NetSuite account must be requested.
Only administrators can enable the SuiteTax feature. To enable the SuiteTax feature, go to Setup > Company > Enable Features. Check the SuiteTax - Beta box on the Tax subtab, and click Save.
Getting Started with TaxJar
After enabling SuiteTax in your NetSuite account, you can install TaxJar’s NetSuite integration via SuiteBundler under Customization > SuiteBundler > Search & Install Bundles. Search for “taxjar” and install the TaxJar SuiteBundle.
Enable SuiteTax Plugin
Once the TaxJar SuiteBundle is installed, you’ll first want to enable TaxJar as a tax calculation plugin for SuiteTax. Go to Customization > Plug-ins > Manage Plug-ins. Under Tax Calculation implementations, select the checkbox next to “TaxJar” and click Save:
Go to TaxJar > Setup > Configuration to connect your TaxJar Plus account. Copy and paste your TaxJar API token:
Next you’ll want to configure your tax settings. Enable calculations and/or reporting depending on the TaxJar features you want to use. Set a default sales tax payables and use tax receivables account for calculations:
As TaxJar only provides sales tax calculations at this time (not use tax calculations), the payables sales tax account will be used to record the amount of sales tax you collect as a liability. If you’d like to use a different payables account for each nexus, you’ll need to edit the generated tax types under Setup > Accounting > Tax Types after performing initial calculations.
Finally, you’ll be asked to review your NetSuite nexuses and tax registrations prior to using the TaxJar integration:
Configuring Nexuses for TaxJar
In order to calculate sales tax through SuiteTax, we’ll need to properly configure your NetSuite account to use TaxJar as the sales tax engine. Go to the TaxJar dropdown in your menu bar and select Nexuses:
On the Nexuses page, set up all of the countries and regions where you need to collect sales tax. If you just migrated over from SuiteTax, you may already have existing nexuses:
Make sure each subnexus has a valid nexus address:
When making sales tax calculations, these nexuses are passed to TaxJar to determine where you have nexus. They’re also synced automatically to your TaxJar account.
Configuring Tax Registrations for TaxJar
After you’ve set up your nexuses, you’ll want to assign them to tax registrations under your business subsidiaries. Go to the TaxJar dropdown in your menu bar and select Tax Registrations from the Setup menu:
Click the Tax Registrations tab. If you are a NetSuite OneWorld customer, select the Subsidiary that you’d like to edit then click the Tax Registrations tab:
When adding a new nexus, make sure you choose TaxJar when selecting the tax engine for sales tax calculations.
Product Exemptions & Taxability
To assign a specific item in NetSuite to a TaxJar product category for exemptions, simply edit the item and click the TaxJar tab. Select a TaxJar category and save the item:
For assigning items in bulk to a given TaxJar category, use the mass update feature under Lists > Mass Update > Mass Updates and select an item type under General Updates.
You can review all of your categorized items under TaxJar > Reports > Exempt Items.
Customer Exemptions & Taxability
To exempt a specific customer in Netsuite for calculations and reporting, edit the customer and click the TaxJar tab. Check the TaxJar Exempt checkbox and select an exemption type from the dropdown:
If you decide to perform a mass update on your customer records to exempt a batch of customers from sales tax, they’ll automatically enqueue and sync to TaxJar. To manually backfill customers, go to the TaxJar dropdown in your menu bar and select Backfill > Backfill Records, then select Customers in the Backfill Type field:
You can review all of your exempt customers under TaxJar > Reports > Exempt Customers.
Order Exemptions & Taxability
To exempt an individual order rather than a customer, click the TaxJar tab on a transaction and select an exemption type from the dropdown:
If you sell on a marketplace that TaxJar doesn’t support yet, you can use the Marketplace exemption to designate an order as custom marketplace exempt. TaxJar will automatically determine if the order is shipped to a state with a marketplace facilitator law and handle it accordingly for reporting / filing.
If you have exempt customers that are sometimes taxable for specific orders, you can also use the TaxJar Exemption Type dropdown to set an order as Non-Exempt. This will override the customer exemption and allow you to collect sales tax on an order for a customer who would typically be exempt from sales tax.
Sales Tax Adjustments
If you need to refund sales tax on a previous order for a customer that was processed prior to exempting them, we recommend fully refunding the order and making a copy of the original order via Actions > Make Copy.
TaxJar provides US address validation directly inside NetSuite to ensure valid addresses are sent to our API for accurate sales tax calculations. To set up address validation, go to Customization > Forms > Address Forms. You’ll find a custom address form named “TaxJar Address Validation Form”:
Click the “Edit” link and go to the “Country” tab to enable the form in the United States:
You can now validate addresses anywhere in NetSuite! Upon clicking the “Validate Address” button, we’ll automatically clean up the address and add a ZIP+4 postal code:
Order-level discounts and line discounts should behave similar to native NetSuite behavior for both sales tax calculations and reporting / filing. Discounts added as a line item to an order will discount the preceding line item.
If you use discount items for gift card redemptions or other scenarios which may require applying the discount after calculating tax, use the “Apply After Tax” checkbox on the “TaxJar” tab when configuring a discount item:
Sales Tax Calculations
TaxJar directly integrates with SuiteTax (Beta) and provides sales tax calculations for the following records in NetSuite:
- Sales orders
- Cash sales
- Credit memos
- Cash refunds
- Return authorizations
Before making a calculation, TaxJar requires a valid shipping address and one or more line items in a given record. After providing this information, click the Preview Tax button to get a summary of sales tax organized by jurisdiction:
For US calculations, this summary may include state, city, county, and district tax. In Canada, GST / PST / QST amounts. In other countries, VAT will be listed. You’ll also notice the tax is broken out for each line item under the Tax Details tab:
Once a record is processed, the underlying tax types and tax codes may be referenced in your NetSuite Tax Report under Reports > Financial > Tax Report. You can review the underlying API requests and responses under TaxJar > Reports > Logs to verify calculations.
If you save the record before previewing tax, don’t worry. TaxJar will automatically calculate sales tax after you save a record.
When sales tax is previewed or calculated, a request is made to our API through SuiteTax. In the unlikely event that our API is unavailable (we boast 99.99% uptime), we’ll apply a backup rate as a fallback to ensure you collect sales tax. A backup rate is an average tax rate across all postal codes in a given region or country.
After configuring the integration, we’ll retrieve backup rates for every region and country we currently support and store the rates directly inside NetSuite. Each month we’ll update the rates using a scheduled script for accurate backup calculations.
You can review the current backup rates under TaxJar > Reports > Backup Rates.
Skip & Override Calculations
When importing orders from an external platform such as Shopify, Amazon, eBay, or a custom homegrown system, you may want to skip API calculations and bring in the sales tax you’ve already collected “as-is”. TaxJar makes it easy to pass in a custom field and generate the tax details for SuiteTax. You can set this field using a NetSuite connector such as Celigo / FarApp, CSV imports, or your own SuiteTalk web services integration.
Use one of the following custom transaction body fields to import tax for an order without recalculating tax in SuiteTax:
custbody_tj_external_tax_amountfor order-level sales tax amounts
custbody_tj_external_tax_ratefor order-level sales tax rates
To test out this functionality, you can also edit these fields directly inside the TaxJar subtab on a transaction record. Click the Preview Tax button or save the record to apply the tax.
If your platform records sales tax at the line level, you can use one of the following custom transaction column fields to import tax for each line item:
custcol_tj_external_tax_amountfor line-level sales tax amounts
custcol_tj_external_tax_ratefor line-level sales tax rates
Sales Tax Refunds
You can create a sales tax only refund for your customer by creating a transaction using these steps:
- Create a non-inventory item named “Sales Tax Refund” or something relevant to your organization.
- Create a new Cash Refund or Credit Memo for the customer.
- Add the “Sales Tax Refund” item to the transaction with an amount of $0.00.
- Enter the amount of sales tax to refund in the “TaxJar External Tax Amount” field.
- Click the “Save” button.
This will create a refund transaction with a subtotal of $0.00 and a tax total of the amount specified.
Sales Tax Reporting
TaxJar automatically syncs invoices, cash sales, credit memos, and cash refunds for sales tax reporting and filing. This is done automatically behind the scenes when one of these records is created or updated inside NetSuite. To backfill older transactions from NetSuite into TaxJar, go to the TaxJar dropdown in your menu bar and select Backfill > Backfill Records, then select Transactions in the Backfill Type field:
From there, use the datepickers in the Start Date and End Date to select a date range of transactions to backfill:
Click Backfill Records and transactions with a transaction date within that range will be queued for syncing. To monitor the queue system, go to TaxJar > Reports > Queue to view pending, processed, and invalidated transactions:
You can browse and filter through all of your synced transactions under TaxJar > Reports > Synced Transactions:
TaxJar only imports paid in full invoices and fully applied credit memos. Cash sales and cash refunds are always synced over. Additionally, only transactions shipped to the US with USD currency are synced to TaxJar. At this time TaxJar only supports reporting and filing in the United States.
After a customer payment is recorded, any associated invoices will be synced if they’re in a paid in full status.
After a customer refund is recorded, any associated credit memos will be synced if they’re in a fully applied status.
If you create credit memos or cash refunds separately from an invoice or cash sale in NetSuite, you will need to specify a reference transaction before syncing the order to TaxJar. Click the TaxJar subtab on a refund transaction and select a synced order from the TaxJar Reference Transaction field:
After saving, our integration will reference this transaction as a fallback if we can’t find an originating order for the refund.
If you sell on marketplaces such as Amazon, eBay, Etsy, or Walmart and import orders from these channels into NetSuite, you can designate them as marketplace exempt for TaxJar reporting and filing. Simply change the TaxJar Provider field from “api” to “amazon”, “ebay”, “etsy”, or “walmart” when editing a transaction:
You can also set a provider for many transactions at once using the mass update feature under Lists > Mass Update > Mass Updates. After doing so, make sure to backfill these transactions into TaxJar via TaxJar > Backfill > Transactions.
Import marketplace transactions using a connector via SuiteTalk / web services? You can programmatically set the transaction body custom field
custbody_tj_provider to the channel of your choice before creating the order or refund in NetSuite.
Skipping / Filtering Transactions
If you’d like to skip specific transactions from syncing to TaxJar, you can use the “Skip TaxJar Sync” checkbox on individual transactions on the “TaxJar” subtab:
For skipping transactions in bulk, use the mass update feature under Lists > Mass Update > Mass Updates and select
Credit Memo, or
Cash Refund under General Updates > Transaction Types.
Import transactions using a connector via SuiteTalk / web services? You can programmatically set the transaction body custom field
custbody_tj_sync_skip to true (T) or false (F) based on your given logic or criteria.
If you receive
INSUFFICIENT_PERMISSION error notifications from NetSuite after installing the TaxJar bundle, you may need to update access for non-administrator roles or update script deployments to execute as a specific role under Customization > Scripting > Script Deployments. For security reasons, our integration defaults the execution to “Current Role” for script deployments instead of “Administrator”.
To allow specific roles to enqueue and sync transactions in real-time after saving an invoice, cash sale, cash refund, or credit memo, make sure the role has the “Custom Record Entries” permission. Alternatively, change the following script deployments to execute as an “Administrator” role:
Congratulations, you’ve finished setting up TaxJar and NetSuite! At this point you should be collecting sales tax in NetSuite and syncing transactions for reporting / filing.
The following items are currently unsupported by TaxJar in NetSuite:
- If “Item Line Shipping” is enabled, TaxJar will use the first line item shipping address for calculations and reporting. At this time, TaxJar does not support multiple shipping addresses through our API.
- TaxJar does not currently support use tax calculations for the following record types: Credit card charge, credit card refund, purchase order, vendor bill, vendor credit, vendor return authorization. Calculations will be skipped for these record types when attempting to estimate or record tax via SuiteTax.
TaxJar requires SuiteTax to provide rooftop accurate sales tax calculations at the jurisdiction level. Review the known limitations of SuiteTax in the NetSuite Help Center prior to installing SuiteTax.
Curious to see what’s changed with our integration lately? Read on to learn more!
v1.6.12 - 2020-03-23
- Allow saving transactions in NetSuite when external tax values are provided and the transaction would not otherwise pass data validations related to tax calculation. This change is meant to allow saving transactions in NetSuite that come from external eCommerce systems with incomplete addresses. These transactions still cannot be pushed into TaxJar with incomplete address information.
v1.6.11 - 2020-03-10
- Fixed an issue that prevented transactions with Payment Items being pushed to TaxJar
- Fixed an issue with VOIDed transactions that were not properly updated in TaxJar and no error was reported to user.
v1.6.10 - 2020-02-20
- Fixed an issue that sent the wrong exemption type when pushing marketplace exemption orders to TaxJar.
v1.6.9 - 2020-02-14
- Fixed an issue that resulted in an error when creating vendor bills.
v1.6.8 - 2020-02-13
- Fixed an issue causing every customer updated via mass update or inline edit to be pushed to TaxJar regardless of the fields being updated or the exemption status of the customer.
v1.6.7 - 2020-02-11
- Fixed an error when SuiteTax was triggered on transactions that are not related to a customer.
v1.6.6 - 2020-02-10
- Use customer exemption status when calculating tax on a transaction if no order exemption status is selected. This eliminates the need to wait for customer records to sync to TaxJar before creating orders that are exempt from sales tax.
- Fixed an issue that would not delete marketplace provider refunds from TaxJar correctly when corresponding credit memos were deleted in NetSuite.
v1.6.5 - 2020-01-27
- Fixed an issue that prevented discounts on item groups from being applied properly when calculating tax.
- Fixed an issue that prevented pushing transactions to TaxJar if they contained item groups.
- Fixed an issue that prevented deleting transactions from TaxJar with a TaxJar Provider other than ‘api’ (‘amazon’, ‘walmart’, ‘ebay’, ‘etsy’).
v1.6.4 - 2020-01-20
- Updated the Backfill Customers & Transactions link on the TaxJar Portlet to point to the correct Suitelet.
v1.6.3 - 2020-01-16
- Updated the user interface for backfilling customers and transactions providing more information and preventing the submission of new backfill requests while one is running.
- Fixed an issue that prevents pushing an invoice to TaxJar when that invoice transitions to a “Paid if Full” status by applying an existing credit memo.
- Fixed an issue that prevents pushing transactions to TaxJar when they were created or updated via web services, CSV import, or another bulk context.
v1.6.2 - 2020-01-02
- Fixed an issue that doubled sales tax related to shipping when a handling charge was present on the transaction. This update treats the handling charge like a separate line item for sales tax calculations purposes.
- Updated the TaxJar queue report to include a link directly to the logs relevant to a given transaction.
- Fixed an issue in the bundling process that prevented the address validation script from running.
v1.6.1 - 2019-12-12
- Fixed an issue that prevented cash refunds from being pushed to TaxJar under certain scenarios.
v1.6.0 - 2019-12-12
- Add support for multiple TaxJar accounts. Each subsidiary can be configured to push data to a different TaxJar account.
- Fixed an issue that prevented users from creating transactions with a $0.00 subtotal and a value specified in the external tax field.
v1.5.3 - 2019-11-20
- Fix rounding issue when specifying an external tax amount.
- Fix issue when a payment record uses a credit memo to pay an invoice.
- Add the TaxJar Category custom item field to Assembly Item records.
v1.5.2 - 2019-11-11
- Fix RCRD_DSNT_EXIST error when return authorization is created from a sales order.
v1.5.1 - 2019-11-01
- Fix issue with incrementing the retry count on queued record items.
v1.5.0 - 2019-11-01
- Redesigned Backfill Workers Backfill scripts were re-written to take advantage of NetSuite’s map/reduce architecture which provides faster performance and greater scalability.
- Sync exempt customers to TaxJar when using bulk update methods like CSV import, mass updates, and web services.
- Optimized the monthly product tax category sync.
- Restored the TaxJar Backfill role to allow users to run backfill operations without administrative privileges.
v1.4.0 - 2019-10-11
- Order-level exemptions for custom marketplace exemptions, wholesale, government, and other exemptions. This field can also be used to mark an order as non-exempt to override a customer exemption.
- SuiteTax mapping for external transactions at the line level. Use the
custcol_tj_external_tax_ratetransaction column fields to import your line sales tax “as-is” from external platforms without recalculating tax.
- Enqueue invoices when a deposit application is applied via Invoice Sales Orders.
- Fix deleted record sync during transaction backfill process.
v1.3.3 - 2019-10-08
- Only sync exempt customers during backfill process.
- Fix customer sync error when attempting to update and getting a 404 response.
v1.3.2 - 2019-08-29
- Fix error when syncing transactions with subtotal lines.
v1.3.1 - 2019-08-22
- Clear TaxJar sync date when copying an invoice or cash sale transaction.
- Fix error when syncing transactions with description line items and empty amounts.
- Support internal override for accrual basis accounting.
v1.3.0 - 2019-08-08
- Automatic SuiteTax mapping for external transactions. Use the
custbody_tj_external_tax_ratetransaction body fields to import your sales tax “as-is” from external platforms without recalculating tax.
- Override state-level nexus mismatches in SuiteTax. If TaxJar determines a different nexus state / region from what SuiteTax determines, we will automatically override the nexus to ensure sales tax is recorded in the proper sales tax payable account.
- Refactor discount calculations to fully support order-level discounts, line discounts, and discounts applied with items after tax such as gift card redemptions.
- Sync exempt prospect and lead customer records to TaxJar when backfilled.
- Fall back to company ship-from address in NetSuite Standard Edition.
- Require default payable and receivable accounts in TaxJar configuration for SuiteTax.
v1.2.1 - 2019-07-17
- Sum up line discount totals manually for SuiteTax calculations.
- Fix calculation error when using a location with multiple address lines.
- Fix duplicate tab issue for non-inventory items “Apply After Tax” setting.
v1.2.0 - 2019-06-18
- Skip non-inventory items (such as gift card redemptions) from calculations via “Apply After Tax” checkbox.
- Remove “NULL” strings for empty address lines (2 & 3) when calculating sales tax.
- Fix type error when attempting to sync a refund from a return authorization tied to a sales order.
v1.1.1 - 2019-05-07
- Fix nexus address lookup for calculations in NetSuite Standard edition.
- Fix script execution limit for calculations on orders with 150+ line items.
- Fix transaction force push to sync records that have not been updated.
- Hide calculation settings if SuiteTax is not enabled.
v1.1.0 - 2019-04-19
- Support standalone refunds using new custom transaction body field for transaction sync.
- Fix line item sales tax when pushing orders and refunds during transaction sync.
- Fix type error when attempting to sync a refund from a return authorization without a reference ID.
v1.0.1 - 2019-04-12
- Automatically enqueue customers on a mass update instead of requiring a backfill.
- Support custom line amounts for calculations and transaction sync.
- Improve order-level discount distribution across multiple lines for transaction sync.
- Cache tax code and tax type IDs during calculations.
- Skip nexus address for calculations if tax engine is not set to “TaxJar”.
- Fix generated tax codes with duplicate county and city jurisdiction names.
- Fix product tax codes when pushing transactions to TaxJar.
- Fix international calculations without a state or region in the shipping address.
- Fix tax details override error during calculation.
- Fix transaction backfill error when exceeding scheduled script usage threshold.
v1.0.0 - 2019-03-29
- Multi-channel transaction support for marketplace exemptions. Transaction body field
custbody_tj_providercan be used to set a provider such as “amazon”, “ebay”, “etsy”, and “walmart” to designate marketplace exempt transactions within TaxJar.
- Bundle custom address form for address validation.
- Always show custom transaction body fields on sales records.
- Fix transaction reference ID lookup for cash refunds.
- Check invoice “paid in full” status and credit memo “fully applied” status prior to enqueueing records.
- Fix skip sync lookup for customer payments and refunds when enqueueing transactions.
- Fix “record does not exist” error when attempting to enqueue a deleted customer payment or refund.
v0.6.1 - 2019-03-07
- Support bulk invoicing of sales orders when queueing invoices and cash sales.
- Fix system error when failing to write a TaxJar log message.
v0.6.0 - 2019-02-04
- Skip specific transactions from syncing via “Skip TaxJar Sync” checkbox.
- Skip specific discount items from calculations via “Apply After Tax” checkbox.
- Sync invoices and credit memos after applying a customer payment or refund.
- Apply discount line items to previous line item and use absolute amounts.
- Fix nexus address lookup when nexuses have not been saved with TaxJar custom fields for SuiteTax.
- Fix Setup > Nexuses menu tab for NetSuite 2019.1.
- Remove custom role for backfilling transactions until resolved in NetSuite 2019.1.
v0.5.2 - 2019-01-24
- Fix permission issues on custom records for non-administrators.
- Fix end date on queue worker scheduled script.
- Automatically invalidate record in queue when deleted or no longer exists.
- Drop cash sale deposited status requirement prior to syncing.
- Update reports with improved labels and relative URLs.
- Support free-form state names in addresses.
- Tweak TaxJar configuration help text.
v0.5.1 - 2019-01-16
- Skip SuiteTax calculations for use tax record types: Credit card charge, credit card refund, purchase order, vendor bill, vendor credit, vendor return authorization.
- Directly override nexus if SuiteTax nexus determination differs from TaxJar.
- Remove default tax or shipping tax if tax rate is zero percent.
- Tax category item dropdown should now be available for inventory items.
- Custom fields should now be shown on existing custom forms.
- Fix “TaxJar Backfill” custom role name.
v0.5.0 - 2019-01-10
- Initial release of our NetSuite integration. Sales tax calculations powered by SuiteTax for rooftop-accurate rates down to the jurisdiction level. Transaction sync and backfilling. Supports product exemptions, customer exemptions, shipping taxability, sourcing logic, and address validation.