WhatsApp us

Blog7 min read29 Oct 2026

Foreign currency invoices: revaluation and rate sourcing

Handle foreign currency invoices in Singapore: fix one approved rate source, store the rate on each invoice, revalue open balances at period end. Steps.

Foreign currency invoices: revaluation and rate sourcing

By KYN AI Advisory Team — AI implementation specialists, Singapore

For a foreign currency invoice you need three things: a documented exchange rate source, the rate and its date stored on every invoice, and a period-end revaluation of unpaid balances. For GST in Singapore, IRAS requires an approved exchange rate source and consistent use of it. An agent can fetch the rate, convert, post and revalue. A person approves the source once and signs off each period-end run.

Which exchange rate do you use for a foreign currency invoice?

There are two rates in play and they answer different questions.

  • The accounting rate converts the invoice into your functional currency (for most Singapore SMEs, SGD) for the books. Your accounting framework and your accountant decide the policy. A common choice is the rate on the transaction date.
  • The GST rate converts the amounts on a tax invoice into SGD for the GST return. IRAS sets the rule.

IRAS says that for sales in a foreign currency you must convert the amounts on the tax invoice into Singapore dollars using an exchange rate from an approved source. Approved sources include Singapore banks, local newspapers, the Monetary Authority of Singapore and certain other published sources, as listed in the IRAS guidance on foreign currency transactions/charging-gst-(output-tax)/foreign-currency-transactions). IRAS also expects you to use the chosen source consistently, so pick one and write down which. Read the current guidance for the exact consistency period before you set your policy, because the rule has details on how long a source must be kept.

The accounting rate and the GST rate can differ. That is allowed, but it means the system must hold both and not overwrite one with the other.

How should an agent source rates?

Use one rate source, fetched by a scheduled job, stored with a date and a source name. The agent never types a rate by hand and never fetches "whatever is on the web page today".

A workable design:

  1. Policy table. One row per currency pair: source name, rate type (mid, buy or sell), time of day, and the date the policy took effect.
  2. Rate table. One row per pair per day: rate, source, fetched-at timestamp. Rows are append-only.
  3. Fallback rule. If a rate is missing for a date (weekend, public holiday, feed outage), use the last prior rate and mark the row as carried forward. Never leave the field blank.
  4. Change control. Changing the source in the policy table needs a named approver and is logged.

Rate feeds fail quietly. A feed that returns yesterday's number or a zero looks like data. Add two checks to the fetch job: reject a rate that moves more than a set band from the prior day (for a major pair, a move that big is more likely an error than a market event), and alert when no new row arrives by a set time.

Xero values open foreign currency bills and invoices at the current rate and reports the unrealised gain or loss, as described in Multicurrency in Xero and the Foreign Currency Gains and Losses report. Check how it applies rates, then decide whether Xero's rate satisfies your GST source policy. If it does not, the agent supplies the rate and writes it to the transaction.

What goes on the invoice record?

Store these fields on every foreign currency invoice, sales or purchase:

| Field | Why it is needed | |---|---| | Currency and original amount | The legal amount owed | | Accounting rate, source, date | Reproduces the ledger entry | | GST rate, source, date | Reproduces the GST return figures | | SGD amounts: ex-GST, GST, total | What the return and the books use | | Rate row ID | Links to the exact rate table row |

For purchases, the rule is different. IRAS says the supplier's invoice should state the GST amount in SGD, and you claim input tax on that SGD figure, not on a figure you recomputed. An agent that recomputes input tax from your own rate will produce a number that disagrees with the invoice. Have it read the SGD GST amount off the invoice, compare it with its own calculation, and flag differences above a tolerance instead of overwriting.

What is revaluation and when does it run?

Revaluation restates open foreign currency balances at the period-end rate. If you issued an invoice for USD 10,000 when the rate was 1.30 and USD 1.00 is 1.34 at month-end, the receivable is now worth SGD 13,400, not SGD 13,000. The SGD 400 difference is an unrealised exchange gain.

Two kinds of difference exist:

  • Unrealised. The invoice is still open. You revalue at period-end and, depending on your policy, reverse the entry on day one of the next period.
  • Realised. The invoice is paid. The difference between the booked amount and the SGD actually received is posted when the payment is applied.

Which items revalue? Open receivables, open payables, foreign currency bank accounts and foreign currency loans. Not revalued: items already measured at their original-date rate under your policy, such as many non-monetary assets. Your accountant decides the policy. The agent applies it.

The run for a month-end looks like this:

  1. Lock the rate: pick the period-end rate row, confirm it is the right date and source.
  2. List open foreign currency items by account.
  3. Compute the restated SGD value and the difference per item.
  4. Draft a journal with one line per account, not one per invoice, plus a schedule that lists each invoice behind it.
  5. Hold the journal for approval. A person reviews the schedule and posts it.
  6. Schedule the reversing entry if your policy uses one.

Revaluation is a journal that moves profit. It waits for a named person.

What checks catch rate errors?

  • Rate on a weekend or holiday marked as carried forward, not as a new quote.
  • Rate band check: today's rate against yesterday's.
  • Round-trip test: convert an invoice to SGD and back. The result should match the original to the cent.
  • Receipt reconciliation: when a payment lands, compare the SGD received with the booked SGD. A realised difference far from what the rate move implies means a wrong rate or a bank fee mixed in.
  • Period lock: after sign-off, the agent cannot change a rate or an invoice dated in a closed period.

Keep the working. Tax records must be retained, and IRAS record-keeping guidance/basics-of-gst/invoicing-price-display-and-record-keeping/keeping-records) sets a five-year minimum for GST records. A rate table you can reproduce is part of that record.

For employee and card expenses in foreign currency, where the bank's own charged amount is the better figure, see how to record foreign currency expenses in Singapore.

Where KYN fits

KYN builds finance agents in your own cloud account. For foreign currency work we write the policy table, the rate fetch job and the revaluation journal draft, then connect them to your ledger. The journal waits for a named person. Every action is logged with the actor, and agents run on their own restricted accounts. See finance systems and integrations.

The first 14 days are a review of your stack and interviews with your team. A full build ships in under 90 days.

Frequently asked questions

Can I use the rate my bank charged me?

For card and bank expenses, the amount the bank actually charged is the reliable figure for the books. For GST on your own sales invoices, use an approved source under IRAS rules and use it consistently.

How often should I revalue?

At each reporting period-end, which is monthly for most SMEs that close monthly. Revaluing more often adds journals without changing the year-end result.

Should the agent post the revaluation journal?

It should draft it, with a schedule of every item behind each line. A named person reviews and posts it, because the journal moves profit.

Checked 30 October 2026.

Curious whether Marketing agents fits your business? Talk to KYN on WhatsApp — no forms, just a conversation.

Start Building →

Written 29 Oct 2026 · Checked 29 Oct 2026