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
- Click Copy JSON above.
- Open PayPing Lite on your phone.
- Open the Bank Rules tab.
- 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 GitHubRaw 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"
}
]
}