A comprehensive financial model and sensitivity analysis tool for Oasis Browser's 2026 projections, built in Python.
Purpose: This model enables rapid sensitivity analysis for Oasis Browser's 2026 financial planning, allowing quick assessment of how changes in key business drivers affect revenue, margins, cash flow, and runway.
Scope: The model covers:
- B2C Subscriptions: Monthly recurring revenue from individual users ($20/month, ~1500 text or 150 voice prompts included)
- B2B Pilots: Annual contracts with enterprise clients ($50k/year average, 250 included developer hours)
- Operating Expenses: Headcount, fixed overhead, and infrastructure costs
- Cash Flow & Runway: Monthly cash flow projections and months of runway calculations
Time Period: Full year 2026 (12 months, January through December)
Outputs: All monetary values are in USD. Time periods are monthly for B2C/operating, annual for B2B (distributed monthly).
This model projects financial performance for Oasis Browser across two revenue streams:
- B2C Subscriptions: Monthly recurring revenue from individual users
- B2B Pilots: Annual contracts with enterprise clients
The model calculates revenue, costs, gross margins, cash flow, and runway under various scenarios and sensitivity assumptions.
pip install -r requirements.txtRun all analyses:
python run_analysis.pyRun specific scenario only:
python run_analysis.py --scenario base
python run_analysis.py --scenario conservative
python run_analysis.py --scenario aggressiveSkip Excel export:
python run_analysis.py --no-exportCustom output filename:
python run_analysis.py --output my_analysis.xlsxCombined options:
python run_analysis.py --scenario aggressive --no-exportThis will:
- Display base case 2026 projections
- Run one-way sensitivity analyses on key drivers
- Run two-way sensitivity tables
- Compare scenarios (all or selected)
- Run tripwire/red-line analysis
- Export results to Excel (unless
--no-exportis used)
oasis_model.py: Core financial model with B2C, B2B, and cash flow calculationssensitivity.py: One-way and two-way sensitivity analysis functionsscenarios.py: Pre-defined scenario configurations (Conservative, Base, Aggressive)run_analysis.py: Main runner script with example usage
The following drivers have the most significant impact on financial outcomes and are the primary focus of sensitivity analysis:
-
starting_subscribers(Location:oasis_model.py→B2CAssumptions)- What: Initial paying subscriber count in January 2026
- Recommended Range: 50-200 (low: 50-75, base: 100, high: 150-200)
- Impact: Directly affects starting revenue; compounds with growth
- Sensitivity Function:
sensitivity_starting_subscribers()
-
new_subscribers_per_month(Location:oasis_model.py→B2CAssumptions)- What: New paying subscribers added each month (linear growth)
- Recommended Range: 20-100/month (low: 20-30, base: 50, high: 75-100)
- Impact: Determines subscriber growth trajectory
- Sensitivity Function:
sensitivity_monthly_new_subscribers()
-
monthly_churn_rate(Location:oasis_model.py→B2CAssumptions)- What: Percentage of subscribers cancelling each month (applied before new subs)
- Recommended Range: 3%-15% (low: 3-5%, base: 7%, high: 10-15%)
- Impact: Critical for subscriber retention and revenue sustainability
- Sensitivity Function:
sensitivity_monthly_churn_rate()
-
avg_usage_pct_of_allowance(Location:oasis_model.py→B2CAssumptions)- What: Average usage as % of included allowance (1500 text or 150 voice)
- Recommended Range: 50%-150% (low: 50%, base: 100%, high: 150%)
- Impact: Directly affects API costs and gross margin
- Sensitivity Function:
sensitivity_average_usage_intensity()
-
price_per_month(Location:oasis_model.py→B2CAssumptions)- What: Subscription price per month (USD)
- Recommended Range: $15-$25 (low: $15, base: $20, high: $25)
- Impact: Direct revenue driver; affects gross margin significantly
- Sensitivity Function:
sensitivity_subscription_price()
-
num_pilots(Location:oasis_model.py→B2BAssumptions)- What: Number of B2B pilot contracts in 2026
- Recommended Range: 0-10 (low: 0-2, base: 5, high: 8-10)
- Impact: Total B2B revenue and costs
- Sensitivity Function:
sensitivity_number_of_pilots()
-
developer_hourly_cost(Location:oasis_model.py→B2BAssumptions)- What: Cost per developer hour (USD/hour)
- Recommended Range: $40-$80 (low: $40, base: $40-50, high: $60-80)
- Impact: Major cost driver affecting B2B gross margin
- Sensitivity Function:
sensitivity_developer_hourly_cost_detailed()
-
included_hours_per_pilot_per_year(Location:oasis_model.py→B2BAssumptions)- What: Developer hours included in base contract per pilot
- Recommended Range: 200-300 hours (target: 250 for 80% margin)
- Impact: Determines cost structure and overage calculations
- Sensitivity Function:
sensitivity_included_hours_per_pilot()
-
starting_cash_balance(Location:oasis_model.py→OperatingAssumptions)- What: Initial cash balance at start of 2026 (USD)
- Recommended Range: $300k-$800k (varies by funding stage)
- Impact: Determines runway and cash buffer
-
Headcount and Salaries (Location:
oasis_model.py→OperatingAssumptions)- What: Number of FTE by role and monthly salaries
- Impact: Major operating expense driver
Method 1: Direct Code Edit
- Edit default values in
oasis_model.pyat the top (seeB2C_DEFAULTS,B2B_DEFAULTS,OPERATING_DEFAULTS) - Or modify dataclass defaults directly
Method 2: Config Dictionary (Recommended)
from oasis_model import create_assumptions_from_config
config = {
'b2c': {'starting_subscribers': 150, 'monthly_churn_rate': 0.05},
'b2b': {'num_pilots': 8}
}
assumptions = create_assumptions_from_config(config)Method 3: Programmatic Override
from scenarios import create_base_scenario
assumptions = create_base_scenario()
assumptions.b2c.starting_subscribers = 150
assumptions.b2c.monthly_churn_rate = 0.05from oasis_model import OasisModel, ModelAssumptions, B2CAssumptions, B2BAssumptions
from scenarios import create_base_scenario
# Start with base scenario
assumptions = create_base_scenario()
# Modify specific assumptions
assumptions.b2c.starting_subscribers = 150
assumptions.b2c.monthly_churn_rate = 0.05
assumptions.b2b.num_pilots = 8
# Run model
model = OasisModel(assumptions)
results = model.run_full_model()
# Access results
print(f"Total Revenue: ${results['summary']['total_revenue']:,.2f}")
print(f"Gross Margin: {results['summary']['total_gross_margin_pct']:.1f}%")from sensitivity import one_way_sensitivity
from scenarios import create_base_scenario
base = create_base_scenario()
# Vary churn rate
values = [0.03, 0.05, 0.07, 0.10, 0.15]
metric = lambda m: m.run_full_model()['summary']['ending_subscribers']
results = one_way_sensitivity(
base,
'b2c.monthly_churn_rate',
values,
metric,
'Ending Subscribers'
)
print(results)from sensitivity import two_way_sensitivity
from scenarios import create_base_scenario
base = create_base_scenario()
row_driver = ('b2c.starting_subscribers', [50, 100, 150, 200])
col_driver = ('b2c.avg_usage_pct_of_allowance', [0.5, 1.0, 1.5])
metric = lambda m: m.run_full_model()['summary']['total_b2c_gross_margin_pct']
results = two_way_sensitivity(base, row_driver, col_driver, metric)
print(results)from scenarios import compare_scenarios, create_scenario_summary_table
# Compare all scenarios
scenario_results = compare_scenarios()
summary = create_scenario_summary_table(scenario_results)
print(summary)The model provides:
-
Monthly B2C Metrics:
- Subscriber count (with churn and growth)
- Revenue (gross and net after Stripe fees)
- API costs (Gemini, Deepgram)
- AWS costs
- Gross profit and margin %
-
Annual B2B Metrics:
- Total revenue from pilots
- Developer/support costs (included + overage hours)
- Gross profit and margin %
-
Cash Flow & Runway:
- Monthly cash flow
- Cumulative cash balance
- Months of runway (based on burn rate)
-
Sensitivity Analyses:
- One-way: Impact of varying single drivers
- Two-way: Pivot tables showing interactions between drivers
-
Scenario Comparisons:
- Side-by-side comparison of Conservative, Base, and Aggressive cases
- Extended metrics: minimum monthly cash, runway at start vs year-end
-
Tripwire & Red-Line Analysis:
- Checks violations of minimum cash, minimum gross margin, maximum burn thresholds
- Identifies which scenarios violate thresholds and in which months
- Add the assumption to the appropriate
@dataclassinoasis_model.py - Use it in the calculation methods
- Create a sensitivity function in
sensitivity.pyif desired
- Create a new function in
scenarios.pyfollowing the pattern ofcreate_base_scenario() - Add it to the
compare_scenarios()function - Update
run_analysis.pyto include it in exports
All calculation logic is in OasisModel class methods:
calculate_b2c_monthly(): B2C revenue and costscalculate_b2b_annual(): B2B revenue and costscalculate_operating_expenses_monthly(): Operating expensescalculate_cash_flow(): Cash flow and runway
- Starting subscribers: 100
- New subscribers/month: 50
- Monthly churn: 7%
- Price: $20/month
- Usage: 100% of allowance (1500 text or 150 voice prompts)
- API costs: $0.002/text prompt, $0.016/voice minute
- AWS: $15/month fixed
- Number of pilots: 5
- Average contract value: $50,000/year
- Developer cost: $40/hour
- Included hours: 250 hours/pilot/year
- Headcount: 2 founders, 1 developer, 0.5 support
- Fixed overhead: $2,000/month
- Starting cash: $500,000
- All costs and revenues are in USD
- B2B revenue is distributed across months based on pilot start dates
- Runway calculation assumes current burn rate continues
- The model assumes linear growth and churn (can be extended for more complex patterns)
Internal use for Oasis Browser financial planning.