import React, { useState } from 'react'; import { DollarSign, TrendingUp, Users, Target, Clock, Shield } from 'lucide-react'; export default function ROICalculator() { const [businessGoal, setBusinessGoal] = useState(''); const [currentSituation, setSituation] = useState(''); const [otherSituation, setOtherSituation] = useState(''); const [clientValue, setClientValue] = useState(''); const [repeatRate, setRepeatRate] = useState(''); const [insightLevel, setInsightLevel] = useState(''); const goals = [ 'Get more clients', 'Increase client lifetime value', 'Better understand the value we bring to our clients', 'Refine value proposition or our messaging' ]; const situations = [ "We're making assumptions about what clients need", "We have some client feedback but need deeper insights", "We're entering a new market or service area", "We've hit a plateau and are keen for more growth", "Other" ]; const insightLevels = [ { label: 'Indicative insights', interviews: '4-6', min: 4, max: 6 }, { label: 'Strong patterns', interviews: '7-12', min: 7, max: 12 }, { label: 'Deep understanding', interviews: '12-16', min: 12, max: 16 }, { label: 'Comprehensive insights', interviews: '16-20', min: 16, max: 25 } ]; const getResearchCost = () => { const level = insightLevels.find(l => l.label === insightLevel); if (!level) return { min: 0, max: 0, avg: 0 }; const min = level.min * 1000; const max = level.max * 1000; const avg = (min + max) / 2; return { min, max, avg }; }; const calculateROI = (newClients) => { const cost = getResearchCost().avg; const value = parseFloat(clientValue) || 0; if (cost === 0 || value === 0) return null; const revenue = newClients * value; const roi = ((revenue - cost) / cost) * 100; return { roi, revenue, cost }; }; const calculateTotalImpact = (newClients) => { const cost = getResearchCost().avg; const value = parseFloat(clientValue) || 0; const repeat = parseFloat(repeatRate) || 35; if (cost === 0 || value === 0) return null; const newClientRevenue = newClients * value; // Improved repeat business: assume 15% improvement in repeat rate applied to 30 clients const repeatImprovement = 0.15; const clientBase = 30; const additionalRepeatRevenue = (repeat / 100) * repeatImprovement * clientBase * value; const totalValue = newClientRevenue + additionalRepeatRevenue; const totalROI = ((totalValue - cost) / cost) * 100; return { totalROI, newClientRevenue, repeatValue: additionalRepeatRevenue, totalValue, cost }; }; const formatCurrency = (amount) => { return new Intl.NumberFormat('en-NZ', { style: 'currency', currency: 'NZD', minimumFractionDigits: 0, maximumFractionDigits: 0 }).format(amount); }; const scenarios = [ { label: 'Conservative', clients: 4, color: 'border-gray-300' }, { label: 'Moderate', clients: 10, color: 'border-[#00aa65] border-2' }, { label: 'Ambitious', clients: 18, color: 'border-gray-300' } ]; const cost = getResearchCost(); const moderateROI = calculateROI(10); const breakEven = moderateROI ? Math.ceil(cost.avg / parseFloat(clientValue || 1)) : 0; return (
{/* Header */}
NosyHQ

Client Research ROI Calculator

For Consultancy Firms

Discover the commercial impact of deeply understanding your clients

{/* Input Section */}
{/* Question 1 */}
{goals.map((goal) => ( ))}
{/* Question 2 */}
{situations.map((situation) => (
{situation === 'Other' && currentSituation === 'Other' && ( setOtherSituation(e.target.value)} placeholder="Please specify..." className="mt-2 w-full p-3 rounded-lg border-2 focus:outline-none focus:border-[#00aa65]" style={{ borderColor: '#d1d5db' }} /> )}
))}
{/* Question 3 */}
$ setClientValue(e.target.value)} placeholder="0" className="w-full p-4 pl-8 rounded-lg border-2 text-lg focus:outline-none focus:border-[#00aa65]" style={{ borderColor: '#00aa65' }} />

This could be annual retainer fees, average project value, or typical annual revenue per client

{/* Question 4 */}
setRepeatRate(e.target.value)} placeholder="35" className="w-full p-4 pr-8 rounded-lg border-2 text-lg focus:outline-none focus:border-[#00aa65]" style={{ borderColor: '#00aa65' }} /> %

Understanding your clients deeply can increase repeat engagement rates

{/* Question 5 */}
{insightLevels.map((level) => ( ))}
{insightLevel && (

Estimated research investment: {formatCurrency(cost.min)} - {formatCurrency(cost.max)}

Based on $1,000 per interview

)}
{/* ROI Scenarios */} {cost.avg > 0 && clientValue && ( <>

ROI Scenarios: New Client Acquisition

{scenarios.map((scenario) => { const result = calculateROI(scenario.clients); if (!result) return null; return (

{scenario.label}

{scenario.clients} new clients

ROI

{result.roi.toFixed(0)}%

Investment

{formatCurrency(result.cost)}

Return

{formatCurrency(result.revenue)}

); })}

Break-even point: {breakEven} new client {breakEven !== 1 ? 's' : ''} (using moderate scenario)

{/* Total Business Impact */}

Total Business Impact

{scenarios.map((scenario) => { const result = calculateTotalImpact(scenario.clients); if (!result) return null; return (

{scenario.label}

Total ROI

{result.totalROI.toFixed(0)}%

New Client Revenue

{formatCurrency(result.newClientRevenue)}

Increased Repeat Business

{formatCurrency(result.repeatValue)}

Total Quantified Value

{formatCurrency(result.totalValue)}

); })}

Plus: Additional benefits from improved messaging, positioning, and service development

Methodology: Repeat business calculation assumes a 15% improvement in repeat engagement rate applied to a client base of 30, with partial year revenue impact.
{/* Subtle CTA */}

Want to discuss how to achieve these results for your firm?

Book a Free 20-Minute Call
)} {/* Cost of Getting It Wrong */}

The Cost of Getting It Wrong

Misaligned Service Offering

  • • Months spent developing services clients don't want
  • • Wasted budget on marketing the wrong value proposition
  • • Team frustration from low conversion rates
  • • Opportunity cost of not focusing on what clients actually need

Ineffective Marketing

  • • Marketing spend that doesn't resonate with prospects
  • • Generic messaging that fails to differentiate
  • • Long sales cycles due to unclear value communication
  • • Difficulty justifying fees without clear client pain points

Client Attrition

  • • Losing clients to competitors who understand them better
  • • Failed projects due to misunderstood requirements
  • • Damaged reputation from unmet expectations
  • • Higher acquisition costs to replace churned clients

Research is insurance against expensive mistakes

The cost of getting it wrong—in lost clients, wasted budget, and missed opportunities—far exceeds the investment in understanding your clients properly from the start.

{/* Time to Value */}

Time to Value

With Client Research

Week 1: Research kickoff and planning
Weeks 2-3: Conduct client interviews
Weeks 4-5: Analysis and insight synthesis
Week 6: Present findings and recommendations
Week 7+: Implement with confidence

Without Research

Month 1-3: Guessing at client needs
Month 4-6: Launching services with uncertain fit
Month 7-9: Discovering what's not working
Month 10-12: Course correcting and pivoting
Ongoing: Missed opportunities and client attrition
{/* Beyond the Numbers */}

Beyond the Numbers

Team Alignment

When everyone understands your clients deeply, your entire team moves in the same direction. No more internal debates about what clients want—you have the evidence.

Confident Decisions

Make strategic decisions backed by real client insights, not assumptions. Invest your resources where they'll have the greatest impact on client satisfaction and business growth.

Competitive Advantage

While competitors guess, you'll know. Deep client understanding becomes your unfair advantage in winning and retaining the best clients in your market.

{/* Final CTA */}

Ready to Get Started?

Let's discuss how client research can transform your consultancy

Book Your Free Consultation

Kathryn McGarvey

Chief Customer Intelligence Officer

kathryn@nosyhq.com
); }