Indonesian VAT on Stripe Digital Sales in QuickBooks

Indonesia counts a single month of sales, and website traffic, toward appointing foreign VAT collectors. How it works on Stripe and in QuickBooks.

Acodei Content Team · 10/16/2026 · 14 min read

A US software company sells a 49 USD monthly plan and a 490 USD annual plan. It has 30 Indonesian subscribers on the monthly plan, about 291 million rupiah a year, and it knows Indonesia's line is 600 million. So it ignores Indonesia. Then a November webinar lands four Indonesian companies on the annual plan, and November's Indonesian sales come to 3,430 USD, or about 56.6 million rupiah. The year is still nowhere near 600 million. The month is over 50 million, and that's the other half of Indonesia's test.

Indonesia's test has a monthly sales line alongside the annual one. The tax authority appoints foreign sellers as collectors rather than waiting for them to register, and it counts website traffic as well as revenue. A seller that tracks only an annual figure can be inside the regime and not know it.

This guide covers how Indonesian VAT on Stripe sales of digital services works for a foreign seller: the two sales thresholds and the traffic test Stripe can't see, the 12% rate on an 11/12 base, the monthly return, what Stripe Tax calculates, and how the tax reaches QuickBooks. A worked example runs in dollars and rupiah.

Acodei brings Stripe Tax amounts into QuickBooks automatically, so the Indonesian VAT you collect is already in a liability account when each monthly return comes due. Start a free trial.

What Indonesian VAT on digital services (PMSE VAT) is

Indonesia taxes foreign digital services through a regime it calls PMSE, short for perdagangan melalui sistem elektronik, or trade through electronic systems. The Directorate General of Taxes (DGT) explains it on its VAT on digital goods and services page: since July 1, 2020, VAT on intangible goods and services from outside Indonesia that are used inside it "shall be collected, remitted, and reported by VAT Collectors for Electronic Transactions."

The foreign businesses that can become collectors fall into three groups: foreign merchants, foreign service providers and foreign digital platform providers. A US company selling SaaS, online courses, templates or apps through Stripe is a foreign merchant or service provider.

The DGT publishes the list of appointed collectors on the same page. It reads like a roll call of global software: Amazon Web Services, Google, Spotify, Apple, Zoom, Microsoft, LinkedIn and more than 200 entries in all. Smaller sellers are on the hook under the same criteria.

Stripe's Indonesia tax page lists the tax type as VAT, supported on digital products only. Stripe collects it only for "a remote seller without a physical presence in the country", and it calculates only for products with a digital product tax code. A business located in Indonesia is outside this guide.

Appointed, not registered: how a foreign seller becomes a VAT collector

Most countries in this series work the same way. You cross a threshold, you apply to register, and a deadline runs from the month you crossed. Malaysia gives you until the end of the following month, for example.

Indonesia describes it differently. The DGT's page says an operator "is appointed as a PMSE VAT Collector if it meets any of the following criteria," and that appointed collectors "will receive an official appointment letter issued by the DGT." A foreign operator is assigned an NPWP, Indonesia's tax identification number, as part of the appointment. Stripe's page uses the same language: remote sellers that meet a threshold "are appointed as VAT collectors."

Two practical consequences:

  1. Your obligations run from the appointment. The collection, remittance and reporting duties on the DGT's page belong to an appointed collector. The letter, with its effective date, is the document that tells you when to start.
  2. You can ask to be appointed early. "PMSE Operators that do not meet these thresholds but wish to be appointed as PMSE VAT Collectors may submit a notification through the Taxpayer Portal." Some sellers do this because a large Indonesian customer asks for VAT on the invoice.

One caution on wording. Stripe's Indonesia page adds that sellers "who meet the registration thresholds can ask to be appointed a VAT collector and start collecting VAT voluntarily but aren't obligated to do so." The DGT's own page puts the voluntary route the other way round: it's for operators that do not meet the criteria. Follow the DGT.

The DGT's page doesn't set out a self-reporting deadline for an operator that crosses a line, the way Malaysia's rules do. So when your Indonesian numbers approach either threshold, bring in an Indonesian tax adviser before the month closes rather than after. The order of events matters less than having the NPWP, the appointment date and your Stripe setup agree.

The Indonesian VAT thresholds: 50 million rupiah in a month, 600 million in a year, or traffic

Here is the full test from the DGT. An operator is appointed if either of these is true:

  • Sales. "The transaction value with users in Indonesia exceeds IDR 600,000,000 (six hundred million rupiah) annually or IDR 50,000,000 (fifty million rupiah) monthly."
  • Traffic. "The number of users or traffic from Indonesia exceeds 12,000 annually or 1,000 monthly."

Stripe's page gives the sales threshold as "50 million IDR in a calendar month or 600 million IDR in 12 months," and lists the sales it monitors as "B2B and B2C sales of digital products."

Put those lines in dollars and they're low. At an illustrative 16,500 rupiah to the US dollar (not a real rate):

ThresholdRupiahAbout, in USD
One calendar month of sales50,000,0003,030
12 months of sales600,000,00036,364

A seller billing 3,100 USD to Indonesia in a single month is over the monthly line, whatever the other eleven months look like. Annual plans, an enterprise deal paid upfront and a launch promotion are the usual ways a month spikes. Because both figures are in rupiah, a stronger dollar pushes you toward them with no change in what you sell.

The traffic test Stripe can't see

Stripe's Indonesia page lists the traffic test too, but the transactions its threshold monitoring counts are sales. It has no view of your website analytics, and the DGT's second criterion is about users, not money: more than 1,000 users or traffic from Indonesia in a month, or 12,000 in a year.

A freemium product with a large Indonesian free tier can meet that criterion with very little Indonesian revenue. The DGT page doesn't define how users or traffic are counted, so this is one to raise with an adviser using your real analytics, not to settle from a dashboard. Just know that a green status in Stripe answers only the sales half of the question.

Stripe's monitoring also only counts sales that run through Stripe. Indonesian revenue billed by bank transfer or another processor counts toward the rupiah thresholds too. Our guide to Stripe Tax registration thresholds covers what changes in QuickBooks once you're over one.

Indonesian business customers are counted, and charged

Stripe monitors "B2B and B2C" sales in Indonesia, and the DGT's test counts "transaction value with users in Indonesia" without carving out businesses.

Stripe's customer tax ID list supports one Indonesian type, id_npwp, and marks it "No" under impact in tax calculation. An Indonesian company that enters its NPWP at checkout is still charged VAT once you're collecting. The NPWP prints on the invoice, but it doesn't zero the tax.

That makes Indonesia behave like Malaysia and unlike South Korea or Taiwan, where a business tax ID drops the sale out of the tax. Our Malaysian Service Tax guide covers the same pattern in depth. The practical point here is the threshold: a spreadsheet that counts only consumers will understate Indonesian sales, and Stripe's own figure won't.

The rate: 12% on 11/12 of the price, which is 11%

The DGT's page states the rate as "12%" and then qualifies it: "This rate is applied to a deemed VAT base, which is 11/12 of the payment amount received from the user, excluding VAT."

Multiply it out and the tax is 11% of the price:

  • 49 USD × 11/12 = 44.92 USD deemed base
  • 44.92 USD × 12% = 5.39 USD of VAT
  • 5.39 is 11% of 49

So a customer on the 49 USD plan pays 54.39 USD with tax added. The two-step form exists because Indonesia raised its headline rate to 12% while keeping the effective burden on most supplies at 11%, but the arithmetic on your invoices is simply 11%.

When you add an Indonesian registration in Stripe, the Dashboard asks you to "confirm the tax rates" before you click Start collecting, according to Stripe's registration guide. Check that step against the 11% effective figure. If a test invoice for 49 USD shows anything other than 5.39 USD of Indonesian VAT, stop and ask Stripe before going live.

Stripe's currency list treats IDR as a two-decimal currency, not a zero-decimal one. Most foreign sellers keep pricing in USD anyway, and the rest of this guide assumes they do.

Monthly returns and USD payments: what an appointed collector files

Once appointed, the DGT lists three duties.

Collect. Charge VAT at the prescribed rate and "issue proof of VAT collection, such as a commercial invoice, billing document, order receipt, or any similar document that clearly states VAT has been collected and paid." A Stripe invoice or receipt with automatic tax shows the tax on its own line. Stripe supports id_npwp as an account tax ID, and account tax IDs display in the header of invoice and credit note PDFs, so add yours once it's issued. Our guide to your own tax ID on Stripe invoices shows where it goes.

Remit monthly. VAT "must be remitted on a monthly basis, no later than the end of the following month after the relevant tax period." Foreign operators "may remit the VAT in Indonesian Rupiah (IDR) or United States Dollar (USD)." Domestic operators must use rupiah.

Report monthly. Collectors file a VAT periodic return (SPT Masa PPN) "for each tax period, no later than the end of the month following the end of the tax period." Foreign operators use the e-commerce version of that return, filed through the DGT's Taxpayer Portal.

Monthly is the detail that changes your close. Malaysia and the Philippines run on quarters. Indonesia wants twelve returns a year, each due a month after the period ends, so January's return and payment are due by the end of February.

The USD option is the helpful one. A US company that prices in USD and remits in USD pays exactly the dollar amount sitting in its liability account. There's no conversion at payment and no exchange difference to post. If you pay in rupiah instead, you'll need a rate for the conversion and an exchange gain or loss line when the payment clears. Ask your adviser what currency the return's figures themselves must be reported in; the DGT's page covers the payment currency, not the form.

How Indonesian VAT from Stripe reaches QuickBooks

For a US QuickBooks company, the workable Acodei tax method is usually the Tax Product. QuickBooks' Sales Tax Center doesn't let third parties create official tax rates for US companies, so the tax goes to a product line instead:

  1. In QuickBooks, create a non-inventory product such as "Sales Tax" and map it to a liability account.
  2. In Acodei's Stripe Tax settings, choose Tax Product and select that product.
  3. Each synced sale gets one line for its total Stripe Tax amount on the QuickBooks invoice or sales receipt.

It requires Stripe Tax enabled with Stripe Invoice or Stripe Checkout. You then file from Stripe's tax reports and pay from the liability account. A company whose QuickBooks file is outside the US can instead map each Stripe tax rate to a QuickBooks tax code.

On a 49 USD Indonesian invoice, that means 49 USD of revenue and a 5.39 USD tax line in the liability account. The tax line is the same whether the customer is a person or a company with an NPWP.

The Tax Product puts every Stripe Tax amount in one account. If you also collect US sales tax or another country's VAT, the Indonesian share is mixed in. The monthly figure for the return comes from Stripe's itemized tax export, filtered to Indonesia for that month. The export carries amounts in your pricing currency and in the authority's filing currency, with the exchange rate Stripe used. Our guide to why the Stripe tax report and QuickBooks don't match covers the usual gaps between the two.

Refunds need one habit. In QuickBooks, a refund issued without a line-level breakdown may not reduce the tax line, so refund Indonesian invoices through a credit note when you can. That keeps the liability account and the next month's return pointing the same way.

A worked example: crossing in November, filing in February

Back to the company from the top. All figures use the illustrative 16,500 rupiah to the dollar.

The threshold check. Its Indonesian sales through November look like this:

PeriodIndonesian sales (USD)At 16,500 (IDR)Over the line?
A typical month (30 monthly subscribers)1,47024,255,000No
November (30 monthly + 4 annual plans)3,43056,595,000Yes, over 50 million
12 months to November19,600323,400,000No, under 600 million

Watching only the annual figure, it's at barely half the line. November alone crossed the monthly one. The four annual plans were bought by companies, and they count: Stripe monitors B2B sales in Indonesia, and the DGT's test doesn't exclude them.

After appointment. Say the company works with an adviser in December and receives an appointment letter effective February 1. It adds the Indonesian registration in Stripe with that effective date, using Schedule tax collection, and adds its NPWP as an account tax ID.

February's Indonesian sales:

SaleCountSales (USD)VAT at 11% (USD)
Monthly plan, 49 USD301,470.00161.70
Annual plan, 490 USD1490.0053.90
February total311,960.00215.60

The February return and payment are due March 31. Paid in USD, the company sends 215.60 USD and clears 215.60 USD from the liability account. Paid in rupiah, it converts first and books the difference between the liability and what the payment cost as an exchange gain or loss.

Before the appointment. Stripe charged no Indonesian VAT on November's or December's sales, because no Indonesian registration was active. Whether anything is owed for a period before an appointment is a question for your adviser, not your Stripe settings. If the answer is yes, it's settled with the DGT. Don't try to rewrite invoices Stripe has already finalized.

Common mistakes with Stripe and Indonesian VAT

  • Watching only the annual line. 50 million rupiah in one calendar month is enough. Annual plans and upfront enterprise deals are what spike a month.
  • Ignoring traffic. The DGT counts Indonesian users as well as sales. Stripe sees only payments.
  • Leaving business customers out. An NPWP doesn't remove the sale from the count or the tax.
  • Charging 12% on the full price. The base is 11/12 of the payment, so the tax is 11%. Check Stripe's rate confirmation before you start collecting.
  • Starting before the appointment date. Schedule the Stripe registration for the effective date on the letter.
  • Filing quarterly. Indonesia wants a return every month, due by the end of the following month.
  • Refunding without a credit note. It can leave tax in the QuickBooks liability account that the customer got back.

Frequently asked questions

Do foreign SaaS companies have to collect Indonesian VAT on Stripe sales?

Yes, once the Indonesian tax authority appoints them as a PMSE VAT collector. The criteria are more than 50 million rupiah of sales to Indonesian users in a month or 600 million in a year, or more than 1,000 Indonesian users in a month or 12,000 in a year. Sellers under the criteria can ask to be appointed voluntarily through the Taxpayer Portal.

What is the Indonesian VAT rate on digital services?

The stated rate is 12%, applied to a deemed base of 11/12 of the payment excluding VAT. The effective rate is therefore 11% of the price. On a 49 USD subscription, Indonesian VAT is 5.39 USD. Check the rate Stripe shows when you add your Indonesian registration, and test one invoice before you start collecting.

Does Stripe Tax count business customers toward the Indonesian threshold?

Yes. Stripe lists the transactions it monitors in Indonesia as B2B and B2C sales of digital products. An Indonesian NPWP doesn't change Stripe's tax calculation, so once you're collecting, a business customer is charged VAT the same as an individual. Stripe can't monitor the separate traffic criterion, which depends on your own website data.

How often do foreign sellers file Indonesian VAT returns?

Every month. An appointed collector remits the VAT and files a periodic return for each month by the end of the following month, so January's return and payment are due by the end of February. Foreign collectors file the e-commerce VAT return through the Taxpayer Portal and may pay in Indonesian rupiah or US dollars.

Where does Indonesian VAT go in QuickBooks?

With Acodei's Tax Product method, each synced Stripe sale carries its Stripe Tax amount as one line on a non-inventory product mapped to a liability account. A 49 USD Indonesian invoice becomes 49 USD of revenue and 5.39 USD of tax liability. You file from Stripe's tax export filtered to Indonesia, and pay from the liability account.

Acodei syncs Stripe Tax into QuickBooks automatically, so every monthly Indonesian return starts from a liability account that already holds what you collected. Start a free trial.

Share

Automate your Stripe to QuickBooks sync

Save hours every month. Acodei automatically syncs your Stripe transactions, invoices, and payouts to QuickBooks Online.

14-day free trial · card required · cancel anytime

How Acodei handles this in your stack

Stripe QuickBooks Integration

See how Acodei syncs Stripe payments, fees, refunds, invoices, and payouts into QuickBooks Online automatically.

Or go straight to a capability

Get more operational finance guides like this one

We will only send high-value product and finance content.