UK Consumer ISA Savings Data 2025 (Sample)
Overview
TFE Group Ltd. is the UK's leading market & competitive intelligence provider for financial services. Our ISA Consumer Intelligence dataset provides comprehensive insights into UK ISA market behavior through aggregated and anonymised consumer data collected monthly from thousands of consumers across ISA, credit card, pensions, mortgages and investing verticals.
Dataset Description
This self-reported consumer behavioural segmentation dataset contains demographic data, provider data & switching intent to identify growth segments, provider success amongst key demographics, segment trends and personas for smarter marketing, retention & strategy.
Key Features
- Monthly Data Collection: Fresh insights from thousands of UK consumers
- Comprehensive Coverage: Both Cash ISA and Stocks & Shares ISA products
- Provider Switching Intelligence: Track customer movement between providers
- Demographic Segmentation: Age groups, income brackets, and behavioral patterns
- Deposit & Investment Patterns: Initial deposits, monthly contributions, and investment timeframes
Data Schema
Column Name | Data Type | Description |
ISA_TYPE | Varchar | Type of ISA (Cash ISA, Stocks & Shares ISA) |
AGE_GROUP | Varchar | Customer age segment (18-24, 25-34, 35-44, 45-54, 55-64, 65+) |
ANNUAL_INCOME | Number | Annual income bracket (Under 20k, 20k-30k, 30k-40k, 40k-50k, 50k-75k, 75k+) |
INITIAL_DEPOSIT | Number | Initial deposit amount in GBP |
MONTHLY_DEPOSIT | Varchar | Monthly contribution amount |
PROVIDER_NAME | Varchar | Financial provider name (for non-transfer data) |
TRANSFER_ISA | Boolean | Whether customer is transferring their ISA |
CURRENT_PROVIDER | Varchar | Current ISA provider (for transfer data) |
NEW_PROVIDER | Varchar | Destination provider (for transfer data) |
INTEREST_RATE | Number | Interest rate offered (Cash ISA only) |
IS_FIRST_ISA | Boolean | Whether this is the customer's first ISA |
PROMO_ACTIVE | Boolean | Whether promotional rate is active |
VARIABLE_ACTIVE | Boolean | Whether variable rate is active |
YEARS | Number | Number of years customer has held ISA |
Provider Data Structure
The dataset uses three provider columns to capture different customer scenarios:
- PROVIDER_NAME: Used for non-transfer data (customers not interested in transferring)
- CURRENT_PROVIDER: Current ISA provider (for customers considering or completing transfers)
- NEW_PROVIDER: Destination provider post-transfer
Business Use Cases
🧑🤝🧑 Audience Segmentation
Segment UK consumer savings by age & income to understand average household wealth, deposit patterns, and monthly contributions as a percentage of savings.
📈 Demand Forecasting
Identify ISA depositors with 1000+ records to predict potential revenue impact during ISA season versus market expectations & competitor performance.
🎯 Customer Acquisition
Identify segment-level trends (age, income, savings behavior, risk appetite) to tailor advertising and win market share amongst key demographics.
🗺️ Market Analysis
Gain comprehensive insights into the UK ISA market landscape, competitors, segments, and identify winners and losers in 2025 pre-2026 ISA season.
⚠️ Risk Analysis
Identify risk & interest-rate sensitivity amongst key demographics and segments - understand when users switch providers, at what rates, and to whom.
📊 Sentiment Analysis
Identify consumer preferences through transfer data amongst key demographics (age, income) to track real-time sentiment shifts towards providers.
Example Queries
1. High-Earning Gen Z Banking Preferences
SELECT
PROVIDER_NAME,
COUNT(*) as user_count,
AVG(CAST(INITIAL_DEPOSIT AS NUMBER)) as avg_deposit
FROM ISLA_FINAL
WHERE AGE_GROUP = '18-24'
AND CAST(INITIAL_DEPOSIT AS NUMBER) > 5000
GROUP BY PROVIDER_NAME
ORDER BY user_count DESC, avg_deposit DESC
LIMIT 10;
2. Long-term ISA Investment Behaviors
SELECT
YEARS,
AGE_GROUP,
COUNT(*) as user_count,
AVG(CAST(INITIAL_DEPOSIT AS NUMBER)) as avg_initial_deposit,
AVG(MONTHLY_DEPOSIT) as avg_monthly_deposit,
AVG(CAST(INTEREST_RATE AS NUMBER)) as avg_interest_rate
FROM ISLA_FINAL
WHERE YEARS IS NOT NULL
AND CAST(YEARS AS NUMBER) BETWEEN 1 AND 20
GROUP BY YEARS, AGE_GROUP
ORDER BY CAST(YEARS AS NUMBER), AGE_GROUP;
3. High-Value ISA Transfer Analysis
SELECT
CURRENT_PROVIDER,
NEW_PROVIDER,
COUNT(*) as switch_count,
AVG(CAST(INITIAL_DEPOSIT AS NUMBER)) as avg_deposit
FROM ISLA_FINAL
WHERE TRANSFER_ISA = 'Yes'
AND CURRENT_PROVIDER IS NOT NULL
AND NEW_PROVIDER IS NOT NULL
AND CAST(INITIAL_DEPOSIT AS NUMBER) > 10000
GROUP BY CURRENT_PROVIDER, NEW_PROVIDER
ORDER BY switch_count DESC;
4. First-Time ISA Customer Analysis
SELECT
AGE_GROUP,
ANNUAL_INCOME,
ISA_TYPE,
COUNT(*) as first_time_users,
AVG(CAST(INITIAL_DEPOSIT AS NUMBER)) as avg_initial_deposit,
AVG(CAST(INTEREST_RATE AS NUMBER)) as avg_interest_rate
FROM ISLA_FINAL
WHERE IS_FIRST_ISA = TRUE
GROUP BY AGE_GROUP, ANNUAL_INCOME, ISA_TYPE
ORDER BY first_time_users DESC;
5. Interest Rate Sensitivity by Demographics
SELECT
AGE_GROUP,
ANNUAL_INCOME,
COUNT(*) as total_customers,
AVG(CAST(INTEREST_RATE AS NUMBER)) as avg_rate,
MIN(CAST(INTEREST_RATE AS NUMBER)) as min_rate,
MAX(CAST(INTEREST_RATE AS NUMBER)) as max_rate,
STDDEV(CAST(INTEREST_RATE AS NUMBER)) as rate_volatility
FROM ISLA_FINAL
WHERE INTEREST_RATE IS NOT NULL
AND ISA_TYPE = 'Cash ISA'
GROUP BY AGE_GROUP, ANNUAL_INCOME
ORDER BY avg_rate DESC;
6. Monthly Savers vs Lump Sum Depositors
SELECT
CASE
WHEN MONTHLY_DEPOSIT > 0 THEN 'Monthly Saver'
WHEN CAST(INITIAL_DEPOSIT AS NUMBER) > 0 THEN 'Lump Sum'
ELSE 'Other'
END as deposit_behavior,
AGE_GROUP,
COUNT(*) as customer_count,
AVG(CAST(INITIAL_DEPOSIT AS NUMBER)) as avg_initial,
AVG(MONTHLY_DEPOSIT) as avg_monthly,
AVG(CAST(YEARS AS NUMBER)) as avg_tenure
FROM ISLA_FINAL
WHERE (MONTHLY_DEPOSIT > 0 OR CAST(INITIAL_DEPOSIT AS NUMBER) > 0)
GROUP BY deposit_behavior, AGE_GROUP
ORDER BY deposit_behavior, customer_count DESC;
7. Promotional Rate Impact Analysis
SELECT
PROVIDER_NAME,
PROMO_ACTIVE,
COUNT(*) as customer_count,
AVG(CAST(INITIAL_DEPOSIT AS NUMBER)) as avg_deposit,
AVG(CAST(INTEREST_RATE AS NUMBER)) as avg_rate,
COUNT(CASE WHEN IS_FIRST_ISA = TRUE THEN 1 END) as new_customers
FROM ISLA_FINAL
WHERE PROVIDER_NAME IS NOT NULL
AND PROMO_ACTIVE IS NOT NULL
AND ISA_TYPE = 'Cash ISA'
GROUP BY PROVIDER_NAME, PROMO_ACTIVE
ORDER BY PROVIDER_NAME, PROMO_ACTIVE;
8. Cash ISA vs Stocks & Shares ISA Preferences
SELECT
ISA_TYPE,
AGE_GROUP,
ANNUAL_INCOME,
COUNT(*) as customer_count,
AVG(CAST(INITIAL_DEPOSIT AS NUMBER)) as avg_initial_deposit,
AVG(CAST(YEARS AS NUMBER)) as avg_holding_period,
COUNT(CASE WHEN TRANSFER_ISA = 'Yes' THEN 1 END) as transfer_count
FROM ISLA_FINAL
GROUP BY ISA_TYPE, AGE_GROUP, ANNUAL_INCOME
ORDER BY ISA_TYPE, customer_count DESC;
9. Provider Market Share by Income Segment
SELECT
ANNUAL_INCOME,
PROVIDER_NAME,
COUNT(*) as customers,
ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER (PARTITION BY ANNUAL_INCOME), 2) as market_share_pct,
AVG(CAST(INITIAL_DEPOSIT AS NUMBER)) as avg_deposit
FROM ISLA_FINAL
WHERE PROVIDER_NAME IS NOT NULL
GROUP BY ANNUAL_INCOME, PROVIDER_NAME
ORDER BY ANNUAL_INCOME, market_share_pct DESC;
10. Transfer Pattern Analysis by Age Group
SELECT
AGE_GROUP,
CURRENT_PROVIDER,
COUNT(*) as total_transfers,
AVG(CAST(INITIAL_DEPOSIT AS NUMBER)) as avg_transfer_value,
COUNT(DISTINCT NEW_PROVIDER) as destination_providers,
AVG(CAST(INTEREST_RATE AS NUMBER)) as avg_current_rate
FROM ISLA_FINAL
WHERE TRANSFER_ISA = 'Yes'
AND CURRENT_PROVIDER IS NOT NULL
AND NEW_PROVIDER IS NOT NULL
GROUP BY AGE_GROUP, CURRENT_PROVIDER
ORDER BY AGE_GROUP, total_transfers DESC;
11. Variable vs Fixed Rate Preferences
SELECT
AGE_GROUP,
ANNUAL_INCOME,
VARIABLE_ACTIVE,
COUNT(*) as customer_count,
AVG(CAST(INTEREST_RATE AS NUMBER)) as avg_rate,
AVG(CAST(INITIAL_DEPOSIT AS NUMBER)) as avg_deposit,
COUNT(CASE WHEN TRANSFER_ISA = 'Yes' THEN 1 END) as transfer_activity
FROM ISLA_FINAL
WHERE VARIABLE_ACTIVE IS NOT NULL
AND ISA_TYPE = 'Cash ISA'
GROUP BY AGE_GROUP, ANNUAL_INCOME, VARIABLE_ACTIVE
ORDER BY AGE_GROUP, ANNUAL_INCOME, VARIABLE_ACTIVE;
Data Limitations
What This Data Does NOT Include:
- Real-time updates to track sentiment or segment shifts
- Timeframe data to segment by seasonality
- Provider name normalisation (available via API)
Sample Data Preview
ISA_TYPE | AGE_GROUP | ANNUAL_INCOME | INITIAL_DEPOSIT | PROVIDER_NAME | TRANSFER_ISA | INTEREST_RATE | IS_FIRST_ISA | YEARS |
Cash ISA | 18-24 | Under 20k | 53500 | Nationwide | FALSE | 4.86 | FALSE | 1 |
Cash ISA | 65+ | 20k-30k | 30500 | Halifax | null | 4.50 | TRUE | 10 |
Stocks & Shares ISA | 25-34 | 50k-75k | 0 | Vanguard | FALSE | null | FALSE | 5 |
Cash ISA | 35-44 | 40k-50k | 15000 | null | TRUE | 5.05 | FALSE | 1 |
Getting Started
- Access the Dataset: Available through Snowflake Marketplace
- Explore Sample Queries: Use the provided examples to understand data structure
- Customize Analysis: Adapt queries for your specific business needs
- API Integration: Contact TFE Group for provider name normalisation via API
Support & Contact
For technical support, additional data products, or custom analytics solutions, contact TFE Group Ltd. - the UK's leading market & competitive intelligence provider for financial services.
Data is collected monthly from thousands of aggregated & anonymised UK consumers. All data complies with UK data protection regulations.