Skip to content

xano-community/open-banking-aggregator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Open Banking Aggregator (Xano module)

Normalize account and transaction data from Plaid, MX, and Finicity into a single, consistent schema you can query in one place — no more per-provider field-name spaghetti in your business logic.

Drop this module into any Xano workspace. It ships two tables and a small public function surface; you feed it raw provider payloads (from your existing Plaid/MX/Finicity calls) and it stores canonical, de-duplicated rows.

What you get

Tables

Table Purpose
oba_account One canonical row per account, keyed by provider:external_account_id (unique). Normalized type (depository/credit/loan/investment/other), balances, currency.
oba_transaction One canonical row per transaction, keyed by provider:external_transaction_id (unique). Signed provider amounts are split into a positive amount + direction (debit/credit).

Public function surface (call from any XanoScript via function.run)

Function What it does
oba_normalize_account Pure transform: raw provider account → canonical account object.
oba_normalize_transaction Pure transform: raw provider transaction → canonical transaction object.
oba_ingest_accounts Normalize + idempotently upsert a batch of accounts.
oba_ingest_transactions Normalize + idempotently upsert a batch of transactions, linking each to its account.
oba_list_transactions Unified, filtered, paginated query across all providers.

HTTP endpoints (API group open-banking-aggregator)

Method Path Wraps
POST /accounts/ingest oba_ingest_accounts
GET /accounts list oba_account
POST /transactions/ingest oba_ingest_transactions
GET /transactions oba_list_transactions

Install

Option A — Ask Claude Code

With the Xano MCP enabled, paste:

Install the module at https://github.com/xano-community/open-banking-aggregator into my Xano workspace.

Option B — Xano CLI

git clone https://github.com/xano-community/open-banking-aggregator.git
cd open-banking-aggregator
xano workspace push backend -w <your-workspace-id>

Usage

Normalization is provider-aware. You pass the raw payload exactly as the provider returns it plus a provider discriminator:

// After you fetch accounts from Plaid (or MX / Finicity):
function.run "oba_ingest_accounts" {
  input = {
    provider: "plaid",
    accounts: $plaid_accounts_get.accounts,   // the raw array from /accounts/get
    item_id:  $plaid_item_id,
    owner_ref: $auth.id
  }
} as $ingest

// Later, query everything in one normalized shape:
function.run "oba_list_transactions" {
  input = { direction: "debit", from: $start, to: $end }
} as $spending

Field mapping reference

Canonical Plaid MX Finicity
external_account_id account_id guid id
current_balance balances.current balance balance
available_balance balances.available available_balance
transaction amount/direction sign of amount (+ = debit) type (DEBIT/CREDIT) sign of amount (− = debit)
transaction posted_at date date postedDate (epoch s)

Feeding it (optional companion integrations)

This module is self-contained — it only needs the raw provider JSON. If you also installed the Xano community integrations, they're natural feeders:

Pulling from an external warehouse (advanced)

If your normalized data already lives in an external SQL store, you can skip the HTTP ingest and feed rows from a direct query, then pass them to the normalize/ingest functions:

db.external.postgres.direct_query {
  connection_string = $env.WAREHOUSE_PG_URL
  sql = "SELECT raw_json FROM plaid_accounts WHERE synced = false"
  response_type = "list"
} as $rows

License

MIT — see LICENSE.

About

Normalize account and transaction data from Plaid, MX, and Finicity into one consistent schema, so your business logic reads a single canonical shape instead of three different provider formats.

Topics

Resources

License

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages