An end-to-end SaaS analytics project focused on understanding customer behavior, subscription growth, revenue performance, churn, product usage, and customer support using Python, SQL, SQLite, and Power BI.
The project demonstrates how raw operational data can be transformed into meaningful business insights through data understanding, data cleaning, SQL analysis, cross-domain analysis, business intelligence dashboards, and business recommendations.
RavenStack is a fictional SaaS company serving customers across multiple industries and countries.
The objective of this project is to analyze RavenStack's business performance across the complete customer lifecycle, from acquisition and subscription to product usage, support, and churn.
The project answers practical business questions related to:
- Customer acquisition
- Customer distribution
- Subscription growth
- MRR and ARR
- Plan performance
- Billing behavior
- Churn and retention
- Churn reasons
- Product usage
- Feature errors
- Customer support
- Customer satisfaction
- Revenue exposure
- Cross-domain business relationships
The overall workflow is:
Data Understanding
↓
Data Cleaning
↓
Database & SQL Analysis
↓
Business Analysis
↓
Power BI Dashboard
↓
Business Recommendations
The project focuses on answering the following business questions.
Customer & Acquisition
- How is the customer base distributed across industries?
- Which countries contribute the most customers?
- Which referral sources contribute customers?
- How is the customer base distributed across plan tiers?
Subscription & Revenue
- How many subscriptions does RavenStack have?
- Which plans contribute the most MRR?
- How does monthly billing compare with annual billing?
- How much revenue comes from trial and non-trial subscriptions?
- Which countries generate the most MRR?
- How does revenue compare with seat volume?
- Which plan generates the highest MRR per seat?
Churn & Retention
- What is the overall churn rate?
- Which plans have higher churn rates?
- Which industries have higher churn rates?
- Which countries have higher churn rates?
- What are the major churn reasons?
- How has churn changed over time?
- How much MRR is lost through churn?
- Do churn reasons differ across plans?
- What activity is recorded before churn events?
- How many churned customers are marked as reactivated?
Product Usage
- Which features are used most?
- Which features have more errors?
- How do beta and non-beta features compare?
- Does feature usage show a strong relationship with error volume?
- Does aggregate usage differ between churned and non-churned customers?
- Does usage intensity vary across plans?
Customer Support
- How are support tickets distributed by priority?
- What is the average resolution time?
- What is the average first response time?
- How does customer satisfaction vary across priorities?
- What is the escalation rate?
- Does aggregate support experience differ between churned and non-churned customers?
The project uses five related datasets.
| Dataset | Rows | Description |
|---|---|---|
| Accounts | 500 | Customer/account information |
| Subscriptions | 5,000 | Subscription, plan, revenue, and billing information |
| Churn Events | 600 | Churn events, churn reasons, and reactivation information |
| Feature Usage | 25,000 | Product feature usage and error activity |
| Support Tickets | 2,000 | Customer support activity and satisfaction information |
Contains customer-level information such as:
- account_id
- account_name
- industry
- country
- signup_date
- referral_source
- plan_tier
- seats
- is_trial
- churn_flag
Contains subscription-level information such as:
- subscription_id
- account_id
- start_date
- end_date
- plan_tier
- seats
- mrr_amount
- arr_amount
- is_trial
- upgrade_flag
- downgrade_flag
- churn_flag
- billing_frequency
- auto_renew_flag
Contains churn-event information such as:
- churn_event_id
- account_id
- churn_date
- reason_code
- refund_amount_usd
- preceding_upgrade_flag
- preceding_downgrade_flag
- is_reactivation
- feedback_text
Contains product usage information such as:
- usage_id
- subscription_id
- usage_date
- feature_name
- usage_count
- usage_duration_secs
- error_count
- is_beta_feature
Contains customer support information such as:
- ticket_id
- account_id
- submitted_at
- closed_at
- resolution_time_hours
- priority
- first_response_time_minutes
- satisfaction_score
- escalation_flag
saas_product_&_customer_analytics/
│
├── data/
│ ├── ravenstack_accounts.csv
│ ├── ravenstack_churn_events.csv
│ ├── ravenstack_feature_usage.csv
│ ├── ravenstack_subscriptions.csv
│ └── ravenstack_support_tickets.csv
│
├── database/
│ └── ravenstack.db
│
├── src/
│ └── ingestion.py
│
├── notebooks/
│ ├── 01_data_understanding.ipynb
│ ├── 02_data_cleaning.ipynb
│ └── 03_analysis.ipynb
│
├── dashboard/
│ └── RavenStack_Dashboard.pbix
│
└── README.md
The first stage focused on understanding the structure, quality, and relationships between the datasets.
The following checks were performed:
- Dataset shape and columns
- Data types
- Descriptive statistics
- Categorical value distributions
- Duplicate checks
- Date-range checks
- Primary-key validation
- Foreign-key validation
- Missing-value profiling
- Boolean and flag validation
- Numeric data-quality checks
| Dataset | Rows | Columns |
|---|---|---|
| Accounts | 500 | 10 |
| Churn Events | 600 | 9 |
| Feature Usage | 25,000 | 8 |
| Subscriptions | 5,000 | 14 |
| Support Tickets | 2,000 | 9 |
The following identifiers were checked:
- accounts.account_id
- subscriptions.subscription_id
- churn_events.churn_event_id
- support_tickets.ticket_id
- feature_usage.usage_id
The usage table contained repeated usage_id values. However, these repeated IDs represented different usage records rather than exact duplicate rows, so they were retained.
The following relationships were validated:
accounts.account_id
↓
subscriptions.account_id
accounts.account_id
↓
churn_events.account_id
accounts.account_id
↓
support_tickets.account_id
subscriptions.subscription_id
↓
feature_usage.subscription_id
All checked foreign-key relationships were valid and no unmatched foreign-key records were identified.
Major missing-value cases identified:
| Dataset | Column | Missing Values | Treatment |
|---|---|---|---|
| Churn Events | feedback_text | 148 | Replaced with "No feedback provided" |
| Subscriptions | end_date | 4,514 | Retained intentionally |
| Support Tickets | satisfaction_score | 825 | Retained as missing |
The second stage focused on preparing the datasets for reliable analysis.
Cleaning activities included:
- Duplicate checks
- Missing-value treatment
- Data-type validation
- Categorical-value validation
- Boolean/flag validation
- Numeric-value validation
- Business-rule validation
- Relationship validation
There were 148 missing values in feedback_text. These were replaced with: "No feedback provided"
This preserves the distinction between missing feedback and an actual written customer response.
There were 4,514 missing end_date values. All churned subscriptions had a populated end date, while the missing values were associated with non-churned subscriptions.
The missing values were therefore retained because they represented active subscriptions in the available data.
There were 825 missing satisfaction scores. The observed satisfaction values ranged from 3 to 5, with an average close to 3.98.
The missing scores were intentionally retained as NaN rather than artificially imputing customer satisfaction values.
Additional checks confirmed:
- No exact duplicate rows in the usage table
- No negative numeric values in the checked fields
- No invalid categorical values
- Boolean/flag columns contained valid values
- Upgrade and downgrade combinations were reviewed
- Usage-date mismatches with subscription periods were reviewed
- Zero-MRR and zero-ARR records were investigated
There were 778 zero-MRR/ARR subscriptions. All of these were trial subscriptions, making the zero revenue values consistent with the observed business behavior.
No records were removed during cleaning.
| Dataset | Final Rows |
|---|---|
| Accounts | 500 |
| Subscriptions | 5,000 |
| Churn Events | 600 |
| Feature Usage | 25,000 |
| Support Tickets | 2,000 |
The cleaned datasets were loaded into a SQLite database: database/ravenstack.db
The ingestion process is handled through: src/ingestion.py
SQL was used for business-oriented analysis across the connected datasets.
Major SQL analysis areas included:
- Business overview
- Subscription growth
- Revenue analysis
- Plan analysis
- Country analysis
- Churn analysis
- Churn reasons
- Product usage
- Support performance
- Cross-domain analysis
The relational database structure allowed multiple datasets to be joined and analyzed from a common business perspective.
| Metric | Value |
|---|---|
| Total Accounts | 500 |
| Total Subscriptions | 5,000 |
| Trial Subscriptions | 778 |
| Churned Subscriptions | 486 |
| Total Seats | 149,260 |
| Total MRR | $11,338,747 |
| Total ARR | $136,064,964 |
| Churn Rate | 9.72% |
| Trial Rate | 15.56% |
RavenStack experienced substantial subscription growth during the observed period.
Annual Comparison
| Year | New Subscriptions | New MRR |
|---|---|---|
| 2023 | 666 | $1.31M |
| 2024 | 4,334 | $10.03M |
Growth
- New Subscriptions Growth: 550.75%
- New MRR Growth: 663.18%
December 2024 recorded the highest monthly number of new subscriptions and the highest new MRR in the observed period.
| Industry | Accounts |
|---|---|
| DevTools | 113 |
| FinTech | 112 |
| Cybersecurity | 100 |
| HealthTech | 96 |
| EdTech | 79 |
DevTools and FinTech have the highest account representation, while EdTech has the lowest. The customer base is relatively distributed across industries, with no single industry dominating the portfolio.
| Country | Accounts |
|---|---|
| US | 291 |
| UK | 58 |
| India | 49 |
| Australia | 32 |
| Germany | 25 |
| Canada | 23 |
| France | 22 |
The US represents 58.2% of the total account base, indicating significant geographic concentration.
| Referral Source | Accounts |
|---|---|
| Organic | 114 |
| Other | 103 |
| Ads | 98 |
| Event | 96 |
| Partner | 89 |
Customer acquisition is distributed across multiple sources, with no single source dominating the customer base.
| Plan | Accounts |
|---|---|
| Pro | 178 |
| Basic | 168 |
| Enterprise | 154 |
The account base is relatively evenly distributed across the three plans.
| Plan | Subscriptions | Total MRR | Average MRR |
|---|---|---|---|
| Enterprise | 1,723 | $8.47M | $4,917.71 |
| Pro | 1,675 | $2.11M | $1,256.77 |
| Basic | 1,602 | $0.76M | $474.68 |
Enterprise generates the majority of MRR despite having a similar number of subscriptions to the other plans. This demonstrates that subscription volume alone does not determine revenue contribution.
| Billing Frequency | Subscriptions | Total MRR | Average MRR |
|---|---|---|---|
| Monthly | 2,539 | $5.74M | $2,261.26 |
| Annual | 2,461 | $5.60M | $2,274.44 |
Monthly and annual billing are relatively evenly distributed. Total MRR is also closely balanced between the two billing frequencies.
| Plan | Billing | Subscriptions | Total MRR |
|---|---|---|---|
| Basic | Annual | 788 | $376,485 |
| Basic | Monthly | 814 | $383,952 |
| Enterprise | Annual | 835 | $4,193,726 |
| Enterprise | Monthly | 888 | $4,279,495 |
| Pro | Annual | 838 | $1,027,187 |
| Pro | Monthly | 837 | $1,077,902 |
Enterprise generates the highest MRR under both billing frequencies. Overall, plan tier has a much larger revenue difference than billing frequency.
| Subscription Type | Subscriptions | Total MRR |
|---|---|---|
| Trial | 778 | $0 |
| Non-Trial | 4,222 | $11.34M |
Trial subscriptions generate $0 MRR, while all recorded MRR comes from non-trial subscriptions.
| Country | Accounts | Subscriptions | Total MRR | Average MRR |
|---|---|---|---|---|
| US | 291 | 2,961 | $6.63M | $2,240.66 |
| UK | 58 | 590 | $1.22M | $2,068.59 |
| India | 49 | 498 | $1.19M | $2,398.24 |
| Australia | 32 | 312 | $0.84M | $2,692.24 |
| France | 22 | 211 | $0.59M | $2,795.24 |
| Canada | 23 | 217 | $0.48M | $2,200.75 |
| Germany | 25 | 211 | $0.38M | $1,810.51 |
The US contributes the largest MRR because of its much larger customer and subscription base. Some smaller markets have relatively high average MRR per subscription.
| Plan | Subscriptions | Total Seats | Average Seats |
|---|---|---|---|
| Pro | 1,675 | 51,284 | 30.62 |
| Enterprise | 1,723 | 50,604 | 29.37 |
| Basic | 1,602 | 47,372 | 29.57 |
Average seats per subscription are relatively similar across all three plans.
| Plan | MRR per Seat |
|---|---|
| Enterprise | $167 |
| Pro | $41 |
| Basic | $16 |
Enterprise generates substantially higher revenue per seat than Pro and Basic. This highlights the significant difference in revenue value across plan tiers.
RavenStack has:
- Total Subscriptions: 5,000
- Churned Subscriptions: 486
- Churn Rate: 9.72%
This serves as the baseline for comparing churn across plans, industries, countries, and other segments.
| Plan | Total Subscriptions | Churned | Churn Rate |
|---|---|---|---|
| Enterprise | 1,723 | 172 | 9.98% |
| Pro | 1,675 | 162 | 9.67% |
| Basic | 1,602 | 152 | 9.49% |
Churn rates are relatively similar across all three plans. The difference between the highest and lowest churn rate is only 0.49 percentage points.
| Industry | Total Subscriptions | Churned | Churn Rate |
|---|---|---|---|
| DevTools | 1,158 | 125 | 10.79% |
| Cybersecurity | 1,008 | 103 | 10.22% |
| HealthTech | 949 | 96 | 10.12% |
| FinTech | 1,100 | 96 | 8.73% |
| EdTech | 785 | 66 | 8.41% |
Churn rates vary across industries. DevTools records the highest churn rate, while EdTech records the lowest in the observed dataset.
| Country | Total Subscriptions | Churned | Churn Rate |
|---|---|---|---|
| France | 211 | 25 | 11.85% |
| Australia | 312 | 35 | 11.22% |
| UK | 590 | 64 | 10.85% |
| US | 2,961 | 288 | 9.73% |
| Canada | 217 | 21 | 9.68% |
| Germany | 211 | 20 | 9.48% |
| India | 498 | 33 | 6.63% |
Churn rate varies considerably across countries. The US has the highest churn volume, while France has the highest churn rate.
| Reason | Churn Events | Share |
|---|---|---|
| Features | 114 | 19.00% |
| Support | 104 | 17.33% |
| Budget | 104 | 17.33% |
| Unknown | 95 | 15.83% |
| Competitor | 92 | 15.33% |
| Pricing | 91 | 15.17% |
Feature-related issues are the largest recorded churn reason. However, churn is distributed across multiple categories rather than being concentrated in one driver.
Monthly churn events generally increased during the observed period.
The number of monthly churn events increased from:
- January 2023: 1
- December 2024: 117
The increase becomes particularly noticeable during the second half of 2024. However, churn volume should be interpreted together with the rapidly growing subscription base and should not be treated as the same metric as churn rate.
| Activity Before Churn | Churn Events | Share |
|---|---|---|
| No Upgrade / Downgrade | 432 | 72.00% |
| Upgrade Only | 115 | 19.17% |
| Downgrade Only | 45 | 7.50% |
| Both | 8 | 1.33% |
Most churn events were not immediately preceded by a recorded plan change. The presence of an upgrade before churn should be interpreted as a sequence/association rather than evidence that an upgrade caused churn.
| Reactivation Status | Churn Events | Share |
|---|---|---|
| No | 539 | 89.83% |
| Yes | 61 | 10.17% |
A smaller portion of recorded churn events is associated with customers marked as reactivated.
The 486 churned subscriptions represent approximately: $1.18M in churned MRR
Average MRR per churned subscription: $2,426.21
This shows that churn has a measurable recurring-revenue impact.
| Plan | Churn Rate | Churned MRR |
|---|---|---|
| Enterprise | 9.98% | $926,345 |
| Pro | 9.67% | $180,271 |
| Basic | 9.49% | $72,523 |
Although churn rates are relatively similar, the revenue impact differs substantially across the plans. Enterprise represents the largest financial exposure because of its much higher revenue contribution.
Top features by total usage count include:
| Feature | Total Usage |
|---|---|
| Feature_32 | 6,686 |
| Feature_15 | 6,621 |
| Feature_6 | 6,546 |
| Feature_20 | 6,541 |
| Feature_34 | 6,536 |
| Feature_12 | 6,534 |
| Feature_11 | 6,533 |
| Feature_2 | 6,525 |
| Feature_38 | 6,478 |
| Feature_26 | 6,470 |
Feature usage is relatively evenly distributed. The relatively small difference between highly used features indicates that product usage is not heavily concentrated in a small number of features.
Error counts vary across features, but error rates remain relatively close, generally around 5–6%.
Examples include:
- Feature_4: 418 errors
- Feature_26: 417 errors
- Feature_9: 404 errors
- Feature_2: 401 errors
Similar error rates across features do not show a strong difference in error frequency relative to usage volume.
| Metric | Non-Beta | Beta |
|---|---|---|
| Usage Records | 22,456 | 2,544 |
| Total Usage | 224,939 | 25,586 |
| Average Usage | 10.02 | 10.06 |
| Error Rate | 5.64% | 5.53% |
Beta and non-beta features show very similar usage intensity and error rates.
Product usage and total errors do not show a strong direct pattern. Some relatively high-usage features have moderate error counts, while some lower-usage features have comparatively high errors.
For example:
- Feature_26: 6,470 usage and 417 errors
- Feature_8: 6,030 usage and 284 errors
This suggests that error volume is not determined by usage volume alone.
Monthly product usage remained relatively stable throughout the observed period.
Monthly usage generally remained between approximately 9,500 and 11,500 usage events.
- Highest observed monthly usage: October 2024 — 11,450
- Lowest observed monthly usage: November 2023 — 9,475
Overall, the data does not show a strong sustained upward or downward trend in product usage.
Usage duration is relatively evenly distributed across the top features.
Among the top features:
- Feature_24: 575.07 hours
- Feature_12: 572.63 hours
- Feature_32: 570.09 hours
- Feature_6: 559.44 hours
- Feature_11: 559.11 hours
The relatively small differences indicate that customer time is distributed across multiple features rather than concentrated in a single feature.
| Metric | Non-Churned | Churned |
|---|---|---|
| Average Usage per Record | 10.02 | 10.03 |
| Average Duration per Record | 3,042.58 sec | 3,038.64 sec |
The aggregate usage intensity between churned and non-churned groups is very similar. Based on these aggregate metrics, there is no substantial difference in usage intensity between the two groups.
| Priority | Tickets | Share |
|---|---|---|
| Urgent | 514 | 25.70% |
| High | 510 | 25.50% |
| Medium | 491 | 24.55% |
| Low | 485 | 24.25% |
Support ticket volume is evenly distributed across priority levels.
| Priority | Tickets | Average Resolution |
|---|---|---|
| High | 510 | 36.96 hours |
| Low | 485 | 36.35 hours |
| Medium | 491 | 35.59 hours |
| Urgent | 514 | 34.57 hours |
Average resolution time is relatively similar across priorities.
| Priority | Rated Tickets | Average Satisfaction |
|---|---|---|
| Low | 287 | 4.02 |
| High | 295 | 4.00 |
| Urgent | 301 | 3.97 |
| Medium | 292 | 3.93 |
Average satisfaction scores are relatively consistent across priorities.
| Priority | Tickets | Escalated | Escalation Rate |
|---|---|---|---|
| Medium | 491 | 25 | 5.09% |
| Low | 485 | 23 | 4.74% |
| High | 510 | 24 | 4.71% |
| Urgent | 514 | 23 | 4.47% |
Escalation rates are relatively consistent across priorities.
Average first response time is relatively similar across priorities.
| Priority | Average First Response |
|---|---|
| Urgent | 85.53 min |
| Medium | 85.86 min |
| Low | 91.15 min |
| High | 91.44 min |
| Metric | Value |
|---|---|
| Total Tickets | 2,000 |
| Avg Resolution Time | 35.86 hours |
| Avg First Response Time | 88.48 minutes |
| Avg Satisfaction | 3.98 / 5 |
| Escalated Tickets | 95 |
| Escalation Rate | 4.75% |
Overall support metrics remain relatively stable across priority levels.
The project combines multiple datasets to evaluate relationships between different areas of the business.
Support experience metrics are very similar between churned and non-churned subscriptions.
| Metric | Non-Churned | Churned |
|---|---|---|
| Avg Resolution Time | 35.99 hours | 36.08 hours |
| Avg First Response | 88.15 min | 87.44 min |
| Avg Satisfaction | 3.99 | 3.97 |
| Escalation Rate | 4.81% | 4.97% |
Based on these aggregate metrics, there is no substantial difference in support experience between the two groups.
| Country | Churn Rate | Churned MRR |
|---|---|---|
| US | 9.73% | $645,721 |
| UK | 10.85% | $175,279 |
| France | 11.85% | $100,563 |
| Australia | 11.22% | $88,549 |
| India | 6.63% | $81,589 |
| Germany | 9.48% | $44,111 |
| Canada | 9.68% | $43,327 |
The US has the highest churned MRR because of its much larger subscription base. France has the highest churn rate in the observed dataset. This highlights the importance of evaluating both churn rate and churned MRR.
| Plan | Avg Usage | Avg Duration | Churn Rate |
|---|---|---|---|
| Enterprise | 9.99 | 3,050.36 sec | 9.98% |
| Pro | 10.03 | 3,043.99 sec | 9.67% |
| Basic | 10.00 | 3,022.65 sec | 9.49% |
Usage intensity is very similar across all plans. Churn rates are also relatively close. This suggests that aggregate plan-level usage differences are small and do not coincide with large differences in churn rate.
Different plans show different leading churn reasons:
| Plan | Leading Churn Reason | Share |
|---|---|---|
| Basic | Budget | 22.16% |
| Pro | Features | 19.62% |
| Enterprise | Support | 22.22% |
This suggests that churn drivers are not identical across plan tiers and may require segment-specific investigation.
| Plan | Total MRR | Churn Rate | Churned MRR |
|---|---|---|---|
| Enterprise | $8.47M | 9.98% | $926,345 |
| Pro | $2.11M | 9.67% | $180,271 |
| Basic | $0.76M | 9.49% | $72,523 |
Enterprise generates the majority of total MRR and also accounts for the largest amount of churned MRR. This highlights the importance of considering both customer retention and revenue exposure.
RavenStack experienced significant growth during the observed period. New subscriptions increased by 550.75% from 2023 to 2024, while new MRR increased by 663.18%. This indicates strong expansion in both customer volume and recurring revenue.
Enterprise subscriptions generate approximately $8.47M in MRR, representing the majority of RavenStack's recurring revenue. Enterprise also generates substantially higher MRR per seat than Basic and Pro.
RavenStack has a churn rate of 9.72%, representing:
- 486 churned subscriptions
- Approximately $1.18M in churned MRR
The financial impact is particularly significant for Enterprise subscriptions.
Different plans show different leading churn reasons:
- Basic → Budget
- Pro → Features
- Enterprise → Support
This indicates that customer retention challenges may differ by customer segment.
The US represents 58.2% of the account base and contributes the largest MRR. At the same time, churn rates differ across countries. This suggests that both geographic concentration and country-level retention should be monitored.
Product usage remains relatively stable across the observed period and is also similar between churned and non-churned customers. Aggregate usage metrics alone therefore do not provide a strong distinction between churned and non-churned customers.
Support ticket volume, response times, resolution times, satisfaction scores, and escalation rates show relatively small differences across ticket priorities. The aggregate support metrics also show only small differences between churned and non-churned groups.
A complete retention analysis should track both churn rate and churned MRR.
For RavenStack:
- Overall churn rate: 9.72%
- Churned subscriptions: 486
- Churned MRR: $1.18M
- Enterprise churned MRR: $926,345
Although churn rates are relatively similar across plan tiers, the financial impact differs substantially because Enterprise subscriptions generate significantly higher MRR.
Therefore, retention dashboards should monitor: Churn Rate + Churned MRR
This provides a more complete view of the financial impact of customer churn.
Aggregate product usage intensity is very similar between churned and non-churned customers. Average usage per record is approximately 10 for both groups, and average usage duration is also very similar. Therefore, aggregate usage volume alone may not be sufficient to explain churn behavior.
Further analysis can focus on:
- Feature-level adoption
- Changes in usage over time
- Error patterns
- Usage frequency before churn
- Customer-level engagement trends
These deeper behavioral metrics can help identify patterns that may not be visible in aggregate usage statistics.
The recommendations below are based on the patterns identified in the analysis.
RavenStack should monitor both:
- Churn Rate
- Churned MRR
Churn rate indicates the proportion of subscriptions being lost, while churned MRR shows the recurring-revenue impact. This is particularly important because the financial effect of churn differs substantially across plan tiers.
The leading churn reason differs by plan:
- Basic → Budget
- Pro → Features
- Enterprise → Support
Potential areas of investigation include:
- Reviewing affordability and perceived value for Basic customers
- Investigating feature requirements and product gaps for Pro customers
- Reviewing support experience and account management for Enterprise customers
These findings should be validated using deeper customer-level analysis before operational implementation.
The data shows meaningful differences in churn rates across countries. Management should therefore monitor both:
- Country-level churn rate
- Country-level churned MRR
This helps distinguish markets with higher churn percentages from markets where churn creates greater financial exposure because of a larger subscription base.
Enterprise subscriptions contribute approximately $8.47M in MRR and account for approximately $926K in churned MRR.
Because of the higher revenue value associated with Enterprise subscriptions, potential retention monitoring could focus on:
- High-value Enterprise accounts
- Support-related churn cases
- Declining customer engagement
- Upgrade/downgrade activity
- Customer health signals
Aggregate usage intensity does not show a substantial difference between churned and non-churned customers. Future analysis should therefore focus on customer-level behavioral changes such as:
- Feature adoption
- Usage frequency
- Usage trend before churn
- Error patterns
- Customer engagement changes
- Support interactions
This can provide a more granular view of potential churn signals.
Churn reasons are distributed across several categories. RavenStack can use churn-reason data to:
- Identify recurring product gaps
- Review support-related churn
- Understand budget and pricing concerns
- Monitor competitor-related losses
- Investigate cases with unknown churn reasons
- Connect customer feedback with product and customer-success decisions
Strong customer acquisition should be evaluated alongside customer retention. A management dashboard should therefore monitor:
- New Subscriptions
- New MRR
- Churn Rate
- Churned MRR
- Customer Base
- Revenue by Plan
This helps evaluate whether growth is accompanied by sustainable retention.
A future customer-health framework could combine multiple signals:
- Subscription value
- Product usage
- Feature adoption
- Support activity
- Satisfaction
- Upgrade/downgrade behavior
- Recent engagement changes
Such a framework could help identify customers requiring proactive attention before churn occurs.
The project includes an interactive Power BI dashboard for management-friendly reporting. The dashboard is designed around the most important business metrics rather than displaying every analytical result.
Executive Overview
Key KPIs include:
- Total Accounts
- Total Subscriptions
- Total MRR
- Churn Rate
- Subscription Growth
- Revenue Growth
- MRR by Plan
Customer & Churn
Key visuals include:
- Churn Rate by Plan
- Churn Rate by Country
- Churn Reasons
- Churned MRR by Plan
- Churn Trend
Product & Support
Key visuals include:
- Feature Usage
- Usage vs Errors
- Support Ticket Distribution
- Resolution Time
- Satisfaction
- Support Performance
The dashboard is stored in: dashboard/RavenStack_Dashboard.pbix
Programming & Analysis
- Python
- Pandas
- NumPy
- Matplotlib
Database & SQL
- SQLite
- SQL
Business Intelligence
- Microsoft Power BI
- DAX
Development Environment
- Jupyter Notebook
- VS Code
Version Control
- Git
- GitHub
The project follows a business-oriented analytical framework:
Business Question
↓
Data Identification
↓
Data Validation
↓
SQL / Python Analysis
↓
Result
↓
Visualization where useful
↓
Business Insight
↓
Business Recommendation
This approach ensures that the analysis is driven by business questions rather than only by exploratory charts.
This project demonstrates practical experience in:
- Data cleaning
- Exploratory data analysis
- SQL querying
- Relational database design
- Data validation
- Missing-value handling
- Duplicate analysis
- Data integration
- Business KPI development
- Revenue analysis
- Churn analysis
- Customer segmentation
- Product usage analysis
- Support analytics
- Cross-domain analysis
- DAX measures
- Power BI dashboard development
- Business insight generation
- Business recommendations
The analysis shows a SaaS business experiencing strong growth while simultaneously facing measurable customer churn and recurring-revenue exposure.
The major business themes identified are:
- Strong subscription and revenue growth
- Enterprise revenue concentration
- Geographic concentration in the US
- Measurable recurring-revenue impact from churn
- Different churn drivers across customer segments
- Variation in churn rates across countries
- Relatively stable aggregate product usage
- Relatively stable support performance
The analysis also demonstrates that individual metrics do not always provide a complete business picture.
For example:
- Subscription volume does not directly determine revenue contribution.
- Churn rate does not fully describe financial impact.
- Aggregate usage does not clearly distinguish churned and non-churned customers.
- Ticket priority does not show large differences in support outcomes.
Combining customer, subscription, revenue, churn, product usage, and support data provides a broader view of SaaS business performance.
The project demonstrates how data analytics can move from:
Raw Data
↓
Clean Data
↓
SQL & Python Analysis
↓
Business Insights
↓
Power BI Dashboard
↓
Actionable Recommendations
and ultimately support more informed, data-driven business decisions.