<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: John Frandsen</title>
    <description>The latest articles on DEV Community by John Frandsen (@johnfrandsen).</description>
    <link>https://dev.to/johnfrandsen</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4007231%2Fa937353d-df18-4018-98c4-1ea581821a38.png</url>
      <title>DEV Community: John Frandsen</title>
      <link>https://dev.to/johnfrandsen</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/johnfrandsen"/>
    <language>en</language>
    <item>
      <title>Why You Cant Just Call a Bank API: Open Banking Authentication Explained for Developers</title>
      <dc:creator>John Frandsen</dc:creator>
      <pubDate>Thu, 16 Jul 2026 00:52:34 +0000</pubDate>
      <link>https://dev.to/johnfrandsen/why-you-cant-just-call-a-bank-api-open-banking-authentication-explained-for-developers-5e9a</link>
      <guid>https://dev.to/johnfrandsen/why-you-cant-just-call-a-bank-api-open-banking-authentication-explained-for-developers-5e9a</guid>
      <description>&lt;p&gt;If you've ever tried to hit a bank's API directly and hit a wall of certificates, registration forms, and regulatory compliance documents — you're not alone. Open banking APIs promise programmatic access to financial data, but the authentication layer is where most developers get stuck.&lt;/p&gt;

&lt;p&gt;Here's what's actually going on, and why most teams end up using an aggregator instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three layers of open banking auth
&lt;/h2&gt;

&lt;p&gt;Open banking authentication isn't one thing — it's three things stacked on top of each other:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. eIDAS / QWAC certificates (the regulatory gate)
&lt;/h3&gt;

&lt;p&gt;If you want to talk to a bank's API directly in the EU/UK, you need an &lt;strong&gt;eIDAS Qualified Certificate&lt;/strong&gt; (specifically a QWAC — Qualified Website Authentication Certificate). This proves you're a regulated Third Party Provider (TPP).&lt;/p&gt;

&lt;p&gt;The cost? Anywhere from €2,000–€10,000 per year, depending on the issuer. Plus the regulatory registration process, which can take months.&lt;/p&gt;

&lt;p&gt;This is the single biggest barrier for indie developers and small companies. You can't just &lt;code&gt;curl&lt;/code&gt; a bank endpoint — the TLS handshake requires a client certificate the bank recognizes.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. OAuth 2.0 + SCA (the user consent flow)
&lt;/h3&gt;

&lt;p&gt;Once you're past the certificate gate, every bank interaction starts with an &lt;strong&gt;OAuth 2.0 Authorization Code flow&lt;/strong&gt; with &lt;strong&gt;Strong Customer Authentication (SCA)&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /authorize?
  response_type=code&amp;amp;
  client_id=your_client_id&amp;amp;
  redirect_uri=https://yourapp.com/callback&amp;amp;
  scope=accounts&amp;amp;
  state=random_state
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The user is redirected to their bank, authenticates (2FA — usually a push notification or SMS code), and consents to sharing specific accounts. You get back an authorization code, exchange it for access + refresh tokens, and use the access token for subsequent API calls.&lt;/p&gt;

&lt;p&gt;Each bank implements this slightly differently. The Open Banking Standard in the UK enforces a consistent flow, but continental European banks vary widely.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Bank-specific API quirks (the implementation tax)
&lt;/h3&gt;

&lt;p&gt;Even with certificates and OAuth sorted, each bank's API has its own:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Response formats&lt;/strong&gt; (some use Berlin Group NextGenPSD2, some use STET, some use the UK Open Banking standard)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pagination schemes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transaction ID formats&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rate limits&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Error response structures&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sandbox vs production differences&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is why companies like Plaid, Tink, TrueLayer, and GoCardless/Nordigen exist — they abstract away all three layers behind a single, consistent API.&lt;/p&gt;

&lt;h2&gt;
  
  
  The aggregator model
&lt;/h2&gt;

&lt;p&gt;An aggregator (also called an AISP — Account Information Service Provider) holds the eIDAS certificate, maintains connections to hundreds of banks, and exposes a unified REST API:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="c1"&gt;# One API key, no certificates
&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer obi_your_api_key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.open-banking.io/v1/accounts/{account_id}/transactions&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;transactions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You authenticate with a simple &lt;strong&gt;bearer token&lt;/strong&gt;. The aggregator handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The eIDAS certificate and TPP registration&lt;/li&gt;
&lt;li&gt;The OAuth + SCA consent redirect&lt;/li&gt;
&lt;li&gt;Normalizing 3,000+ bank APIs into one consistent schema&lt;/li&gt;
&lt;li&gt;Handling token refresh, reconnection, and rate limits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The trade-off: you pay per API call or a monthly fee, and you trust the aggregator with credentials/access to your financial data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Certificate-free aggregators: a newer option
&lt;/h2&gt;

&lt;p&gt;Most aggregators still require you to go through their onboarding, which can involve KYC, compliance checks, and minimum volume commitments. But a newer category — &lt;strong&gt;certificate-free aggregators&lt;/strong&gt; — strips even that down.&lt;/p&gt;

&lt;p&gt;Services like &lt;a href="https://open-banking.io" rel="noopener noreferrer"&gt;open-banking.io&lt;/a&gt; provide a bearer-token REST API where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No eIDAS certificate is needed (the aggregator holds it)&lt;/li&gt;
&lt;li&gt;No minimum volume or enterprise contract&lt;/li&gt;
&lt;li&gt;You sign up, get an API key, and start calling&lt;/li&gt;
&lt;li&gt;Pricing is usage-based (from a few euros/month)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes it viable for hobby projects, personal finance dashboards, and SMB integrations that can't justify the cost of a full enterprise aggregator contract.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to use what
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;th&gt;Effort&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Direct bank API (own eIDAS cert)&lt;/td&gt;
&lt;td&gt;€2k–€10k/yr + regulatory work&lt;/td&gt;
&lt;td&gt;Very high&lt;/td&gt;
&lt;td&gt;Banks, large fintechs, regulated TPPs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise aggregator (Plaid, Tink, etc.)&lt;/td&gt;
&lt;td&gt;Negotiated, often $500+/mo&lt;/td&gt;
&lt;td&gt;Medium (KYC + integration)&lt;/td&gt;
&lt;td&gt;Funded startups, established fintechs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Certificate-free aggregator&lt;/td&gt;
&lt;td&gt;€3–€50/mo, usage-based&lt;/td&gt;
&lt;td&gt;Low (API key + REST calls)&lt;/td&gt;
&lt;td&gt;Indie devs, SMBs, self-hosted tools&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Practical example: reading transactions
&lt;/h2&gt;

&lt;p&gt;Here's what the full flow looks like with a certificate-free aggregator:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;BASE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.open-banking.io/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;HEADERS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer obi_your_api_key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# 1. List available institutions
&lt;/span&gt;&lt;span class="n"&gt;institutions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/institutions?country=DE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;HEADERS&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# 2. Create an authorization link (user consents via their bank)
&lt;/span&gt;&lt;span class="n"&gt;auth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;institution_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;institutions&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;redirect_uri&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://yourapp.com/callback&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;HEADERS&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# User visits auth["link"], authenticates with their bank, returns to your redirect_uri
&lt;/span&gt;
&lt;span class="c1"&gt;# 3. Fetch transactions (after the user completes consent)
&lt;/span&gt;&lt;span class="n"&gt;account_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;account_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;txns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/accounts/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;account_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/transactions&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;HEADERS&lt;/span&gt;
&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;txns&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;transactions&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;date&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; | &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;amount&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="mf"&gt;10.2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; | &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No certificates. No regulatory paperwork. One HTTP library.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bottom line
&lt;/h2&gt;

&lt;p&gt;The "open" in open banking refers to the regulatory &lt;em&gt;mandate&lt;/em&gt; for banks to open their APIs — not to those APIs being easy to use. The authentication complexity is intentional: it protects users. But it also creates a natural market for aggregators that absorb that complexity.&lt;/p&gt;

&lt;p&gt;If you're building a fintech product with funding and regulatory backing, going direct with your own eIDAS certificate makes sense. For everyone else — indie developers, small businesses, self-hosted personal finance tools — an aggregator (especially a certificate-free one) is almost always the right call.&lt;/p&gt;

&lt;p&gt;The key is understanding what you're paying for: not just API access, but the entire regulatory and integration layer that makes that access possible.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I build &lt;a href="https://open-banking.io" rel="noopener noreferrer"&gt;open-banking.io&lt;/a&gt; — a certificate-free open banking API for EU/UK bank data. No eIDAS certificates, no minimums, just a bearer token and REST calls.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
    </item>
    <item>
      <title>Nordigen Alternatives in 2026: A Developer's Guide to European Bank Data APIs</title>
      <dc:creator>John Frandsen</dc:creator>
      <pubDate>Fri, 10 Jul 2026 10:30:14 +0000</pubDate>
      <link>https://dev.to/johnfrandsen/nordigen-alternatives-in-2026-a-developers-guide-to-european-bank-data-apis-3pie</link>
      <guid>https://dev.to/johnfrandsen/nordigen-alternatives-in-2026-a-developers-guide-to-european-bank-data-apis-3pie</guid>
      <description>&lt;p&gt;Nordigen (now part of GoCardless) pioneered free PSD2 account information services in Europe. But as the open banking landscape matures in 2026, developers and small teams are evaluating alternatives for good reasons: pricing changes after acquisition, rate limits on free tiers, and the question of whether you need an aggregator at all versus connecting directly to bank APIs.&lt;/p&gt;

&lt;p&gt;This guide compares the main Nordigen alternatives for accessing European bank account data, with a focus on what matters to developers and small businesses: cost, certificate requirements, bank coverage, and self-hosting options.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Look Beyond Nordigen?
&lt;/h2&gt;

&lt;p&gt;Nordigen was acquired by GoCardless in 2022, and since then the product has been integrated into the GoCardless platform. For developers who originally chose Nordigen for its free, developer-friendly API, several shifts have prompted a search for alternatives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pricing uncertainty:&lt;/strong&gt; The free tier has become more restrictive, and pricing for production use is less transparent than it was as an independent company.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aggregator dependency:&lt;/strong&gt; Every request routes through Nordigen's infrastructure. If their service degrades, your application degrades.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data sovereignty:&lt;/strong&gt; Some teams prefer to hold bank API connections directly rather than routing through a third party.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Key Question: Aggregator or Direct API?
&lt;/h2&gt;

&lt;p&gt;Before comparing specific alternatives, it's worth understanding the two architectural approaches:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aggregators&lt;/strong&gt; (Nordigen, TrueLayer, Tink, Salt Edge) provide a unified API that abstracts away individual bank APIs. You integrate once and get access to hundreds of banks. The trade-off is an additional layer between you and the bank, plus per-API-call costs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Direct API / Self-hosted&lt;/strong&gt; approaches let you connect to bank APIs yourself using PSD2 open banking standards. This eliminates the aggregator middleman and per-call fees but requires you to handle bank API differences, authentication flows, and — traditionally — an eIDAS QWAC certificate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nordigen Alternatives Compared
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. TrueLayer
&lt;/h3&gt;

&lt;p&gt;TrueLayer is the most prominent Nordigen competitor in the UK and European markets. They offer a polished API with strong documentation and broad bank coverage.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Coverage:&lt;/strong&gt; 1,500+ banks across Europe&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing:&lt;/strong&gt; Free sandbox; production pricing is usage-based, starting around £0.10-0.30 per successful API call depending on endpoint&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Certificate required:&lt;/strong&gt; No — TrueLayer handles PSD2 compliance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best for:&lt;/strong&gt; Teams that want a premium managed API and can absorb per-call costs&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Tink (Visa)
&lt;/h3&gt;

&lt;p&gt;Tink was acquired by Visa in 2022 and offers account aggregation, payment initiation, and data enrichment. Their API is well-regarded for data quality and categorization features.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Coverage:&lt;/strong&gt; 6,000+ banks globally (including non-PSD2 markets)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing:&lt;/strong&gt; Enterprise-focused; limited free tier&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Certificate required:&lt;/strong&gt; No — Tink handles compliance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best for:&lt;/strong&gt; Larger teams needing enrichment and cross-market coverage&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Salt Edge
&lt;/h3&gt;

&lt;p&gt;Salt Edge has been operating since 2013 and covers both European PSD2 banks and global banks outside the PSD2 framework.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Coverage:&lt;/strong&gt; 500+ banks in Europe, plus global coverage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing:&lt;/strong&gt; Tiered plans; developer sandbox available&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Certificate required:&lt;/strong&gt; No&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best for:&lt;/strong&gt; Teams needing coverage outside Europe alongside PSD2 banks&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. GoCardless (Formerly Nordigen)
&lt;/h3&gt;

&lt;p&gt;After acquiring Nordigen, GoCardless integrated the open banking data API into their broader payment platform. The Nordigen API still works but is increasingly bundled with payment initiation products.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Coverage:&lt;/strong&gt; 2,300+ banks in 31 European countries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing:&lt;/strong&gt; Free tier still available (with limits); paid tiers bundled with GoCardless payment products&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Certificate required:&lt;/strong&gt; No&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best for:&lt;/strong&gt; Teams already using GoCardless for direct debit payments&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. open-banking.io (Cert-Free Direct API)
&lt;/h3&gt;

&lt;p&gt;For developers who want to connect to European bank APIs directly without an aggregator — and without the eIDAS certificate cost — open-banking.io provides a PSD2-compliant API layer that handles the bank connection protocol without requiring you to purchase a €2,000-6,000 annual QWAC certificate.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Coverage:&lt;/strong&gt; European banks supporting Berlin Group NextGenPSD2 or UK Open Banking standards&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing:&lt;/strong&gt; No per-call fees; self-hostable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Certificate required:&lt;/strong&gt; No — the cert-free architecture is the core differentiator&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best for:&lt;/strong&gt; Developers, self-hosters, and small businesses that want direct bank connections without aggregator markups or certificate overhead&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Comparison Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Nordigen/GoCardless&lt;/th&gt;
&lt;th&gt;TrueLayer&lt;/th&gt;
&lt;th&gt;Tink&lt;/th&gt;
&lt;th&gt;open-banking.io&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pricing model&lt;/td&gt;
&lt;td&gt;Free tier + usage&lt;/td&gt;
&lt;td&gt;Per-call&lt;/td&gt;
&lt;td&gt;Enterprise&lt;/td&gt;
&lt;td&gt;No per-call fees&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Certificate needed&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-hostable&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bank coverage&lt;/td&gt;
&lt;td&gt;2,300+ EU&lt;/td&gt;
&lt;td&gt;1,500+ EU/UK&lt;/td&gt;
&lt;td&gt;6,000+ global&lt;/td&gt;
&lt;td&gt;EU PSD2 banks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data enrichment&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Advanced&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Payment initiation&lt;/td&gt;
&lt;td&gt;Yes (via GoCardless)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Read-only focused&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How to Choose
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Choose an aggregator (TrueLayer, Tink, Salt Edge)&lt;/strong&gt; if you need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Maximum bank coverage with a single integration&lt;/li&gt;
&lt;li&gt;Data enrichment (merchant identification, categorization)&lt;/li&gt;
&lt;li&gt;Payment initiation alongside account data&lt;/li&gt;
&lt;li&gt;A managed service with SLAs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Choose a direct/self-hosted approach (open-banking.io)&lt;/strong&gt; if you need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No per-call or per-account fees&lt;/li&gt;
&lt;li&gt;Full control over your data pipeline&lt;/li&gt;
&lt;li&gt;Self-hosting on your own infrastructure&lt;/li&gt;
&lt;li&gt;Read-only account information without payment initiation complexity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Stay with Nordigen/GoCardless&lt;/strong&gt; if you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are already integrated and the API meets your needs&lt;/li&gt;
&lt;li&gt;Use GoCardless for payments and want unified billing&lt;/li&gt;
&lt;li&gt;Need the free tier for low-volume use&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Certificate Question
&lt;/h2&gt;

&lt;p&gt;The single biggest barrier to direct PSD2 API access has been the eIDAS QWAC (Qualified Website Authentication Certificate) requirement. These certificates cost €2,000-6,000 per year and require an extended validation process with an eIDAS-qualified trust service provider.&lt;/p&gt;

&lt;p&gt;This is precisely why aggregators like Nordigen gained traction: they absorb the certificate cost and complexity. The emerging alternatives — including cert-free approaches — aim to remove this barrier so that individual developers and small businesses can access bank data directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The Nordigen alternative landscape in 2026 is healthy and diverse. Managed aggregators like TrueLayer and Tink offer convenience and enrichment at a per-call cost. Direct API approaches like open-banking.io offer independence and cost predictability for teams willing to handle integration themselves. The right choice depends on your team size, budget, and whether you value managed convenience over architectural control.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What's your experience with Nordigen or other open banking APIs? I'd love to hear about your use case in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>api</category>
    </item>
    <item>
      <title>How to Sync Bank Transactions with Open Banking APIs (2026 Guide)</title>
      <dc:creator>John Frandsen</dc:creator>
      <pubDate>Thu, 09 Jul 2026 21:55:22 +0000</pubDate>
      <link>https://dev.to/johnfrandsen/how-to-sync-bank-transactions-with-open-banking-apis-2026-guide-57n1</link>
      <guid>https://dev.to/johnfrandsen/how-to-sync-bank-transactions-with-open-banking-apis-2026-guide-57n1</guid>
      <description>&lt;p&gt;Most open banking tutorials stop at "make a GET request." In production, you need consent flows, token refresh, pagination across thousands of transactions, deduplication, and rate-limit handling. This guide walks through the full sync pipeline — what actually breaks at 3am when your cron job fires.&lt;/p&gt;

&lt;h2&gt;
  
  
  The sync lifecycle
&lt;/h2&gt;

&lt;p&gt;A real bank-data sync has four phases:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Onboard&lt;/strong&gt;: User consents to read-only access → you get a consent token&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Initial fetch&lt;/strong&gt;: Pull all historical transactions (can be thousands)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Incremental sync&lt;/strong&gt;: Poll for new transactions on a schedule&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token refresh&lt;/strong&gt;: Consent expires (90 days default under PSD2) → re-authorize&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Choosing a provider
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Cert needed?&lt;/th&gt;
&lt;th&gt;Pricing model&lt;/th&gt;
&lt;th&gt;Bank coverage&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Plaid&lt;/td&gt;
&lt;td&gt;Per-region&lt;/td&gt;
&lt;td&gt;Per-item ($0.20-0.50/mo)&lt;/td&gt;
&lt;td&gt;12,000+ globally&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TrueLayer&lt;/td&gt;
&lt;td&gt;Yes (eIDAS QWAC)&lt;/td&gt;
&lt;td&gt;Volume tiers&lt;/td&gt;
&lt;td&gt;1,500+ EU/UK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tink&lt;/td&gt;
&lt;td&gt;Yes (eIDAS QWAC)&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;td&gt;3,400+ EU/UK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GoCardless (Bank Account Data)&lt;/td&gt;
&lt;td&gt;No (they hold the cert)&lt;/td&gt;
&lt;td&gt;Free tier → paid&lt;/td&gt;
&lt;td&gt;1,500+ EU/UK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;open-banking.io&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;~€3/mo flat&lt;/td&gt;
&lt;td&gt;2,500+ EU/UK&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Disclosure: I maintain open-banking.io. The rest of this guide is vendor-neutral — pick whichever fits your stack.&lt;/p&gt;

&lt;p&gt;The eIDAS QWAC certificate is the hidden gatekeeper. It costs €3,000-15,000/year, requires an annual audit, and takes weeks to obtain. If you're a solo developer or small team, providers that absorb the certificate (GoCardless, open-banking.io) save you that entire process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: The consent flow
&lt;/h2&gt;

&lt;p&gt;All PSD2 Account Information Service (AIS) providers use a similar OAuth-style redirect:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// 1. Redirect user to the bank's consent page&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;authUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getAuthUrl&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;redirect_uri&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://yourapp.com/callback&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;accounts transactions&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;access_valid_for_days&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;90&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// User clicks → bank asks "Allow YourApp to read your transactions?"&lt;/span&gt;
&lt;span class="c1"&gt;// User approves → redirects back with a code&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The consent token you receive is &lt;strong&gt;time-limited&lt;/strong&gt; (PSD2 mandates max 180 days, most default to 90). Store the expiry date — you'll need it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Fetch accounts
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getAccounts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;consentToken&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;API_BASE&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/accounts`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Authorization&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;consentToken&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;accounts&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// [{ id, iban, name, currency, balance }]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3: Sync transactions (the hard part)
&lt;/h2&gt;

&lt;p&gt;This is where tutorials end and production begins:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;syncTransactions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;accountId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;consentToken&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lastSyncCursor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;allTransactions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;cursor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;lastSyncCursor&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;hasMore&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hasMore&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;API_BASE&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/accounts/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;accountId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/transactions?cursor=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Authorization&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;consentToken&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;429&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// Rate limited — back off&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;retryAfter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Retry-After&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;retryAfter&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;allTransactions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;transactions&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nx"&gt;cursor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;next_cursor&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;hasMore&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;has_more&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Respect rate limits between pages&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;transactions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;allTransactions&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;nextCursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;cursor&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Deduplication
&lt;/h3&gt;

&lt;p&gt;Banks will return overlapping transactions between syncs. The cursor handles most of this, but edge cases exist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A pending transaction settles (bookingDate changes, transactionId may change)&lt;/li&gt;
&lt;li&gt;A transaction is reversed and re-booked&lt;/li&gt;
&lt;li&gt;The bank back-dates a transaction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Store a composite key: &lt;code&gt;{bankTransactionId, bookingDate, amount}&lt;/code&gt;. If the bank provides a &lt;code&gt;transactionId&lt;/code&gt; or &lt;code&gt;entryReference&lt;/code&gt;, prefer that. If not, hash the three fields above.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;dedupeKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;transactionId&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;entryReference&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bookingDate&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;counterpartyIban&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Token refresh
&lt;/h2&gt;

&lt;p&gt;PSD2 consent expires. You cannot silently refresh it — the user must re-authorize. Design for this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;checkConsent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;consentToken&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;API_BASE&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/accounts`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Authorization&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;consentToken&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;401&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;403&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Consent expired or revoked&lt;/span&gt;
    &lt;span class="nf"&gt;notifyUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Your bank connection needs reauthorization&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;valid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;needsReauth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;valid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Send the notification early (7 days before expiry). Users who see "reconnect your bank" at the moment of need will do it. Users who see it when they're not using your app will ignore it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Production checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rate limits&lt;/strong&gt;: Most providers allow 4-15 requests/minute per consent. Batch where possible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Idempotency&lt;/strong&gt;: Use the bank's &lt;code&gt;transactionId&lt;/code&gt; as your dedup key, not your own generated ID.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pagination&lt;/strong&gt;: Some banks return 100/page, others 500. Always respect the &lt;code&gt;has_more&lt;/code&gt; flag.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Webhooks&lt;/strong&gt;: Some providers offer transaction webhooks (push instead of poll). Use them if available — they reduce API calls by 90%+.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error handling&lt;/strong&gt;: Banks go down. The PSD2 network is 6,000+ banks — some will be unavailable. Retry with exponential backoff, but don't block the entire sync on one failing account.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data freshness&lt;/strong&gt;: Transactions can appear 1-3 days after the actual payment (pending → booked). Don't display "real-time" if you're polling daily.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What breaks in production
&lt;/h2&gt;

&lt;p&gt;The three things that caused the most production incidents in my experience:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Consent expiry cascade&lt;/strong&gt;: Multiple users' consents expire on the same day (if you onboarded them in a batch). Your reauth notification queue overflows. Stagger onboarding or add jitter to expiry notifications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Transaction ID instability&lt;/strong&gt;: Some banks change the &lt;code&gt;transactionId&lt;/code&gt; when a pending transaction settles. Your dedup fails and you get duplicates. Always store both pending and booked versions, and reconcile by matching on &lt;code&gt;amount + date + counterparty&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rate limit headers&lt;/strong&gt;: Some providers return &lt;code&gt;X-RateLimit-Remaining&lt;/code&gt; in headers, not the response body. If you ignore headers, you'll get 429s that seem random.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;The open banking APIs are powerful, but the production details — consent lifecycle, deduplication, rate limiting — are where most integrations stall. The providers above all expose similar REST APIs, so the patterns in this guide apply regardless of which one you choose.&lt;/p&gt;

&lt;p&gt;If you're building something with bank data and want a certificate-free starting point, open-banking.io (which I maintain) offers a simple server-to-server API at around €3/month — but the architecture patterns here work with any PSD2 provider.&lt;/p&gt;

</description>
      <category>openbanking</category>
      <category>api</category>
      <category>tutorial</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Self-Hosted Bank Account Aggregation in 2026: After the Nordigen Free Tier Shutdown</title>
      <dc:creator>John Frandsen</dc:creator>
      <pubDate>Thu, 09 Jul 2026 08:59:45 +0000</pubDate>
      <link>https://dev.to/johnfrandsen/self-hosted-bank-account-aggregation-in-2026-after-the-nordigen-free-tier-shutdown-3mdo</link>
      <guid>https://dev.to/johnfrandsen/self-hosted-bank-account-aggregation-in-2026-after-the-nordigen-free-tier-shutdown-3mdo</guid>
      <description>&lt;p&gt;If you run &lt;strong&gt;Actual Budget&lt;/strong&gt;, &lt;strong&gt;Firefly III&lt;/strong&gt;, &lt;strong&gt;Beancount&lt;/strong&gt;, or any other self-hosted finance tool, you probably woke up one morning in mid-2025 to find your free bank-data pipeline broken. GoCardless quietly killed the Nordigen free tier, and with it the easiest way for hobbyists and self-hosters to pull live transactions into their own infrastructure.&lt;/p&gt;

&lt;p&gt;This is the post-mortem and the way forward. I'll cover what actually happened, why the obvious "just get your own PSD2 certificate" fix is a trap for individuals, and the realistic cert-free options that still work for self-hosted setups in 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happened: Nordigen → GoCardless → no more free tier
&lt;/h2&gt;

&lt;p&gt;Nordigen was the darling of the self-hosted finance community. Founded in Latvia, it offered a &lt;strong&gt;free Open Banking API&lt;/strong&gt; covering 2,300+ European banks under PSD2. For years it was &lt;em&gt;the&lt;/em&gt; recommended backend for Firefly III's Nordigen importer, for Actual Budget's sync, and for countless Beancount importers and personal scripts.&lt;/p&gt;

&lt;p&gt;In 2022 GoCardless acquired Nordigen. For a while the free tier survived as a "free forever" loss-leader on top of GoCardless's paid Instant Bank Pay product. Then, through 2025, the free plan was wound down: usage caps tightened, the self-service signup path degraded, and by mid-2025 new free accounts were effectively closed off and existing ones migrated to paid GoCardless Bank Account Data pricing.&lt;/p&gt;

&lt;p&gt;The community fallout was real. Firefly III's documentation flipped from "use Nordigen, it's free" to warnings that the integration may stop working. Actual Budget users saw broken syncs. Reddit's r/selfhosted and r/FireflyIII filled with "what do I use now?" threads. A whole generation of self-hosters had built on a free tier that was always a marketing budget, not a sustainable product.&lt;/p&gt;

&lt;p&gt;The lesson, painfully learned: &lt;strong&gt;a free tier owned by a publicly-traded payments company is not infrastructure you can build a personal finance stack on.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The real barrier isn't the API — it's the certificate
&lt;/h2&gt;

&lt;p&gt;When the Nordigen free tier died, the obvious-sounding fix was "just become an Account Information Service Provider myself and connect directly to banks." Anyone who looked into it hit the same wall: &lt;strong&gt;eIDAS certificates&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Under PSD2/Open Banking, to connect &lt;em&gt;directly&lt;/em&gt; to a bank's API as a regulated Third Party Provider you need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;QWAC&lt;/strong&gt; (Qualified Website Authentication Certificate) — proves your identity for the TLS connection.&lt;/li&gt;
&lt;li&gt;Often a &lt;strong&gt;QSeal&lt;/strong&gt; certificate — for signing API requests.&lt;/li&gt;
&lt;li&gt;An &lt;strong&gt;AISP registration&lt;/strong&gt; with your national regulator (the FCA in the UK, Finanstilsynet in Denmark, BaFin in Germany, etc.).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The certificates are the killer. They're issued by Qualified Trust Service Providers and they are not cheap. A QWAC from a recognised QTSP runs roughly &lt;strong&gt;€3,000–€15,000 per year&lt;/strong&gt; depending on the issuer, validity period, and whether you need the eIDAS-qualified variant. On top of that you have regulator fees, audit/compliance overhead for some jurisdictions, and the operational pain of renewing and rotating certs.&lt;/p&gt;

&lt;p&gt;For a fintech building a product, that's a cost of doing business. For someone who just wants their Beancount ledger to auto-import their checking account each night, &lt;strong&gt;it's absurd and prohibitive&lt;/strong&gt;. This is the gap Nordigen's free tier filled, and it's the gap that's now open again.&lt;/p&gt;

&lt;p&gt;This is why the answer for self-hosters is almost never "get your own certificate." It's "use a service that already has one, and exposes a clean API on top."&lt;/p&gt;

&lt;h2&gt;
  
  
  The realistic cert-free options for self-hosters in 2026
&lt;/h2&gt;

&lt;p&gt;Here are the paths that actually work today for aggregating your own bank data into self-hosted tooling, ranked from most to least practical.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 1 — A cert-free aggregation API (the Nordigen replacement)
&lt;/h3&gt;

&lt;p&gt;Several regulated providers expose an AIS (Account Information Service) API &lt;strong&gt;without requiring you to hold your own PSD2/eIDAS certificates&lt;/strong&gt;. They're already licensed; you authenticate, consent per bank, and call normalised REST endpoints. This is functionally what Nordigen's free tier did, minus the "free" part — but at price points that make sense for personal use (a few euros per month rather than five-figure annual certs).&lt;/p&gt;

&lt;p&gt;The workflow looks like this regardless of provider:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sign up and get an API key.&lt;/li&gt;
&lt;li&gt;Initiate a consent/redirect flow per bank (standard Open Banking SCA).&lt;/li&gt;
&lt;li&gt;Poll or receive callbacks; pull &lt;code&gt;/accounts&lt;/code&gt;, &lt;code&gt;/accounts/{id}/balances&lt;/code&gt;, &lt;code&gt;/accounts/{id}/transactions&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Map the normalised JSON into your tool's import format.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The big advantage over the free-tier era: these are paid products, which means they're &lt;strong&gt;maintained&lt;/strong&gt;. When a bank changes its API (and they do, constantly), the provider absorbs the breakage instead of your cron job silently failing for two weeks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 2 — Bank-provided CSV/MT940 export + scripted import
&lt;/h3&gt;

&lt;p&gt;The unglamorous fallback that never breaks: most banks offer scheduled statement exports by email or download. You write a small importer (Firefly III has a generic CSV importer; Beancount has &lt;code&gt;bean-extract&lt;/code&gt;; Actual Budget accepts OFX). Costs nothing, needs no third party, and is fully offline-capable.&lt;/p&gt;

&lt;p&gt;The trade-off is that it's manual or semi-manual, format-fragile (every bank's CSV is subtly different), and gives you no normalisation across multiple banks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 3 — Screen-scraping (use with caution)
&lt;/h3&gt;

&lt;p&gt;Some tools still scrape online banking HTML. This is fragile, frequently breaks on bank UI changes, violates many banks' terms of service, and can get your account flagged. I mention it for completeness — for self-hosted personal finance in 2026 it's the option of last resort, not a strategy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why "self-host your own TPP connection" is usually wrong
&lt;/h3&gt;

&lt;p&gt;You &lt;em&gt;can&lt;/em&gt; technically run your own eIDAS-certified TPP infrastructure. A handful of very determined hobbyists do. But the cost/benefit is brutal: thousands of euros a year, regulator paperwork, cert renewal ops, and per-bank integration maintenance — all to avoid a €3/month aggregation API. Unless aggregating bank data is literally your job or your business, this is the wrong layer to self-host.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparison: self-hosted aggregation paths in 2026
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;th&gt;Cert-free?&lt;/th&gt;
&lt;th&gt;Live data?&lt;/th&gt;
&lt;th&gt;Multi-bank normalisation&lt;/th&gt;
&lt;th&gt;Setup effort&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cert-free aggregation API&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~€3–15/mo&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;✅ Yes (refreshed)&lt;/td&gt;
&lt;td&gt;✅ Yes, one schema&lt;/td&gt;
&lt;td&gt;Low–medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bank CSV/MT940 + scripted import&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;✅ N/A&lt;/td&gt;
&lt;td&gt;⚠️ Periodic, manual-ish&lt;/td&gt;
&lt;td&gt;❌ No (per-bank formats)&lt;/td&gt;
&lt;td&gt;Medium (per bank)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Self-hosted TPP (own eIDAS certs)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;€3k–15k/yr + reg fees&lt;/td&gt;
&lt;td&gt;❌ No (you hold certs)&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;✅ Yes (you build it)&lt;/td&gt;
&lt;td&gt;Very high&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Screen-scraping&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;✅ N/A&lt;/td&gt;
&lt;td&gt;⚠️ Fragile&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;Low, but brittle&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For the vast majority of Actual Budget / Firefly III / Beancount users, the first row is the sweet spot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wiring it into your self-hosted stack
&lt;/h2&gt;

&lt;p&gt;The good news is that once you have a normalised JSON feed, plugging it into your tool is straightforward. A minimal pattern for Firefly III:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Fetch transactions from your aggregation API&lt;/span&gt;
curl &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"https://api.example-openbanking.io/v1/accounts/&lt;/span&gt;&lt;span class="nv"&gt;$ACCOUNT_ID&lt;/span&gt;&lt;span class="s2"&gt;/transactions?from=2026-07-01"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-o&lt;/span&gt; /tmp/txns.json

&lt;span class="c"&gt;# 2. Transform → Firefly III's expected schema (jq one-liner sketch)&lt;/span&gt;
jq &lt;span class="s1"&gt;'[.transactions[] | {amount:.transaction.amount, description:.remittanceInformationUnstructured, date:.bookingDate, source:"Checking"}]'&lt;/span&gt; /tmp/txns.json &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /tmp/firefly-import.json

&lt;span class="c"&gt;# 3. POST to the Firefly III API&lt;/span&gt;
curl &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$FIREFLY_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"https://firefly.example.com/api/v1/transactions"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; @/tmp/firefly-import.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Beancount, point &lt;code&gt;bean-extract&lt;/code&gt; or a custom importer at the same JSON. For Actual Budget, the same feed drives its sync endpoint. The point is that a &lt;strong&gt;single normalised API&lt;/strong&gt; replaces a zoo of per-bank scrapers and CSV parsers.&lt;/p&gt;

&lt;p&gt;End-to-end-encrypted options are worth specifically seeking out for self-hosters: a few providers let you hold the decryption keys client-side, so even their servers can't read your transaction data. For anyone self-hosting finance tooling precisely for privacy, that property matters more than saving a couple of euros.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; I maintain &lt;strong&gt;open-banking.io&lt;/strong&gt;, a roughly €3/month cert-free aggregation API with client-held encryption keys — built largely because the Nordigen free tier's disappearance left my own self-hosted setup stranded. I'm flagging it because it's directly on-topic, not as a sales pitch. The options and comparison above stand on their own; pick whichever fits your stack.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Choosing well
&lt;/h2&gt;

&lt;p&gt;A few rules of thumb after living through the Nordigen shutdown:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prefer paid and boring over free and exciting.&lt;/strong&gt; A €3/month service that's a real product outlasts a free tier that's a marketing line item.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check who actually maintains the bank integrations.&lt;/strong&gt; Open Banking APIs break constantly; you want a provider that fixes breakages, not you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decide on privacy up front.&lt;/strong&gt; If you're self-hosting for privacy, don't then hand plaintext transactions to a third party — look for client-side encryption.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep an export path.&lt;/strong&gt; Whatever you choose, make sure you can get your data &lt;em&gt;out&lt;/em&gt; (CSV/JSON export). Vendor lock-in on top of a self-hosted tool defeats the purpose.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;p&gt;The Nordigen free tier is gone and it isn't coming back. The honest options for self-hosted bank account aggregation in 2026 are: pay a small amount for a cert-free aggregation API that's actually maintained, fall back to scripted CSV/MT940 imports, or — for the truly determined and funded — take on eIDAS certificates yourself. For most Actual Budget, Firefly III, and Beancount users, the first of those is the clear winner: it restores exactly what the Nordigen free tier provided, with the bonus that being a paid product means it's treated like real infrastructure rather than a giveaway.&lt;/p&gt;

&lt;p&gt;Your self-hosted finance stack deserves a data pipeline that won't evaporate on a corporate decision. Build accordingly.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If this was useful, I write about Open Banking, PSD2, and practical fintech for self-hosters and small businesses — questions welcome in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>selfhosting</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How to View All Your Bank Accounts in One Place (2026 Guide)</title>
      <dc:creator>John Frandsen</dc:creator>
      <pubDate>Tue, 07 Jul 2026 06:12:23 +0000</pubDate>
      <link>https://dev.to/johnfrandsen/how-to-view-all-your-bank-accounts-in-one-place-2026-guide-4a20</link>
      <guid>https://dev.to/johnfrandsen/how-to-view-all-your-bank-accounts-in-one-place-2026-guide-4a20</guid>
      <description>&lt;p&gt;If you hold accounts at more than one bank — a checking account here, a savings account there, a joint account, a business account, maybe a card from a neobank — you already know the problem: there is no single screen that shows all of them. You juggle five apps, log in five times, and still can't answer "how much do I actually have, in total, right now?"&lt;/p&gt;

&lt;p&gt;Here are the four ways people actually solve this in 2026, from the most manual to the most automated, and where each one breaks down.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The spreadsheet (manual, free, fragile)
&lt;/h2&gt;

&lt;p&gt;Export a CSV from each bank, paste it into one sheet, reconcile. It works, it's free, and almost nobody keeps it up past month two.&lt;/p&gt;

&lt;p&gt;The failure mode isn't laziness — it's that bank exports are inconsistent. Different date formats, different column orders, transactions labelled differently across banks. By the time you've normalised three exports, the data is already a week stale. Spreadsheets are great for &lt;em&gt;analysing&lt;/em&gt; money you've already collected; they're a poor &lt;em&gt;collection&lt;/em&gt; mechanism.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Your bank's own multi-account view
&lt;/h2&gt;

&lt;p&gt;Some banks (and neobanks) let you link external accounts inside their app. It's convenient if your main bank offers it, but it has a hard ceiling: it only aggregates accounts the &lt;em&gt;bank&lt;/em&gt; has integrations for, and it's in the bank's interest to make competitors' accounts feel like second-class citizens. You rarely get clean, exportable data, and business accounts are usually excluded entirely.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Account-aggregation apps
&lt;/h2&gt;

&lt;p&gt;Dedicated aggregation apps (Yolt-style, Snoop, Plaid-powered dashboards) pull all your accounts behind one login. This is the closest thing to "one screen for everything" for most people. The trade-offs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Coverage varies by country.&lt;/strong&gt; An app built on US aggregations often can't see your European bank, and vice versa.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You're handing read access to your transactions to a third party.&lt;/strong&gt; Read the privacy model — some sell anonymised insight data, some don't.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing tends to be subscription-based&lt;/strong&gt;, and the free tiers get nerfed over time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a personal-finance overview, a good aggregation app is genuinely the right answer. The cracks show when you want the &lt;em&gt;raw data&lt;/em&gt; — to feed your own budget, run accounting, or build something — because most apps won't give you a clean API out.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Open banking APIs (the structured-data route)
&lt;/h2&gt;

&lt;p&gt;In the EU and UK, open banking regulations (PSD2) &lt;em&gt;require&lt;/em&gt; banks to expose your account and transaction data through standardised APIs. That means instead of screen-scraping or PDF-parsing, you can pull structured JSON — balances, transactions, merchants — directly from the source, for every bank, in one consistent format.&lt;/p&gt;

&lt;p&gt;This is the route that matters if any of these is true:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You want to &lt;strong&gt;feed your own tool&lt;/strong&gt; (a budget, a dashboard, an accounting workflow) instead of living inside someone else's app.&lt;/li&gt;
&lt;li&gt;You need &lt;strong&gt;business accounts&lt;/strong&gt; alongside personal ones.&lt;/li&gt;
&lt;li&gt;You're a developer or a small team that wants the &lt;strong&gt;raw transactions&lt;/strong&gt;, not a prettified chart you can't export.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The catch that catches everyone: PSD2 demands an &lt;strong&gt;eIDAS-qualified certificate&lt;/strong&gt; (QWAC + QSeal) to talk to bank APIs directly. Those cost €2,000–€10,000 per year and involve real compliance work. That toll gate is precisely &lt;em&gt;why&lt;/em&gt; aggregators exist — they hold the certificate and resell the connection to everyone who can't justify one. Disclosure: I maintain &lt;strong&gt;open-banking.io&lt;/strong&gt;, which is built specifically so small users and SMBs get aggregated bank data &lt;em&gt;without&lt;/em&gt; needing their own certificate — you talk to one simple API, the cert burden stays on our side.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which one is actually right for you?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You just want a dashboard and you don't code&lt;/strong&gt; → an aggregation app. Pick one that covers your country's banks and read its data policy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want total control and don't mind 30 minutes a week&lt;/strong&gt; → the spreadsheet, accepting it'll always be slightly stale.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want raw, structured data for a project, a business, or automation&lt;/strong&gt; → an open banking API route. If you can't justify a €2k+/yr certificate, use an aggregator that absorbs it for you (that's the whole reason cert-free layers exist).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You only have accounts at one bank&lt;/strong&gt; → you don't have this problem; your bank's app already is your single view.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The honest summary: "see all my accounts in one place" is solved differently depending on whether you want a &lt;em&gt;picture&lt;/em&gt; (use an app) or &lt;em&gt;the data&lt;/em&gt; (use an API). Most people want the picture. The moment you want the data — to build, automate, or account — you're in open-banking-API territory, and the only real decision is whether you carry the certificate yourself or let someone else carry it for you.&lt;/p&gt;

</description>
      <category>openbanking</category>
      <category>finance</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The eIDAS Certificate Tax: Why EU Open Banking Still Runs Through Aggregators</title>
      <dc:creator>John Frandsen</dc:creator>
      <pubDate>Mon, 06 Jul 2026 04:33:42 +0000</pubDate>
      <link>https://dev.to/johnfrandsen/the-eidas-certificate-tax-why-eu-open-banking-still-runs-through-aggregators-2c52</link>
      <guid>https://dev.to/johnfrandsen/the-eidas-certificate-tax-why-eu-open-banking-still-runs-through-aggregators-2c52</guid>
      <description>&lt;p&gt;PSD2 came into force in January 2019. The promise was simple: any regulated third party can access bank account data (with customer consent) through standardized APIs. No more screen scraping. No more credential sharing. A level playing field.&lt;/p&gt;

&lt;p&gt;Five years later, almost every developer and startup building with European bank data routes through an aggregator — GoCardless (formerly Nordigen), TrueLayer, Yapily, Enable Banking, Salt Edge. Not because the APIs don't exist, but because the cost of connecting to them directly is prohibitive for anyone but a well-funded company.&lt;/p&gt;

&lt;p&gt;The barrier has a name: the eIDAS Certificate Tax.&lt;/p&gt;

&lt;h2&gt;
  
  
  What PSD2 actually requires
&lt;/h2&gt;

&lt;p&gt;To connect to a European bank's open banking API as a regulated provider, you need two things that the directive treats as non-negotiable:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. eIDAS Qualified Certificates (QWAC and QSeal)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;QWAC (Qualified Website Authentication Certificate) authenticates your TLS connection to the bank's API. QSeal (Qualified Electronic Seal Certificate) signs your API requests. Both must be issued by a QTSP (Qualified Trust Service Provider) on the EU Trust List.&lt;/p&gt;

&lt;p&gt;These are not standard TLS certificates. The qualification process involves identity verification, audit, and ongoing compliance. Cost: roughly 5,000 to 15,000 euros per year, depending on the provider and the number of seals needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. AISP and/or PISP authorization in at least one EU member state&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Account Information Service Provider (AISP) status lets you read account data. Payment Initiation Service Provider (PISP) status lets you initiate payments. Each requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A completed application to the national competent authority (FCA in the UK, BaFin in Germany, DFSA in Denmark, etc.)&lt;/li&gt;
&lt;li&gt;Capital requirements and professional indemnity insurance&lt;/li&gt;
&lt;li&gt;A compliance program covering PSD2 Articles (governance, risk management, incident reporting)&lt;/li&gt;
&lt;li&gt;Typically 6 to 12 months of processing time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once authorized in one member state, you can passport across the EU. But the initial authorization is the gate.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Berlin Group NextGenPSD2 standard
&lt;/h2&gt;

&lt;p&gt;Even with certificates and authorization, the technical integration is not trivial. The Berlin Group NextGenPSD2 implementation guidelines define the consent and data flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The AISP creates a consent object with the bank, specifying which accounts and how long&lt;/li&gt;
&lt;li&gt;The customer is redirected to the bank's SCA (Strong Customer Authentication) interface&lt;/li&gt;
&lt;li&gt;The customer authenticates (mobile app, biometric, or code) and approves the scope&lt;/li&gt;
&lt;li&gt;The bank returns a consent ID valid for up to 90 days (renewable)&lt;/li&gt;
&lt;li&gt;The AISP uses the consent ID to fetch account data via standardized endpoints&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The standard covers balances, transactions, and account details. Banks implement it with varying degrees of compliance — the same endpoint can return differently structured data across institutions, which is why aggregators add value by normalizing the response.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why aggregators dominate
&lt;/h2&gt;

&lt;p&gt;Add up the costs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;eIDAS certificates: 5,000-15,000 EUR/year&lt;/li&gt;
&lt;li&gt;AISP authorization: 6-12 months + legal/compliance costs (easily 20,000-50,000 EUR)&lt;/li&gt;
&lt;li&gt;Ongoing compliance overhead&lt;/li&gt;
&lt;li&gt;Per-bank integration work (despite the standard, each bank has quirks)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A startup wanting to read bank transactions for a budgeting app, a bookkeeping tool, or a lending platform faces a choice: spend six figures and a year getting authorized, or pay an aggregator a per-connection fee and start next week.&lt;/p&gt;

&lt;p&gt;The aggregator business model exists precisely because of this gap. They hold the certificates, they handle authorization, they normalize the data across 3,500+ banks. They charge you for the privilege of not dealing with it.&lt;/p&gt;

&lt;p&gt;GoCardless acquired Nordigen in 2022 to add a free tier. That free tier has been progressively wound down through 2025-2026, pushing users to paid plans. TrueLayer and Yapily never had a meaningful free tier. The result: the cost of European bank data access is rising, not falling.&lt;/p&gt;

&lt;h2&gt;
  
  
  The cert-free alternative
&lt;/h2&gt;

&lt;p&gt;There is a third path that the directive does not talk about but does not prohibit: certificate-free server-to-server connections.&lt;/p&gt;

&lt;p&gt;If a customer authorizes access through their bank's own interface (or a consent mechanism the bank supports outside the PSD2 AISP framework), and the connection is made directly between the customer's infrastructure and the bank's API, no eIDAS certificate is strictly required. The customer holds the keys. The bank sees a direct connection from an authenticated customer, not a third-party AISP.&lt;/p&gt;

&lt;p&gt;This model is suited to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Self-hosted finance tools (Firefly III, Actual Budget, beancount)&lt;/li&gt;
&lt;li&gt;Internal bookkeeping and reconciliation systems&lt;/li&gt;
&lt;li&gt;Personal expense tracking&lt;/li&gt;
&lt;li&gt;Any use case where the data consumer is the account holder themselves&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is not suited to multi-tenant SaaS that aggregates data on behalf of many users — that is the AISP/PISP model by design.&lt;/p&gt;

&lt;h2&gt;
  
  
  The regulatory horizon
&lt;/h2&gt;

&lt;p&gt;The EU's Financial Data Access (FIDA) proposal, expected to take effect around 2026-2027, extends open banking principles beyond payment accounts to mortgages, investments, pensions, and insurance. Whether FIDA will lower the certificate barrier or entrench it further remains to be seen.&lt;/p&gt;

&lt;p&gt;In the US, the CFPB's Section 1033 rule is pushing toward a similar API-based standard, though without the eIDAS certificate regime. The US approach may end up more accessible to developers, ironically, because it lacks the EU's stringent (and costly) trust infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;p&gt;PSD2 succeeded at one thing: it forced banks to expose APIs. It failed at another: making those APIs accessible. The eIDAS certificate requirement, intended to ensure security and trust, created a de facto tax that funnels developers toward aggregators.&lt;/p&gt;

&lt;p&gt;If you are building a tool that needs European bank data, understand the landscape:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aggregators are the path of least resistance (fast, expensive, recurring fees)&lt;/li&gt;
&lt;li&gt;Direct AISP integration is the enterprise path (slow, expensive upfront, full control)&lt;/li&gt;
&lt;li&gt;Certificate-free self-hosted connections are the developer path (free, requires technical setup, limited to your own data)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The "open" in open banking is open to interpretation.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I maintain open-banking.io, a certificate-free, self-hostable approach to European bank data access.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>openbankingfieuapisntech</category>
    </item>
    <item>
      <title>Open Banking for Small Businesses: A Practical 2026 Guide</title>
      <dc:creator>John Frandsen</dc:creator>
      <pubDate>Sat, 04 Jul 2026 14:26:57 +0000</pubDate>
      <link>https://dev.to/johnfrandsen/open-banking-for-small-businesses-a-open-banking-for-small-businesses-a-practical-2026-1ldi</link>
      <guid>https://dev.to/johnfrandsen/open-banking-for-small-businesses-a-open-banking-for-small-businesses-a-practical-2026-1ldi</guid>
      <description>&lt;h1&gt;
  
  
  Open Banking for Small Businesses: A Practical 2026 Guide
&lt;/h1&gt;

&lt;p&gt;Big banks and enterprise fintech have dominated the open banking conversation, but small businesses are the ones with the most to gain — and the fewest options that actually fit their budget and technical reality. Here's a no-nonsense breakdown of what's possible, what it costs, and how to choose.&lt;/p&gt;

&lt;h2&gt;
  
  
  What small businesses actually need from open banking
&lt;/h2&gt;

&lt;p&gt;Most SMB use cases cluster around four things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cash flow visibility&lt;/strong&gt; — seeing balances and transactions across multiple bank accounts in one place, without manually exporting CSVs or logging into five different banking portals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accountant / bookkeeper access&lt;/strong&gt; — giving a CPA or external accountant read-only access to transaction data without handing over login credentials or shared passwords.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expense automation&lt;/strong&gt; — feeding transaction data into accounting software (Xero, QuickBooks, ERPNext) to categorize and reconcile automatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lending and credit assessments&lt;/strong&gt; — sharing verified bank data with a lender to speed up loan applications, replacing months of PDF statements.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The barrier nobody talks about: eIDAS certificates
&lt;/h2&gt;

&lt;p&gt;Here's where most small businesses hit a wall. To connect to EU bank APIs under PSD2, you typically need an &lt;strong&gt;eIDAS QWAC (Qualified Website Authentication Certificate)&lt;/strong&gt; — a regulatory compliance certificate that costs &lt;strong&gt;€5,000–€15,000 per year&lt;/strong&gt; and takes &lt;strong&gt;6–12 months&lt;/strong&gt; of regulatory approval to obtain.&lt;/p&gt;

&lt;p&gt;This is why most open banking providers (Plaid, Tink, TrueLayer) are priced for enterprise: they've already absorbed that fixed cost and pass it through in minimum commitments and per-transaction pricing that only makes sense at scale. A small business connecting 3–5 bank accounts gets priced out.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose: a practical checklist
&lt;/h2&gt;

&lt;p&gt;When evaluating open banking providers for a small business, ask:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Factor&lt;/th&gt;
&lt;th&gt;What to check&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pricing model&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Is there a low-volume tier, or is the minimum commit €500+/mo?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Certificate requirement&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Do you need your own eIDAS cert, or does the provider handle compliance?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bank coverage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Are your specific banks (especially regional/local ones) supported?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data ownership&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Who holds the encryption keys — you, or the provider?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Integration effort&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Is it a simple REST API, or do you need a dedicated integration team?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The provider landscape for SMBs (2026)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Plaid&lt;/strong&gt; — The dominant US player, strong bank coverage, but enterprise pricing and US-centric compliance. Minimum commitments make it impractical for businesses connecting fewer than ~50 accounts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tink (Visa)&lt;/strong&gt; — Excellent European coverage since the Visa acquisition, but pricing has shifted firmly enterprise. Best for companies scaling past the SMB stage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TrueLayer&lt;/strong&gt; — Strong UK/EU coverage with a polished developer experience. Pivoting toward enterprise payments (PIS) which may narrow their AIS focus over time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GoCardless / Nordigen&lt;/strong&gt; — Nordigen's free tier was the SMB favorite, but GoCardless has been winding it down. The budget-friendly entry point is narrowing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;open-banking.io&lt;/strong&gt; — (Disclosure: I'm the maintainer.) This is the option built specifically for the gap above: no eIDAS certificate required, client-side encryption (the provider can't read your data), and pricing from ~€3/month per connection. It's designed for SMBs and indie developers who need bank data access without the enterprise overhead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;

&lt;p&gt;For most small businesses, the pragmatic path is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;List your banks&lt;/strong&gt; — confirm they're PSD2-compliant and covered by your chosen provider.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Start with read-only (AIS)&lt;/strong&gt; — account information services are lower-risk and cover 90% of SMB needs (visibility, accounting sync, accountant access).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test with one account&lt;/strong&gt; — connect a single bank account, verify data quality and sync reliability before rolling out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automate incrementally&lt;/strong&gt; — once data flows reliably, wire it into your accounting tool, then build dashboards or alerts.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The technology is mature. The regulatory framework exists. The main thing standing between your small business and automated bank data is finding a provider that doesn't require an enterprise budget to get started.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have questions about connecting your specific banks or comparing providers? I'm happy to help in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>banking</category>
      <category>fintech</category>
    </item>
    <item>
      <title>Beyond TrueLayer: Choosing the Right Open Banking API for European Projects (2026)</title>
      <dc:creator>John Frandsen</dc:creator>
      <pubDate>Tue, 30 Jun 2026 19:40:40 +0000</pubDate>
      <link>https://dev.to/johnfrandsen/beyond-truelayer-choosing-the-right-open-banking-api-for-european-projects-2026-5coa</link>
      <guid>https://dev.to/johnfrandsen/beyond-truelayer-choosing-the-right-open-banking-api-for-european-projects-2026-5coa</guid>
      <description>&lt;p&gt;Searches for a &lt;strong&gt;TrueLayer alternative&lt;/strong&gt; usually hide a more specific question: which open banking API fits my budget, my market, and my appetite for paperwork? TrueLayer is an excellent choice for a funded fintech that needs payment initiation across many European banks — but a solo builder pulling transactions for one country, or a small business that just wants read-only account data, is often paying for far more than they use.&lt;/p&gt;

&lt;p&gt;This guide compares the main options on the European market in 2026, explains why people look beyond TrueLayer, and gives you a decision framework rather than a sales pitch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why people look beyond TrueLayer
&lt;/h2&gt;

&lt;p&gt;TrueLayer dominates many "best open banking API" lists for good reason: broad bank coverage, a polished developer experience, and strong payment-initiation (PIS) flows. But three frictions push teams to evaluate alternatives:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pricing that assumes scale.&lt;/strong&gt; Aggregator pricing is typically per-API-call or per-successful connection, with minimum commitments and volume tiers that only make sense once you have meaningful user volume. For an early-stage product, a handful of production connections can cost disproportionately more than the value they generate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The certificate and licence overhead.&lt;/strong&gt; The "regulated path" — becoming an Account Information Service Provider (AISP) and holding an eIDAS Qualified Website Authentication Certificate (QWAC) to talk directly to bank APIs — costs anywhere from a few hundred to several thousand euros per year just for the certificate, plus legal and compliance work to register as an AISP with a National Competent Authority. That is a real moat for incumbents, and a real barrier for everyone else.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope mismatch.&lt;/strong&gt; Many builders do not need payment initiation at all — they need read access to balances and transactions. Paying for a full PIS+AIS platform when you only consume AIS is wasteful.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The European landscape at a glance
&lt;/h2&gt;

&lt;p&gt;The table below summarises the most commonly compared providers. &lt;strong&gt;Disclosure up front:&lt;/strong&gt; I am involved with one of them — &lt;strong&gt;open-banking.io&lt;/strong&gt;, a low-cost, certificate-free option — so I have deliberately included its weaknesses as well as its strengths. Verify everything against each vendor's current pricing page, as terms change frequently.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;th&gt;Coverage&lt;/th&gt;
&lt;th&gt;Pricing model&lt;/th&gt;
&lt;th&gt;Notable limitation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TrueLayer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Funded fintechs needing broad EU/UK PIS+AIS&lt;/td&gt;
&lt;td&gt;50+ countries, strong UK/EU&lt;/td&gt;
&lt;td&gt;Per-connection / volume tiers, enterprise contracts&lt;/td&gt;
&lt;td&gt;Minimum commitments; opaque SMB pricing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Yapily&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Data-heavy enterprise and B2B aggregation&lt;/td&gt;
&lt;td&gt;EU/UK, wide ASPSP coverage&lt;/td&gt;
&lt;td&gt;Enterprise / quote-based&lt;/td&gt;
&lt;td&gt;No consumer-facing UI; sales-led onboarding&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tink (Visa)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Large platforms wanting consolidated EU data&lt;/td&gt;
&lt;td&gt;Pan-European via Visa infrastructure&lt;/td&gt;
&lt;td&gt;Enterprise contracts&lt;/td&gt;
&lt;td&gt;Acquired by Visa; smaller-deal focus reduced&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GoCardless (Instant Bank Pay / Nordigen)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Businesses already using GoCardless for collections&lt;/td&gt;
&lt;td&gt;EU/UK&lt;/td&gt;
&lt;td&gt;Free tier was retired; usage-based&lt;/td&gt;
&lt;td&gt;Coverage and reliability vary by bank; pricing shifts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Plaid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Products with a strong US footprint needing some EU reach&lt;/td&gt;
&lt;td&gt;US-first; EU via acquired entities&lt;/td&gt;
&lt;td&gt;Per-item / volume&lt;/td&gt;
&lt;td&gt;EU coverage thinner than EU-native players&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;open-banking.io&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Solo builders, SMBs, self-hosters who need read-only data&lt;/td&gt;
&lt;td&gt;EU/UK bank APIs&lt;/td&gt;
&lt;td&gt;Flat ~3 EUR per month, self-hostable&lt;/td&gt;
&lt;td&gt;No payment initiation; newer ecosystem&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  When each option makes sense
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Choose TrueLayer if&lt;/strong&gt; you have funding, you need to initiate payments (not just read data), and you serve users across many European countries. The breadth and DX are genuinely hard to match, and the cost is justifiable once volume justifies it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose Yapily if&lt;/strong&gt; you are an enterprise building a data-aggregation product and want a purely API-driven, white-label partner without a competing consumer brand. Expect a sales conversation rather than a self-serve signup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose Tink if&lt;/strong&gt; you are a large platform that values the stability and consolidation that comes with Visa's backing, and you are comfortable with enterprise contracting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose GoCardless if&lt;/strong&gt; your core need is collections (asking customers to pay you via open-banking-powered bank transfers) and you want one vendor for both the open banking layer and the reconciliation. Treat it as an AIS provider too, but watch coverage lists per country closely — they vary more than the marketing suggests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose Plaid if&lt;/strong&gt; your primary market is the United States and Europe is a secondary, "nice to have" surface. If Europe is your primary market, an EU-native player will usually give you better bank coverage for less.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose open-banking.io if&lt;/strong&gt; you specifically want to skip the eIDAS certificate and AISP paperwork, you only need read access (balances and transactions), you value the ability to self-host, and your budget is closer to a few euros a month than a few thousand. It is also a reasonable pick for giving an accountant or a partner read-only access to business accounts without sharing bank passwords. Its honest limitations: it does not do payment initiation, and as a newer project its integrations and ecosystem maturity trail the incumbents.&lt;/p&gt;

&lt;h2&gt;
  
  
  The certificate question, demystified
&lt;/h2&gt;

&lt;p&gt;This is the part most comparison pages gloss over. Under PSD2/PSR in the EU and UK, to call a bank's production open banking API directly and on your own behalf, you generally need to be a regulated AISP holding a QWAC (Qualified Website Authentication Certificate) issued by a Qualified Trust Service Provider. That certificate alone — before any legal, registration, or audit work — typically runs from roughly 200 to 600 EUR per year at the low end and several thousand euros at the high end, depending on the issuer and validity period. On top of that, AISP registration with a National Competent Authority adds time and often legal fees.&lt;/p&gt;

&lt;p&gt;This is why most teams use an aggregator: the aggregator holds the certificate and the licence, and you consume a clean API in return for per-call pricing. The trade-off is that you pay the aggregator's margin forever.&lt;/p&gt;

&lt;p&gt;A small but growing middle path exists: services that let an end-user authorise access through the user's own bank login (redirect/consent flow) without the developer holding a QWAC. This is exactly the gap open-banking.io targets, and it is worth understanding the model even if you do not use that specific product. The key constraint to remember: such services are typically read-only — they do not give you payment initiation, because PIS is where regulation bites hardest.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical decision flow
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Do you need to initiate payments, or only read data?&lt;/strong&gt; Payment initiation → enterprise players (TrueLayer, Yapily, Tink). Read-only → a much wider, cheaper set of options opens up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What is your realistic monthly volume?&lt;/strong&gt; Under a few dozen connections → per-connection pricing will hurt; look at flat-fee or self-hosted options. Thousands of connections → volume tiers from TrueLayer/Yapily start to make sense.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Are you willing to hold an eIDAS certificate?&lt;/strong&gt; If no, narrow to aggregators or certificate-free services. If yes (and you have the legal bandwidth), a direct connection removes the aggregator margin.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Is Europe your primary market?&lt;/strong&gt; Yes → prefer EU-native coverage. No → a US-centric player with EU add-on coverage may be fine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Do you want to self-host?&lt;/strong&gt; Only a handful of options allow this; if data residency or full control matters, filter early.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;There is no single "best" open banking API — only the best fit for a given budget, scope, and market. TrueLayer, Yapily, and Tink remain the right answer for funded teams that need payment initiation at scale. GoCardless suits businesses whose primary job is collecting money. Plaid is strongest where the US leads. And for the long tail of solo developers, small businesses, and self-hosters who only need read access to EU/UK accounts without buying an eIDAS certificate, a newer class of certificate-free, low-cost options — including the one I work on, open-banking.io — is worth a look alongside the incumbents.&lt;/p&gt;

&lt;p&gt;Whatever you pick, the most useful thing you can do before committing is to test one real bank connection end-to-end on the provider's free or trial tier. Coverage charts look identical on paper; the difference shows up the moment you try your actual users' banks.&lt;/p&gt;

</description>
      <category>openbanking</category>
      <category>api</category>
      <category>fintech</category>
      <category>europe</category>
    </item>
    <item>
      <title>How to Give Your Accountant Read-Only Bank Access Without Sharing Passwords</title>
      <dc:creator>John Frandsen</dc:creator>
      <pubDate>Tue, 30 Jun 2026 08:31:55 +0000</pubDate>
      <link>https://dev.to/johnfrandsen/how-to-give-your-accountant-read-only-bank-access-without-sharing-passwords-46k1</link>
      <guid>https://dev.to/johnfrandsen/how-to-give-your-accountant-read-only-bank-access-without-sharing-passwords-46k1</guid>
      <description>&lt;p&gt;Every small-business owner hits the same wall at quarter-end: your accountant needs your bank transactions, but handing them your full banking login means they could — accidentally or otherwise — move money. You want them to &lt;strong&gt;see&lt;/strong&gt; the numbers, not &lt;strong&gt;send&lt;/strong&gt; them.&lt;/p&gt;

&lt;p&gt;The good news in 2026 is that you have several clean ways to give an accountant read-only bank access. Some are manual, some are automatic, and one is fully programmable. This guide walks through the three practical options, ranks them on security and effort, and tells you exactly when to pick which.&lt;/p&gt;

&lt;h2&gt;
  
  
  The core requirement: read, but don't touch
&lt;/h2&gt;

&lt;p&gt;What "read-only" really means here is an &lt;strong&gt;Account Information Service (AIS)&lt;/strong&gt; pattern. Your accountant (or their software) can pull balances and transaction history, but has &lt;strong&gt;no ability to initiate payments&lt;/strong&gt;. Payment initiation is a separate, more heavily-regulated permission (PIS) that you should never grant just for bookkeeping.&lt;/p&gt;

&lt;p&gt;Keep that distinction in mind. Any method below is only "safe" if it cannot, even in principle, authorise a transfer out of your account.&lt;/p&gt;




&lt;h2&gt;
  
  
  Method 1 — Add your accountant as a read-only sub-user in online banking
&lt;/h2&gt;

&lt;p&gt;The old-school option, and still the most common one for sole traders and small limited companies.&lt;/p&gt;

&lt;p&gt;Most major banks (HSBC, Barclays, NatWest, Danske Bank, Lloyds, Revolut Business, and many EU banks) let you invite a secondary user and restrict them to &lt;strong&gt;"view only"&lt;/strong&gt; or &lt;strong&gt;"viewer / accountant"&lt;/strong&gt; role.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Sign in to your business online banking.&lt;/li&gt;
&lt;li&gt;Find &lt;strong&gt;Users &amp;amp; Access&lt;/strong&gt; (or &lt;strong&gt;Manage Users&lt;/strong&gt;, &lt;strong&gt;Permissions&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt;Invite your accountant by email and assign the &lt;strong&gt;read-only / viewer&lt;/strong&gt; role.&lt;/li&gt;
&lt;li&gt;They create their own login and can see statements and download transactions — but cannot approve payments.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No third party in the middle; data stays inside the bank.&lt;/li&gt;
&lt;li&gt;No recurring software fees.&lt;/li&gt;
&lt;li&gt;Granular per-user audit logs in most business portals.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Manual.&lt;/strong&gt; Your accountant still exports CSVs or PDFs and imports them by hand. No auto-categorisation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bank-by-bank.&lt;/strong&gt; Each bank has its own portal, role names, and quirks. Three banks = three invites.&lt;/li&gt;
&lt;li&gt;Some consumer accounts don't offer sub-users at all — you may be forced to share a login (don't).&lt;/li&gt;
&lt;li&gt;Revolving access when you switch accountants means deprovisioning each time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; A single bank, a hands-on accountant who likes raw statements, and owners who want zero new tooling.&lt;/p&gt;




&lt;h2&gt;
  
  
  Method 2 — Accounting-software bank feeds (Xero, QuickBooks, FreeAgent)
&lt;/h2&gt;

&lt;p&gt;This is the path most growing businesses take, because the read-only connection happens &lt;strong&gt;for free as a side effect&lt;/strong&gt; of using accounting software.&lt;/p&gt;

&lt;p&gt;Xero, QuickBooks, Sage, FreeAgent and FreshBooks all connect to your bank through &lt;strong&gt;Open Banking&lt;/strong&gt; (in the UK/EU) or equivalent aggregators. The connection is &lt;strong&gt;read-only by design&lt;/strong&gt; — the software can only fetch transactions, never send payments.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Connect your bank account inside Xero / QuickBooks / FreeAgent.&lt;/li&gt;
&lt;li&gt;Authenticate with your bank (standard redirect + consent screen).&lt;/li&gt;
&lt;li&gt;The software pulls a fresh transaction feed daily.&lt;/li&gt;
&lt;li&gt;Invite your accountant as a collaborator on the &lt;em&gt;software&lt;/em&gt; — not your bank.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your accountant now sees a live, auto-categorised ledger without ever touching your bank login.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automatic.&lt;/strong&gt; Transactions arrive daily and get suggested categories.&lt;/li&gt;
&lt;li&gt;Reconciliation, VAT/GST reports, and month-end close are built in.&lt;/li&gt;
&lt;li&gt;Read-only is enforced at the Open Banking consent layer, not a checkbox in your bank portal.&lt;/li&gt;
&lt;li&gt;Switching accountants is one click (remove their software seat).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Monthly subscription (typically £20–£40/mo for the software).&lt;/li&gt;
&lt;li&gt;You're granting a consent to a third party; review the data the software itself can see.&lt;/li&gt;
&lt;li&gt;Consent connections &lt;strong&gt;expire&lt;/strong&gt; (renewable every 90 days under Open Banking rules) and occasionally need re-authenticating.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Any business that already uses (or should use) bookkeeping software — which is most of them past the very early stage.&lt;/p&gt;




&lt;h2&gt;
  
  
  Method 3 — Open Banking / PSD2 Account Information APIs
&lt;/h2&gt;

&lt;p&gt;This is the modern, programmable approach, and the one I want to demystify because it's where the industry is heading.&lt;/p&gt;

&lt;p&gt;Under PSD2 (the EU payment-services directive) and the UK's Open Banking standard, regulated &lt;strong&gt;Account Information Service Providers (AISPs)&lt;/strong&gt; can access your account data with your consent — read-only, by law. You (or your accountant, or a tool you build) call a clean REST API and receive normalised JSON: balances, transactions, account metadata, across as many banks as you connect.&lt;/p&gt;

&lt;p&gt;The crucial thing most guides gloss over: &lt;strong&gt;you do not always need your own PSD2/eIDAS certificate.&lt;/strong&gt; Becoming a fully-regulated AISP means issuing QWAC/QSeal eIDAS certificates, audits, and a national regulator licence. That's overkill if you just want to give an accountant (or yourself) programmatic access. Several providers let you consume the AIS API &lt;strong&gt;without&lt;/strong&gt; holding your own certificates — they're already regulated, and you ride on their authorisation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why this matters for read-only accountant access
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;One consent flow, &lt;strong&gt;all your banks&lt;/strong&gt; unified into a single API.&lt;/li&gt;
&lt;li&gt;Transactions in a consistent schema — no more parsing six different CSV formats.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;End-to-end encrypted options exist&lt;/strong&gt; where the provider can't read your data at all — only your client holds the decryption keys. This is a meaningful privacy upgrade over traditional feeds.&lt;/li&gt;
&lt;li&gt;You can pipe the data into a spreadsheet, a custom dashboard, or directly into your accountant's tooling.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What "no certificate needed" actually looks like
&lt;/h3&gt;

&lt;p&gt;You authenticate, consent per bank, and call endpoints like &lt;code&gt;/accounts&lt;/code&gt; and &lt;code&gt;/accounts/{id}/transactions&lt;/code&gt;. The regulated provider handles the bank integrations, the eIDAS certificates, and the consent renewal. You get clean, audited, read-only data without the regulatory burden.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; I maintain open-banking.io, a roughly €3/month service that does exactly this — read-only bank-account aggregation with no PSD2/eIDAS certificates required and client-held encryption keys. I'm mentioning it because it's directly relevant, not because this is a sales pitch. The methods above stand on their own merits.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Tech-savvy owners, accountants serving multiple clients, finance teams, and anyone who'd rather build a pipeline than paste CSVs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Comparison at a glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Read-only?&lt;/th&gt;
&lt;th&gt;Automated?&lt;/th&gt;
&lt;th&gt;Banks unified?&lt;/th&gt;
&lt;th&gt;Setup effort&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bank sub-user (viewer role)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes (role-based)&lt;/td&gt;
&lt;td&gt;No — manual export&lt;/td&gt;
&lt;td&gt;No (one per bank)&lt;/td&gt;
&lt;td&gt;Low, but repetitive&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Accounting software feeds&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes (Open Banking)&lt;/td&gt;
&lt;td&gt;Yes — daily auto-import&lt;/td&gt;
&lt;td&gt;Yes, within the app&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;£20–40/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Open Banking / AIS API&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes (by regulation)&lt;/td&gt;
&lt;td&gt;Yes — fully programmable&lt;/td&gt;
&lt;td&gt;Yes — all banks via one API&lt;/td&gt;
&lt;td&gt;Medium (developer-oriented)&lt;/td&gt;
&lt;td&gt;~€3/mo+&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Security checklist before you grant anything
&lt;/h2&gt;

&lt;p&gt;Whichever route you take, run through this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Confirm it's AIS, not PIS.&lt;/strong&gt; Account Information only — never payment initiation. The consent screen will state this explicitly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check consent expiry.&lt;/strong&gt; Open Banking consents renew roughly every 90 days. Re-authenticate before they lapse or your accountant's feed goes dark.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prefer end-to-end encryption&lt;/strong&gt; if the option exists — your transaction data is sensitive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rotate access when you switch accountants.&lt;/strong&gt; Remove the software seat or revoke the API consent the same day.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't share your bank login.&lt;/strong&gt; Ever. If a method requires it, it's the wrong method.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;You have three solid ways to give your accountant read-only access to your bank account:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Add them as a read-only sub-user&lt;/strong&gt; — simplest, but manual and bank-by-bank.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use accounting software bank feeds&lt;/strong&gt; — automatic and auto-categorised, ideal if you're already on Xero or QuickBooks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use an Open Banking / Account Information API&lt;/strong&gt; — programmable, unified across banks, and (with the right provider) needs no PSD2/eIDAS certificates of your own.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For most businesses, Method 2 is the pragmatic default. Method 3 is the future, and it's more accessible than the regulator-jargon makes it sound. Whatever you pick, the principle is the same: your accountant gets the &lt;strong&gt;numbers&lt;/strong&gt;, and you keep the &lt;strong&gt;keys&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If this was useful, I write about Open Banking, PSD2, and practical fintech for small businesses — questions welcome in the comments.&lt;/p&gt;

</description>
      <category>smallbusiness</category>
      <category>openbanking</category>
      <category>fintech</category>
      <category>psd2</category>
    </item>
    <item>
      <title>The Cheapest Open Banking APIs for Small Businesses and Indie Builders in 2026</title>
      <dc:creator>John Frandsen</dc:creator>
      <pubDate>Mon, 29 Jun 2026 18:07:09 +0000</pubDate>
      <link>https://dev.to/johnfrandsen/the-cheapest-open-banking-apis-for-small-businesses-and-indie-builders-in-2026-5cab</link>
      <guid>https://dev.to/johnfrandsen/the-cheapest-open-banking-apis-for-small-businesses-and-indie-builders-in-2026-5cab</guid>
      <description>&lt;p&gt;If you are a small business, a freelancer, or an indie developer trying to read bank transactions programmatically in Europe, the open banking API market looks deceptively simple on paper and surprisingly expensive in practice. PSD2 mandated that banks expose account access, but the cost structure that emerged on top of that mandate is what actually determines whether your project is viable.&lt;/p&gt;

&lt;p&gt;This is a vendor-neutral walk through what the major European open banking API providers charge at the low end in 2026, why the cheap tier is thinner than people expect, and what the realistic options are if your budget is closer to "side project" than "enterprise procurement."&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "free PSD2 API" is a misleading search
&lt;/h2&gt;

&lt;p&gt;PSD2 requires every bank in the EEA to expose two interfaces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AIS&lt;/strong&gt; (Account Information Services) — read-only access to balances, transactions, and account metadata.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PIS&lt;/strong&gt; (Payment Initiation Services) — initiate payments from the customer's account.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The bank-side API is free in the sense that the bank cannot charge a third-party provider for &lt;em&gt;reasonable&lt;/em&gt; access. But "reasonable" is doing heavy lifting, and the cost does not live at the bank. It lives at the certificate layer and at the aggregator layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  The eIDAS certificate: the real floor on cost
&lt;/h2&gt;

&lt;p&gt;To call a production PSD2 bank endpoint as a regulated third-party provider in the EEA, you need an &lt;strong&gt;eIDAS QWAC&lt;/strong&gt; (Qualified Website Authentication Certificate). This is not a normal TLS certificate. It is issued by a qualified trust service provider after a vetting process, and it is what the bank's API gateway uses to confirm you are a licensed AISP or PISP.&lt;/p&gt;

&lt;p&gt;In practice, a QWAC costs roughly &lt;strong&gt;EUR 3,000 to 8,000 per year&lt;/strong&gt;, depending on the issuer and the scope. That number is the single biggest reason there is no thriving free tier in European open banking the way there is in, say, weather APIs or CI minutes. Anyone offering you production bank-data access for free is either subsidising it through a different business model, routing you through their own certificate, or operating in a sandbox that does not touch real bank endpoints.&lt;/p&gt;

&lt;p&gt;This is worth stating plainly because it reframes the entire pricing table below: the providers listed are not charging you for the data. They are charging you for having already absorbed the certificate cost, the regulatory burden, the consent management UX, and the per-bank integration maintenance.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the aggregators actually charge (low end, 2026)
&lt;/h2&gt;

&lt;p&gt;These are the publicly listed or commonly quoted entry points. Volume pricing and enterprise contracts sit above these and vary widely, so treat the numbers as a floor, not a quote.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Entry posture&lt;/th&gt;
&lt;th&gt;Typical low-end cost&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Plaid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Developer sandbox free; production is sales-led&lt;/td&gt;
&lt;td&gt;Usage-based, often USD 0.30 to 1.00 per connected account per month at low volume, with monthly minimums that can land around USD 500 to 2,000/mo for a real production tier&lt;/td&gt;
&lt;td&gt;Strong US coverage; EU coverage exists but the pricing conversation is enterprise-flavoured. Many EU builders hit the monthly minimum before they hit useful volume.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TrueLayer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free sandbox; production tiered&lt;/td&gt;
&lt;td&gt;Starter tiers have historically sat around GBP 150 to 300/mo with per-call overages; production pricing moves to custom above that&lt;/td&gt;
&lt;td&gt;UK and EU coverage is solid; developer experience is consistently rated highly. The free tier is generous for testing but production access requires a commercial conversation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Tink&lt;/strong&gt; (Visa)&lt;/td&gt;
&lt;td&gt;Sandbox free; production sales-led&lt;/td&gt;
&lt;td&gt;Post-Visa-acquisition, pricing is almost entirely enterprise-customised. Hard to get a number below a four-figure monthly commitment&lt;/td&gt;
&lt;td&gt;Excellent coverage and data normalisation, but the acquisition has shifted the product toward larger customers. Indie builders frequently report being redirected to a partner programme.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GoCardless (formerly Nordigen)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Had a genuinely free tier for up to 10 connected accounts&lt;/td&gt;
&lt;td&gt;The free tier was removed in the GoCardless consolidation; current entry is a paid plan that has moved upward, and existing Nordigen-free users have been migrated or sunset&lt;/td&gt;
&lt;td&gt;The removal of the Nordigen free tier is, as of 2026, the most cited reason indie builders are searching for alternatives. It created a real gap in the market.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://open-banking.io" rel="noopener noreferrer"&gt;open-banking.io&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Self-serve, production keys on sign-up, no sales call&lt;/td&gt;
&lt;td&gt;~EUR 3/month, flat — no per-call or per-account fee&lt;/td&gt;
&lt;td&gt;No eIDAS/QWAC certificate required from you: the service holds the certificate and regulatory layer and exposes a simple server-to-server API. Client-side encrypted (keys held by the user, not the provider). Built for the SMB and indie segment the aggregators above price out. &lt;em&gt;(Disclosure: I build this.)&lt;/em&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Yapily&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sandbox free; production tiered&lt;/td&gt;
&lt;td&gt;Entry production plans in the range of GBP 200 to 500/mo depending on bank coverage scope&lt;/td&gt;
&lt;td&gt;UK and EU focused; positions itself on coverage breadth. Pricing is more transparent than some peers but still requires a conversation for production keys.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Salt Edge&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sandbox free; production sales-led&lt;/td&gt;
&lt;td&gt;Historically mid-market; pricing is custom&lt;/td&gt;
&lt;td&gt;Strong in CEE and MENA coverage; less commonly the first name EU indie builders reach for.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The pattern across all of these: the sandbox is free, and production is a conversation. That is not a coincidence. The certificate cost and the per-bank maintenance cost make a pure free-tier-at-scale economically difficult for a regulated business. The one notable exception is open-banking.io at EUR 3/month flat — it sidesteps the certificate cost on your side by holding the eIDAS/QWAC itself and exposing only a simple API key to you.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three realistic paths for a small budget
&lt;/h2&gt;

&lt;p&gt;Given the above, a small business or indie builder in 2026 is usually choosing between three architectures, not three vendors.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Use a commercial aggregator's developer tier
&lt;/h3&gt;

&lt;p&gt;Accept that you are paying someone else to absorb the certificate and integration burden. Budget GBP 150 to 500 per month as a realistic floor for a production tier with usable EU coverage, and negotiate hard on the monthly minimum if your volume is low. This is the lowest-effort path and the one most builders default to, but the per-call economics bite if you are syncing many accounts or polling frequently.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Go direct to bank PSD2 endpoints
&lt;/h3&gt;

&lt;p&gt;Every EU bank exposes a PSD2 developer portal. You can register, get sandbox credentials, and in many cases get production access by presenting your own AISP authorisation and QWAC. There is no aggregator fee, but you now own:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The consent flow and token refresh logic.&lt;/li&gt;
&lt;li&gt;The per-bank quirks (German banks on FinTS/HBCI, Nordic banks on their own PSD2 variants, French banks on STET, etc).&lt;/li&gt;
&lt;li&gt;The certificate renewal and compliance overhead.&lt;/li&gt;
&lt;li&gt;The reliability monitoring, because bank endpoint uptime is inconsistent and outages are rarely communicated cleanly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This path is viable if you need a small number of specific banks and you already have or can justify the eIDAS certificate cost. It is usually not viable for a hobby project, because the certificate alone exceeds the budget.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Run a self-hosted aggregation layer
&lt;/h3&gt;

&lt;p&gt;A middle path that has emerged is standing up your own aggregation logic against a curated subset of banks, using an open-source PSD2 connector, and avoiding the per-call aggregator tax entirely. You still need a certificate for production access to bank endpoints, so this does not eliminate the eIDAS cost — but it eliminates the recurring per-account or per-call fee, which is what compounds as you scale.&lt;/p&gt;

&lt;p&gt;There is now a fourth option that sits between paths 1 and 3: a managed, certificate-free API like &lt;a href="https://open-banking.io" rel="noopener noreferrer"&gt;open-banking.io&lt;/a&gt;. You don't hold the eIDAS certificate, you don't build the per-bank integrations, and you don't pay per-call — you get a flat-rate server-to-server API (~EUR 3/month) where the provider absorbs both the certificate and the integration maintenance. You give up direct control of the bank connections and you're limited to AIS (read-only data, not payments), but for read-only use cases — personal finance, bookkeeping, reconciliation — it is the cheapest production-grade entry point by two orders of magnitude. &lt;em&gt;(Disclosure: this is the project I work on, so obviously I'm biased toward it — but the pricing math stands regardless of who you hear it from.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The trade-off is that you are now the integrator. If a bank changes its API contract, you absorb the breakage. This is the path that makes sense if your use case is long-lived (personal finance tracking, internal reconciliation, a product you control end to end) and you want the cost curve to flatten rather than scale linearly with accounts.&lt;/p&gt;

&lt;h2&gt;
  
  
  A note on geography
&lt;/h2&gt;

&lt;p&gt;The pricing above is EU/EEA-focused because that is where PSD2 creates a regulated access right. The picture is different elsewhere:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;UK&lt;/strong&gt;: PSD2-equivalent under the FCA's open banking regime; similar aggregator landscape, similar cost structure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;US&lt;/strong&gt;: No equivalent mandate; bank access is brokered commercially (Plaid, MX, Finicity), and pricing is almost entirely usage-based and opaque.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;India&lt;/strong&gt;: The Account Aggregator framework is architecturally different and genuinely cheap to access; not relevant to most EU-focused projects but worth knowing the contrast exists.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your project spans regions, expect to integrate multiple aggregators, because no single provider offers uniformly cheap access across all geographies.&lt;/p&gt;

&lt;h2&gt;
  
  
  The practical takeaway
&lt;/h2&gt;

&lt;p&gt;If you searched for "cheap open banking API" expecting a free tier comparable to other developer APIs, the honest answer is that the market does not currently offer one at production scale, and the reason is structural rather than greedy. The eIDAS certificate is a fixed annual cost that sets a floor under anyone offering production access.&lt;/p&gt;

&lt;p&gt;For a small business evaluating this seriously in 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If your monthly volume is low and you value developer experience, &lt;strong&gt;TrueLayer or Yapily&lt;/strong&gt; at their entry tiers is the path of least resistance.&lt;/li&gt;
&lt;li&gt;If you were relying on &lt;strong&gt;Nordigen's free tier&lt;/strong&gt; and it has disappeared, the realistic replacements are the entry tiers above, a pivot to direct bank access for your top few banks, or a flat-rate certificate-free option like &lt;strong&gt;&lt;a href="https://open-banking.io" rel="noopener noreferrer"&gt;open-banking.io&lt;/a&gt;&lt;/strong&gt; (~EUR 3/month) if your use case is read-only aggregation.&lt;/li&gt;
&lt;li&gt;If you are technical, long-lived, and cost-sensitive at scale, the &lt;strong&gt;self-hosted aggregation&lt;/strong&gt; path is worth evaluating seriously — but go in with eyes open about the integration maintenance load.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Disclosure: I work on &lt;a href="https://open-banking.io" rel="noopener noreferrer"&gt;open-banking.io&lt;/a&gt;, the ~EUR 3/month option in the table above. I've written this comparison honestly — the big aggregators genuinely do things we don't (payments, enterprise coverage, thousands of banks) — but you should weigh my obvious bias accordingly. The pricing numbers are from public sources and common developer-community reporting as of mid-2026; they move, so treat them as directional and confirm directly with each provider before architecting around them.&lt;/p&gt;

</description>
      <category>openbanking</category>
      <category>fintech</category>
      <category>psd2</category>
      <category>api</category>
    </item>
    <item>
      <title>Comparing European Open Banking API Providers in 2026: Plaid, TrueLayer, Tink &amp; GoCardless</title>
      <dc:creator>John Frandsen</dc:creator>
      <pubDate>Mon, 29 Jun 2026 05:29:09 +0000</pubDate>
      <link>https://dev.to/johnfrandsen/comparing-european-open-banking-api-providers-in-2026-plaid-truelayer-tink-gocardless-125c</link>
      <guid>https://dev.to/johnfrandsen/comparing-european-open-banking-api-providers-in-2026-plaid-truelayer-tink-gocardless-125c</guid>
      <description>&lt;p&gt;If you're building a fintech app in Europe and need to connect to bank accounts, you've probably hit the same wall everyone does: every country has different banks, different PSD2 implementations, and different certification requirements. Open banking aggregators exist to abstract all of that away — but picking one is genuinely hard because their pricing, coverage, and onboarding friction vary enormously.&lt;/p&gt;

&lt;p&gt;I've spent the last several months deep in this space. Here's a practical comparison of five European open banking API providers, focused on what actually matters to a developer integrating them.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure upfront: I help build &lt;a href="https://open-banking.io" rel="noopener noreferrer"&gt;open-banking.io&lt;/a&gt;, one of the options below. I've kept the comparisons honest — the big aggregators genuinely do some things better — but you should weigh my obvious bias accordingly.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The providers worth comparing
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Plaid
&lt;/h3&gt;

&lt;p&gt;The US market leader, expanding aggressively in Europe. Excellent developer experience, great documentation, and a polished sandbox. Bank coverage in Europe has improved significantly but is still stronger in the UK and Ireland than in mainland Europe. Pricing is usage-based and — for European volumes — can be notably higher than domestic competitors. You'll typically go through a compliance review before going live.&lt;/p&gt;

&lt;h3&gt;
  
  
  TrueLayer
&lt;/h3&gt;

&lt;p&gt;UK-headquartered, one of the strongest European players. Broad bank coverage across the UK and EU (over 1,000 institutions). Strong payment initiation (PIS) alongside account information (AIS). Developer docs are thorough. They operate under FCA authorisation in the UK and are licensed across the EU. Pricing is per-connection with volume tiers — competitive for UK/EU fintechs but adds up at scale.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tink (now part of Visa)
&lt;/h3&gt;

&lt;p&gt;Acquired by Visa in 2022. Deep European bank coverage (arguably the broadest across the Nordics, DACH, and Southern Europe). Good aggregation APIs and a mature platform. Since the Visa acquisition, enterprise focus has intensified — smaller startups sometimes find the onboarding and commercial terms heavier than with TrueLayer or GoCardless. Pricing is typically negotiated for larger volumes.&lt;/p&gt;

&lt;h3&gt;
  
  
  GoCardless (formerly Nordigen)
&lt;/h3&gt;

&lt;p&gt;Nordigen was acquired by GoCardless in 2022. Historically known for a generous free tier — which was the main reason many indie developers and small fintechs adopted it. The free tier was significantly scaled back, which pushed a lot of smaller users to evaluate alternatives. Bank coverage is decent across the EU/UK. The GoCardless integration means open banking data is increasingly bundled with their payment products. Pricing now leans toward pay-per-account with minimum commitments.&lt;/p&gt;

&lt;h3&gt;
  
  
  open-banking.io
&lt;/h3&gt;

&lt;p&gt;A newer, smaller option built specifically for the segment the big four price out: indie developers, SMBs, and personal-finance use cases. The differentiator is that &lt;strong&gt;you don't need an eIDAS/QWAC certificate&lt;/strong&gt; — the service holds the certificate and regulatory layer and exposes a simple server-to-server API. Pricing is a flat ~€3/month rather than per-connection or per-call, which changes the economics if you're polling many accounts or running a long-lived sync. Data is end-to-end encrypted with client-held keys (the provider can't read user data). The trade-off: it's AIS-focused (account/transaction data), not a full PIS platform, and it doesn't have the breadth of enterprise features Plaid or Tink offer. Built for read-only aggregation, bookkeeping, and personal finance — not for launching a regulated payments product.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually differs (beyond marketing pages)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Pricing transparency
&lt;/h3&gt;

&lt;p&gt;This is the biggest practical differentiator. Plaid and Tink lean toward custom/enterprise pricing — you'll talk to sales. TrueLayer publishes more structured tiers. GoCardless/Nordigen has moved away from the "free forever" model that originally attracted developers. open-banking.io is the most transparent of the five: flat ~€3/month, self-serve, published on the pricing page, no sales call. If you're an indie developer or early-stage startup, this is the real spectrum — from opaque enterprise quotes to a self-serve flat fee — and where you land depends on whether you need enterprise coverage or just want to read your own transactions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Certificate and regulatory requirements
&lt;/h3&gt;

&lt;p&gt;Here's something the marketing pages rarely explain clearly: if you connect directly to bank APIs under PSD2, the bank (or its API gateway) often requires you to present an &lt;strong&gt;eIDAS QWAC (Qualified Website Authentication Certificate)&lt;/strong&gt;. These cost roughly €2,000–€5,000 per year and require a vetting process with a Qualified Trust Service Provider. This is one of the main reasons aggregators exist — they hold the eIDAS certificates and the regulatory licences (AISP/PISP registrations), so you connect to &lt;em&gt;them&lt;/em&gt; rather than to each bank individually.&lt;/p&gt;

&lt;p&gt;When you pick an aggregator, you're effectively paying for them to absorb that certificate cost and compliance burden. The trade-off is vendor lock-in and per-call pricing. The one exception in this list is &lt;a href="https://open-banking.io" rel="noopener noreferrer"&gt;open-banking.io&lt;/a&gt;, which holds the eIDAS certificate itself and never requires you to obtain one — you connect to their API key, not to the bank's PSD2 endpoint directly. That's the whole reason it can charge €3/month instead of four figures.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bank coverage depth vs. breadth
&lt;/h3&gt;

&lt;p&gt;All four claim "thousands of banks." The real question is &lt;em&gt;depth&lt;/em&gt;: does the connection actually return transaction data reliably, or does it frequently fail on specific banks? Coverage quality varies by country. Rule of thumb: Tink is strongest in the Nordics/DACH, TrueLayer in the UK/IE, Plaid improving everywhere but uneven, GoCardless solid across EU mid-market. Always test your specific target banks in the sandbox before committing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sandbox and developer experience
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Plaid:&lt;/strong&gt; Best-in-class sandbox. Link UI is smooth. Strong Quickstart apps in multiple languages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TrueLayer:&lt;/strong&gt; Good sandbox with test credentials. Python/Node SDKs are well-maintained.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tink:&lt;/strong&gt; Functional sandbox, good console for monitoring. Slightly more enterprise-flavoured onboarding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GoCardless/Nordigen:&lt;/strong&gt; Straightforward REST API, decent sandbox. The UI is simpler than the others.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Payment Initiation (PIS) vs Account Information (AIS)
&lt;/h3&gt;

&lt;p&gt;All four offer both AIS (read account/transaction data) and PIS (initiate payments). But if &lt;strong&gt;payments&lt;/strong&gt; are your primary use case rather than data aggregation, TrueLayer and Tink have the most mature PIS implementations in Europe. If you only need AIS (account aggregation, personal finance, bookkeeping), all four work, and the decision comes down to pricing and bank coverage for your markets.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical decision framework
&lt;/h2&gt;

&lt;p&gt;Ask yourself these questions in order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Which countries do your users' banks live in?&lt;/strong&gt; Narrow to providers with verified depth in those countries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AIS only, or AIS + PIS?&lt;/strong&gt; If payments matter, weight TrueLayer and Tink more heavily.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What's your volume?&lt;/strong&gt; Under ~1,000 connections/month, look for self-serve pricing or you'll burn time on sales calls. Over that, enterprise terms from any of them are competitive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Do you need the free tier?&lt;/strong&gt; As of 2026, genuinely free tiers are scarce. Don't build a business case on "free forever" — evaluate on paid pricing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How much compliance overhead can you absorb?&lt;/strong&gt; Direct bank connections mean eIDAS certs + regulatory registration. Aggregators remove that — but at a price premium.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The bottom line
&lt;/h2&gt;

&lt;p&gt;There's no single "best" open banking API in Europe — it genuinely depends on your countries, use case, and volume. The European open banking API market is less mature and more fragmented than the US market, and pricing transparency is a real problem for smaller builders.&lt;/p&gt;

&lt;p&gt;If I had to give starting recommendations: for a &lt;strong&gt;UK-focused fintech&lt;/strong&gt;, start with TrueLayer. For &lt;strong&gt;Nordic/DACH&lt;/strong&gt;, Tink. For &lt;strong&gt;broad EU + self-serve&lt;/strong&gt;, evaluate GoCardless alongside whichever provider offers transparent pricing for your volume. For &lt;strong&gt;indie builders, personal finance, bookkeeping, or anything where you want to skip the eIDAS certificate and the sales call entirely&lt;/strong&gt;, &lt;a href="https://open-banking.io" rel="noopener noreferrer"&gt;open-banking.io&lt;/a&gt; at €3/month flat is the cheapest entry point by a wide margin. And for everyone — test your specific target banks in the sandbox before signing anything.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What's been your experience integrating these? I'm particularly curious about how people are handling the bank-coverage reliability problem — it's the part that marketing pages paper over but bites you in production.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>openbanking</category>
      <category>api</category>
      <category>fintech</category>
      <category>europe</category>
    </item>
  </channel>
</rss>
