Sales tax/VAT handling in ChartMogul

Sales tax/VAT impacts ChartMogul Subscription Analytics in several ways, depending on the metric and the way your billing system handles tax.

Here’s what we cover in this article:

Before you begin

Review your billing system's integration guide.

Default tax handling behavior

ChartMogul handles sales tax/VAT based on these default behaviors:

When taxes are excluded, they are displayed in the Taxes (Excluded) row of the Chart Data for Net Cash Flow and Gross Cash Flow.

taxes_excluded_2024.png

When viewing a customer record, excluded taxes are displayed in a transaction.

Taxes_import_API.png

How is tax handled for different billing systems?

Taxes may not be broken out into separate line items if you use tax management software such as Avalara, BBillbo, Octobat, Quaderno, Taxamo, or TaxCloud.

Usually, the default behavior above will be followed. However, there are specific behaviors and limitations for each billing system that ChartMogul supports. Below we have detailed the behaviors unique to each billing system:

API

Taxes paid by customers imported via the API follow the default tax handling behavior in ChartMogul, provided that you specify a tax_amount_in_cents in API invoice line_items.

Read more about importing invoices using our API.

App Store Connect

ChartMogul does not receive explicit sales tax/VAT information from the App Store Connect API, meaning that ChartMogul can't distinguish what is a tax or an Apple fee which can be a different significant percentage, depending on some factors.

Braintree

Taxes billed through Braintree will not follow the default tax handling behavior. Braintree taxes are not broken out into a separate line item in a transaction and will contribute to your subscription revenue. This is because ChartMogul is not able to determine the amount of tax paid as part of a transaction because the tax amount value on a customer's transaction is a Level II data field that does not affect the total transaction amount. In other words, the tax amount value in Braintree is a purely cosmetic field.

Read more about the tax amount parameter in Braintree.

Chargebee

Taxes paid by customers imported using the Chargebee integration will follow the default tax handling behavior in ChartMogul, provided that you specify a tax amount when adding invoices to your customers. If no tax amount value is provided as part of an invoice, the tax will not be excluded from your MRR.

Please note that we don't support Chargebee's tax-inclusive setting. Transactions with inclusive tax may be interpreted higher than expected.

GoCardless

Since GoCardless does not include information on the tax amount for payments, ChartMogul is unable to deduct any tax component before calculating MRR. Therefore, MRR reported by ChartMogul includes tax.

Google Play

Information on this can be seen under Fees in this article.

Google Sheets

Taxes paid by customers imported using ChartMogul's Google Sheets integration will follow the default tax handling behavior in ChartMogul, provided that you specify a tax amount when adding invoices to your customers. If no tax amount value is provided as part of an invoice, the tax will not be excluded from your MRR.

Read more about importing invoice data using Google Sheets.

Maxio

Taxes paid by customers imported using the Maxio integration by SaaSync will follow the default tax handling behavior in ChartMogul, provided that you specify a tax amount when adding invoices to your customers. If no tax amount value is provided as part of an invoice, the tax will not be excluded from your MRR.

Read more about taxes in Maxio.

PayPal

Taxes billed in PayPal do not follow ChartMogul's default tax handling behavior. ChartMogul does not import tax as a separate line item and includes it in recurring revenue and cash flow metrics.

This behavior is due to limitations with PayPal's REST API. ChartMogul uses PayPal transactions to generate invoices and MRR movements. PayPal specifies taxes in a plan, and not in a transaction. PayPal permits subscriptions to define several payment definitions for a plan, making it impossible to know the exact amount of tax in a transaction. It is possible to extrapolate the amount of tax paid by a customer from a PayPal transaction, however, ChartMogul can't guarantee that the reported tax amount in a subscription is accurate.Therefore, ChartMogul does not import tax as a separate line item and reports it in all metrics.

Recurly

Sales tax/VAT and other taxes billed through Recurly will follow the default tax handling behavior, provided that you use Recurly's Taxes features. If taxes are not applied to the plan or add-on, the default tax handling behavior will not be observed, and your MRR may be inflated by the inclusion of taxes.

Further information: Taxes (Recurly documentation).

Stripe

ChartMogul excludes taxes from recurring revenue metrics when sales tax/VAT billed in Stripe has the tax_amounts or a tax_rates value defined in an invoice. Regardless of whether your region uses inclusive or exclusive taxes, ChartMogul reports tax as a column within the line item Tax in a customer's transaction. Read more about collecting taxes for recurring payments with Stripe or applying taxes to subscriptions.

Third-party integration

ChartMogul has integrations with several billing systems that were created by third parties, including Paddle, WooCommerce, and Xero.

Tax handling with these integrations depends on their implementation. All third-party integrations are built using the API, meaning that if tax is imported per line item by specifying the tax_amount_in_cents, then the integration should follow the default tax handling behavior in ChartMogul.

Was this article helpful?

We’re sorry to hear that. Would you like to share more feedback?


Thanks for your feedback!