skills/payments-checkout/tax-compliance-automation/SKILL.md
Automate multi-jurisdiction sales tax, VAT, and GST compliance with nexus tracking, exemption certificates, filing automation, and audit-ready reports
npx skillsauth add finsilabs/awesome-ecommerce-skills tax-compliance-automationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Tax compliance for ecommerce is one of the most complex operational challenges at scale. In the United States alone, there are over 13,000 taxing jurisdictions with different rates, product taxability rules, filing frequencies, and economic nexus thresholds. Internationally, VAT (Europe, UK, Australia) and GST (Canada, India, New Zealand) add additional compliance layers with their own registration thresholds, invoice requirements, and reporting obligations.
This skill covers the full tax compliance lifecycle: nexus threshold tracking to know when you must register in a new jurisdiction, real-time tax calculation at checkout, exemption certificate management for B2B customers, automated filing, and audit-ready reporting. All major platforms have direct integrations with TaxJar and Avalara that handle this without custom code.
| Platform | Recommended Tool | Notes | |----------|-----------------|-------| | Shopify | Shopify Tax (built-in) + TaxJar or Avalara AvaTax (Shopify App Store) | Shopify Tax covers basic US nexus; TaxJar and Avalara add filing automation, exemption certificate management, and international VAT | | WooCommerce | TaxJar for WooCommerce (free plugin) or Avalara AvaTax for WooCommerce | TaxJar is the most popular WooCommerce tax plugin; Avalara's plugin is available from the Avalara website | | BigCommerce | Avalara AvaTax (native integration) or TaxJar (via BigCommerce App Marketplace) | BigCommerce has a native Avalara connector; TaxJar is also available in the App Marketplace | | Custom / Headless | TaxJar API or Avalara AvaTax API | Call the API at checkout for real-time rates; commit transactions after payment for filing records |
For filing automation specifically:
Step 1: Register nexus states in Shopify
Step 2: Install TaxJar for full compliance automation
Exemption certificates on Shopify:
EU VAT on Shopify:
EU + your country's VAT number)Step 1: Install and configure TaxJar
Step 2: Configure nexus states in TaxJar
Step 3: Enable filing automation
Exemption certificates on WooCommerce:
EU VAT on WooCommerce:
Step 1: Connect Avalara AvaTax (recommended)
Step 2: Configure nexus in Avalara
Step 3: Enable Avalara Returns
Exemption certificate management on BigCommerce:
EU VAT on BigCommerce:
Use the TaxJar API or Avalara AvaTax API for real-time calculation and filing records:
TaxJar real-time calculation at checkout:
const Taxjar = require('taxjar');
const taxjar = new Taxjar({ apiKey: process.env.TAXJAR_API_KEY });
async function calculateTaxForOrder({ fromAddress, toAddress, lineItems, shippingCost }) {
const response = await taxjar.taxForOrder({
from_country: fromAddress.country,
from_zip: fromAddress.zip,
from_state: fromAddress.state,
to_country: toAddress.country,
to_zip: toAddress.zip,
to_state: toAddress.state,
to_city: toAddress.city,
amount: lineItems.reduce((sum, i) => sum + i.unit_price * i.quantity, 0),
shipping: shippingCost,
line_items: lineItems.map(item => ({
id: item.id,
quantity: item.quantity,
unit_price: item.unit_price,
product_tax_code: item.taxCode ?? null, // e.g., '20010' for general goods
exemption_type: item.exemptionType ?? null,
})),
exemption_type: customer.exemptionType ?? null, // 'wholesale', 'government', etc.
});
return {
totalTax: response.tax.amount_to_collect,
taxRate: response.tax.rate,
hasNexus: response.tax.has_nexus, // false = no tax to collect in this jurisdiction
breakdown: response.tax.breakdown,
};
}
Commit transaction after payment (required for filing records):
async function commitTaxTransaction(order) {
await taxjar.createOrder({
transaction_id: order.id,
transaction_date: new Date().toISOString().split('T')[0],
from_country: WAREHOUSE_ADDRESS.country,
from_zip: WAREHOUSE_ADDRESS.zip,
from_state: WAREHOUSE_ADDRESS.state,
to_country: order.shippingAddress.country,
to_zip: order.shippingAddress.zip,
to_state: order.shippingAddress.state,
amount: order.subtotal,
shipping: order.shippingCost,
sales_tax: order.taxAmount,
line_items: order.lineItems.map(item => ({
id: item.id,
quantity: item.quantity,
unit_price: item.price,
sales_tax: item.taxAmount,
})),
});
}
// On refund: void the transaction so it is excluded from filing reports
async function voidTaxTransaction(orderId) {
await taxjar.deleteOrder(orderId);
}
EU VAT B2B reverse charge — validate VAT number via VIES:
async function validateEUVATNumber(vatNumber) {
const countryCode = vatNumber.slice(0, 2);
const number = vatNumber.slice(2);
const res = await fetch(
`https://ec.europa.eu/taxation_customs/vies/rest-api/ms/${countryCode}/vat/${number}`
);
const data = await res.json();
return data.isValid === true;
// If valid: apply zero-rate (reverse charge); if invalid: charge local VAT rate
}
Nexus threshold monitoring: TaxJar provides an Economic Nexus Insights feature in the TaxJar Dashboard that automatically tracks your sales volume per state and alerts you when you approach thresholds. Access it under TaxJar Dashboard → Economic Nexus Insights — this eliminates the need to build custom threshold tracking code.
For US B2B sales: Exemption certificates must be collected and validated before applying zero-rate to a customer. Do not apply exemptions based on a customer's self-declaration alone.
Certificate storage requirements:
| Filing Method | When to Use | |--------------|-------------| | TaxJar AutoFile | US stores using TaxJar; available on Plus/Professional plans; covers all 50 states | | Avalara Managed Returns | Avalara customers; handles US states and some international jurisdictions | | Avalara VAT Reporting | EU/UK/AU VAT filing; Avalara prepares OSS returns for you | | Manual filing with TaxJar reports | For less frequent filers (quarterly or annual); export TaxJar's pre-filled state return data and file manually at each state's tax authority website |
Filing calendar setup:
DC010100 for SaaS) or Avalara tax code for each digital product.| Problem | Solution | |---------|----------| | Tax calculated at checkout but not committed to TaxJar/Avalara | Verify your platform plugin's Transaction Sync setting is enabled; check the provider's transaction dashboard for missing orders | | EU VAT charged on B2B cross-border sales | Validate buyer's VAT number via VIES before applying reverse charge; if validation fails, charge VAT as a B2C transaction | | VAT-inclusive vs VAT-exclusive pricing confusion | Decide upfront whether your prices include VAT (EU B2C norm) or exclude it (US norm); configure your platform tax settings to match — mixing the two causes checkout total errors | | Missing nexus registration discovered during acquisition due diligence | Run annual nexus reviews using TaxJar's Nexus Insights; acquirers treat undisclosed tax liabilities as a significant risk | | B2B customer claims exemption without a valid certificate on file | Always collect and store the certificate before applying the exemption; use Avalara CertCapture or TaxJar Exemptions to enforce this at checkout | | Currency conversion for EU VAT OSS returns | OSS quarterly returns must be filed in EUR; use the ECB exchange rate for the reporting period, not the individual transaction dates — Avalara's VAT Reporting module handles this automatically | | Shopify showing $0 tax after TaxJar install | Verify the TaxJar API key is correct; check the nexus states are configured in both the TaxJar dashboard and the Shopify app settings; confirm your warehouse address is set correctly |
tools
Let shoppers save products to a wishlist, share it with friends, and get notified when saved items come back in stock or drop in price
development
Build a themeable storefront with design tokens and CSS custom properties that supports white-labeling, multi-brand variants, and dark mode
development
Speed up product discovery with instant search suggestions, fuzzy typo matching, and category-aware results powered by Algolia or Elasticsearch
development
Build a mobile-first storefront with thumb-friendly navigation, sticky add-to-cart buttons, and touch-optimized components for high mobile conversion