Skip to content
Processing locally — files never leave your device

Freelance Income Tracker

Keep a running record of freelance payments across Pakistan’s July-to-June tax year. Log each payment with its date, client, platform, amount, currency and the exchange rate you actually received, and the tracker totals by calendar month and by tax year — named the way FBR names them, so 1 July 2026 to 30 June 2027 is tax year 2026-27. Export to CSV to back up or hand to an accountant, and import a CSV back without losing rows. Everything is stored in this browser only; there is no account and no sync.

Log a payment

The rate you actually received

Stored only in this browser — export to back up. These payments live in local storage on this device. They do not sync, they will not appear in another browser or on your phone, and clearing site data deletes them permanently. Export a CSV regularly if this record matters.

How to use Income Tracker

  1. Enter the date you were paid, the client, the platform, and the amount.
  2. Pick the currency and enter the PKR rate you actually received — not a mid-market quote.
  3. Add the payment. Monthly and tax-year totals update immediately.
  4. Export a CSV to back up your record or hand it to an accountant.
  5. Import a CSV to restore a backup or bring in rows you edited in a spreadsheet.

Why the tax-year boundary matters more than it looks

Pakistan’s tax year runs 1 July to 30 June, and it is named for the year it ends in: the year beginning July 2026 is tax year 2027, written 2026-27. That sounds like trivia until you are reconciling a year’s income and discover that June and July payments have been filed together. A payment received on 30 June belongs to one tax year and one received on 1 July belongs to the next, and a spreadsheet organised by calendar month will quietly put them in the same bucket.

This tracker buckets on the July-to-June boundary, and the behaviour at those exact dates is covered by tests rather than assumed — because an off-by-one here misfiles every payment in the two busiest months of the boundary.

Record the rate you got, not the rate that was quoted

Every payment stores its own exchange rate, which is the single most useful thing this tool does. Freelancers commonly track earnings in dollars and convert the annual total once, at whatever rate applies when they do the sum. That produces a rupee figure that corresponds to nothing: not what the bank credited, not what appears on any statement, and not what a tax computation should start from.

Storing the rate per payment means a $1,000 payment received at 280 and another at 292 are recorded as Rs 280,000 and Rs 292,000 — which is what actually happened. The totals then reconcile against your bank records instead of approximating them.

A worked example

Four payments: $100 on 30 June 2026 at 280, $200 on 1 July 2026 at 285, Rs 50,000 on 15 July, and $300 on 2 August 2026 at 290. Those are Rs 28,000, Rs 57,000, Rs 50,000 and Rs 87,000. Tax year 2026 gets the first payment only, at Rs 28,000. Tax year 2027 gets the other three, at Rs 194,000. July as a calendar month shows Rs 107,000 — the two July payments — which is a different grouping from either tax year, and both views are useful for different purposes.

Local storage is private and fragile in equal measure

Nothing here is uploaded. Your client names, amounts and rates stay in this browser, which is genuinely private in a way a cloud tracker is not. The trade-off is real though: the record does not follow you to another device, it does not survive clearing site data, and in private browsing it may not survive closing the tab. There is no server-side copy to restore from, because there is no server.

So export a CSV periodically and keep it somewhere you back up. The export is a plain, properly quoted CSV that opens in Excel or Google Sheets, and it imports back without losing rows — including client names with commas in them, which is where naive CSV handling usually corrupts data without saying so.

For the tax side, see the freelancer tax calculator. To bill a client in the first place, the invoice generator produces a PDF locally.

Frequently asked questions

When does the Pakistani tax year start and end?
It runs from 1 July to 30 June, and it is named for the calendar year it ends in. So 1 July 2026 to 30 June 2027 is tax year 2027, written 2026-27. This tracker buckets every payment on that basis, which is why a payment on 30 June and one on 1 July land in different years even though they are a day apart.
Why does it ask for the exchange rate on every payment?
Because the rate changes between payments, and the one that matters is what your bank or payment provider actually credited you. Storing the rate with each payment means your totals reflect the rupees you genuinely received, rather than reconverting historic payments at today’s rate and producing a figure that matches nothing.
Where is my data stored?
In your browser’s local storage, on this device only. There is no account and no sync. Nothing is uploaded, which is the point — but it also means the record is fragile: it will not appear in another browser or on your phone, and clearing site data deletes it. Export a CSV regularly if this matters.
What happens if I use private browsing?
Storage may be unavailable or wiped when you close the tab. The tracker detects this and warns you in the notice at the bottom, and it still works for the session — you can log payments and export a CSV before you leave.
Can I edit the CSV in Excel and import it back?
Yes. The importer is tolerant about column order and ignores extra columns, so you can rearrange or annotate. It needs at least a "date" and an "amount" column. Dates must be in YYYY-MM-DD form; a row with an unreadable date or amount is skipped and reported by line number rather than dropped silently.
Will a client name containing a comma break the CSV?
No. The export quotes any field containing a comma, a quote mark or a line break, and the importer parses quoted fields properly, so "Smith, Jones & Co" survives an export and re-import intact. This is tested as a round-trip, because the usual failure mode of naive CSV handling is silent data corruption rather than an error.
Does this calculate the tax I owe?
No. It records what you were paid. For withholding on export proceeds and the salary slabs, use the freelancer tax calculator, which shows the rate applied and the FBR source it came from.
Is there a limit on how many payments I can log?
No fixed limit. Browser local storage typically allows several megabytes per site, which is thousands of payments. If storage does fill up, the notice at the bottom of the page will tell you that saving has stopped working.

More tools you might find useful in the same flow.

Built by Muhammad Tahir · About