Automating SA Invoices: Shopify to Xero/Sage
April 4, 2026If you are running a Shopify store in South Africa, you’ve likely noticed a major legal gap: Shopify’s "Order Confirmation" is not a valid SA Tax Invoice.
SARS (South African Revenue Service) has very specific requirements for what constitutes a legal tax invoice, especially if you are a VAT-registered business. You need the words "Tax Invoice," your VAT number, the customer’s address (if the order is over R500), and a clear breakdown of the 15% VAT.
Many store owners spend their Monday mornings manually typing Shopify order data into Xero or Sage. This is a waste of time and a massive source of human error. Here is the "plumbing" you need to automate your tax-compliant invoicing.
The SARS Invoicing Requirements (A Quick Checklist)
To be legal for orders over R500, your invoice must contain:
- The words "Tax Invoice" in a prominent place.
- Your business name, address, and VAT registration number.
- The customer's name and address.
- An individual serialized invoice number.
- The date of issue.
- A full description of the goods/services.
- The amount of VAT charged (at 15%).
- The total price including VAT.
Option 1: Using a Dedicated Connector (Amaka or Stock2Shop)
If you use Xero, the Amaka app is the gold standard for Shopify integration. It syncs your Shopify orders as individual invoices or as daily summaries.
The Pros:
- It handles the VAT mapping automatically (Mapping Shopify "VAT" to Xero "15% VAT on Income").
- It syncs your Shopify Payments and Payfast payouts, making bank reconciliation a breeze.
The Cons:
- It can be expensive if you have thousands of orders a month.
- Custom mapping (e.g., mapping specific Shopify tags to Xero account codes) can be tricky.
Option 2: The "Custom Webhook" Approach (Dev Choice)
If you have unique requirements—like generating an invoice only when an order is "Fulfilled" rather than just "Paid"—you can build a custom bridge.
We use a Node.js app that listens for Shopify webhooks and uses the Xero-Node SDK to create the invoice.
The Plumbing: Sample Webhook Logic
app.post('/webhooks/order-paid', async (req, res) => { const shopifyOrder = req.body; const invoiceData = { Type: 'ACCREC', // Accounts Receivable Contact: { Name: shopifyOrder.customer.first_name + ' ' + shopifyOrder.customer.last_name }, LineItems: shopifyOrder.line_items.map(item => ({ Description: item.name, Quantity: item.quantity, UnitAmount: item.price, AccountCode: '200', // Sales Revenue TaxType: 'OUTPUT' // 15% VAT })), Date: new Date().toISOString().split('T')[0], Status: 'AUTHORISED' }; await xeroClient.accountingApi.createInvoices(xeroTenantId, { invoices: [invoiceData] }); res.sendStatus(200); });
Handling Multi-Currency (Selling in USD, Reporting in ZAR)
If you sell to international customers in USD, SARS still requires you to report the ZAR value of the transaction based on the exchange rate at the time of the sale.
When automating this, your "plumbing" needs to:
- Fetch the Shopify order (in USD).
- Fetch the current Spot Rate (e.g., from an API like Open Exchange Rates).
- Create the Xero invoice in ZAR, or use Xero’s multi-currency feature to record the USD sale and let Xero handle the FX gain/loss.
Why This Saves 10+ Hours a Week
Manual data entry is a silent killer of e-commerce growth. By automating the Shopify-to-Xero flow:
- Your bookkeeper doesn't have to spend days reconciling transactions.
- Your tax returns (VAT201) are accurate because the VAT was calculated correctly at the source.
- Your customers get a professional, SARS-compliant PDF invoice emailed to them automatically, reducing support tickets.
Final Thoughts
Don't wait until you have 500 orders a month to fix your invoicing. The mess of manual entry only gets harder to clean up the longer you wait. Whether you use a plug-and-play app or a custom-built webhook, getting your Shopify-to-accounting plumbing right is a foundational step for any serious SA brand.
Struggling with your Shopify-Xero sync or VAT mapping? Message me on WhatsApp. I help local e-commerce stores automate their back-office tech.