{
  "_meta": {
    "description": "Per-(provider \u00d7 market) capabilities breakdown. The capabilities score measures what data points the provider offers \u2014 accounts, balance, transactions, categorization, identity, payment products, institution metadata, etc. Missing must-have data (transactions, balance) is heavily penalised. Per-cell lists show which buckets are covered, partial, absent, or unverified, with the evidence/source we have for each.",
    "scoring": "Same formula as integration_cost, but only over the capability-tagged buckets. US-only and UK-only buckets are dropped for non-US/UK markets.",
    "buckets_used": [
      "accounts",
      "balance",
      "transactions_sync",
      "transactions_legacy",
      "categorization_enrichment",
      "identity",
      "auth_routing_numbers",
      "processor_tokens",
      "signal_risk",
      "transfer_us",
      "wallet_uk",
      "institutions",
      "third_party_costs",
      "affordability_check",
      "vrp_recurring_payments",
      "income_certificate",
      "deep_merchant_enrichment",
      "pay_by_link",
      "psd2_eu_breadth"
    ],
    "source_files": [
      "plaid_surface.json (dimension=capability)",
      "provider_capabilities.json"
    ]
  },
  "providers": {
    "Mastercard OB": {
      "Australia": {
        "present_in_market": true,
        "breakdown": {
          "score": 3.71,
          "confidence_pct": 72,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)",
            "Transaction categorization & enrichment"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "high",
              "evidence": "GET /v1/accounts, /v1/accounts/{id}",
              "source": "Postman: Data"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "high",
              "evidence": "Returned in account details endpoint",
              "source": "Postman: Data"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "/v2/providers, /v2/providers/{id}/payment-methods",
              "source": "Postman: Providers"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Aiia Enterprise payments + payouts include VRP-style flows.",
              "source": "Postman: Payments"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "Payment Links endpoint /v2/payments/accept/links.",
              "source": "Postman: Payment Links"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "/v1/accounts/{id}/transactions + /v1/update; no documented cursor",
              "source": "Postman: Data"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Enterprise Insights collection exists separately",
              "source": "Postman: insights"
            },
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Insights collection separate; no payment-return signal",
              "source": "Postman: insights"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Insights collection has enrichment products; depth varies.",
              "source": "Postman: insights"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Aiia covers EU but stronger in Nordics/Baltics than southern EU.",
              "source": "developer.mastercard.com"
            }
          ],
          "absent": [
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "No public pricing",
              "source": "\u2014"
            }
          ],
          "unknown": [
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Not in core collection",
              "source": "\u2014"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Insights collection separate; affordability product not core.",
              "source": "\u2014"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Not researched.",
              "source": "\u2014"
            }
          ]
        }
      },
      "Poland": {
        "present_in_market": true,
        "breakdown": {
          "score": 3.71,
          "confidence_pct": 72,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)",
            "Transaction categorization & enrichment"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "high",
              "evidence": "GET /v1/accounts, /v1/accounts/{id}",
              "source": "Postman: Data"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "high",
              "evidence": "Returned in account details endpoint",
              "source": "Postman: Data"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "/v2/providers, /v2/providers/{id}/payment-methods",
              "source": "Postman: Providers"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Aiia Enterprise payments + payouts include VRP-style flows.",
              "source": "Postman: Payments"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "Payment Links endpoint /v2/payments/accept/links.",
              "source": "Postman: Payment Links"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "/v1/accounts/{id}/transactions + /v1/update; no documented cursor",
              "source": "Postman: Data"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Enterprise Insights collection exists separately",
              "source": "Postman: insights"
            },
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Insights collection separate; no payment-return signal",
              "source": "Postman: insights"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Insights collection has enrichment products; depth varies.",
              "source": "Postman: insights"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Aiia covers EU but stronger in Nordics/Baltics than southern EU.",
              "source": "developer.mastercard.com"
            }
          ],
          "absent": [
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "No public pricing",
              "source": "\u2014"
            }
          ],
          "unknown": [
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Not in core collection",
              "source": "\u2014"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Insights collection separate; affordability product not core.",
              "source": "\u2014"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Not researched.",
              "source": "\u2014"
            }
          ]
        }
      },
      "Spain": {
        "present_in_market": true,
        "breakdown": {
          "score": 3.71,
          "confidence_pct": 72,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)",
            "Transaction categorization & enrichment"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "high",
              "evidence": "GET /v1/accounts, /v1/accounts/{id}",
              "source": "Postman: Data"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "high",
              "evidence": "Returned in account details endpoint",
              "source": "Postman: Data"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "/v2/providers, /v2/providers/{id}/payment-methods",
              "source": "Postman: Providers"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Aiia Enterprise payments + payouts include VRP-style flows.",
              "source": "Postman: Payments"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "Payment Links endpoint /v2/payments/accept/links.",
              "source": "Postman: Payment Links"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "/v1/accounts/{id}/transactions + /v1/update; no documented cursor",
              "source": "Postman: Data"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Enterprise Insights collection exists separately",
              "source": "Postman: insights"
            },
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Insights collection separate; no payment-return signal",
              "source": "Postman: insights"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Insights collection has enrichment products; depth varies.",
              "source": "Postman: insights"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Aiia covers EU but stronger in Nordics/Baltics than southern EU.",
              "source": "developer.mastercard.com"
            }
          ],
          "absent": [
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "No public pricing",
              "source": "\u2014"
            }
          ],
          "unknown": [
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Not in core collection",
              "source": "\u2014"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Insights collection separate; affordability product not core.",
              "source": "\u2014"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Not researched.",
              "source": "\u2014"
            }
          ]
        }
      }
    },
    "Tink (Visa)": {
      "Australia": {
        "present_in_market": false,
        "breakdown": {
          "score": 4.19,
          "confidence_pct": 61,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Account Check + Business Account Check products",
              "source": "tink.com/products/account-check"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Balance Check: 'instant balance checks'",
              "source": "tink.com/products/balance-check"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Data Enrichment + Money Manager products",
              "source": "tink.com/products/data-enrichment"
            },
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "medium",
              "evidence": "Risk Signals product: 'risk tools for A2A payments'",
              "source": "tink.com/products/risk-signals"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Variable Recurring Payments product offered.",
              "source": "tink.com/products/variable-recurring-payments"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Data Enrichment + Money Manager offer rich merchant identification.",
              "source": "tink.com/products/data-enrichment"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Pan-EU PSD2 coverage; Eurobits gives strong southern-EU presence.",
              "source": "tink.com/markets"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Real-time data product, sync model not documented publicly",
              "source": "tink.com/products/transactions"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Account ownership check covers part of identity surface",
              "source": "tink.com/products/account-check"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Aggregation market capabilities documented; no public catalogue page",
              "source": "docs.tink.com"
            },
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Pricing page exists, no public per-call info",
              "source": "tink.com/pricing"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Risk Insights for creditworthiness assessment.",
              "source": "tink.com/products/risk-insights"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Income Check product; signed-document status unclear.",
              "source": "tink.com/products/income-check"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Hosted Tink Link payment flow exists; pay-by-link primitive less explicit.",
              "source": "tink.com/products/pay-by-bank"
            }
          ],
          "absent": [],
          "unknown": []
        }
      },
      "Poland": {
        "present_in_market": true,
        "breakdown": {
          "score": 4.19,
          "confidence_pct": 61,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Account Check + Business Account Check products",
              "source": "tink.com/products/account-check"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Balance Check: 'instant balance checks'",
              "source": "tink.com/products/balance-check"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Data Enrichment + Money Manager products",
              "source": "tink.com/products/data-enrichment"
            },
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "medium",
              "evidence": "Risk Signals product: 'risk tools for A2A payments'",
              "source": "tink.com/products/risk-signals"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Variable Recurring Payments product offered.",
              "source": "tink.com/products/variable-recurring-payments"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Data Enrichment + Money Manager offer rich merchant identification.",
              "source": "tink.com/products/data-enrichment"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Pan-EU PSD2 coverage; Eurobits gives strong southern-EU presence.",
              "source": "tink.com/markets"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Real-time data product, sync model not documented publicly",
              "source": "tink.com/products/transactions"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Account ownership check covers part of identity surface",
              "source": "tink.com/products/account-check"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Aggregation market capabilities documented; no public catalogue page",
              "source": "docs.tink.com"
            },
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Pricing page exists, no public per-call info",
              "source": "tink.com/pricing"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Risk Insights for creditworthiness assessment.",
              "source": "tink.com/products/risk-insights"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Income Check product; signed-document status unclear.",
              "source": "tink.com/products/income-check"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Hosted Tink Link payment flow exists; pay-by-link primitive less explicit.",
              "source": "tink.com/products/pay-by-bank"
            }
          ],
          "absent": [],
          "unknown": []
        }
      },
      "Spain": {
        "present_in_market": true,
        "breakdown": {
          "score": 4.19,
          "confidence_pct": 61,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Account Check + Business Account Check products",
              "source": "tink.com/products/account-check"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Balance Check: 'instant balance checks'",
              "source": "tink.com/products/balance-check"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Data Enrichment + Money Manager products",
              "source": "tink.com/products/data-enrichment"
            },
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "medium",
              "evidence": "Risk Signals product: 'risk tools for A2A payments'",
              "source": "tink.com/products/risk-signals"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Variable Recurring Payments product offered.",
              "source": "tink.com/products/variable-recurring-payments"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Data Enrichment + Money Manager offer rich merchant identification.",
              "source": "tink.com/products/data-enrichment"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Pan-EU PSD2 coverage; Eurobits gives strong southern-EU presence.",
              "source": "tink.com/markets"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Real-time data product, sync model not documented publicly",
              "source": "tink.com/products/transactions"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Account ownership check covers part of identity surface",
              "source": "tink.com/products/account-check"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Aggregation market capabilities documented; no public catalogue page",
              "source": "docs.tink.com"
            },
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Pricing page exists, no public per-call info",
              "source": "tink.com/pricing"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Risk Insights for creditworthiness assessment.",
              "source": "tink.com/products/risk-insights"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Income Check product; signed-document status unclear.",
              "source": "tink.com/products/income-check"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Hosted Tink Link payment flow exists; pay-by-link primitive less explicit.",
              "source": "tink.com/products/pay-by-bank"
            }
          ],
          "absent": [],
          "unknown": []
        }
      }
    },
    "Yapily": {
      "Australia": {
        "present_in_market": false,
        "breakdown": {
          "score": 4.38,
          "confidence_pct": 62,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "AIS product: account information service",
              "source": "yapily.com"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "AIS retrieves accounts, balances, transactions",
              "source": "docs.yapily.com"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Data Plus: 'Transaction Categorisation & Data Enrichment'",
              "source": "yapily.com product portfolio"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Validate product: 'Speed up onboarding'",
              "source": "yapily.com product portfolio"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Validate product designed for affordability/onboarding speed-up.",
              "source": "yapily.com product portfolio"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "VRP + Commercial VRP + sweeping all advertised.",
              "source": "yapily.com/product/a2a-payment-initiation-service-provider"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Data Plus = transaction categorisation + data enrichment.",
              "source": "yapily.com product portfolio"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "Pay by Link product explicitly named.",
              "source": "yapily.com"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "19+ countries, 1000s of institutions.",
              "source": "yapily.com"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Real-time data via AIS; cursor-delta endpoint not advertised",
              "source": "yapily.com"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Product Coverage page referenced",
              "source": "docs.yapily.com"
            },
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Pricing referenced in nav but not detailed",
              "source": "yapily.com/pricing"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Income via Validate; signed-certificate status unclear.",
              "source": "yapily.com"
            }
          ],
          "absent": [],
          "unknown": [
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Risk products not advertised in core portfolio",
              "source": "\u2014"
            }
          ]
        }
      },
      "Poland": {
        "present_in_market": true,
        "breakdown": {
          "score": 4.38,
          "confidence_pct": 62,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "AIS product: account information service",
              "source": "yapily.com"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "AIS retrieves accounts, balances, transactions",
              "source": "docs.yapily.com"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Data Plus: 'Transaction Categorisation & Data Enrichment'",
              "source": "yapily.com product portfolio"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Validate product: 'Speed up onboarding'",
              "source": "yapily.com product portfolio"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Validate product designed for affordability/onboarding speed-up.",
              "source": "yapily.com product portfolio"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "VRP + Commercial VRP + sweeping all advertised.",
              "source": "yapily.com/product/a2a-payment-initiation-service-provider"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Data Plus = transaction categorisation + data enrichment.",
              "source": "yapily.com product portfolio"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "Pay by Link product explicitly named.",
              "source": "yapily.com"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "19+ countries, 1000s of institutions.",
              "source": "yapily.com"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Real-time data via AIS; cursor-delta endpoint not advertised",
              "source": "yapily.com"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Product Coverage page referenced",
              "source": "docs.yapily.com"
            },
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Pricing referenced in nav but not detailed",
              "source": "yapily.com/pricing"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Income via Validate; signed-certificate status unclear.",
              "source": "yapily.com"
            }
          ],
          "absent": [],
          "unknown": [
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Risk products not advertised in core portfolio",
              "source": "\u2014"
            }
          ]
        }
      },
      "Spain": {
        "present_in_market": true,
        "breakdown": {
          "score": 4.38,
          "confidence_pct": 62,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "AIS product: account information service",
              "source": "yapily.com"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "AIS retrieves accounts, balances, transactions",
              "source": "docs.yapily.com"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Data Plus: 'Transaction Categorisation & Data Enrichment'",
              "source": "yapily.com product portfolio"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Validate product: 'Speed up onboarding'",
              "source": "yapily.com product portfolio"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Validate product designed for affordability/onboarding speed-up.",
              "source": "yapily.com product portfolio"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "VRP + Commercial VRP + sweeping all advertised.",
              "source": "yapily.com/product/a2a-payment-initiation-service-provider"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Data Plus = transaction categorisation + data enrichment.",
              "source": "yapily.com product portfolio"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "Pay by Link product explicitly named.",
              "source": "yapily.com"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "19+ countries, 1000s of institutions.",
              "source": "yapily.com"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Real-time data via AIS; cursor-delta endpoint not advertised",
              "source": "yapily.com"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Product Coverage page referenced",
              "source": "docs.yapily.com"
            },
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Pricing referenced in nav but not detailed",
              "source": "yapily.com/pricing"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Income via Validate; signed-certificate status unclear.",
              "source": "yapily.com"
            }
          ],
          "absent": [],
          "unknown": [
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Risk products not advertised in core portfolio",
              "source": "\u2014"
            }
          ]
        }
      }
    },
    "Salt Edge": {
      "Australia": {
        "present_in_market": false,
        "breakdown": {
          "score": 3.95,
          "confidence_pct": 57,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Account holder info: name, address, contact details",
              "source": "saltedge.com"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Account name & number, balance from customer's bank",
              "source": "saltedge.com"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Transaction Categorisation + Merchant Identification",
              "source": "saltedge.com Data Enrichment"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "KYC identity verification using bank account holder data",
              "source": "saltedge.com KYC & AML"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "5,000+ banks via 1 API",
              "source": "saltedge.com"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Transaction Categorisation + Merchant Identification.",
              "source": "saltedge.com Data Enrichment"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Connects to 5,000+ banks worldwide via 1 API.",
              "source": "saltedge.com"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Auto-inserted account data; no cursor model documented",
              "source": "saltedge.com"
            },
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "AML Transaction Monitoring; risk scoring not detailed",
              "source": "saltedge.com Compliance"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "AML transaction monitoring + KYC; affordability scoring not detailed.",
              "source": "saltedge.com Compliance"
            }
          ],
          "absent": [
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "No public pricing",
              "source": "\u2014"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Pay-by-bank product; recurring/VRP not advertised.",
              "source": "saltedge.com Payments"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Not advertised.",
              "source": "\u2014"
            }
          ],
          "unknown": [
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Not detailed.",
              "source": "\u2014"
            }
          ]
        }
      },
      "Poland": {
        "present_in_market": true,
        "breakdown": {
          "score": 3.95,
          "confidence_pct": 57,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Account holder info: name, address, contact details",
              "source": "saltedge.com"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Account name & number, balance from customer's bank",
              "source": "saltedge.com"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Transaction Categorisation + Merchant Identification",
              "source": "saltedge.com Data Enrichment"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "KYC identity verification using bank account holder data",
              "source": "saltedge.com KYC & AML"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "5,000+ banks via 1 API",
              "source": "saltedge.com"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Transaction Categorisation + Merchant Identification.",
              "source": "saltedge.com Data Enrichment"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Connects to 5,000+ banks worldwide via 1 API.",
              "source": "saltedge.com"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Auto-inserted account data; no cursor model documented",
              "source": "saltedge.com"
            },
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "AML Transaction Monitoring; risk scoring not detailed",
              "source": "saltedge.com Compliance"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "AML transaction monitoring + KYC; affordability scoring not detailed.",
              "source": "saltedge.com Compliance"
            }
          ],
          "absent": [
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "No public pricing",
              "source": "\u2014"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Pay-by-bank product; recurring/VRP not advertised.",
              "source": "saltedge.com Payments"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Not advertised.",
              "source": "\u2014"
            }
          ],
          "unknown": [
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Not detailed.",
              "source": "\u2014"
            }
          ]
        }
      },
      "Spain": {
        "present_in_market": true,
        "breakdown": {
          "score": 3.95,
          "confidence_pct": 57,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Account holder info: name, address, contact details",
              "source": "saltedge.com"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Account name & number, balance from customer's bank",
              "source": "saltedge.com"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Transaction Categorisation + Merchant Identification",
              "source": "saltedge.com Data Enrichment"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "KYC identity verification using bank account holder data",
              "source": "saltedge.com KYC & AML"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "5,000+ banks via 1 API",
              "source": "saltedge.com"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Transaction Categorisation + Merchant Identification.",
              "source": "saltedge.com Data Enrichment"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Connects to 5,000+ banks worldwide via 1 API.",
              "source": "saltedge.com"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Auto-inserted account data; no cursor model documented",
              "source": "saltedge.com"
            },
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "AML Transaction Monitoring; risk scoring not detailed",
              "source": "saltedge.com Compliance"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "AML transaction monitoring + KYC; affordability scoring not detailed.",
              "source": "saltedge.com Compliance"
            }
          ],
          "absent": [
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "No public pricing",
              "source": "\u2014"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Pay-by-bank product; recurring/VRP not advertised.",
              "source": "saltedge.com Payments"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Not advertised.",
              "source": "\u2014"
            }
          ],
          "unknown": [
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Not detailed.",
              "source": "\u2014"
            }
          ]
        }
      }
    },
    "Kontomatik": {
      "Australia": {
        "present_in_market": false,
        "breakdown": {
          "score": 4.05,
          "confidence_pct": 75,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "List of payment accounts with details",
              "source": "kontomatik.com FAQ"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Balance, available funds, currency",
              "source": "kontomatik.com FAQ"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "high",
              "evidence": "Transaction labeling product (ML-based)",
              "source": "kontomatik.com products"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Identity Verification product",
              "source": "kontomatik.com products"
            },
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "Risk Analysis (scoring) product",
              "source": "kontomatik.com products"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Risk Analysis (scoring) is a flagship product.",
              "source": "kontomatik.com products"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Signed income confirmation certificate widely recognised in PL lending.",
              "source": "kontomatik.com products"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Transaction labelling + vendor recognition + data summary.",
              "source": "kontomatik.com products"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Transaction list documented; sync model not",
              "source": "kontomatik.com FAQ"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Hundreds of leading banks in Europe",
              "source": "kontomatik.com FAQ"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Strong PL leadership + ES; broader EU more limited than EU-native CBPs.",
              "source": "kontomatik.com"
            }
          ],
          "absent": [
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "No public pricing",
              "source": "\u2014"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "'Does Kontomatik have a PISP license? No.' \u2014 no payment initiation.",
              "source": "kontomatik.com FAQ"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "No PISP, no payment links.",
              "source": "kontomatik.com FAQ"
            }
          ],
          "unknown": []
        }
      },
      "Poland": {
        "present_in_market": true,
        "breakdown": {
          "score": 4.05,
          "confidence_pct": 75,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "List of payment accounts with details",
              "source": "kontomatik.com FAQ"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Balance, available funds, currency",
              "source": "kontomatik.com FAQ"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "high",
              "evidence": "Transaction labeling product (ML-based)",
              "source": "kontomatik.com products"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Identity Verification product",
              "source": "kontomatik.com products"
            },
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "Risk Analysis (scoring) product",
              "source": "kontomatik.com products"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Risk Analysis (scoring) is a flagship product.",
              "source": "kontomatik.com products"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Signed income confirmation certificate widely recognised in PL lending.",
              "source": "kontomatik.com products"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Transaction labelling + vendor recognition + data summary.",
              "source": "kontomatik.com products"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Transaction list documented; sync model not",
              "source": "kontomatik.com FAQ"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Hundreds of leading banks in Europe",
              "source": "kontomatik.com FAQ"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Strong PL leadership + ES; broader EU more limited than EU-native CBPs.",
              "source": "kontomatik.com"
            }
          ],
          "absent": [
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "No public pricing",
              "source": "\u2014"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "'Does Kontomatik have a PISP license? No.' \u2014 no payment initiation.",
              "source": "kontomatik.com FAQ"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "No PISP, no payment links.",
              "source": "kontomatik.com FAQ"
            }
          ],
          "unknown": []
        }
      },
      "Spain": {
        "present_in_market": true,
        "breakdown": {
          "score": 4.05,
          "confidence_pct": 75,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "List of payment accounts with details",
              "source": "kontomatik.com FAQ"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Balance, available funds, currency",
              "source": "kontomatik.com FAQ"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "high",
              "evidence": "Transaction labeling product (ML-based)",
              "source": "kontomatik.com products"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Identity Verification product",
              "source": "kontomatik.com products"
            },
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "Risk Analysis (scoring) product",
              "source": "kontomatik.com products"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Risk Analysis (scoring) is a flagship product.",
              "source": "kontomatik.com products"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Signed income confirmation certificate widely recognised in PL lending.",
              "source": "kontomatik.com products"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Transaction labelling + vendor recognition + data summary.",
              "source": "kontomatik.com products"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Transaction list documented; sync model not",
              "source": "kontomatik.com FAQ"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Hundreds of leading banks in Europe",
              "source": "kontomatik.com FAQ"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Strong PL leadership + ES; broader EU more limited than EU-native CBPs.",
              "source": "kontomatik.com"
            }
          ],
          "absent": [
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "No public pricing",
              "source": "\u2014"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "'Does Kontomatik have a PISP license? No.' \u2014 no payment initiation.",
              "source": "kontomatik.com FAQ"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "No PISP, no payment links.",
              "source": "kontomatik.com FAQ"
            }
          ],
          "unknown": []
        }
      }
    },
    "Token.io": {
      "Australia": {
        "present_in_market": false,
        "breakdown": {
          "score": 4.19,
          "confidence_pct": 56,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Account Information Service (AIS)",
              "source": "token.io"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "AIS includes balances",
              "source": "token.io"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Via Dateio partnership: income & salary detection, categorisation",
              "source": "Ignite reports"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Pan-EU bank coverage; 'European market leader'",
              "source": "Ignite reports"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Token is a market-leading PISP \u2014 VRP central to product.",
              "source": "token.io"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Dateio partnership = rich enrichment for 126M EU users.",
              "source": "Ignite reports"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "medium",
              "evidence": "Pay-by-link is part of standard PISP offering.",
              "source": "token.io"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "European market leader by Ignite report wording.",
              "source": "Ignite reports"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "AIS provides transactions; sync model unknown",
              "source": "\u2014"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Account holder data via AIS; no dedicated identity product",
              "source": "\u2014"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Via Dateio enrichment; signed-document status unclear.",
              "source": "\u2014"
            }
          ],
          "absent": [
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "No public pricing",
              "source": "\u2014"
            }
          ],
          "unknown": [
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Not researched",
              "source": "\u2014"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Not researched in detail.",
              "source": "\u2014"
            }
          ]
        }
      },
      "Poland": {
        "present_in_market": true,
        "breakdown": {
          "score": 4.19,
          "confidence_pct": 56,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Account Information Service (AIS)",
              "source": "token.io"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "AIS includes balances",
              "source": "token.io"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Via Dateio partnership: income & salary detection, categorisation",
              "source": "Ignite reports"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Pan-EU bank coverage; 'European market leader'",
              "source": "Ignite reports"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Token is a market-leading PISP \u2014 VRP central to product.",
              "source": "token.io"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Dateio partnership = rich enrichment for 126M EU users.",
              "source": "Ignite reports"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "medium",
              "evidence": "Pay-by-link is part of standard PISP offering.",
              "source": "token.io"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "European market leader by Ignite report wording.",
              "source": "Ignite reports"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "AIS provides transactions; sync model unknown",
              "source": "\u2014"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Account holder data via AIS; no dedicated identity product",
              "source": "\u2014"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Via Dateio enrichment; signed-document status unclear.",
              "source": "\u2014"
            }
          ],
          "absent": [
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "No public pricing",
              "source": "\u2014"
            }
          ],
          "unknown": [
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Not researched",
              "source": "\u2014"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Not researched in detail.",
              "source": "\u2014"
            }
          ]
        }
      },
      "Spain": {
        "present_in_market": true,
        "breakdown": {
          "score": 4.19,
          "confidence_pct": 56,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Account Information Service (AIS)",
              "source": "token.io"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "AIS includes balances",
              "source": "token.io"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Via Dateio partnership: income & salary detection, categorisation",
              "source": "Ignite reports"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Pan-EU bank coverage; 'European market leader'",
              "source": "Ignite reports"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Token is a market-leading PISP \u2014 VRP central to product.",
              "source": "token.io"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Dateio partnership = rich enrichment for 126M EU users.",
              "source": "Ignite reports"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "medium",
              "evidence": "Pay-by-link is part of standard PISP offering.",
              "source": "token.io"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "European market leader by Ignite report wording.",
              "source": "Ignite reports"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "AIS provides transactions; sync model unknown",
              "source": "\u2014"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Account holder data via AIS; no dedicated identity product",
              "source": "\u2014"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Via Dateio enrichment; signed-document status unclear.",
              "source": "\u2014"
            }
          ],
          "absent": [
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "No public pricing",
              "source": "\u2014"
            }
          ],
          "unknown": [
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Not researched",
              "source": "\u2014"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Not researched in detail.",
              "source": "\u2014"
            }
          ]
        }
      }
    },
    "TrueLayer": {
      "Australia": {
        "present_in_market": false,
        "breakdown": {
          "score": 4.43,
          "confidence_pct": 63,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Data API: /accounts",
              "source": "docs.truelayer.com"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Data API: /accounts/{id}/balance",
              "source": "docs.truelayer.com"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Data Plus / Signal API for enrichment + categorisation",
              "source": "truelayer.com"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Verification product: account ownership + identity check",
              "source": "truelayer.com/verification"
            },
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "medium",
              "evidence": "Signal API \u2014 payment risk signals",
              "source": "truelayer.com/signal"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Providers list",
              "source": "docs.truelayer.com"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Verification + Signal for risk + affordability adjacent.",
              "source": "truelayer.com/verification"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "VRP / sweeping a key part of UK PISP product.",
              "source": "truelayer.com"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Signal API + Data Plus for enrichment + categorisation.",
              "source": "truelayer.com"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "Hosted Payment Page + payment-link flow.",
              "source": "truelayer.com"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Broad EU coverage from UK base.",
              "source": "truelayer.com"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Data API has transactions; cursor sync not the dominant model",
              "source": "\u2014"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Income data via Verification; signed-certificate status unclear.",
              "source": "\u2014"
            }
          ],
          "absent": [
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "No public per-call pricing",
              "source": "\u2014"
            }
          ],
          "unknown": []
        }
      },
      "Poland": {
        "present_in_market": false,
        "breakdown": {
          "score": 4.43,
          "confidence_pct": 63,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Data API: /accounts",
              "source": "docs.truelayer.com"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Data API: /accounts/{id}/balance",
              "source": "docs.truelayer.com"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Data Plus / Signal API for enrichment + categorisation",
              "source": "truelayer.com"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Verification product: account ownership + identity check",
              "source": "truelayer.com/verification"
            },
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "medium",
              "evidence": "Signal API \u2014 payment risk signals",
              "source": "truelayer.com/signal"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Providers list",
              "source": "docs.truelayer.com"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Verification + Signal for risk + affordability adjacent.",
              "source": "truelayer.com/verification"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "VRP / sweeping a key part of UK PISP product.",
              "source": "truelayer.com"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Signal API + Data Plus for enrichment + categorisation.",
              "source": "truelayer.com"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "Hosted Payment Page + payment-link flow.",
              "source": "truelayer.com"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Broad EU coverage from UK base.",
              "source": "truelayer.com"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Data API has transactions; cursor sync not the dominant model",
              "source": "\u2014"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Income data via Verification; signed-certificate status unclear.",
              "source": "\u2014"
            }
          ],
          "absent": [
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "No public per-call pricing",
              "source": "\u2014"
            }
          ],
          "unknown": []
        }
      },
      "Spain": {
        "present_in_market": true,
        "breakdown": {
          "score": 4.43,
          "confidence_pct": 63,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Data API: /accounts",
              "source": "docs.truelayer.com"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Data API: /accounts/{id}/balance",
              "source": "docs.truelayer.com"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Data Plus / Signal API for enrichment + categorisation",
              "source": "truelayer.com"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Verification product: account ownership + identity check",
              "source": "truelayer.com/verification"
            },
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "medium",
              "evidence": "Signal API \u2014 payment risk signals",
              "source": "truelayer.com/signal"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Providers list",
              "source": "docs.truelayer.com"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Verification + Signal for risk + affordability adjacent.",
              "source": "truelayer.com/verification"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "VRP / sweeping a key part of UK PISP product.",
              "source": "truelayer.com"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Signal API + Data Plus for enrichment + categorisation.",
              "source": "truelayer.com"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "Hosted Payment Page + payment-link flow.",
              "source": "truelayer.com"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Broad EU coverage from UK base.",
              "source": "truelayer.com"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Data API has transactions; cursor sync not the dominant model",
              "source": "\u2014"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Income data via Verification; signed-certificate status unclear.",
              "source": "\u2014"
            }
          ],
          "absent": [
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "No public per-call pricing",
              "source": "\u2014"
            }
          ],
          "unknown": []
        }
      }
    },
    "Unnax": {
      "Australia": {
        "present_in_market": false,
        "breakdown": {
          "score": 2.9,
          "confidence_pct": 32,
          "confidence_label": "low",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Account info (list, ids)",
            "Balance fetch",
            "Transactions sync (incremental, cursor-based)",
            "Transaction categorization & enrichment"
          ],
          "covered": [],
          "partial": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Account info available but payments-focused stack",
              "source": "\u2014"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Available within account info",
              "source": "\u2014"
            },
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "AIS supported but not Unnax's primary product",
              "source": "\u2014"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Some KYC/onboarding tooling",
              "source": "\u2014"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Spanish banks well covered; broader EU partial",
              "source": "\u2014"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Payments-focused stack; VRP unclear.",
              "source": "\u2014"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Not their focus.",
              "source": "\u2014"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Spanish focus + some international presence; not pan-EU.",
              "source": "unnax.com"
            }
          ],
          "absent": [
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "No public pricing",
              "source": "\u2014"
            }
          ],
          "unknown": [
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Not their focus",
              "source": "\u2014"
            },
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Not researched",
              "source": "\u2014"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Not core to Unnax product line.",
              "source": "\u2014"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Not researched.",
              "source": "\u2014"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Possible via payments stack; not advertised.",
              "source": "\u2014"
            }
          ]
        }
      },
      "Poland": {
        "present_in_market": false,
        "breakdown": {
          "score": 2.9,
          "confidence_pct": 32,
          "confidence_label": "low",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Account info (list, ids)",
            "Balance fetch",
            "Transactions sync (incremental, cursor-based)",
            "Transaction categorization & enrichment"
          ],
          "covered": [],
          "partial": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Account info available but payments-focused stack",
              "source": "\u2014"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Available within account info",
              "source": "\u2014"
            },
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "AIS supported but not Unnax's primary product",
              "source": "\u2014"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Some KYC/onboarding tooling",
              "source": "\u2014"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Spanish banks well covered; broader EU partial",
              "source": "\u2014"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Payments-focused stack; VRP unclear.",
              "source": "\u2014"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Not their focus.",
              "source": "\u2014"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Spanish focus + some international presence; not pan-EU.",
              "source": "unnax.com"
            }
          ],
          "absent": [
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "No public pricing",
              "source": "\u2014"
            }
          ],
          "unknown": [
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Not their focus",
              "source": "\u2014"
            },
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Not researched",
              "source": "\u2014"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Not core to Unnax product line.",
              "source": "\u2014"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Not researched.",
              "source": "\u2014"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Possible via payments stack; not advertised.",
              "source": "\u2014"
            }
          ]
        }
      },
      "Spain": {
        "present_in_market": true,
        "breakdown": {
          "score": 2.9,
          "confidence_pct": 32,
          "confidence_label": "low",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Account info (list, ids)",
            "Balance fetch",
            "Transactions sync (incremental, cursor-based)",
            "Transaction categorization & enrichment"
          ],
          "covered": [],
          "partial": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Account info available but payments-focused stack",
              "source": "\u2014"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Available within account info",
              "source": "\u2014"
            },
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "AIS supported but not Unnax's primary product",
              "source": "\u2014"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Some KYC/onboarding tooling",
              "source": "\u2014"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Spanish banks well covered; broader EU partial",
              "source": "\u2014"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Payments-focused stack; VRP unclear.",
              "source": "\u2014"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Not their focus.",
              "source": "\u2014"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Spanish focus + some international presence; not pan-EU.",
              "source": "unnax.com"
            }
          ],
          "absent": [
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "No public pricing",
              "source": "\u2014"
            }
          ],
          "unknown": [
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Not their focus",
              "source": "\u2014"
            },
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Not researched",
              "source": "\u2014"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Not core to Unnax product line.",
              "source": "\u2014"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Not researched.",
              "source": "\u2014"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Possible via payments stack; not advertised.",
              "source": "\u2014"
            }
          ]
        }
      }
    },
    "Frollo": {
      "Australia": {
        "present_in_market": true,
        "breakdown": {
          "score": 3.67,
          "confidence_pct": 58,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "CDR data: accounts list",
              "source": "frollo.us"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "CDR data: balance",
              "source": "frollo.us"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "PFM-oriented stack: built-in categorisation + spending insights",
              "source": "frollo.us"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "AU CDR ecosystem coverage",
              "source": "frollo.us"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "PFM-oriented stack with categorisation + insights.",
              "source": "frollo.us"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "CDR transactions; sync model varies",
              "source": "\u2014"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "CDR identity-related fields available; no dedicated product",
              "source": "\u2014"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "PFM stack supports affordability flows; no standalone product.",
              "source": "frollo.us"
            }
          ],
          "absent": [
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Not advertised",
              "source": "\u2014"
            },
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "No public pricing",
              "source": "\u2014"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "AU-only; PayTo not at VRP-level maturity.",
              "source": "Product scope"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "AU CDR doesn't include payment initiation at this level yet.",
              "source": "Product scope"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "AU-only \u2014 no EU PSD2 coverage.",
              "source": "Product scope"
            }
          ],
          "unknown": [
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Not researched.",
              "source": "\u2014"
            }
          ]
        }
      },
      "Poland": {
        "present_in_market": false,
        "breakdown": {
          "score": 3.67,
          "confidence_pct": 58,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "CDR data: accounts list",
              "source": "frollo.us"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "CDR data: balance",
              "source": "frollo.us"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "PFM-oriented stack: built-in categorisation + spending insights",
              "source": "frollo.us"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "AU CDR ecosystem coverage",
              "source": "frollo.us"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "PFM-oriented stack with categorisation + insights.",
              "source": "frollo.us"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "CDR transactions; sync model varies",
              "source": "\u2014"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "CDR identity-related fields available; no dedicated product",
              "source": "\u2014"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "PFM stack supports affordability flows; no standalone product.",
              "source": "frollo.us"
            }
          ],
          "absent": [
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Not advertised",
              "source": "\u2014"
            },
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "No public pricing",
              "source": "\u2014"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "AU-only; PayTo not at VRP-level maturity.",
              "source": "Product scope"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "AU CDR doesn't include payment initiation at this level yet.",
              "source": "Product scope"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "AU-only \u2014 no EU PSD2 coverage.",
              "source": "Product scope"
            }
          ],
          "unknown": [
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Not researched.",
              "source": "\u2014"
            }
          ]
        }
      },
      "Spain": {
        "present_in_market": false,
        "breakdown": {
          "score": 3.67,
          "confidence_pct": 58,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "CDR data: accounts list",
              "source": "frollo.us"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "CDR data: balance",
              "source": "frollo.us"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "PFM-oriented stack: built-in categorisation + spending insights",
              "source": "frollo.us"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "AU CDR ecosystem coverage",
              "source": "frollo.us"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "PFM-oriented stack with categorisation + insights.",
              "source": "frollo.us"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "CDR transactions; sync model varies",
              "source": "\u2014"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "CDR identity-related fields available; no dedicated product",
              "source": "\u2014"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "PFM stack supports affordability flows; no standalone product.",
              "source": "frollo.us"
            }
          ],
          "absent": [
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Not advertised",
              "source": "\u2014"
            },
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "No public pricing",
              "source": "\u2014"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "AU-only; PayTo not at VRP-level maturity.",
              "source": "Product scope"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "AU CDR doesn't include payment initiation at this level yet.",
              "source": "Product scope"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "AU-only \u2014 no EU PSD2 coverage.",
              "source": "Product scope"
            }
          ],
          "unknown": [
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Not researched.",
              "source": "\u2014"
            }
          ]
        }
      }
    },
    "Basiq": {
      "Australia": {
        "present_in_market": true,
        "breakdown": {
          "score": 4.0,
          "confidence_pct": 60,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "/users/{id}/accounts",
              "source": "api.basiq.io/docs"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Account balance in /accounts response",
              "source": "api.basiq.io/docs"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Built-in categorization + Insights product (affordability, income)",
              "source": "basiq.io"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Auth product returns identity from CDR",
              "source": "basiq.io"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Institutions endpoint with logos / metadata",
              "source": "api.basiq.io/docs"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Insights product covers affordability, income.",
              "source": "basiq.io"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Built-in categorisation + Insights enrichment.",
              "source": "basiq.io"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Transactions endpoint with filters; sync cursor model TBD",
              "source": "\u2014"
            },
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Insights product covers some risk-adjacent (affordability) signals",
              "source": "basiq.io"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "PayTo support via Cuscal in early access.",
              "source": "basiq.io"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Insights surface income; signed-doc status unclear.",
              "source": "basiq.io"
            }
          ],
          "absent": [
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "No public per-call pricing",
              "source": "\u2014"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "AU-only; no pay-by-link primitive.",
              "source": "Product scope"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "AU-only.",
              "source": "Product scope"
            }
          ],
          "unknown": []
        }
      },
      "Poland": {
        "present_in_market": false,
        "breakdown": {
          "score": 4.0,
          "confidence_pct": 60,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "/users/{id}/accounts",
              "source": "api.basiq.io/docs"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Account balance in /accounts response",
              "source": "api.basiq.io/docs"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Built-in categorization + Insights product (affordability, income)",
              "source": "basiq.io"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Auth product returns identity from CDR",
              "source": "basiq.io"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Institutions endpoint with logos / metadata",
              "source": "api.basiq.io/docs"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Insights product covers affordability, income.",
              "source": "basiq.io"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Built-in categorisation + Insights enrichment.",
              "source": "basiq.io"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Transactions endpoint with filters; sync cursor model TBD",
              "source": "\u2014"
            },
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Insights product covers some risk-adjacent (affordability) signals",
              "source": "basiq.io"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "PayTo support via Cuscal in early access.",
              "source": "basiq.io"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Insights surface income; signed-doc status unclear.",
              "source": "basiq.io"
            }
          ],
          "absent": [
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "No public per-call pricing",
              "source": "\u2014"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "AU-only; no pay-by-link primitive.",
              "source": "Product scope"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "AU-only.",
              "source": "Product scope"
            }
          ],
          "unknown": []
        }
      },
      "Spain": {
        "present_in_market": false,
        "breakdown": {
          "score": 4.0,
          "confidence_pct": 60,
          "confidence_label": "medium",
          "missing_must_haves": [],
          "partial_must_haves": [
            "Transactions sync (incremental, cursor-based)"
          ],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "/users/{id}/accounts",
              "source": "api.basiq.io/docs"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Account balance in /accounts response",
              "source": "api.basiq.io/docs"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "medium",
              "evidence": "Built-in categorization + Insights product (affordability, income)",
              "source": "basiq.io"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Auth product returns identity from CDR",
              "source": "basiq.io"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Institutions endpoint with logos / metadata",
              "source": "api.basiq.io/docs"
            },
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Insights product covers affordability, income.",
              "source": "basiq.io"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "Built-in categorisation + Insights enrichment.",
              "source": "basiq.io"
            }
          ],
          "partial": [
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "low",
              "evidence": "Transactions endpoint with filters; sync cursor model TBD",
              "source": "\u2014"
            },
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "low",
              "evidence": "Insights product covers some risk-adjacent (affordability) signals",
              "source": "basiq.io"
            },
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "PayTo support via Cuscal in early access.",
              "source": "basiq.io"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "low",
              "evidence": "Insights surface income; signed-doc status unclear.",
              "source": "basiq.io"
            }
          ],
          "absent": [
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "No public per-call pricing",
              "source": "\u2014"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "AU-only; no pay-by-link primitive.",
              "source": "Product scope"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "AU-only.",
              "source": "Product scope"
            }
          ],
          "unknown": []
        }
      }
    },
    "Plaid": {
      "Australia": {
        "present_in_market": false,
        "breakdown": {
          "score": 4.24,
          "confidence_pct": 97,
          "confidence_label": "high",
          "missing_must_haves": [],
          "partial_must_haves": [],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "high",
              "evidence": "/accounts/get",
              "source": "plaid.com"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "high",
              "evidence": "/accounts/balance/get",
              "source": "plaid.com"
            },
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "high",
              "evidence": "/transactions/sync (cursor-based)",
              "source": "plaid.com"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "high",
              "evidence": "personal_finance_category taxonomy",
              "source": "plaid.com"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "/identity/get",
              "source": "plaid.com"
            },
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "/signal/evaluate, /signal/decision, /signal/return",
              "source": "plaid.com/signal"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "/institutions/* endpoints",
              "source": "plaid.com"
            },
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Per-call billing tracked in app/workers/third_party_costs",
              "source": "Cleo monorepo"
            }
          ],
          "partial": [
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "UK Wallet covers some payment-init use cases; not full VRP standard.",
              "source": "plaid.com"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "personal_finance_category provides taxonomy; merchant logos / recurring detection less developed than Tink/Yapily.",
              "source": "plaid.com"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "EU coverage exists (FR, DE, IE, IT, NL, ES, BE, DK, SE, NO, EE, LV, LT, PL, PT) but narrower than EU-native players.",
              "source": "plaid.com/global"
            }
          ],
          "absent": [
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Plaid has Signal (ACH-return risk) but no affordability product.",
              "source": "plaid.com/products"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Plaid Income returns transactions/streams; no signed certificate document.",
              "source": "plaid.com/products/income"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "Plaid Transfer is server-side initiated without a hosted-link primitive.",
              "source": "plaid.com/products/transfer"
            }
          ],
          "unknown": []
        }
      },
      "Poland": {
        "present_in_market": true,
        "breakdown": {
          "score": 4.24,
          "confidence_pct": 97,
          "confidence_label": "high",
          "missing_must_haves": [],
          "partial_must_haves": [],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "high",
              "evidence": "/accounts/get",
              "source": "plaid.com"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "high",
              "evidence": "/accounts/balance/get",
              "source": "plaid.com"
            },
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "high",
              "evidence": "/transactions/sync (cursor-based)",
              "source": "plaid.com"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "high",
              "evidence": "personal_finance_category taxonomy",
              "source": "plaid.com"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "/identity/get",
              "source": "plaid.com"
            },
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "/signal/evaluate, /signal/decision, /signal/return",
              "source": "plaid.com/signal"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "/institutions/* endpoints",
              "source": "plaid.com"
            },
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Per-call billing tracked in app/workers/third_party_costs",
              "source": "Cleo monorepo"
            }
          ],
          "partial": [
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "UK Wallet covers some payment-init use cases; not full VRP standard.",
              "source": "plaid.com"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "personal_finance_category provides taxonomy; merchant logos / recurring detection less developed than Tink/Yapily.",
              "source": "plaid.com"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "EU coverage exists (FR, DE, IE, IT, NL, ES, BE, DK, SE, NO, EE, LV, LT, PL, PT) but narrower than EU-native players.",
              "source": "plaid.com/global"
            }
          ],
          "absent": [
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Plaid has Signal (ACH-return risk) but no affordability product.",
              "source": "plaid.com/products"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Plaid Income returns transactions/streams; no signed certificate document.",
              "source": "plaid.com/products/income"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "Plaid Transfer is server-side initiated without a hosted-link primitive.",
              "source": "plaid.com/products/transfer"
            }
          ],
          "unknown": []
        }
      },
      "Spain": {
        "present_in_market": true,
        "breakdown": {
          "score": 4.24,
          "confidence_pct": 97,
          "confidence_label": "high",
          "missing_must_haves": [],
          "partial_must_haves": [],
          "covered": [
            {
              "id": "accounts",
              "name": "Account info (list, ids)",
              "criticality": "must_have",
              "confidence": "high",
              "evidence": "/accounts/get",
              "source": "plaid.com"
            },
            {
              "id": "balance",
              "name": "Balance fetch",
              "criticality": "must_have",
              "confidence": "high",
              "evidence": "/accounts/balance/get",
              "source": "plaid.com"
            },
            {
              "id": "transactions_sync",
              "name": "Transactions sync (incremental, cursor-based)",
              "criticality": "must_have",
              "confidence": "high",
              "evidence": "/transactions/sync (cursor-based)",
              "source": "plaid.com"
            },
            {
              "id": "categorization_enrichment",
              "name": "Transaction categorization & enrichment",
              "criticality": "must_have",
              "confidence": "high",
              "evidence": "personal_finance_category taxonomy",
              "source": "plaid.com"
            },
            {
              "id": "identity",
              "name": "Identity verification & matching (fraud)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "/identity/get",
              "source": "plaid.com"
            },
            {
              "id": "signal_risk",
              "name": "Plaid Signal (real-time risk score)",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "/signal/evaluate, /signal/decision, /signal/return",
              "source": "plaid.com/signal"
            },
            {
              "id": "institutions",
              "name": "Institution metadata (logos, colors, list)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "/institutions/* endpoints",
              "source": "plaid.com"
            },
            {
              "id": "third_party_costs",
              "name": "Per-call / per-transaction cost tracking",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Per-call billing tracked in app/workers/third_party_costs",
              "source": "Cleo monorepo"
            }
          ],
          "partial": [
            {
              "id": "vrp_recurring_payments",
              "name": "Variable Recurring Payments (VRP, sweeping)",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "UK Wallet covers some payment-init use cases; not full VRP standard.",
              "source": "plaid.com"
            },
            {
              "id": "deep_merchant_enrichment",
              "name": "Deep merchant enrichment (beyond basic categorisation)",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "personal_finance_category provides taxonomy; merchant logos / recurring detection less developed than Tink/Yapily.",
              "source": "plaid.com"
            },
            {
              "id": "psd2_eu_breadth",
              "name": "Cross-border EU PSD2 bank coverage breadth",
              "criticality": "nice_to_have",
              "confidence": "medium",
              "evidence": "EU coverage exists (FR, DE, IE, IT, NL, ES, BE, DK, SE, NO, EE, LV, LT, PL, PT) but narrower than EU-native players.",
              "source": "plaid.com/global"
            }
          ],
          "absent": [
            {
              "id": "affordability_check",
              "name": "Affordability / eligibility scoring",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Plaid has Signal (ACH-return risk) but no affordability product.",
              "source": "plaid.com/products"
            },
            {
              "id": "income_certificate",
              "name": "Signed income confirmation certificate",
              "criticality": "nice_to_have",
              "confidence": "high",
              "evidence": "Plaid Income returns transactions/streams; no signed certificate document.",
              "source": "plaid.com/products/income"
            },
            {
              "id": "pay_by_link",
              "name": "Pre-authorised pay-by-link / hosted payment page",
              "criticality": "optional",
              "confidence": "high",
              "evidence": "Plaid Transfer is server-side initiated without a hosted-link primitive.",
              "source": "plaid.com/products/transfer"
            }
          ],
          "unknown": []
        }
      }
    }
  }
}