Event SpecsFinance & Fintech

Finance & Fintech Event Spec

This page defines all standard finance and fintech events for Datafly Signal — covering retail banking, payments, lending, cards, and investment platforms. Implement these events to enable accurate server-side delivery to advertising and analytics platforms across the full customer lifecycle: discovery, lead generation, onboarding, conversion, and retention.

🚫

Privacy requirement. Financial products handle highly sensitive personal data. Never send raw PII as event properties. Email addresses and phone numbers must be SHA-256 hashed before tracking. Do not send account numbers, sort codes, card numbers, or national insurance / social security numbers in any form.

All event names use snake_case and reuse GA4’s recommended event names where an equivalent exists (view_item, search, sign_up, login, generate_lead, purchase). Monetary amounts should be sent as numbers (not strings) with a separate currency property using ISO 4217 codes (e.g. 'GBP', 'EUR', 'USD').

All events are sent via datafly.track(). Properties are passed as a flat object in the second argument.


Discovery & Engagement

Events covering how prospects discover and engage with financial products before applying or signing up.

Fired when a user searches for a product, branch, ATM, or help article.

datafly.track('search', {
  search_term: 'fixed rate savings'
})
PropertyTypeRequiredDescription
search_termstringRequiredThe search term entered by the user

view_item

Fired when a user views a product detail page (e.g. a specific savings account, credit card, or loan product). Also accepted as view_content.

datafly.track('view_item', {
  currency: 'GBP',
  value: 0,
  items: [
    {
      item_id: 'sav-fixed-1yr',
      item_name: '1 Year Fixed Saver',
      item_category: 'Savings',
      item_brand: 'Acme Bank'
    }
  ]
})
PropertyTypeRequiredDescription
currencystringOptionalISO 4217 currency code
valuenumberOptionalIndicative monetary value of the product, if applicable
itemsarrayOptionalArray containing the viewed product (see Items Array Schema)

view_item_list

Fired when a user views a list of products, such as a comparison table or product category page.

datafly.track('view_item_list', {
  item_list_id: 'credit-cards',
  item_list_name: 'Credit Cards',
  items: [
    { item_id: 'cc-rewards', item_name: 'Rewards Credit Card', index: 0, item_category: 'Credit Cards' },
    { item_id: 'cc-balance', item_name: 'Balance Transfer Card', index: 1, item_category: 'Credit Cards' }
  ]
})
PropertyTypeRequiredDescription
item_list_idstringOptionalMachine-readable identifier for the list
item_list_namestringOptionalHuman-readable name of the list or category
itemsarrayOptionalArray of products displayed in the list (see Items Array Schema)

select_item

Fired when a user clicks into a product from a list or comparison page.

datafly.track('select_item', {
  item_list_id: 'credit-cards',
  item_list_name: 'Credit Cards',
  items: [
    { item_id: 'cc-rewards', item_name: 'Rewards Credit Card', index: 0, item_category: 'Credit Cards' }
  ]
})
PropertyTypeRequiredDescription
item_list_idstringOptionalIdentifier of the list the product was selected from
item_list_namestringOptionalName of the list the product was selected from
itemsarrayOptionalArray containing the selected product (see Items Array Schema)

quote_requested

Fired when a prospect requests an indicative quote, rate, or eligibility result.

datafly.track('quote_requested', {
  product_type: 'personal_loan',
  amount: 10000,
  currency: 'GBP',
  term_months: 36
})
PropertyTypeRequiredDescription
product_typestringOptionalProduct the quote relates to (e.g. 'personal_loan', 'mortgage', 'home_insurance')
amountnumberOptionalAmount requested in the quote
currencystringOptionalISO 4217 currency code
term_monthsnumberOptionalRequested term in months, where applicable

eligibility_checked

Fired when a soft eligibility or affordability check returns a result, typically without affecting the customer’s credit score.

datafly.track('eligibility_checked', {
  product_type: 'credit_card',
  outcome: 'eligible',
  pre_approved: true
})
PropertyTypeRequiredDescription
product_typestringOptionalProduct checked (e.g. 'credit_card', 'personal_loan')
outcomestringOptionalResult: 'eligible', 'ineligible', 'more_info_needed'
pre_approvedbooleanOptionalWhether the customer was pre-approved

Lead Generation

Events covering marketing-led capture of prospect interest. These are the primary conversion signals for paid acquisition campaigns.

generate_lead

Fired when a prospect submits a lead form, requests a callback, or otherwise expresses qualified intent. This is the core acquisition conversion for finance campaigns — ensure it fires reliably.

datafly.track('generate_lead', {
  currency: 'GBP',
  value: 50,
  lead_type: 'mortgage_enquiry',
  product_type: 'mortgage'
})
PropertyTypeRequiredDescription
currencystringOptionalISO 4217 currency code for value
valuenumberOptionalEstimated lead value to the business
lead_typestringOptionalNature of the lead (e.g. 'mortgage_enquiry', 'callback_request', 'newsletter')
product_typestringOptionalProduct the lead relates to
⚠️

Never include the prospect’s email, phone number, or name in generate_lead properties. Identity is attached server-side from hashed identifiers, never from raw form values.


application_started

Fired when a prospect begins a product application (loan, card, account, mortgage).

datafly.track('application_started', {
  product_type: 'personal_loan',
  amount: 10000,
  currency: 'GBP'
})
PropertyTypeRequiredDescription
product_typestringOptionalProduct being applied for
amountnumberOptionalAmount requested, where applicable
currencystringOptionalISO 4217 currency code

application_submitted

Fired when a prospect completes and submits a product application for decisioning.

datafly.track('application_submitted', {
  application_id: 'app_5c2e9a4f',
  product_type: 'personal_loan',
  amount: 10000,
  currency: 'GBP'
})
PropertyTypeRequiredDescription
application_idstringOptionalUnique application reference
product_typestringOptionalProduct being applied for
amountnumberOptionalAmount requested
currencystringOptionalISO 4217 currency code

Onboarding & KYC

Events covering account creation and identity verification flows.

sign_up

Fired when a user completes registration and creates login credentials, before or alongside account opening.

datafly.track('sign_up', {
  method: 'email'
})
PropertyTypeRequiredDescription
methodstringOptionalRegistration method (e.g. email, google, apple)

account_opened

A customer has successfully opened a new account.

datafly.track('account_opened', {
  account_type: 'current',
  channel: 'mobile'
})
PropertyTypeRequiredDescription
account_typestringNoType of account: 'current', 'savings', 'investment', 'business'
channelstringNoChannel used to open the account: 'web', 'mobile', 'branch'

account_closed

A customer has closed an account.

datafly.track('account_closed', {
  account_type: 'savings',
  reason: 'switching_provider'
})
PropertyTypeRequiredDescription
account_typestringNoType of account closed
reasonstringNoClosure reason code (e.g. 'switching_provider', 'no_longer_needed')

kyc_started

A customer has started an identity or compliance verification flow.

datafly.track('kyc_started', {
  verification_type: 'identity'
})
PropertyTypeRequiredDescription
verification_typestringNoType of check: 'identity', 'address', 'income'

kyc_completed

A KYC verification step has been completed and a result returned.

datafly.track('kyc_completed', {
  verification_type: 'identity',
  outcome: 'approved'
})
PropertyTypeRequiredDescription
verification_typestringNoType of check performed
outcomestringNoResult of the check: 'approved', 'pending', 'rejected'

kyc_failed

A KYC verification step has failed.

⚠️

Do not include failure details that could expose personally identifiable information. Use reason codes rather than free-text descriptions from the verification provider.

datafly.track('kyc_failed', {
  verification_type: 'address',
  failure_reason: 'document_unreadable'
})
PropertyTypeRequiredDescription
verification_typestringNoType of check that failed
failure_reasonstringNoReason code for the failure (e.g. 'document_expired', 'name_mismatch')

Authentication

Events covering secure login and access attempts.

login

Fired when a user successfully signs in to their account. Equivalent to login_succeeded; use whichever fits your taxonomy.

datafly.track('login', {
  method: 'biometric'
})
PropertyTypeRequiredDescription
methodstringOptionalAuthentication method (e.g. password, biometric, sms_otp, totp)

login_attempted

A user has submitted credentials or initiated a login flow.

datafly.track('login_attempted', {
  method: 'biometric'
})
PropertyTypeRequiredDescription
methodstringNoAuthentication method: 'password', 'biometric', 'sms_otp', 'totp'

login_succeeded

Authentication was successful.

datafly.track('login_succeeded', {
  method: 'biometric'
})
PropertyTypeRequiredDescription
methodstringNoAuthentication method used

login_failed

Authentication attempt failed.

datafly.track('login_failed', {
  method: 'sms_otp',
  failure_reason: 'otp_expired'
})
PropertyTypeRequiredDescription
methodstringNoAuthentication method attempted
failure_reasonstringNoReason code (e.g. 'wrong_password', 'otp_expired', 'account_locked')

Transactions

Events covering payment initiation, completion, and failure.

transaction_initiated

A financial transaction has been submitted by the customer.

datafly.track('transaction_initiated', {
  transaction_type: 'payment',
  amount: 89.50,
  currency: 'GBP',
  channel: 'mobile'
})
PropertyTypeRequiredDescription
transaction_typestringNoType of transaction: 'payment', 'transfer', 'withdrawal', 'deposit'
amountnumberNoTransaction amount
currencystringNoISO 4217 currency code
channelstringNoOriginating channel: 'web', 'mobile', 'api'

transaction_completed

A transaction has been processed successfully.

datafly.track('transaction_completed', {
  transaction_id: 'txn_8f3a2b1c',
  transaction_type: 'payment',
  amount: 89.50,
  currency: 'GBP'
})
PropertyTypeRequiredDescription
transaction_idstringNoUnique transaction reference
transaction_typestringNoType of transaction
amountnumberNoTransaction amount
currencystringNoISO 4217 currency code

transaction_failed

A transaction could not be processed.

datafly.track('transaction_failed', {
  transaction_type: 'payment',
  amount: 350.00,
  currency: 'GBP',
  failure_reason: 'insufficient_funds'
})
PropertyTypeRequiredDescription
transaction_typestringNoType of transaction
amountnumberNoAttempted amount
currencystringNoISO 4217 currency code
failure_reasonstringNoReason code (e.g. 'insufficient_funds', 'card_declined', 'fraud_block')

payment_made

A payment to a merchant or payee has been made.

datafly.track('payment_made', {
  payment_id: 'pay_9d2c1a3e',
  amount: 24.99,
  currency: 'GBP',
  payment_method: 'card',
  merchant_category: 'groceries'
})
PropertyTypeRequiredDescription
payment_idstringNoUnique payment reference
amountnumberNoPayment amount
currencystringNoISO 4217 currency code
payment_methodstringNoMethod used (e.g. 'card', 'direct_debit', 'open_banking')
merchant_categorystringNoMerchant category code or label (e.g. 'groceries', 'travel')

payment_completed

A payment has settled successfully end-to-end. Use this as the canonical “money received” conversion when delivering payment success to advertising platforms.

datafly.track('payment_completed', {
  payment_id: 'pay_9d2c1a3e',
  amount: 24.99,
  currency: 'GBP',
  payment_method: 'card'
})
PropertyTypeRequiredDescription
payment_idstringNoUnique payment reference — used for deduplication
amountnumberNoSettled payment amount
currencystringNoISO 4217 currency code
payment_methodstringNoMethod used (e.g. 'card', 'direct_debit', 'open_banking')

payment_failed

A payment attempt failed.

datafly.track('payment_failed', {
  payment_id: 'pay_4b7e9f0d',
  amount: 199.00,
  currency: 'GBP',
  failure_reason: 'card_declined'
})
PropertyTypeRequiredDescription
payment_idstringNoPayment reference
amountnumberNoAttempted amount
currencystringNoISO 4217 currency code
failure_reasonstringNoReason code for the failure

invoice_paid

Fired when a customer pays an invoice (common in business banking, accounting, and B2B fintech). Counts as a revenue conversion.

datafly.track('invoice_paid', {
  invoice_id: 'inv_7a1c4e9d',
  amount: 1250.00,
  currency: 'GBP',
  payment_method: 'open_banking'
})
PropertyTypeRequiredDescription
invoice_idstringNoUnique invoice reference — used for deduplication
amountnumberNoInvoice amount paid
currencystringNoISO 4217 currency code
payment_methodstringNoMethod used (e.g. 'card', 'direct_debit', 'open_banking')

transfer_initiated

A funds transfer between accounts has been initiated.

datafly.track('transfer_initiated', {
  transfer_id: 'trf_c3d5e8f2',
  amount: 500.00,
  currency: 'GBP',
  destination_type: 'external'
})
PropertyTypeRequiredDescription
transfer_idstringNoUnique transfer reference
amountnumberNoTransfer amount
currencystringNoISO 4217 currency code
destination_typestringNoDestination type: 'internal', 'external', 'international'

transfer_completed

A transfer has settled successfully.

datafly.track('transfer_completed', {
  transfer_id: 'trf_c3d5e8f2',
  amount: 500.00,
  currency: 'GBP'
})
PropertyTypeRequiredDescription
transfer_idstringNoUnique transfer reference
amountnumberNoTransferred amount
currencystringNoISO 4217 currency code

Cards & Lending

Events covering card applications and loan lifecycle.

card_applied

A customer has submitted an application for a card product.

datafly.track('card_applied', {
  card_type: 'credit',
  credit_limit_requested: 3000
})
PropertyTypeRequiredDescription
card_typestringNoCard type: 'credit', 'debit', 'prepaid'
credit_limit_requestednumberNoRequested credit limit (credit cards only)

card_approved

A card application has been approved.

datafly.track('card_approved', {
  card_type: 'credit',
  credit_limit: 2500
})
PropertyTypeRequiredDescription
card_typestringNoCard type approved
credit_limitnumberNoApproved credit limit

card_activated

A card has been activated by the customer.

datafly.track('card_activated', {
  card_type: 'credit',
  channel: 'app'
})
PropertyTypeRequiredDescription
card_typestringNoType of card activated
channelstringNoActivation channel: 'app', 'web', 'ivr'

loan_applied

A customer has submitted a loan application.

datafly.track('loan_applied', {
  loan_type: 'personal',
  amount_requested: 10000,
  currency: 'GBP',
  term_months: 36
})
PropertyTypeRequiredDescription
loan_typestringNoLoan type: 'personal', 'mortgage', 'auto', 'business'
amount_requestednumberNoAmount requested
currencystringNoISO 4217 currency code
term_monthsnumberNoRequested loan term in months

loan_approved

A loan application has been approved.

datafly.track('loan_approved', {
  loan_type: 'personal',
  amount_approved: 8000,
  currency: 'GBP',
  interest_rate: 6.9,
  term_months: 36
})
PropertyTypeRequiredDescription
loan_typestringNoLoan type
amount_approvednumberNoApproved loan amount
currencystringNoISO 4217 currency code
interest_ratenumberNoAnnual interest rate as a percentage (e.g. 6.9 for 6.9% APR)
term_monthsnumberNoApproved loan term in months

loan_funded

The approved loan amount has been disbursed to the customer. This is typically the revenue-recognised conversion for lending campaigns.

datafly.track('loan_funded', {
  loan_id: 'loan_7e4a1f2b',
  amount: 8000,
  currency: 'GBP'
})
PropertyTypeRequiredDescription
loan_idstringNoUnique loan identifier
amountnumberNoDisbursed amount
currencystringNoISO 4217 currency code

Investments & Trading

Events covering funding, trading, and portfolio activity on investment and wealth platforms.

deposit_made

A customer has funded their account or wallet.

datafly.track('deposit_made', {
  deposit_id: 'dep_1f9a3c7e',
  amount: 1000.00,
  currency: 'GBP',
  funding_method: 'bank_transfer'
})
PropertyTypeRequiredDescription
deposit_idstringNoUnique deposit reference — used for deduplication
amountnumberNoAmount deposited
currencystringNoISO 4217 currency code
funding_methodstringNoFunding method (e.g. 'card', 'bank_transfer', 'open_banking')

withdrawal_made

A customer has withdrawn funds from their account or wallet.

datafly.track('withdrawal_made', {
  withdrawal_id: 'wdr_4b2e8d1a',
  amount: 250.00,
  currency: 'GBP'
})
PropertyTypeRequiredDescription
withdrawal_idstringNoUnique withdrawal reference
amountnumberNoAmount withdrawn
currencystringNoISO 4217 currency code

trade_executed

A buy or sell order has been executed.

datafly.track('trade_executed', {
  trade_id: 'trd_6c9f2a4b',
  side: 'buy',
  instrument_type: 'equity',
  symbol: 'VWRL',
  amount: 500.00,
  currency: 'GBP'
})
PropertyTypeRequiredDescription
trade_idstringNoUnique trade reference
sidestringNoDirection: 'buy', 'sell'
instrument_typestringNoAsset type: 'equity', 'etf', 'crypto', 'fund', 'bond'
symbolstringNoTicker or instrument symbol
amountnumberNoTrade value
currencystringNoISO 4217 currency code

portfolio_funded

A customer has funded a portfolio or investment product for the first time. Often the key activation conversion for wealth platforms.

datafly.track('portfolio_funded', {
  portfolio_id: 'pf_8d3a1c6e',
  amount: 5000.00,
  currency: 'GBP',
  product_type: 'stocks_and_shares_isa'
})
PropertyTypeRequiredDescription
portfolio_idstringNoUnique portfolio reference
amountnumberNoAmount funded
currencystringNoISO 4217 currency code
product_typestringNoProduct wrapper (e.g. 'stocks_and_shares_isa', 'general_investment', 'pension')

subscription_started

A customer has started a recurring subscription or premium plan (e.g. a paid account tier or advice service).

datafly.track('subscription_started', {
  plan: 'premium',
  amount: 9.99,
  currency: 'GBP',
  billing_period: 'monthly'
})
PropertyTypeRequiredDescription
planstringNoPlan name or tier (e.g. 'premium', 'metal')
amountnumberNoRecurring charge amount
currencystringNoISO 4217 currency code
billing_periodstringNoBilling cadence: 'monthly', 'annual'

Account Management

Events covering account self-service and financial management features that drive retention and engagement.

statement_viewed

A customer has viewed an account statement.

datafly.track('statement_viewed', {
  account_type: 'current',
  period: '2026-02'
})
PropertyTypeRequiredDescription
account_typestringNoType of account the statement relates to
periodstringNoStatement period in YYYY-MM format (e.g. '2026-02')

alert_created

A customer has set up a balance or activity alert.

datafly.track('alert_created', {
  alert_type: 'low_balance',
  threshold: 100
})
PropertyTypeRequiredDescription
alert_typestringNoAlert type: 'low_balance', 'large_transaction', 'unusual_activity'
thresholdnumberNoAmount threshold that triggers the alert

budget_created

A customer has created a spending budget for a category.

datafly.track('budget_created', {
  budget_id: 'bgt_2a3f9c1d',
  category: 'eating_out',
  amount: 200,
  currency: 'GBP'
})
PropertyTypeRequiredDescription
budget_idstringNoUnique identifier for the budget
categorystringNoSpending category (e.g. 'eating_out', 'transport', 'subscriptions')
amountnumberNoBudget limit
currencystringNoISO 4217 currency code

Items Array Schema

💡

Several discovery events accept an items array describing the financial products being viewed or compared. Each object can include the following properties using GA4-style field names. Signal’s server-side blueprints automatically transform these to vendor-specific formats (e.g., Meta’s contents[] with id/title fields).

PropertyTypeDescription
item_idstringYour internal product ID (e.g. sav-fixed-1yr)
item_namestringProduct display name
item_categorystringProduct category (e.g. Savings, Credit Cards, Loans)
item_brandstringBrand or sub-brand name
item_variantstringProduct variant (e.g. term, tier)
pricenumberIndicative price, fee, or rate where applicable
indexnumberPosition in list (0-indexed, relevant in list/comparison contexts)
currencystringISO 4217 currency code
item_list_idstringIdentifier of the list the product was shown in
item_list_namestringName of the list the product was shown in

Vendor Mapping

The table below shows how Datafly Signal maps finance events to the native event names expected by each vendor’s server-side API. Signal uses the GA4-style event names as its canonical format, and blueprints handle the transformation to vendor-specific payloads. Where a vendor has no native equivalent, the event is delivered as a custom event, shown as (custom).

Signal EventGA4Meta CAPITikTok Events API
searchsearchSearchSearch
view_itemview_itemViewContentViewContent
view_item_listview_item_listViewContentViewContent
select_itemselect_itemViewContentClickButton
quote_requestedquote_requested (custom)LeadSubmitForm
eligibility_checkedeligibility_checked (custom)LeadSubmitForm
generate_leadgenerate_leadLeadSubmitForm
application_startedapplication_started (custom)InitiateCheckoutInitiateCheckout
application_submittedapplication_submitted (custom)SubmitApplicationSubmitForm
sign_upsign_upCompleteRegistrationCompleteRegistration
account_openedaccount_opened (custom)CompleteRegistrationCompleteRegistration
account_closedaccount_closed (custom)(custom)(custom)
kyc_startedkyc_started (custom)(custom)(custom)
kyc_completedkyc_completed (custom)(custom)(custom)
kyc_failedkyc_failed (custom)(custom)(custom)
loginlogin(custom)(custom)
login_attemptedlogin_attempted (custom)(custom)(custom)
login_succeededlogin_succeeded (custom)(custom)(custom)
login_failedlogin_failed (custom)(custom)(custom)
transaction_initiatedtransaction_initiated (custom)InitiateCheckoutInitiateCheckout
transaction_completedtransaction_completed (custom)PurchaseCompletePayment
transaction_failedtransaction_failed (custom)(custom)(custom)
payment_madepayment_made (custom)PurchaseCompletePayment
payment_completedpayment_completed (custom)PurchaseCompletePayment
payment_failedpayment_failed (custom)(custom)(custom)
invoice_paidinvoice_paid (custom)PurchaseCompletePayment
transfer_initiatedtransfer_initiated (custom)(custom)(custom)
transfer_completedtransfer_completed (custom)(custom)(custom)
card_appliedcard_applied (custom)InitiateCheckoutInitiateCheckout
card_approvedcard_approved (custom)SubmitApplicationSubmitForm
card_activatedcard_activated (custom)(custom)(custom)
loan_appliedloan_applied (custom)InitiateCheckoutInitiateCheckout
loan_approvedloan_approved (custom)SubmitApplicationSubmitForm
loan_fundedloan_funded (custom)PurchaseCompletePayment
deposit_madedeposit_made (custom)PurchaseCompletePayment
withdrawal_madewithdrawal_made (custom)(custom)(custom)
trade_executedtrade_executed (custom)PurchaseCompletePayment
portfolio_fundedportfolio_funded (custom)PurchaseCompletePayment
subscription_startedsubscription_started (custom)SubscribeSubscribe
statement_viewedstatement_viewed (custom)(custom)(custom)
alert_createdalert_created (custom)(custom)(custom)
budget_createdbudget_created (custom)(custom)(custom)