PandaDoc AvaTax Integration Guide

Built by Taxiom

PandaDoc Avalara
Back

This integration connects PandaDoc to your AvaTax account, allowing for real-time tax calculation from Avalara on your PandaDoc documents.

Before proceeding, please make sure the setup fee has been paid to receive your portal credentials, then click here to schedule a call with the Taxiom team so we can guide you through the setup.

Connecting AvaTax & PandaDoc

(go to top)

Before you connect, make sure you have:

  • An active Avalara AvaTax account (sandbox or production) with an Account ID, License Key, and Company Code.
  • An active PandaDoc workspace where you create your invoices.
  • Your AvaTax for PandaDoc portal credentials (sent to you by email after paying the setup fee).

Step 1 - Log into your portal

Open https://avataxforpandadoc.taxiom.com/login and sign in with the credentials you received by email. If you haven't set your password yet, use the link from the welcome email to set one.

Step 2 - Connect PandaDoc

From the dashboard, click Connect PandaDoc. You'll be redirected to PandaDoc to authorize the app. After granting access, you'll be returned to the AvaTax for PandaDoc portal.

INSERT SCREENSHOT HERE: dashboard with Connect PandaDoc button

Step 3 - Enter your Avalara credentials

Go to Avalara Credentials and enter:

  • Account ID - the numeric ID shown at the top of your Avalara dashboard.
  • License Key - generate one from Avalara under Settings → License Keys. Avalara allows only one active key at a time, so if you generate a new one, any other system using the old key will need to be reconnected.
  • Company Code - the company code for the Avalara Company that should receive your PandaDoc transactions.
  • Environment - choose Production for live transactions or Sandbox for testing.

Click Save. The portal will validate the credentials against Avalara and show a green confirmation when successful.

INSERT SCREENSHOT HERE: Avalara credentials page

Configuring Your Ship-From Address

(go to top)

Avalara needs to know where you're shipping from to calculate origin-based tax correctly. The integration uses the following lookup order:

  1. The business profile address configured in your PandaDoc workspace (Settings → Business Address).
  2. If PandaDoc doesn't have a business address set, the integration falls back to the company address you save in the AvaTax for PandaDoc portal under Company Settings.

If you sell from multiple physical locations, set the primary location in PandaDoc and configure any additional ship-from locations in the portal's Ship-From Locations page. You can then route specific clients or items to specific origins from the same settings page.

INSERT SCREENSHOT HERE: Company Settings page with ship-from

Note: An incomplete ship-from address (missing state, ZIP, or country) is the #1 cause of "tax did not calculate" errors. Always verify the business address in PandaDoc before sending invoices.

How Tax Calculation Works

(go to top)

Once connected, tax calculation is fully automatic. Here's the flow:

  1. You create a new invoice in PandaDoc (or update an existing one) and assign it to a client.
  2. PandaDoc fires a webhook to the AvaTax for PandaDoc integration.
  3. The integration pulls the invoice, its line items, the client's shipping address (falling back to billing), and your ship-from address.
  4. It sends those details to Avalara for calculation.
  5. Avalara returns a tax rate and amount for each line.
  6. The integration writes the tax back onto each line in PandaDoc as a tax rate (typically populating taxName1 and taxAmount1).

The whole round trip usually takes a few seconds. When you refresh the invoice in PandaDoc, you'll see the tax line items populated.

INSERT SCREENSHOT HERE: PandaDoc document with calculated tax line

What address is used?

The integration uses the client's shipping address (the s_* fields on the client record). If no shipping address is set, it falls back to the primary/billing address (the p_* fields). This matches PandaDoc' own behavior on invoices.

What if the address is incomplete?

If the client is missing a state, ZIP, or country, Avalara cannot calculate accurate tax. The integration will skip the calculation and log the reason. You'll see an error notification in the portal and can fix the client's address in PandaDoc, then update the invoice to re-trigger calculation.

When Transactions Commit to Avalara

(go to top)

Tax calculation is one step; committing the transaction is what makes it count toward your filing reports in Avalara. Here's how the integration handles it:

  • Invoice created/updated: Tax is calculated and the transaction is recorded in Avalara as an uncommitted SalesInvoice. Uncommitted transactions are visible in Avalara but don't count toward filings yet.
  • Invoice marked paid: The integration commits the transaction in Avalara automatically. This is the standard sales tax recognition model - tax becomes reportable at the point of payment.
  • Invoice deleted in PandaDoc: The matching Avalara transaction is voided (or marked deleted if already committed).

Important: If you use cash-basis tax accounting, commit-on-paid is exactly what you want. If your accountant uses accrual-basis recognition and you want commits to happen on invoice send instead, contact the Taxiom team - we can adjust this for your portal.

PandaDoc Item to Avalara Tax Code Mapping

(go to top)

Avalara uses tax codes to determine product-specific taxability rules. Software is taxed differently than physical goods, which are taxed differently than professional services. By mapping your PandaDoc pricing table rows to the right Avalara tax codes, you get accurate tax for every product category across every state.

How to map your items

From the portal, go to Tax Code Mapping. The page lists all the Items you've defined in PandaDoc (under Settings → Items & Services). Next to each Item, choose the Avalara tax code that best fits.

INSERT SCREENSHOT HERE: Tax Code Mapping page

Common tax codes

Tax CodeDescriptionWhen to use
P0000000General Tangible Personal PropertyDefault for unmapped items; physical goods with no special rules
SW054000Software as a Service (SaaS)Cloud-hosted software with no download
SW052000Pre-written software, electronically deliveredDownloadable software
SP000000Services (general)Generic professional services
FR020100Shipping - taxableShipping line items where shipping is taxable
NTNon-taxableItems that are never taxable

If you don't map an item, the integration uses Avalara's general tangible personal property code (P0000000). For most generic physical-goods sellers this is fine. For services or software, mapping is strongly recommended.

For the full Avalara tax code library, see Avalara's tax code lookup tool.

How to Handle Exemptions

(go to top)

There are three ways to mark a customer or transaction as exempt:

1. Per-customer exemption (manual)

In the portal under Clients, you can flag specific PandaDoc clients as exempt and assign an entity use code (Avalara's standard exemption categories - Reseller, Government, Charitable Org, etc.). Once flagged, all invoices for that client will be calculated as exempt.

2. Per-invoice exemption (override)

If only one invoice should be exempt - for example, a one-off resale transaction - you can add a memo line to the invoice in PandaDoc with the entity use code, or contact us to set it up.

3. Avalara ECM (Exemption Certificate Management)

If you use Avalara's ECM Pro, the integration recognizes valid certificates in real time. When a customer with a valid certificate on file invoices, the transaction is automatically calculated as exempt. No manual flagging needed.

This is the most reliable option for businesses with many exempt customers (B2B resellers, manufacturers, nonprofits).

For non-resale exemptions, Taxiom recommends pairing this integration with ExemptHQ - our certificate lifecycle management tool that requests, validates, tracks, and renews certificates without the email chaos.

Recurring Invoices

(go to top)

PandaDoc Recurring Invoices generate new invoices on a schedule (weekly, monthly, annually). Each generated invoice is treated as a regular invoice by the integration:

  • When PandaDoc creates the new invoice from the recurring profile, the integration receives the webhook and calculates tax.
  • When the invoice is marked paid (manually or via PandaDoc auto-payment), the transaction commits to Avalara.

If you change the line items, price, or client on the recurring profile, future invoices will reflect those changes. The integration will recalculate tax against the new state of the invoice each time.

Tip: For subscription businesses, make sure the customer's billing address is the same as the shipping address - or that the shipping address is correct on every renewal. A stale shipping address is the #1 cause of "we moved but tax didn't change" issues.

Validating Customer Addresses

(go to top)

Avalara's tax accuracy depends entirely on the quality of the address you pass it. A wrong ZIP code can mean a wrong rate. Here's how to keep addresses clean:

  • Always populate the state and ZIP on PandaDoc clients - even for international clients with no US tax obligation.
  • For US clients, the ZIP should be 5 digits. ZIP+4 (e.g., 78704-5301) is even better - Avalara routes to the right special district based on the +4 suffix.
  • For Canadian clients, use the postal code format A1A 1A1.
  • If you import clients from another system, run an address-validation pass before going live. Avalara's Address Validation API can clean up addresses in bulk.

The integration will log a warning when it detects an incomplete address, but it will still attempt calculation using whatever it has. Bad addresses lead to wrong tax - and wrong tax leads to filing problems.

Overriding Avalara's Tax Calculation

(go to top)

In rare cases, you may need to override Avalara's calculation - for example, when re-issuing an old invoice for a closed tax period, or when you've already paid tax on a transaction outside the system.

PandaDoc lets you manually edit the taxName1 / taxAmount1 fields on a line directly after the integration writes them. However: any subsequent update to the invoice will trigger a recalculation that overwrites your manual edit.

For permanent overrides, contact the Taxiom team. We can configure your portal to skip calculation for specific invoices, specific date ranges, or specific clients.

Accessing the Logs

(go to top)

The portal includes a Transactions page that shows every interaction between PandaDoc, the integration, and Avalara. For each invoice you can see:

  • When tax was calculated
  • What ship-from and ship-to addresses were used
  • The Avalara document code and total tax
  • Whether the transaction is uncommitted or committed
  • The full request and response payloads (helpful for debugging)

If a calculation failed, the log will show the error reason - usually an address issue or an Avalara credentials problem.

INSERT SCREENSHOT HERE: Transactions log page

Troubleshooting

(go to top)

Tax didn't calculate on my new invoice

  • Check the Transactions log for an error. Most common cause: incomplete client address.
  • Verify your Avalara credentials in the portal - if the license key has been rotated in Avalara, the integration won't authenticate.
  • Confirm your ship-from address is set in either PandaDoc Business Settings or the portal's Company Settings.

Tax calculated, but the rate looks wrong

  • Verify the client's shipping address state and ZIP are correct.
  • Verify the Item is mapped to the correct Avalara tax code. Software billed as tangible goods (P0000000) will get the wrong rate in some states.
  • Check Avalara for any nexus or rate overrides you've configured at the company level.

I got a "duplicate transaction" error in Avalara

  • This happens if the same invoice gets re-sent to Avalara. The integration uses the PandaDoc document ID as the document code, so duplicates are usually safe to ignore.
  • If you intentionally re-created an invoice in PandaDoc (different invoice number, same content), Avalara will treat it as a new transaction.

I deleted an invoice - did the Avalara transaction void?

  • Yes - the integration listens for invoice.delete webhooks and voids the matching Avalara transaction automatically. If the transaction was already committed and locked in a closed filing period, it will be marked as DocDeleted in Avalara instead.

Something else?

Email info@taxiom.com or schedule a call - we monitor the integration and can usually identify the issue within minutes.

Get a tax operations team without adding headcount

Taxiom handles AvaTax setup, monitoring, and compliance ops for businesses of every size. Let us run your tax stack so you can focus on growing the business.

Schedule a Call