Malaysian Service Tax on Stripe Sales in QuickBooks

Malaysian Service Tax counts business customers toward RM500,000 and taxes on payment, not invoice date. What that means for Stripe Tax and QuickBooks.

Acodei Content Team · 10/15/2026 · 15 min read

A US software company selling a 49 USD plan into Malaysia runs the numbers on its 180 Malaysian individual subscribers and concludes it's under the line: about 465,700 ringgit a year against a 500,000 ringgit threshold. It isn't under. Malaysia's Service Tax on digital services counts business customers too, and the company's 60 Malaysian business subscribers put it at roughly 621,000 ringgit. It should have registered months ago.

That is the rule that sets Malaysia apart from the rest of Asia-Pacific. In Korea and Taiwan, a business customer that gives you its tax ID drops out of the tax, and Taiwan leaves it out of the threshold count. In Malaysia, the foreign seller charges the tax to companies and individuals alike, and Stripe Tax is built to match: it counts business sales toward the threshold and charges them once you're registered.

This guide covers who owes Malaysian Service Tax on Stripe sales of digital services, how the 500,000 ringgit threshold is measured, why Stripe's tax export and the Malaysian return can disagree about which quarter a sale belongs to, and how the tax reaches QuickBooks, with a worked example in dollars and ringgit.

Acodei brings Stripe Tax amounts into QuickBooks automatically, so the Malaysian Service Tax you collect is already sitting in a liability account when the quarterly return comes due. Start a free trial.

What Malaysian Service Tax on digital services is

Malaysia doesn't have a VAT or GST. It has a Sales and Service Tax, and since January 1, 2020 the service half has applied to foreign businesses selling digital services into the country. The Royal Malaysian Customs Department calls it SToDS (service tax on digital services) and runs it through a separate portal, MySToDS.

Customs defines a digital service as "any service that is delivered or subscribed over the internet or other electronic network and which cannot be obtained without the use of information technology and where the delivery of the service is essentially automated." SaaS subscriptions, apps, online courses, streaming and downloadable templates all fit.

The rate is 8%. It was 6% until February 29, 2024. Customs' guideline on the rate change says "service tax shall be charged and levied at the rate of 8% on any digital service provided from 01 March 2024 by a FRP to any consumer." FRP means foreign registered person: a foreign seller who has registered with Customs.

Stripe's Malaysia tax page lists the tax type simply as "Service Tax", supported on digital products only. Stripe collects it only for a remote seller "without a physical presence in the country." A business located in Malaysia falls under the domestic regime instead, which is outside this guide.

Who counts as a consumer: the two-of-three test, businesses included

Everything in Malaysia's rule turns on the word "consumer", and Customs defines it more broadly than the word suggests. Its Guide on Digital Services by Foreign Service Provider says a consumer is any person who meets two of three conditions:

  1. Pays using a credit or debit facility from a financial institution or company in Malaysia.
  2. Buys using a Malaysian IP address or a Malaysian international mobile country code.
  3. Resides in Malaysia.

Then comes the line that changes the math. Paragraph 21 of the same guide: "Consumer in Para 16 refers to businesses or individual."

So a Malaysian company paying with a Malaysian corporate card from an office in Kuala Lumpur is a consumer, and you charge it Service Tax. Malaysia avoids double taxation on the buyer's side instead. Malaysian businesses normally self-account for tax on services they import, but paragraph 22 exempts a business from that "who have been charged service tax on digital services by FRP." Your 8% replaces their reverse charge.

Stripe agrees. Its customer tax ID list includes three Malaysian types (my_sst, my_itn and my_frp), and all three are marked "No" under impact in tax calculation. A Malaysian customer who enters an SST number at checkout is still charged 8%. That's correct for Malaysia, and it's the opposite of what Stripe does with a tw_vat or a Korean business registration number.

There's one carve-out. Customs' MySToDS notice says that from May 14, 2020, digital services a foreign registered person provides "to a company in Malaysia within the same group of companies shall not subject to service tax." That covers intercompany charges, not your customers.

Two pieces of evidence, one Stripe address

Customs expects you to hold "at least two non-conflicting information that support the consumer is a Malaysia consumer." Stripe Tax decides with one. Stripe's guide to collecting customer addresses says it "uses a single address as your customer's location when calculating tax": the address collected in Checkout, or for invoices and subscriptions, the first of shipping address, billing address, payment method billing details and IP address.

Usually these agree. When they don't, Stripe's choice is the one on the invoice, and Customs' test is the one on audit. Keep the second piece of evidence. Stripe shows the issuing country on each card payment, and that plus a billing address is the pair most sellers can produce for every Malaysian sale.

The RM500,000 threshold: a rolling 12 months that counts business sales

Customs' guide sets the line: a foreign seller whose "value of digital service for a period of twelve months or less exceeds the threshold of RM500,000" must register. Stripe's Malaysia page uses the same figure, "500,000 MYR in 12 months", and lists the sales it monitors as "B2B and B2C sales of digital products."

Two details decide when you cross it.

It's a rolling window, not a calendar year. Customs gives two methods. The historical method takes the value in any month plus the 11 months before it. The future method takes any month plus the expected value of the next 11, and applies when you have reasonable grounds to expect to pass the line, which Customs ties to a signed contract or confirmed purchase orders. A seller that lands a large Malaysian enterprise deal can be liable before a ringgit of it is billed.

The deadline is short. You must apply "not later than the last day of the month following the month in which he exceeds threshold." Cross in February, apply by March 31.

How far away is RM500,000? At an illustrative 4.40 ringgit to the US dollar, it's about 113,600 USD of Malaysian sales over 12 months. That's not a real rate, and because the threshold is in ringgit, a weaker dollar moves you toward it with no change in customer count.

Stripe's threshold monitoring watches this for you, but only for sales that run through Stripe. Malaysian revenue billed by wire transfer or through another processor counts toward the RM500,000 too. Our guide to Stripe Tax registration thresholds covers what changes in QuickBooks the day you cross one.

When Malaysian Service Tax is due: payment basis, not Stripe's invoice date

This is the part most likely to put the wrong number on a return.

Malaysia taxes on payment. Customs' rate-change guideline: "the service tax charged on the digital service provided to the consumer shall be due at the time when the payment for the digital service is received." A seller can apply to Customs to account on the invoice date instead, but without that approval, the payment date decides the quarter.

Stripe Tax records invoices on a different date. Its tax reports documentation says: "Stripe Tax records tax when the invoice finalizes, before payment." Checkout sales are recorded when the customer pays, so they line up. Subscription and one-off invoices don't.

Three places the two clocks split:

  • Quarter-end invoices. A subscription invoice that finalizes on March 31 and is paid on April 2 sits in Stripe's January to March data. Under Malaysia's payment basis, it belongs on the April to June return.
  • Net-terms invoices to business customers. Malaysian companies are in scope, and they often pay on 30-day terms. Every invoice that crosses a quarter boundary between finalizing and paying moves.
  • Invoices that never get paid. Stripe says a failed or canceled payment "doesn't decrease the total tax reported." The tax stays in the export until you void the invoice, mark it uncollectible or issue a credit note. Under payment basis, Malaysia never taxed it.

So don't file straight from the export's totals. Build the quarter from payments received: pull the Malaysian invoices from Stripe's itemized export and keep the ones whose payment landed inside the quarter. For a Checkout-only business, the export is already on the right basis. For a subscription business with Malaysian companies on invoice terms, the difference can be most of a month's billing.

Filing the quarterly return and converting to ringgit

A foreign registered person has a three-month taxable period. Per Customs' guideline, you "furnish the return via MySToDS system and pay the amount of service tax due and payable not later than the last day of the month following the end of his taxable period." Its example: for January 1 to March 31, file and pay by April 30. That gives four returns a year.

A few rules from Customs' guide that catch first-time filers:

  1. File every quarter, sales or not. The return "shall be furnished according to the taxable period whether or not there is any service tax to be paid."
  2. Declare in ringgit, pay in ringgit. Values and tax are declared in MYR, and payment "can only be done in Ringgit Malaysia." Customs' FAQ confirms you can pay from a foreign bank account.
  3. Pick a conversion method and keep it. If you charge in another currency, you convert either daily, at each day's rate, or at the end of the period, using the rate at the end of the taxable period or at the time you file. "Once FRP choose to use the option for conversion from one of the above, FRP shall consistently use that option."
  4. No official rate source. Customs' FAQ: "There is no specific exchange rate determined by customs. FRP may use any exchange rate they prefered."

Point 3 is good news for Stripe users. Stripe's reports page says that when your pricing currency differs from the filing currency, "Stripe Tax converts amounts using available exchange rates at the time of the transaction," and each line of the itemized export carries a filing_exchange_rate and a filing_tax_amount in the tax authority's currency. That's a daily conversion, which Malaysia accepts. Choose the daily method, and the export's ringgit columns are usable, as long as you've corrected the rows for payment basis first. Taiwan is the contrast: it requires one Bank of Taiwan rate per period, so the same columns are unusable there. Our glossary entry on the Stripe Tax filing currency explains those columns.

Keep the records for seven years. Customs allows them to be held outside Malaysia "as long as the record is readily accessible when required."

What your Stripe invoices need to show

Customs requires an invoice or document for each Malaysian sale showing:

  • the invoice date
  • your FRP registration number
  • a description of the service
  • the amount before tax, the rate and the tax, as separate figures

Stripe invoices with automatic tax already show the tax line and rate. The registration number is the piece to add. Stripe's account tax IDs appear in the header of invoice and credit note PDFs, and with automatic tax Stripe can show the right one based on each invoice's taxable location. Note that you "can't add, change, or remove account tax IDs after an invoice is finalized," so add it before your registration's start date. Our guide to your own tax ID on Stripe invoices walks through it. If you sell through Checkout without invoices, check that what your Malaysian customer receives carries all four particulars, because a receipt only counts as an invoice if it does.

A worked example: one quarter of Malaysian SaaS sales

Back to the company from the top. It sells a 49 USD monthly plan, priced tax-exclusive in USD. Ringgit figures use the illustrative rate of 4.40.

The threshold check. Over the last 12 months, its Malaysian customers were:

Customer typeSubscribers12-month sales (USD)At 4.40 (MYR)
Individuals180105,840465,696
Businesses6035,280155,232
Total240141,120620,928

Counting individuals only, it looks safe at 465,696. Malaysia counts both rows, so it crossed RM500,000 months ago. On the historical method it passed the line in the month the rolling 12-month total first exceeded RM500,000, and registration was due by the end of the following month. Stripe's threshold monitoring counts both rows too, so its Malaysia status would have read differently from the spreadsheet.

One quarter after registering. Say registration started January 1 and the quarter runs January to March. All 240 subscribers are billed monthly through Stripe invoices: 720 invoices at 49 USD, 35,280 USD of sales and 2,822.40 USD of Service Tax at 8%.

Two things move the return away from Stripe's totals:

  • 15 business invoices finalized on March 31 were paid in April. They carry 58.80 USD of tax (15 × 3.92) that Stripe puts in Q1 and Malaysia puts in Q2.
  • 4 individual invoices failed and were never paid. Their 15.68 USD of tax stays in Stripe's export until you void them.
Sales (USD)Service Tax (USD)Service Tax at 4.40 (MYR)
Stripe export, January to March35,280.002,822.4012,418.56
Less: paid in April(735.00)(58.80)(258.72)
Less: never paid(196.00)(15.68)(68.99)
Return, payment basis34,349.002,747.9212,090.85

The return is due April 30, in ringgit, through MySToDS. In practice your ringgit column comes from each payment's own daily rate, not a flat 4.40, but the adjustments work the same way.

The QuickBooks side. The liability account picked up tax as each invoice synced. Void the four failed invoices in Stripe so its report stops carrying their tax, and check that the matching QuickBooks invoices aren't left open with tax nobody paid. When you pay Customs, clear the ringgit amount from the liability account at what it cost you in dollars, and post any rate difference to an exchange gain or loss account.

How Malaysian Service Tax 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.

In the example, each Malaysian 49 USD invoice reaches QuickBooks as 49 USD of revenue and a 3.92 USD tax line in the liability account, whether the customer is a person or a company. That's different from our South Korea VAT guide and our Taiwan VAT guide, where a business customer's sale adds nothing to the liability account.

The Tax Product puts every Stripe Tax amount in one account. If you also collect US sales tax or another country's tax, the Malaysian share is mixed in, and the Malaysian figure for the return comes from Stripe's itemized export, filtered to Malaysia and adjusted to payment basis as above. Our guide to why the Stripe tax report and QuickBooks don't match covers the other common gaps between the two.

Common mistakes with Stripe and Malaysian Service Tax

  • Leaving business customers out of the threshold. Malaysia counts them, and so does Stripe. Your own spreadsheet might not.
  • Removing tax for an SST number. A Malaysian tax ID doesn't exempt the sale. Stripe charges 8% regardless, and that's correct.
  • Filing from Stripe's invoice dates. Malaysia taxes on payment unless Customs approved invoice basis. Move quarter-end and net-terms invoices to the quarter they were paid.
  • Leaving failed invoices open. Stripe keeps their tax in the report until you void them, mark them uncollectible or issue a credit note.
  • Switching conversion methods. Choose daily or period-end and stay with it.
  • Skipping the zero return. A quarter with no Malaysian sales still needs a return.
  • Using 6%. That rate ended on February 29, 2024.
  • Refunding without a credit note. Stripe Tax reduces reported tax for a refund linked to an invoice or Checkout Session. In QuickBooks, a refund issued without a line-level breakdown may not reduce the tax line, so refund through a credit note when you can.

Frequently asked questions

Do foreign SaaS companies charge Malaysian Service Tax to business customers?

Yes. Malaysia's Customs Department defines a consumer as any business or individual that meets two of three conditions: paying with a Malaysian card or bank facility, buying from a Malaysian IP address or phone code, or residing in Malaysia. A registered foreign seller charges 8% to both. The Malaysian business is then exempt from accounting for the same service as an imported service.

What is the Malaysian Service Tax threshold for digital services?

RM500,000 of digital services to Malaysian consumers over any 12-month period. It's a rolling window, measured either backward (a month plus the 11 before it) or forward when you expect to pass it under a signed contract. It counts sales to businesses as well as individuals. You must apply to register by the last day of the month after the month you cross it.

What is the Malaysian Service Tax rate on digital services?

8% since March 1, 2024, up from 6%. It applies to the value of the digital service a foreign registered person charges a Malaysian consumer. Stripe Tax calculates it on products with a digital product tax code once you've added your Malaysian registration in the Stripe Dashboard. Before you add it, Stripe charges your Malaysian customers nothing.

How often do foreign sellers file Malaysian Service Tax returns?

Every three months. Customs requires the return and payment by the last day of the month after each taxable period, so a January to March period is due April 30. You file through the MySToDS portal, in ringgit, even for a quarter with no Malaysian sales, and you pay in ringgit. Payment from a foreign bank account is allowed.

Can I file Malaysian Service Tax straight from Stripe's tax report?

Not without adjusting it. Stripe records invoice tax when the invoice finalizes, while Malaysia taxes on payment unless Customs approved invoice basis. Move invoices paid in a later quarter, and remove unpaid ones. Stripe's per-transaction ringgit conversion is usable if you choose Malaysia's daily conversion method and stay with it.

Acodei syncs Stripe Tax into QuickBooks automatically, so every Malaysian Service Tax 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.