Touch 'n Go eWallet

Tested on real notifications v2 By PayPing community

Parser Rules (10)

touchngo.cashin-dup.v1
Priority: 400 Non-financial / Info
Match Title:
Cash In Successful
touchngo.non-money.v1
Priority: 390 Non-financial / Info
Match Title:
points!$|^Travel eSIM purchase successful$|^Payment to |^Mobile prepaid top up$|^LPR parking payment is successful$
touchngo.kaching-review.v1
Priority: 380 Non-financial / Info
Match Title:
^Ka-ching! Incoming Money
Match Body:
received from
touchngo.toll.v1
Priority: 370 Money Out
Match Title:
^Successful Toll Payment$
Extract amount:
(?:RM|MYR)\s?(?<amount>[\d,]+\.?\d{0,2})
Extract counterparty:
(?<counterparty>Toll)
touchngo.received-title.v1
Priority: 360 Money In
Match Title:
^You.*received money
Extract amount:
(?:RM|MYR)\s?(?<amount>[\d,]+\.?\d{0,2})
Extract counterparty:
^(?:.*received from |(?=.* has transferred))(?<counterparty>.+?)(?: has transferred| for|\.|$)
touchngo.sent-title.v1
Priority: 350 Money Out
Match Title:
^Payment To:|^DuitNow Payment to
Extract amount:
(?:RM|MYR)\s?(?<amount>[\d,]+\.?\d{0,2})
Extract counterparty:
^(?:Payment To:|DuitNow Payment to )\s?(?<counterparty>.+)$
touchngo.parking.v1
Priority: 340 Money Out
Match Title:
^Parking Payment Successful
Extract amount:
(?:RM|MYR)\s?(?<amount>[\d,]+\.?\d{0,2})
Extract counterparty:
paid for (?<counterparty>Parking.*?)(?:\.|$)
touchngo.received-body.v1
Priority: 330 Money In
Match Body:
received from|has transferred
Extract amount:
(?:RM|MYR)\s?(?<amount>[\d,]+\.?\d{0,2})
Extract counterparty:
^(?:.*received from |(?=.* has transferred))(?<counterparty>.+?)(?: has transferred| for|\.|$)
touchngo.sent-body.v1
Priority: 320 Money Out
Match Body:
you have paid|has been deducted|deducted from your|successfully transferred|toll payment|parking
Extract amount:
(?:RM|MYR)\s?(?<amount>[\d,]+\.?\d{0,2})
Extract counterparty:
(?:transferred (?:RM|MYR)\s?[\d,.]+ to|transferred to|paid (?:RM|MYR)\s?[\d,.]+ (?:to|at|for)|paid (?:to|at|for)|at)\s?(?<counterparty>.+?)(?:\.(?= (?:REF|Merchant)\b|$)|$)
touchngo.unmatched.v1
Priority: -100 Non-financial / Info
Match Title:
.*

Tested Sample Notifications

These real anonymised notification formats were verified against the reference labeller.

real ewallet #0: Successful Toll Payment
Title: Successful Toll Payment
Body: RM 2.62 was deducted via RFID for toll payment on 17-Nov-2025 09:42
Direction: out Amount: RM 2.62 Counterparty: Toll
real ewallet #1: Successful Toll Payment
Title: Successful Toll Payment
Body: RM 2.21 was deducted via RFID for toll payment on 17-Nov-2025 09:45
Direction: out Amount: RM 2.21 Counterparty: Toll
real ewallet #87: You've just earned 15 points!
Title: You've just earned 15 points!
Body: You've received 15 points from your transaction! Use them now to redeem great rewards.
Direction: info

Supported Apps

Android Package:
my.com.tngdigital.ewallet
iOS App Name:
TNG eWallet, Touch 'n Go eWallet
Schema Version:
1

How to Import in App

  1. Click Copy JSON above.
  2. Open PayPing Lite on your phone.
  3. Open the Bank Rules tab.
  4. Tap + Add Bank Rule and paste.

Report an Issue / New Samples

If your bank modified their notification phrasing or if this parser missed a transaction, please share an anonymised sample!

Submit on GitHub

Raw JSON Definition

{
  "schemaVersion": 1,
  "id": "touchngo",
  "name": "Touch 'n Go eWallet",
  "version": 2,
  "author": "PayPing community",
  "description": "Real-notification starter for TNG transfers, payments, tolls, parking and informational alerts.",
  "androidPackages": ["my.com.tngdigital.ewallet"],
  "iosAppNames": ["TNG eWallet", "Touch 'n Go eWallet"],
  "rules": [
    {
      "id": "touchngo.cashin-dup.v1",
      "priority": 400,
      "match": { "title": "Cash In Successful" },
      "direction": "info"
    },
    {
      "id": "touchngo.non-money.v1",
      "priority": 390,
      "match": {
        "title": "points!$|^Travel eSIM purchase successful$|^Payment to |^Mobile prepaid top up$|^LPR parking payment is successful$"
      },
      "direction": "info",
      "confidence": "none"
    },
    {
      "id": "touchngo.kaching-review.v1",
      "priority": 380,
      "match": { "title": "^Ka-ching! Incoming Money", "body": "received from" },
      "direction": "info",
      "confidence": "none"
    },
    {
      "id": "touchngo.toll.v1",
      "priority": 370,
      "match": { "title": "^Successful Toll Payment$" },
      "direction": "out",
      "extract": {
        "amount": "(?:RM|MYR)\\s?(?<amount>[\\d,]+\\.?\\d{0,2})",
        "counterparty": { "pattern": "(?<counterparty>Toll)", "source": "title" }
      }
    },
    {
      "id": "touchngo.received-title.v1",
      "priority": 360,
      "match": { "title": "^You.*received money" },
      "direction": "in",
      "extract": {
        "amount": "(?:RM|MYR)\\s?(?<amount>[\\d,]+\\.?\\d{0,2})",
        "counterparty": "^(?:.*received from |(?=.* has transferred))(?<counterparty>.+?)(?: has transferred| for|\\.|$)"
      }
    },
    {
      "id": "touchngo.sent-title.v1",
      "priority": 350,
      "match": { "title": "^Payment To:|^DuitNow Payment to " },
      "direction": "out",
      "extract": {
        "amount": "(?:RM|MYR)\\s?(?<amount>[\\d,]+\\.?\\d{0,2})",
        "counterparty": { "pattern": "^(?:Payment To:|DuitNow Payment to )\\s?(?<counterparty>.+)$", "source": "title" }
      }
    },
    {
      "id": "touchngo.parking.v1",
      "priority": 340,
      "match": { "title": "^Parking Payment Successful" },
      "direction": "out",
      "extract": {
        "amount": "(?:RM|MYR)\\s?(?<amount>[\\d,]+\\.?\\d{0,2})",
        "counterparty": "paid for (?<counterparty>Parking.*?)(?:\\.|$)"
      }
    },
    {
      "id": "touchngo.received-body.v1",
      "priority": 330,
      "match": { "body": "received from|has transferred" },
      "direction": "in",
      "extract": {
        "amount": "(?:RM|MYR)\\s?(?<amount>[\\d,]+\\.?\\d{0,2})",
        "counterparty": "^(?:.*received from |(?=.* has transferred))(?<counterparty>.+?)(?: has transferred| for|\\.|$)"
      }
    },
    {
      "id": "touchngo.sent-body.v1",
      "priority": 320,
      "match": {
        "body": "you have paid|has been deducted|deducted from your|successfully transferred|toll payment|parking"
      },
      "direction": "out",
      "extract": {
        "amount": "(?:RM|MYR)\\s?(?<amount>[\\d,]+\\.?\\d{0,2})",
        "counterparty": "(?:transferred (?:RM|MYR)\\s?[\\d,.]+ to|transferred to|paid (?:RM|MYR)\\s?[\\d,.]+ (?:to|at|for)|paid (?:to|at|for)|at)\\s?(?<counterparty>.+?)(?:\\.(?= (?:REF|Merchant)\\b|$)|$)"
      }
    },
    {
      "id": "touchngo.unmatched.v1",
      "priority": -100,
      "match": { "title": ".*" },
      "direction": "info",
      "confidence": "none"
    }
  ]
}