Peruvian IGV on Stripe Digital Services in QuickBooks

Peru makes foreign digital providers IGV collection agents from their first month: RUC signup, the consumer test, Form 623, dollar payments, QuickBooks.

Acodei Content Team · 10/24/2026 · 22 min read

A US software company sells a $30 monthly plan to a student in Lima. Peru has no threshold to wait for. Since late 2024, a foreign provider of digital services to Peruvian consumers is a designated collection agent for Peru's general sales tax, the IGV, from the month after it starts operating in the country. It registers for a Peruvian taxpayer number online, adds the tax at the moment it charges the customer, and files a short monthly return within ten business days. The same company's sale to a Lima agency that signed up as a business carries no Peruvian tax at all.

Peru built the regime to be light on presence: no Peruvian address, no resident representative, no Peruvian invoices, no local accounting books. It is strict on details a Stripe setup does not handle for you: who counts as a consumer, the four ways a customer counts as living in Peru, a deadline counted in Peruvian business days, and a currency choice that locks for the calendar year.

This guide covers what Peru taxes and who collects it, how a customer is placed in Peru, RUC registration, the consumer and business split, the rate, a worked month, Form 623 and the dollar payment, refunds, and what reaches QuickBooks. It is bookkeeping guidance, not tax advice.

Acodei brings Stripe Tax amounts into QuickBooks, so the Peruvian tax you collect is already in your liability account when the month closes. Start a free trial.

Why foreign digital services pay Peruvian IGV

Peru did not create a new tax. The government's FAQ on the reform, published on gob.pe, says so: the IGV already applied to digital services from providers based outside Peru, but there was no procedure for collecting it. Legislative Decree 1623, published in the official gazette El Peruano on 4 August 2024, supplied the procedure. It added Article 49-A to the IGV law, and Article 49-A makes the foreign provider the collector.

SUNAT, Peru's tax and customs authority, explains the result on its English-language VAT Digital Services page: non-domiciled suppliers of digital services "become VAT withholding or collection agents that shall register in the Single Taxpayers' Registry (RUC), declare and directly pay SUNAT through virtual means, without the need of physical presence."

SUNAT writes "VAT" in its English pages for the IGV, and this guide does the same where it quotes them. The decree and SUNAT's resolutions are published in Spanish only, so quotations from them here are our translations.

What counts as a digital service

The decree defines digital services as services made available to the user through the internet or a similar network, "essentially automatic" and not viable without information technology. Its examples, which are a list "among others" and not a closed set:

  1. Online access to or streaming of images, series, films, videos, music and any other digital content.
  2. Information storage.
  3. Access to social networks, or extra content or functions on them.
  4. Online magazines and newspapers.
  5. Remote conference services.
  6. Intermediation in the supply and demand of goods or services.

A SaaS subscription that a customer uses on its own fits the general definition. A service that depends on a person doing the work, such as live consulting delivered over video, is a closer call, because the test is whether the service is essentially automatic. SUNAT's page adds one limit worth knowing: the tax applies "as long as there is a payment made by the user." A free plan creates nothing to collect.

Separately, the decree covers intangible goods "downloaded permanently" over the internet, such as a program bought outright. The collection rules are the same.

Collector, not taxpayer

The legal mechanics matter for the books. Under Article 49-A the consumer is the taxpayer, and you act as a collection agent (agente de percepción). The decree says you collect "the amount resulting from applying the tax rate to the total sale value or compensation," and that "the collection takes place at the moment of charging." The tax you add is money you hold for SUNAT, which is why it belongs in a liability account and never in revenue.

Marketplaces and apps that match buyers with sellers are treated differently: the collection base is only the platform's fee, and the platform may also withhold from the seller's side. If you are a Stripe Connect platform, that is a separate analysis this guide does not cover.

How Peru decides a customer lives there

Article 49-A applies when the customer has their "habitual residence" in Peru. The decree, as SUNAT's English page summarizes it, treats residence as being in Peru if any one of these is true:

  1. The IP address, or another geolocation method, of the device through which the service is provided points to Peru.
  2. The country code of the SIM card in the customer's phone corresponds to Peru.
  3. The customer pays with a credit or debit card, an e-money product or another product provided by an entity of the Peruvian financial system.
  4. The address the customer registers with you, as user details or as an address for receipts, is in Peru.

One fact is enough. Compare Chile, which our guide to Chilean VAT on Stripe digital services covers: there the presumption needs two of four facts.

Stripe Tax works from one address. Its customer locations guide says it "uses a single address as your customer's location when calculating tax," taken in order from the shipping address, the billing address, the billing details of the payment method, and the IP address. For most Peruvian consumers every fact points the same way and the difference never shows. It shows on edge cases: a customer with a Miami billing address who pays with a card issued by a Lima bank is resident in Peru under the decree's third test, while Stripe will place them in Florida. If you sell to many Peruvians abroad, or to people who move between countries, it is worth deciding which rule you are applying, because Stripe will not apply the decree's.

No threshold: register for a RUC once you start selling

Peru has no sales threshold. Stripe's Peru entry shows the registration threshold as "1 transaction" and says remote sellers of digital products to consumers in Peru "must register for VAT from the first sale." The decree's own wording fixes the start: you act as collection agent "from the first calendar day of the month following the one in which you begin operations in the country."

Two limits on Stripe's side, both from the same entry:

  • Stripe calculates Peruvian tax only on digital product tax codes. "Stripe doesn't calculate tax for products that don't use a digital product tax code." Every product you sell to Peru needs one assigned.
  • Stripe supports Peru only for remote sellers. "You must be a remote seller with no physical presence in Peru to collect this tax on Stripe." A company with an office in Peru is in the ordinary IGV system, not this one.

RUC registration without a Peruvian address

The RUC is Peru's taxpayer registry, and registering gives you an 11-digit RUC number. The decree's third final provision removes the usual barriers for foreign providers. You "are not obliged to establish a domicile in the country," the representative you designate for registration "does not need to have a domicile in the country," and registration "does not imply the creation of a permanent establishment in the country."

SUNAT set out the procedure in Superintendency Resolution 000173-2024/SUNAT. Registration happens only through SUNAT Virtual, under the option "Inscripción en el RUC - No Domiciliados," and asks for:

  • your legal name, country of tax residence, address there and home-country tax number;
  • the economic activity that links you to Peru;
  • the date from which you became a collection agent, which follows from when you started selling to Peruvian consumers;
  • your website URL;
  • a legal representative or attorney, and a contact person, each with an email and a mobile number including the country code.

You attach PDFs: proof that your company exists or is registered with your home tax authority, identity documents for the representative and contact, and the document appointing the representative. Documents in another language need a simple Spanish translation. SUNAT verifies the representative's email with a code, then sends the RUC number to that address, along with how to generate your Clave SOL, the password for SUNAT's online system.

Registration is the main obligation. SUNAT's English page adds what you are spared: you are "not required to keep accounting books or other books and registries demanded by Peruvian law, nor are they required to issue payment receipts for such transactions." Your Stripe invoice or receipt is enough for the customer.

Consumers pay you the tax; businesses don't go through you

The regime covers one kind of customer: an individual "who does not carry on business activity." Article 49-A says you collect only when two things hold: the service is used in Peru under the residence tests above, and the customer is an individual not in business.

The decree tells you how to decide the second point, and it is about your signup form, not a tax number lookup. You check that the customer registered on your platform:

  • by choosing the option for individuals and giving their name, surnames and identity document number; or
  • by giving those personal details, where your platform has a single signup that doesn't separate individuals from companies.

Then the default: "where the registration on the non-domiciled provider's platform does not provide for choosing the option or entering the personal data referred to in the previous paragraph, the individual shall be understood not to carry on business activity" (our translation). If your signup only asks for an email and a card, every Peruvian customer is a consumer, and you collect from all of them.

Where Stripe's pe_ruc fits

Stripe's customer tax ID table lists pe_ruc, "Peruvian RUC number," with an 11-digit example, and marks its impact on tax calculation as Yes. Stripe's guide to zero tax amounts gives the mechanism: "Stripe Tax automatically applies the reverse charge based on the presence of a tax ID and the jurisdictions involved in the transaction." Stripe's entry for Peru agrees that sales to business customers trigger no collection, "as remote sellers aren't required to collect tax on those sales."

So the practical rule: collect from Peruvian customers unless they signed up as a business, and store the business's RUC as pe_ruc so Stripe Tax stops charging. Two cautions:

  • Format, not verification. The tax ID page says Stripe applies the reverse charge "when the tax ID has the required number format, regardless of the government verification result." A consumer who types any 11-digit number into a tax ID field gets an untaxed sale.
  • Individuals with a business can hold a RUC. The decree anticipates this. Its second final provision says that if you collect from an individual who does carry on business, that customer may use the tax as a credit, provided you paid it to SUNAT. Charging a sole trader by mistake is recoverable for them. Not charging a consumer is your shortfall.

The Stripe customer tax ID glossary entry explains where tax IDs live on the customer object and how they reach invoices. For the general idea of moving the tax to a business buyer, see reverse charge.

The rate: 18 percent on the price you charge

The decree applies "the tax rate" to the total sale value. SUNAT's own 2025 IGV guide for taxpayers gives Peru's rate: "The rate is 18%, of which 16% applies to the IGV and 2% to the Municipal Promotion Tax" (our translation). Check the rate Stripe applied on a test Peruvian invoice before you go live, and if it differs, raise it with Stripe before you file.

Whether your price includes the tax is your choice in Stripe. Priced exclusive, a $30 plan becomes $35.40. Priced inclusive, the tax inside $30 is $30 × 18/118, or $4.58, and your revenue is $25.42. Our guide to inclusive and exclusive tax in QuickBooks covers how each posts.

The month the tax belongs to is the month you charged

"The collection takes place at the moment of charging." A month's return covers what you collected in that month. Stripe Tax records tax earlier. Its tax reporting guide says finalizing an invoice adds to the tax reported, and that the transition "happens before the invoice is paid." It also says "a failed or canceled payment doesn't decrease the total tax reported."

For a subscription that charges the card when the invoice finalizes, the gap is minutes. It crosses a month when a payment fails on the last day and a retry succeeds in the next month, or when a customer pays a manual invoice late. The Chile guide walks through the same mismatch in detail, because Chile's tax point is also the payment. In both countries, file from payment dates and keep a short list of invoices that finalized in one month and were paid in the next.

A worked month for a software company

Take a Texas company selling a project-management app, priced in USD with tax added on top. It registered for a RUC, chose to file and pay in US dollars on its first return, and has a Peru registration in Stripe Tax. October 2026:

  1. A monthly plan to a consumer in Lima, $30, charged 1 October. Tax $5.40.
  2. An annual plan to a consumer in Arequipa, $300, charged 14 October. Tax $54.00.
  3. A team plan to a Lima agency, $500, charged 20 October. The agency signed up as a business and gave its RUC, stored as pe_ruc, so Stripe Tax charged nothing. Tax $0.
  4. A monthly plan to a consumer in Cusco, $50, invoice finalized 31 October. The card is declined, and Stripe's retry collects on 2 November. Tax $9.00.
  5. A refund. A Lima consumer charged $35.40 on 1 September asks for that month back. You refund it through a credit note on 22 October and return the $5.40 of tax with it.

What Stripe's itemized export shows for October: $5.40 plus $54.00 plus $9.00, less $5.40 for the credit note, is $63.00.

What Form 623 for October carries: order 4 was charged in November, so its $9.00 goes in November's return. October's collections are $5.40 plus $54.00, or $59.40. The $5.40 you returned to the September customer is offset against them (more on that below). The return pays $54.00.

When it is due: within the first ten business days of November. In 2026 that is Friday 13 November.

The $9.00 doesn't vanish. It appears in November's return, where Stripe's November export won't show it, so keep the cross-month list from the section above next to each return.

Filing Form 623 and paying SUNAT

Superintendency Resolution 000294-2024/SUNAT created both the form and the platform. The return is Virtual Form 0623, "IGV - Economía Digital," filed on a SUNAT Virtual platform called "Declaración y pago para no domiciliados" (declaration and payment for non-domiciled subjects). You log in with your RUC and Clave SOL.

The deadline. The decree sets it: you file and pay "within the first ten (10) business days of the following month." The resolution adds that SUNAT's usual monthly due-date calendar, which staggers deadlines by the last digit of the RUC, does not apply to you. The clock runs on Peruvian time: the decree says the time zone for the filing and payment date "will be the Peruvian official time, GMT-5." A return you submit at 11 p.m. in New York on the tenth business day is already late in Lima.

No nil returns, with one exception. The resolution says you are "not obliged to file when you have no withholding or collection." The exception is January. You choose your currency on January's return each year, so file it even if January had no Peruvian sales. If your obligation starts later in the year, the choice is made on your first return.

Corrections. A replacement or corrected return re-enters every field of the item being corrected, not only the one that changed. Each item on the form is treated as an independent return.

Choosing soles or dollars

You declare and pay in soles or in US dollars, and the choice holds "until December of that year." For a seller pricing in USD, dollars avoid any conversion: the dollar tax in Stripe's export is the dollar figure on Form 623.

If you file in soles, the decree fixes the rate: the weighted average selling rate published by the SBS, Peru's banking regulator, for the due date of the return or the date you pay, "whichever occurs first." That is not the rate Stripe uses. Stripe's reporting guide says it converts "using available exchange rates at the time of the transaction." If you file in soles, set aside Stripe's filing currency columns and convert the month's dollar total at the SBS rate yourself.

If you file in dollars but price in another currency, say euros, the resolution sets a different rule: the buying rate published in the euro area by the central bank or similar body, at the due date or the date of the SWIFT transfer, whichever is first.

Paying in dollars: the NPST and "OUR"

A dollar return is paid by SWIFT transfer from abroad to the Banco de la Nación. The platform gives you a payment number for the transfer, the NPST (número de pago SUNAT para transferencia), which ties the payment to your RUC, the month and the tax concept. The resolution notes the NPST "has no expiry" and can only be used for a payment in dollars. You can generate it when you file or separately, before or after.

You give your bank the details on the NPST report and the charges instruction "OUR," which the resolution defines as the instruction under which the sender "must pay all commissions (local and foreign)." Skip it and SUNAT credits the transfer net of the Banco de la Nación's and any intermediary bank's fees. Leave the NPST off and SUNAT applies the payment under the Tax Code's default allocation rules. In both cases your return is short. The payment counts on the date the money reaches the account, so send it a few days early.

A soles return is paid on the platform by account debit or card from an enabled Peruvian bank, or at a bank with a different payment number. A US company without a Peruvian bank account will almost always find the dollar route easier.

Refunds go to the customer first, then to the return

Peru handles refunds through an offset, not an amendment. Article 49-A says that where you collected tax from an individual "unduly or in excess," you "must return the corresponding amount to them, and offset it against the collections you must make in the following months." The resolution's instructions for Form 623 are a little more generous on timing: you enter the amount returned to the consumer on the return and offset it against that month's collections or, if they don't cover it, later months'.

In the worked month, the September refund reduces October's return because the $5.40 went back to the customer in October. Had the refund kept the tax, there would be nothing to offset.

Overpayments to SUNAT itself, such as paying a return twice, are a separate case. The decree lets you offset them against later payments or ask for a refund to a Peruvian or foreign account, with the bank charges for a foreign refund at your cost.

What reaches QuickBooks, and how the payment clears it

Acodei syncs the tax Stripe Tax calculated, so the Peru registration in Stripe has to be in place first, and Stripe Tax has to be active in your Stripe account.

For a US QuickBooks company, Acodei's method is the Tax Product: a non-inventory "Sales Tax" product mapped to a liability account, with all Stripe Tax amounts on a sale rolled into one line on the QuickBooks invoice or sales receipt. QuickBooks' Sales Tax Center doesn't let third parties create official tax rates for US companies, which is why the product approach is the one that works there. Acodei's documentation notes this needs Stripe Tax used with Stripe Invoicing or Stripe Checkout. You file from Stripe's reports and pay from the liability account.

For a QuickBooks company outside the US, Acodei's documentation describes a second option: mapping individual Stripe tax rates to QuickBooks tax codes you set up, such as an 18 percent Peru code.

In the worked month, orders 1, 2 and 4 carry Peruvian tax that Stripe calculated, and Stripe-calculated tax is what the sync carries. Order 4 is the one to watch by date, because Peru counts it in November. Order 3 is a business sale, so Stripe calculated no tax and there is none to carry. That is correct: the agency is outside Article 49-A.

The refund, order 5. Acodei's documentation says a refund issued through a credit note carries the line-level tax breakdown. A refund made on the payment alone may not show how much was tax, and that case can need a manual adjustment in QuickBooks. Refund Peruvian invoices through credit notes, which also hands you the exact amount to offset on Form 623. Our guide to refunding Stripe Tax in QuickBooks walks through both cases.

The payment to SUNAT. Build the Form 623 figure from Stripe's data by charge date, as in the worked month. When the $54.00 SWIFT transfer leaves your account, reduce the liability by $54.00 and post the bank's "OUR" charges to bank fees, not to tax. The same liability account holds US sales tax and any other foreign tax from Stripe Tax, so note the Peruvian slice each month. Our guide to reconciling the Stripe Tax report in QuickBooks covers the liability-account side, and the Stripe Tax itemized export entry lists the columns you filter on (country_code PE).

If you file in soles, SUNAT receives a sol amount at the SBS rate while your liability account holds dollars. Clear the dollar balance for the month and post the difference to the account your accountant uses for exchange gains and losses.

What happens if a provider doesn't register

The decree has a fallback that lands on your customers. Article 49-B moves the collection to "payment facilitators" when a provider does any of the following:

  • doesn't register for a RUC;
  • doesn't file or pay in full for two months, consecutive or not;
  • doesn't file an annual information return, if SUNAT requires one.

Payment facilitators are Peruvian banks, e-money issuers and the Banco de la Nación for card, wallet and similar payments, plus telecom operators that bill for digital services. The Ministry of Economy and Finance publishes the list of providers concerned, and a provider comes off it only after registering, filing and paying what it owes with interest and penalties.

For a provider on that list, a Peruvian consumer's bank adds the tax to their card statement. If you also charge it through Stripe, they pay twice. SUNAT's English page says this residual mechanism "will be implemented through the future regulation," so check its status with SUNAT before treating it as live. The design tells you where Peru is heading either way.

Common mistakes with Peruvian IGV on Stripe digital services

  • Waiting for a threshold. There is none. The obligation starts the month after you begin selling to Peruvian consumers.
  • Treating a RUC as proof of a business. Individuals with a business hold RUCs too, and Stripe only checks the format. The decree's test is how the customer signed up.
  • A signup form with no business option. If you don't let customers register as a business, the decree treats every Peruvian customer as a consumer.
  • Using a general tax code. Stripe only calculates Peruvian tax on digital product tax codes.
  • Filing from Stripe's finalization dates. Collection happens at the charge. Move invoices paid the next month to that month.
  • Counting the deadline on your calendar. Ten Peruvian business days, on Lima time.
  • Skipping January's return. It is where you choose soles or dollars for the year, even with nothing to declare.
  • A SWIFT payment without "OUR" or the NPST. SUNAT credits less, or credits it somewhere you didn't intend.

Frequently Asked Questions

Do foreign companies have to charge Peruvian IGV on digital services?

Yes, on sales to individuals in Peru who are not in business. Since Legislative Decree 1623, a non-domiciled provider of digital services acts as a collection agent for the IGV from the month after it starts selling in Peru. It registers for a RUC online, with no Peruvian address or resident representative, and adds the tax when it charges the customer.

What is the IGV rate on digital services in Peru?

SUNAT gives Peru's rate as 18 percent, made up of 16 percent IGV and 2 percent Municipal Promotion Tax. The decree applies the rate to the total price or compensation charged. For platforms that intermediate between buyers and sellers, the base is only the platform's fee.

Do I charge IGV to business customers in Peru?

No, if the customer signed up as a business. Article 49-A only applies to individuals who don't carry on business, and the decree tests that through how the customer registered on your platform. If your signup can't tell individuals from businesses, every customer counts as an individual. Storing a business's RUC as pe_ruc in Stripe stops Stripe Tax charging it.

How often do non-resident providers file in Peru, and how do they pay?

Monthly, on Form 623 on SUNAT's platform for non-domiciled subjects, within the first ten business days of the following month on Peruvian time. You file only for months with collections, plus January, when you choose to file in soles or US dollars for the year. Dollar returns are paid by SWIFT to the Banco de la Nación using the NPST number and the "OUR" instruction.

How do refunds affect Peruvian IGV?

Return the tax to the customer with the refund, then enter the amount on Form 623 and offset it against that month's collections or later months'. You do not amend the earlier return. Refunding through a Stripe credit note keeps the tax amount clear in both Stripe and QuickBooks.

Four Peruvian details that decide your numbers

Peru asks little of a foreign seller on paper: an online RUC, no address, no invoices, no books. The work sits in four places. Your signup form decides who is a consumer. One fact out of four places a customer in Peru. The month is the month you charged, filed within ten Peruvian business days. And the dollar payment needs the NPST and "OUR," with the bank's fees kept out of the tax account. Get those right and the Peruvian slice of your liability account will tie to each Form 623.

Acodei syncs Stripe Tax into QuickBooks, so each Peruvian month starts from the liability account instead of a spreadsheet. 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.