Freelancing · Pakistan

Freelancer Tax and Foreign Payments in Pakistan

A practical record of how I handle PSEB registration, Section 154A, purpose code 9186, PRCs, bank charges and foreign payments through Pakistani banks.

If you freelance from Pakistan, receiving money is usually the easy part. The harder part is the trail behind the payment. Which service does the bank record? Which purpose code appears on the remittance? How is the tax deducted? Can you prove later where the money came from?

My own process is deliberately simple. I want every foreign payment to have a clean chain from the invoice to the Pakistani bank account and then into my tax records. This is a record of what I do, not tax or legal advice.

01Invoice
02Foreign payment
03Pakistani bank
04PRC / ePRC
05Tax record

Start with your FBR setup

Before worrying about bank codes or registering with the Pakistan Software Export Board (PSEB), I would first make sure the Federal Board of Revenue (FBR) side is in place. That means having a personal NTN (National Tax Number) and filing the return correctly for the relevant tax year.

One distinction is easy to miss. Having an NTN, filing a return, and appearing on the Active Taxpayers List are related, but they are not the same thing.

Where PSEB fits in

For IT and IT-enabled services (ITeS) exporters, PSEB registration matters because it sets the tax rate under Section 154A of the Income Tax Ordinance.

Under Section 154A, tax on export proceeds is a final tax, usually deducted by the bank when the money arrives. The rate is 0.25% if you are registered with PSEB and 1% if you are not. The reduced rate came in with the Finance Act 2022, as Business Recorder reported from the FBR’s explanatory circular. Rates can change with each budget, so confirm the current rate with your tax adviser before you file.

My practical order

01
Personal NTN

Have the basic FBR registration in place first.

02
PSEB registration

Register under the freelancer route if your work falls within the eligible IT/ITeS category.

03
Bank declaration

Tell the bank what services you export and make sure the appropriate purpose code is tagged.

04
Save the PRC

Keep a copy for every foreign receipt and check it before filing it away.

Get the bank setup right before the next payment

This is one of the few parts I would not leave vague. The purpose code attached to the remittance decides how the receipt is classified. For freelance computer and information services, the State Bank of Pakistan (SBP) purpose code is 9186, set in SBP’s December 2018 circular.

Since April 2026, banks must take a one-time declaration of the service you provide. They then tag your account with the matching purpose code (EPD Circular Letter No. 06 of 2026). If you sell more than one kind of service, tell the bank when a payment is for something different.

What went wrong in my own account

This happened to me. Payouts that came through Wise arrived under purpose code 2280. Local bank transfers (IBFT) carrying the same client’s money arrived as 9471, a home-remittance code. Neither was 9186, and some receipts had no PRC at all.

The bank codes the route the money took, not the work it paid for. That matters at filing time. Declared as home remittances, these receipts would have dropped out of my export income. I declared them by what they were: the same work for the same client, so the same export income. No tax had been deducted on some of them, so that tax was settled in my return.

I have asked the bank to recode them to 9186 and to issue the missing PRCs.

The PRC is the document I care about most

When a payment arrives, I check the PRC or ePRC (its electronic version) instead of assuming the remittance was recorded correctly. At minimum, I want the foreign amount, exchange rate, purpose, purpose code, tax deduction and realized PKR amount to make sense.

FieldWhat I check
Foreign amountDoes it match the payment or is there an intermediary-bank deduction?
FX rateWhat conversion rate did the bank actually use?
PurposeDoes the description match the service I actually provided?
Purpose codeFor my IT freelance receipts, is the expected code shown?
TaxWhat rate and amount were deducted?

Wise, Payoneer and other intermediaries

I do not treat an intermediary as a separate tax rule. What matters to me is what ultimately reaches the Pakistani bank, how that bank classifies the receipt, and what documentary trail I receive.

Two people can both say they were paid through the same service and still end up with different documentation. It depends on the route used to deliver the money. The route can even change the purpose code, as it did with my own Wise payouts.

ESFCA is useful if you have recurring foreign expenses

If you regularly pay for software, hosting, certifications or other foreign expenses, an Exporters’ Special Foreign Currency Account (ESFCA) is useful. Under SBP’s April 2026 rules, IT exporters and freelancers can keep USD 5,000 a month or 50% of their export proceeds, whichever is higher, in this account. The bank credits that share by default unless you ask in writing for less.

Freelancers can spend from it on work and personal payments such as digital services, subscriptions, certification fees and education, without SBP approval. You can convert the balance to PKR at any time. You cannot withdraw cash from it in Pakistan or move it to an ordinary foreign-currency account.

I see this less as a tax feature and more as a cash-flow tool. It avoids converting everything to PKR and then buying foreign currency again for legitimate expenses.

Do not compare banks by the visible fee alone

A bank can charge a visible intermediary fee and still leave you with more PKR than a bank that receives the full USD amount but converts it at a weaker rate. Here is an example with made-up rates.

Bank ABank B
Client sends$5,000$5,000
Intermediary deduction$30$0
Amount converted$4,970$5,000
FX rate279274
PKR before tax1,386,6301,370,000
Effective rate277.33274.00
The number I actually compareEffective FX rate = PKR realized before tax ÷ original foreign payment

In this example, the bank that apparently “lost” $30 still leaves you with PKR 16,630 more before tax.

The useful question is not “which bank charges less?” It is “how many rupees did I actually receive for each dollar the client sent?”

Keep your own payment record

I would not rely on being able to reconstruct everything from bank statements months later. A simple payment tracker makes tax filing and bank comparisons much easier.

FieldExample
Payment date12 Aug 2026
Client / invoiceClient A · INV-042
Foreign amountUSD 5,000
Intermediary feeUSD 30
FX rate279.00
Purpose code9186
PRCSaved

The exact spreadsheet is not important. The useful part is being able to connect the client invoice, the remittance and the PRC without guessing later.

Written byMuhammad Arif

Full-stack web developer working across Next.js, TypeScript, APIs, data, CMSs and production infrastructure.

← All notes

Need help shipping or untangling a web product?

I am most useful when the problem crosses layers: UI, API, database, CMS, deployment, or an existing codebase that has become difficult to change safely.

Email me