Plaid gives you a full set of transactions when an Item is first linked (initial fetch), and after that provides incremental updates — delivered via Plaid webhooks and retrievable efficiently with the /transactions/sync endpoint.
Implementation quick-steps (practical, one-shot view):
User links account with Plaid Link → exchange public_token for access_token. (Initial data pull.)
Call /transactions/sync (or older /transactions/get) to fetch the initial history (up to 24 months). Save the cursor returned by /transactions/sync.
Configure and receive Plaid webhooks (Transactions webhooks). When a webhook arrives indicating new/updated transactions, call /transactions/sync with your saved cursor to fetch only the changes.
Keep item/account health checks and handle error webhooks (relinking, MFA, consent issues).
How often Plaid updates data (what “in theory once” probably meant):
Frequency depends on the financial institution. New/updated transactions are typically extracted about 1–4 times per day for most institutions — not guaranteed real-time. Account balances in regularly updating products typically update about once a day. Expect variation by bank and account type.
Business accounts and “near-real-time”:
Plaid has released business-focused transaction features (Transactions for Business) to improve business-specific categorization and visibility; it increases timeliness and business metadata but still depends on the institution’s feed/performance. Don’t assume per-minute realtime unless you have a direct bank/processor partnership that supports webhooks for every transaction.
Testing & sandbox:
Use Plaid Sandbox to simulate transaction updates and test webhooks and cursor behavior before production.