Skip to content

Bank / institution logos (e.g. Monzo) — legal + sourcing #595

Description

@NikolayMetchev

Goal

Display bank/institution logos (e.g. Monzo) when importing or showing accounts, in a legally defensible way, with a graceful fallback.

Legal context

Bank logos are protected by copyright (artwork) and trademark (brand). No license simply grants them. Display is generally defensible under nominative fair use when:

  • The logo identifies the user's actual account at that bank (factual/descriptive use).
  • We don't imply endorsement, partnership, or affiliation (no "Powered by Monzo", no Monzo-branded UI chrome).
  • The logo isn't altered or used as our app's branding.

This is the same basis Plaid, TrueLayer, Emma, Snoop, Money Dashboard etc. operate on — defensible, not explicitly licensed. Not legal advice; worth a quick lawyer check before commercial launch.

Lower-risk asset sources (preferred order)

  1. Open Banking provider CDN — if importing via Plaid / TrueLayer / Nordigen (GoCardless Bank Account Data), the institution logo comes in the API response and their terms cover display. Cleanest path; likely already in use for transaction import.
  2. Logo.devhttps://logo.devhttps://img.logo.dev/monzo.com style lookup, free tier.
  3. Brandfetch APIhttps://brandfetch.com — logo by domain, free tier, terms permit display.
  4. Per-bank press/brand kits (e.g. Monzo) for the most-used banks.

Guardrails

  • Do not bundle scraped bank PNGs in the repo as the primary asset library — weakest legal position. Fetch/attribute via API and cache.
  • Always provide a generic fallback: Lucide landmark / building-2 tinted with the bank's brand color (see generic-icons issue).
  • Add a standard trademark disclaimer ("All trademarks are property of their respective owners") for commercial release.

Proposed resolution logic

getInstitutionIcon(id):
  1. logo from Open Banking provider response   # best, licensed
  2. else Logo.dev / Brandfetch by domain       # fallback API, cached
  3. else generic Lucide "landmark" + brand color

Open question

  • Import path: Open Banking (Plaid/TrueLayer/Nordigen) vs CSV/file import? Determines whether logos come licensed-for-free (provider) or via Logo.dev/Brandfetch.

Tasks

  • Confirm import path / provider.
  • Implement getInstitutionIcon with provider-first, API-fallback, generic-fallback.
  • Add logo caching.
  • Add trademark disclaimer.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions