Export Sales
An export is a sale to a customer outside India. It is a zero-rated supply, so no GST sticks to the goods — but the paperwork (exchange rate, shipping bill, LUT) and the accounting (foreign-currency receivables, realised FX gain/loss) are different from a domestic order. Raya handles the difference for you: pick a foreign customer and the order derives the right export route, clears domestic GST, and books everything in ₹ at the rate you set.
This page walks a full foreign-currency export from order to payment, with the journal entries at each step.
Concepts — which export route am I on?
There are four export supply types. The two you will use most are the top two:
| Without payment (LUT) | With payment of IGST | SEZ | Deemed export | |
|---|---|---|---|---|
| GST on the invoice | None — zero-rated under LUT / bond | IGST charged, refund claimed after export | Same split as exports | Normal GST (the recipient claims the refund) |
| Key document | Shipping bill + LUT ARN | Shipping bill (used for refund matching) | Endorsed invoice (no shipping bill) | — |
| Revenue ledger | Export Sales (SLS_EXPORT) | Export Sales (SLS_EXPORT) | SEZ Sales (SLS_SEZ) | Export Sales (SLS_EXPORT) |
Without payment (LUT) and With payment (refund route) are the two ways to export goods:
- Without payment of IGST (LUT / bond) — you file a Letter of Undertaking once a year, quote its ARN on the order, and ship with no IGST. Nothing to pay, nothing to refund. This is the common route and the one Raya defaults to.
- With payment of IGST (refund route) — you charge IGST on the export, pay it to the government, and reclaim it later against the shipping bill. Use this when you do not hold a valid LUT.
:::note Zero-rated ≠ exempt A zero-rated supply is still a taxable supply — it just carries a 0% effective rate. That is what lets you export under LUT without charging tax and keep the input-tax credit on what you bought. An exempt supply would forfeit that credit. :::
Foreign-currency invoicing & exchange rate
Export invoices are raised in the buyer's currency (USD, EUR, …), but your books are in ₹. Every export order carries one exchange rate, set when you create it. Raya:
- posts every voucher in ₹ at that rate,
- stamps the narration with the currency and rate (e.g.
[USD @ 83]), - shows the foreign amount as a caption under the ₹ figure (
USD 1,000 @ ₹83), and - carries the receivable at book value until you are paid — the difference between the booking rate and the rate on the day money lands is a realised FX gain or loss.
:::caution One rate per order An order holds a single exchange rate. If a shipment settles across several receipts at different rates, each receipt still values against the one booking rate — the gain/loss absorbs the movement. Period-end unrealised revaluation of open FX receivables is not modelled yet. :::
The shipping bill
The shipping bill (number, date, port code) is the customs document that proves the goods actually left India. In Raya it is recorded on the order — not as a voucher — and it is the matching key for your GSTR-1 Table 6A and, on the refund route, for the IGST refund. It is accepted only on Export orders; SEZ orders are rejected with an "endorsed invoice" message because SEZ supplies use an endorsed invoice instead.
e-Invoice & e-Way Bill for exports
- e-Invoice (IRN) — export invoices carry the supply-type codes EXPWP (with payment) or EXPWOP (without payment) on the IRP. See GST, e-Invoice & e-Way Bill for the IRN + QR flow.
- e-Way Bill — needed only for the inland leg (your factory to the port), like any domestic movement: Part-A from the invoice, Part-B for the vehicle.
:::caution e-Invoice for exports is still being hardened
IRN generation for the EXPWP / EXPWOP supply types is untested in the current
build. Raise the shipping bill and file normally, but verify the IRN JSON before relying
on it for exports.
:::
GSTR-1 treatment (Table 6A)
Exports report under GSTR-1 Table 6A — the shipping bill number, date and port code are the reconciliation key the portal matches against ICEGATE.
:::caution Table 6A export is partial today GSTR-1 is computed automatically from your posted sales vouchers, but the JSON export does not yet emit the shipping-bill fields. They are captured on the order — copy them into the return manually until the export is complete. :::
One-time setup
Do these once, before your first export.
- Record your LUT on the GSTIN profile. Under Settings → Tax & Compliance, open the GSTIN profile you export from and store your current LUT ARN (the acknowledgement number from the LUT you filed on the GST portal). You will quote it on each LUT order.
- Create the foreign customer. Add the buyer with a Country other than India and no Indian GSTIN. That single fact is what makes Raya treat their orders as exports.
- Set the selling currency. Give the customer (or the order) its trading currency — USD, EUR, etc. The order will ask for the exchange rate at creation.
:::tip The customer's country is the switch You do not pick "this is an export" from a menu. A customer whose country ≠ India and who has no Indian GSTIN is an export customer, and every order for them derives the export route automatically. :::
Worked example — USD 1,000 export under LUT
Goods: 100 units × USD 10 = USD 1,000. Booking exchange rate ₹83. Payment arrives
later when the rate has moved to ₹84. Ledger names below map to SLS_EXPORT (Export
Sales), AR (Accounts Receivable), FOREX_GL (FX Gain / Loss).
Step 1 — Create the sales order
Sales → + New Order, then pick the foreign customer. Watch the header react:
| Field | What you do / what Raya does |
|---|---|
| Customer | Pick the foreign customer. Raya derives Supply type = Export — Without Payment (LUT). |
| Supply type | Left as derived. Leave it, or switch to With Payment / SEZ / Deemed — a manual choice is never overwritten. |
| GST | Cleared automatically on the LUT route — no CGST/SGST/IGST rows. |
| Exchange Rate | Enter 83. |
| LUT ARN | Enter your LUT ARN (shown only on Without Payment orders). |
| Line item | 100 × USD 10 → USD 1,000 taxable value. |
:::tip Smart defaults, always editable Choosing the foreign customer derives the route and clears GST in one move. If you switch the supply type to With Payment, Raya adds IGST 18% rows back (central treatment); switch back to Without Payment and it clears them again. Every derived value stays editable. :::
Step 2 — Complete the order (invoice)
Confirm and complete the order. Raya posts the sales voucher in ₹ at the order rate (USD 1,000 × 83):
Dr Accounts Receivable (AR) 83,000
Cr Export Sales (SLS_EXPORT) 83,000
Narration: [USD @ 83]
The Payment & Finance tab now shows an Order Total card reading ₹83,000 with the caption USD 1,000 @ ₹83, and Outstanding ₹83,000.
Step 3 — Record the shipping bill
Once the goods clear customs, open the order → Payment & Finance → Shipping Bill panel and enter:
- Shipping bill number
- Shipping bill date
- Port code
There is no voucher for this — it is the GSTR-1 Table 6A / refund-matching key only. On a LUT order a LUT chip shows on this panel, confirming the zero-rated route.
:::note Export orders only The shipping-bill panel accepts data only on Export orders. On an SEZ order it is rejected, because SEZ supplies move on an endorsed invoice, not a shipping bill. :::
Step 4 — Receive payment (realised FX gain/loss)
The buyer pays USD 1,000, but the rupee has weakened to ₹84, so ₹84,000 lands in the bank. Record the receipt on Payments — the Rate at receipt field defaults to the order rate (83); change it to 84.
Dr Bank 84,000
Cr Accounts Receivable (AR) 83,000
Cr FX Gain / Loss (FOREX_GL) 1,000 ← realised gain
Narration: [USD @ 84]
The receivable always clears at its ₹83,000 book value; the ₹1,000 difference is a realised gain because a weaker rupee means the same USD fetches more ₹.
If the rupee had strengthened to ₹82 you would collect only ₹82,000 and book a loss:
Dr Bank 82,000
Dr FX Gain / Loss (FOREX_GL) 1,000 ← realised loss
Cr Accounts Receivable (AR) 83,000
:::tip Blank rate = settle at book value Leave Rate at receipt blank and Raya settles at the order's booking rate — no FX gain or loss is booked. Enter a rate only when the actual conversion differed. :::
Step 5 — Sales returns (if any)
If the buyer returns goods, raise a credit note. Export credit notes are converted at the original order rate, so they reverse the receivable cleanly against the value you booked. See Sales Returns & Credit Notes.
Variant — with payment of IGST (refund route)
If you export without a LUT, switch Supply type to With Payment. Raya adds IGST 18% rows (₹14,940 on the ₹83,000 taxable value), and the completion voucher gains an IGST leg:
Dr Accounts Receivable (AR) 97,940
Cr Export Sales (SLS_EXPORT) 83,000
Cr IGST Payable 14,940
You pay that IGST with your monthly liability and reclaim it against the shipping bill. Everything else — the shipping bill, the FX settlement on payment — works exactly as above.
What to check after each step
- Foreign customer → supply type Export — Without Payment (LUT), GST cleared.
- Sales voucher = order total × FX, posted to Export Sales (
SLS_EXPORT), narration stamped. - Order Total card shows ₹ with the
USD 1,000 @ ₹83caption; Outstanding in ₹. - Shipping bill recorded on the Export order; LUT chip visible on the panel.
- Receipt @ 84 books FX gain ₹1,000 (Cr
FOREX_GL); @ 82 books a ₹1,000 loss (Dr); AR always clears ₹83,000. - Trial Balance balanced after every step; Export Sales shows as its own P&L line.
Known limitations
- Unrealised FX revaluation — period-end restatement of open foreign-currency receivables is not modelled. Gains/losses are booked only on settlement.
- GSTR-1 Table 6A JSON does not yet emit the shipping-bill fields (captured on the order, not yet in the export file).
- One exchange rate per order; export e-Invoice (IRN) for the
EXPWP/EXPWOPsupply types is untested.
Related
- Sales Orders — the base order flow this builds on.
- Invoices & e-Invoice — bill a shipped order.
- GST, e-Invoice & e-Way Bill — IRN, QR and e-Way Bill.
- GST & compliance overview — returns and filing.