Plaid
Connect bank and credit-card accounts via Plaid Link. Transactions, accounts, and merchants land as typed `financial.*` nodes with the edges that make money-movement graph-traversable.
Plaid
Bank + card transactions → `financial.*` nodes with money-movement edges.
The Plaid connector ingests transaction history from bank, credit card, and investment accounts via Plaid Link. The flow is delegate-to-Plaid: you authenticate with your bank inside Plaid's UI, and Oxagen never sees the bank credentials — Plaid exchanges that auth for a long-lived access_token that the worker uses to pull cursor-paged transaction deltas.
Mapping is the same five-node-type shape used by the Financial Goals work: accounts, transactions, and merchants are first-class nodes with the edges between them that make money-movement queryable.
What gets ingested
| Source | Node type | Properties |
|---|---|---|
| Account | financial.account | plaid_account_id, name, mask, type, subtype |
| Transaction | financial.transaction | plaid_transaction_id, amount, iso_currency_code, date, category, pfc_primary, pfc_detailed |
| Merchant | financial.merchant | name (normalized), plaid_merchant_id |
| Edge | Direction | Meaning |
|---|---|---|
posted_to | Account → Transaction | Where the transaction landed |
billed_by | Merchant → Transaction | Who charged it |
funded_by | Transaction → Account | Reverse of posted_to |
paid_to | Transaction → Merchant | Reverse of billed_by |
counterpart_of | Transaction ↔ Transaction | Links transfer pairs across accounts in the same workspace (e.g. wire-out + wire-in within ±3 days, opposite-sign amounts of the same magnitude). Reads as "one money move" instead of two unrelated events. |
Removed transactions (Plaid issued a correction) are tombstoned via properties.plaid_removed = true rather than hard-deleted — append-only audit posture.
Real use cases
- Categorize spend across accounts —
MATCH (m:financial.merchant)-[:billed_by]->(t:financial.transaction) WHERE t.date >= date() - duration('P30D')groups every transaction by merchant across every connected account in one query. - Cross-domain edges — pair with the BigQuery connector and a vendor CSV: stamp
vendor_ofedges fromfinancial.merchantto existingorganizationnodes so "every dollar we paid to Acme" is one traversal. - Reconcile wires — the
counterpart_ofheuristic links wire-out / wire-in pairs automatically; downstream agents can flag unmatched transfers as anomalies.
Settings
| Key | Type | Default | Description |
|---|---|---|---|
backfill_days | number | 730 | How far back to pull transaction history. Plaid supports up to 24 months by default. |
Authentication
Plaid uses its own OAuth-like flow (Plaid Link), not raw OAuth 2.0. The connection wizard pops the Plaid Link iframe; you select your bank, authenticate there, and Plaid returns a short-lived public_token that Oxagen exchanges server-side for an access_token. The access token is encrypted at rest; refresh is handled by Plaid (the token doesn't expire for normal usage).
Cost notes
Plaid charges per institution-month and per transaction. The connector cursor-pages /transactions/sync for incremental deltas, so the per-sync cost is bounded by what actually changed — not the size of your history. The deliberate omission of LLM extraction (transactions are already structured) keeps Oxagen's per-sync embedding cost flat.
Linear
Sync Linear issues, projects, milestones, initiatives, customers, and status updates into the workspace knowledge graph. The connector cross-references the code graph and infers product features from issue text.
BigQuery
Ingest any Google BigQuery query result into the workspace knowledge graph as typed nodes, with incremental delta loads and cross-domain edges to existing entities from other connectors.