Pay by Bank
NewPay by Bank is PPRO's open banking–powered payment method, enabling consumers to pay directly from their bank account at checkout – no card details, no manual data entry, no friction. Built on PSD2-regulated payment initiation services (PIS), Pay by Bank lets shoppers authenticate transactions from their banking app using biometrics or PIN verification.
With a single integration, access coverage across 1,500+ banks in more than eight European markets, including Austria, Belgium, Finland, France, Germany, Ireland, Italy, Lithuania, Netherlands, and Portugal. As open banking adoption accelerates across Europe – the market is projected to grow from USD 9.28 billion in 2023 to USD 44.9 billion by 2030 – Pay by Bank gives merchants a faster, lower-cost alternative to card rails with zero chargebacks and a checkout experience consumers already trust.
Want to integrate Pay by Bank onto your platform?
Get in touchWhy Pay by Bank
Seamless instant payments – Let customers pay directly from their bank account in just a few taps – fast, simple, and secure, with no risk of stolen card details or fraud.
Guaranteed payments, zero chargebacks – Eliminate the headache of chargebacks. Every transaction is authenticated by the consumer’s bank using Strong Customer Authentication, so you get the sale and keep the funds.
Build once, scale continuously – Access extensive coverage with 1,500+ banks as we continue to roll out across Europe. We’ve done the heavy lifting so you can scale through a single, expert connection.
{ updateWidth($el.offsetWidth); $dispatch('fast-tabs') }, 150)" @resize.window="updateWidth($el.offsetWidth)" @tabchanged.window="updateWidth($el.offsetWidth)" x-init="$el.complete && updateWidth($el.offsetWidth); $nextTick(() => { window.addEventListener('load', () => updateWidth($el.offsetWidth)) })" />
{ updateWidth($el.offsetWidth); $dispatch('fast-tabs') }, 150)" @resize.window="updateWidth($el.offsetWidth)" @tabchanged.window="updateWidth($el.offsetWidth)" x-init="$el.complete && updateWidth($el.offsetWidth); $nextTick(() => { window.addEventListener('load', () => updateWidth($el.offsetWidth)) })" />
{ updateWidth($el.offsetWidth); $dispatch('fast-tabs') }, 150)" @resize.window="updateWidth($el.offsetWidth)" @tabchanged.window="updateWidth($el.offsetWidth)" x-init="$el.complete && updateWidth($el.offsetWidth); $nextTick(() => { window.addEventListener('load', () => updateWidth($el.offsetWidth)) })" />
{ updateWidth($el.offsetWidth); $dispatch('fast-tabs') }, 150)" @resize.window="updateWidth($el.offsetWidth)" @tabchanged.window="updateWidth($el.offsetWidth)" x-init="$el.complete && updateWidth($el.offsetWidth); $nextTick(() => { window.addEventListener('load', () => updateWidth($el.offsetWidth)) })" />
{ updateWidth($el.offsetWidth); $dispatch('fast-tabs') }, 150)" @resize.window="updateWidth($el.offsetWidth)" @tabchanged.window="updateWidth($el.offsetWidth)" x-init="$el.complete && updateWidth($el.offsetWidth); $nextTick(() => { window.addEventListener('load', () => updateWidth($el.offsetWidth)) })" />
{ updateWidth($el.offsetWidth); $dispatch('fast-tabs') }, 150)" @resize.window="updateWidth($el.offsetWidth)" @tabchanged.window="updateWidth($el.offsetWidth)" x-init="$el.complete && updateWidth($el.offsetWidth); $nextTick(() => { window.addEventListener('load', () => updateWidth($el.offsetWidth)) })" />
{ updateWidth($el.offsetWidth); $dispatch('fast-tabs') }, 150)" @resize.window="updateWidth($el.offsetWidth)" @tabchanged.window="updateWidth($el.offsetWidth)" x-init="$el.complete && updateWidth($el.offsetWidth); $nextTick(() => { window.addEventListener('load', () => updateWidth($el.offsetWidth)) })" />