← Guides
Integration How-Tos·8 min read

How to Automatically Record Yoco Payments in Xero

Yoco is one of the most widely used card payment solutions among South African SMEs — restaurants, retailers, market vendors, tradespeople, and service businesses use it daily. Xero is where many of those same businesses run their accounting. The gap between the two is a daily manual task: someone takes a card payment on Yoco, then separately enters it into Xero.

This guide explains what's technically possible to connect them, what the options look like, and how an automated integration works in practice.

The state of Yoco's Xero integration

There is no native Yoco-Xero integration. Yoco does not appear in the Xero App Marketplace, and Xero does not have a Yoco connector. This is a gap the market hasn't filled with a plug-and-play solution — it requires a custom build. (PayFast has the same gap; if you use both gateways, see the PayFast-to-Xero integration guide.)

Yoco does have a developer API and a webhook system that makes this possible. The automation sits between Yoco and Xero: Yoco fires an event when a payment occurs, and a workflow catches that event and creates the corresponding record in Xero.

How Yoco's webhook system works

Yoco supports webhooks on its developer platform. When a payment event occurs — a successful card transaction, a refund, a failed charge — Yoco sends an HTTP POST to a URL you configure.

The key payment event is payment.succeeded. The payload includes:

  • A unique payment ID
  • The amount in cents
  • The currency (ZAR for domestic transactions)
  • A timestamp
  • A status field confirming the payment succeeded
  • Metadata if you've attached it at the time of creating the payment request

For businesses using Yoco's point-of-sale app directly (not the API), webhook support depends on your Yoco account tier. The Yoco Business and Enterprise plans have access to the developer portal where webhooks are configured. If you're on Yoco's standard POS plan and don't see developer options, you may need to contact Yoco to confirm webhook access on your account.

What "recorded in Xero" means for Yoco payments

Unlike an online payment gateway where there's usually an invoice in the workflow, Yoco payments typically happen at point of sale — the payment and the transaction happen simultaneously. This affects how you record them in Xero.

The most common approach is to record Yoco transactions as bank account transactions in Xero. In Xero, you set up a Yoco account (as a current asset or bank account), and incoming payments are recorded against it. When Yoco pays out to your actual bank account, you record that as a transfer.

The alternatives:

Option 1 — Record each transaction individually

Every Yoco payment creates one Xero transaction. Best for businesses with lower transaction volumes or where individual transaction detail matters (e.g. you want to see each sale separately in Xero for a specific product line).

Option 2 — Daily summary entry

At the end of each day (or Yoco settlement period), a single Xero transaction is created for the total day's Yoco receipts. This matches how Yoco actually pays out — in daily settlements — and keeps your Xero accounts aligned with what actually hits your bank. Simpler for high-volume businesses.

Most SMEs with a physical Yoco terminal are better served by Option 2. The daily summary is easier to reconcile against the Yoco payout and keeps Xero from filling up with hundreds of individual small transactions.

Building the integration with n8n

The automation uses n8n as the middleware between Yoco and Xero.

For transaction-by-transaction recording (Option 1)

Trigger: Yoco webhook → n8n Webhook node

Steps:

  1. Receive the payment.succeeded event
  2. Extract amount, timestamp, and any metadata from the payload
  3. Optionally look up or create the Xero contact (if you're recording sales against specific customers)
  4. Create a bank transaction in Xero against your Yoco bank account

Trigger: Schedule (daily, end of business)

For daily summary recording (Option 2):

  1. n8n fires on a schedule (e.g. 11pm nightly)
  2. Call the Yoco API to retrieve all transactions for the day
  3. Sum the totals
  4. Create a single Xero bank transaction for the daily total with a reference like "Yoco Sales — 08 May 2026"

Handling refunds

Yoco refunds fire a separate webhook event (payment.refunded). Your integration should handle these as negative transactions in Xero — either reducing the original entry or creating a separate refund transaction depending on your accounting approach.

Setting up the Yoco bank account in Xero

Before building the automation, set up a dedicated Yoco account in Xero:

  1. In Xero, go to Accounting → Chart of Accounts → Add Account
  2. Account type: Bank or Current Asset
  3. Name: "Yoco" or "Yoco Clearing"
  4. Currency: ZAR

Record all incoming Yoco payments against this account. When Yoco settles to your business bank account (usually the next business day), record that as a transfer from Yoco to your main bank account in Xero. This keeps your Xero balances accurate and reconcilable against both your Yoco dashboard and your bank statement.

The manual alternative (and why it doesn't scale)

Without automation, the options are:

  • Manual entry of each Yoco transaction in Xero
  • Downloading Yoco transaction reports as CSV and importing them into Xero manually

The CSV import approach works, and for low-volume businesses it's manageable. Yoco's transaction export includes date, amount, reference, and card type. Xero accepts bank statement imports in OFX or CSV format.

The problem is that it's a manual task someone has to remember to do. If the CSV doesn't get imported for a few days, your Xero books are out of date. At month-end, reconciliation requires matching a batch of transactions rather than a small daily queue. The automation eliminates this entirely — every payment is in Xero by the next morning.

What you'll need

  • A Yoco Business or Enterprise account with developer/webhook access
  • A Xero subscription (any paid plan)
  • n8n (self-hosted or cloud)
  • Xero API credentials (OAuth 2.0 app in the Xero developer portal)

If your Yoco account doesn't currently have developer access, it's worth contacting Yoco support to confirm what's available on your plan before starting the build.

What this solves operationally

Once the integration is running, Yoco disappears as an accounting task. Card payments appear in Xero automatically. Your daily reconciliation queue in Xero includes Yoco transactions without anyone having to move data between systems. Month-end stays clean.

For businesses processing 20+ card transactions a day, the time saving compounds quickly. At 2 minutes per manual entry, 20 daily transactions is 40 minutes of manual work per day — roughly 17 hours a month spent moving data that should move itself.


Some links in this guide are affiliate links. If you sign up through them, Gainly may earn a commission — at no cost to you. We only recommend tools we'd recommend regardless.

Need this built for your business?

Describe what you're working with and I'll come back with something specific — not a sales call.

Tell me what you're dealing with