Plan, evaluate, and build free tools for marketing — calculators, generators, and interactive tools that generate leads, SEO value, and brand awareness.
Turn engineering effort into growth by building interactive tools like calculators or generators that attract visitors and capture leads without paid ads. Get help evaluating ideas, designing for conversions, and executing a launch strategy that maximizes SEO value and backlinks. Reach for it whenever you want to leverage engineering as marketing instead of relying solely on content or paid campaigns.
name: “free-tool-strategy”
description: “When the user wants to build a free tool for marketing — lead generation, SEO value, or brand awareness. Use when they mention ‘engineering as marketing,’ ‘free tool,’ ‘calculator,’ ‘generator,’ ‘checker,’ ‘grader,’ ‘marketing tool,’ ‘lead gen tool,’ ‘build something for traffic,’ ‘interactive tool,’ or ‘free resource.’ Covers idea evaluation, tool design, and launch strategy. For pure SEO content strategy (no tool), use seo-audit or content-strategy instead.”
license: MIT
metadata:
version: 1.0.0
author: Alireza Rezvani
category: marketing
updated: 2026-03-06
Free Tool Strategy
You are a growth engineer who has built and launched free tools that generated hundreds of thousands of visitors, thousands of leads, and hundreds of backlinks without a single paid ad. You know which ideas have legs and which waste engineering time. Your goal is to help decide what to build, how to design it for maximum value and lead capture, and how to launch it so people actually find it.
Before Starting
Check for context first:
If marketing-context.md exists, read it before asking questions. Use that context and only ask for information not already covered.
Gather this context (ask if not provided):
1. Product & Audience
What’s your core product and who buys it?
What problem does your ideal customer have that a free tool could solve adjacently?
What does your audience search for that isn’t your product?
2. Resources
How much engineering time can you dedicate? (Hours, days, weeks)
Do you have design resources, or is this no-code/template?
Who maintains the tool after launch?
3. Goals
Primary goal: SEO traffic, lead generation, backlinks, or brand awareness?
What does a “win” look like? (X leads/month, Y backlinks, Z organic visitors)
How This Skill Works
Mode 1: Evaluate Tool Ideas
You have one or more ideas and you’re not sure which to build — or whether to build any of them.
Workflow:
Score each idea against the 6-factor evaluation framework
Identify the highest-potential idea based on your specific goals and resources
Validate with keyword data before committing engineering time
Mode 2: Design the Tool
You’ve decided what to build. Now design it to maximize value, lead capture, and shareability.
Workflow:
Define the core value exchange (what the user inputs → what they get back)
Design the UX for minimum friction
Plan lead capture: where, what to ask, progressive profiling
Score each idea 1–5 on each factor. Highest total = build first.
Factor
What to Check
1 (weak)
5 (strong)
Search Volume
Monthly searches for “free [tool]“
<100/mo
>5k/mo
Competition
Quality of existing free tools
Excellent tools exist
No good free alternatives
Build Effort
Engineering time required
Months
Days
Lead Capture Potential
Can you naturally gate or capture email?
Forced gate, kills UX
Natural fit (results emailed, report downloaded)
SEO Value
Can you build topical authority + backlinks?
Thin, one-page utility
Deep use case, link magnet
Viral Potential
Will users share results or embed the tool?
Nobody shares
Results are shareable by design
Scoring guide:
25–30: Build it, now
18–24: Strong candidate, validate keyword volume first
12–17: Maybe, if resources are low or it fits a strategic gap
<12: Pass, or rethink the concept
Design Principles
Value Before Gate
Give the core value first. Gate the upgrade — the deeper report, the saved results, the email delivery. If the tool is only valuable after they give you their email, you’ve designed a lead form, not a tool.
Good: Show the score immediately → offer to email the full report
Bad: “Enter your email to see your results”
Minimal Friction
Max 3 inputs to get initial results
No account required for the core value
Progressive disclosure: simple first, detailed on request
Plan your outreach list before launch. Who writes about tools in your category? Find their existing “best tools” posts and reach out post-launch.
Measurement
Track these from day one:
Metric
What It Tells You
Tool
Tool usage (sessions, completions)
Is anyone using it?
GA4 / Plausible
Lead conversion rate
Is it generating leads?
CRM + GA4 events
Organic traffic
Is it ranking?
Google Search Console
Referring domains
Is it earning links?
Ahrefs / Google GSC
Email to paid conversion
Is it generating pipeline?
CRM attribution
Bounce rate / time on page
Is the tool actually used?
GA4
Targets at 90 days post-launch:
Organic traffic: 500+ sessions/month
Lead conversion: 5–15% of completions
Referring domains: 10+ organic backlinks
Run scripts/tool_roi_estimator.py to model break-even timeline based on your traffic and conversion assumptions.
Proactive Triggers
Surface these without being asked:
Tool requires account before use → Flag and redesign the gate. This kills SEO, kills virality, and tells users you’re harvesting data, not providing value.
No shareable output → If results exist only in the session and can’t be shared or saved, you’ve built half a tool. Flag the missed virality opportunity.
No keyword validation → If the tool concept hasn’t been validated against search volume before build, flag — 3 hours of research beats 3 weeks of building a tool nobody searches for.
Competitors with the same free tool → If an existing tool is well-established and free, the bar is “10x better or don’t build it.” Flag the competitive risk.
Single input → single output → Ultra-simple tools lose SEO value quickly and attract no links. Flag if the tool needs more depth to be link-worthy.
No maintenance plan → Free tools die when the API they call changes or the logic gets stale. Flag the need for a maintenance owner before launch.
Build decisions are binary — “build it” or “don’t build it” with a clear reason, not “it depends”
Related Skills
seo-audit: Use for auditing existing pages and keyword strategy. NOT for building new tool-based content assets.
content-strategy: Use for planning the overall content program (blogs, guides, whitepapers). NOT for tool-specific lead generation.
copywriting: Use when writing the marketing copy for the tool landing page. NOT for the tool UX design or lead capture strategy.
launch-strategy: Use when planning the full product or feature launch. NOT for tool-specific distribution (use free-tool-strategy for that).
analytics-tracking: Use when implementing the measurement stack for the tool. NOT for deciding what to measure (use free-tool-strategy for that).
form-cro: Use when optimizing the lead capture form in the tool. NOT for the tool design or launch strategy.
Launch Playbook — How to Launch a Free Tool for Maximum Impact
A free tool with no distribution is just code sitting on a server. This playbook gives you the launch sequence that turns a new tool into traffic, leads, and backlinks.
The Launch Mindset
Most companies "launch" by posting it on LinkedIn and waiting. That gets you 200 visits from your existing followers and then nothing.
A real launch is a 4-week sustained distribution campaign. You're not announcing — you're seeding. Every channel you touch plants a seed that compounds over months (especially for SEO).
Pre-Launch Checklist (1–2 Weeks Before)
SEO Foundations
Target keyword researched and confirmed (search volume + low-medium competition)
URL slug locked: /tools/[keyword-rich-name]
Meta title written: "[Free Tool Name] — [What It Does] | [Brand]"
Meta description written: 155 chars, includes target keyword, tells user what they get
H1 matches search intent, not just brand name
SoftwareApplication schema markup added (see SKILL.md)
Internal links from related content pointing to the tool page
Tool page links to 2-3 related resources on your site
Tool Quality Gate
Core value delivered in ≤3 user inputs
Results render on mobile
Results are shareable (unique URL, copy button, or social share)
Lead capture is in place (but gated after value, not before)
Email delivery working if you're sending results via email
Error handling — what happens with bad inputs?
Load time <3 seconds (tools with slow loads have brutal bounce rates)
Heatmap tool installed (Hotjar or Microsoft Clarity) to watch real usage
Outreach List Ready
List of 20-50 sites that link to similar free tools (from Ahrefs / Google "site:domain resources")
List of newsletters in your category that feature tools
List of subreddits and communities where your audience hangs out
Influencers or thought leaders who regularly share tools in your space
Launch Week — The Sequence
Day 1: SEO and Directories
Submit tool to Google Search Console (Request Indexing)
Submit to Bing Webmaster Tools
Submit to relevant online directories (AlternativeTo, Product Hunt upcoming, SaaSHub, Capterra if applicable)
Post in your company's blog (a 600-900 word post explaining the tool, linking to it)
Day 2: Product Hunt
Submit to Product Hunt at midnight PST (Thursday or Tuesday for best timing)
Have your team and early fans upvote in the first 2 hours
Respond to every comment personally — PH algorithm rewards engagement
Ask your top customers to upvote (personalized message, not mass email)
Product Hunt tip: the thumbnail image and tagline matter more than the description
Day 3: Community Seeding (No Pitch)
Post in relevant subreddits — share as a resource, not a promotion
Frame: "I built this free [tool type] for [audience] because I couldn't find one — feedback welcome"
No "check out our new tool" — that's spam and gets removed
Share in Slack communities in your industry
Share in relevant Facebook groups
LinkedIn post — personal post from founder, not company page (personal posts get 10× the reach)
Day 4: Email to Your List
Dedicated email to your subscriber list introducing the tool
Subject line: "Free [Tool Name] — [benefit in 5 words]"
Keep it short: what it is, why you built it, one sentence result, link
Ask them to share with one person who'd benefit
Day 5: Hacker News
Post to HN with a "Show HN:" prefix: Show HN: [Tool Name] — [what it does in one line]
HN community responds well to honest builder posts with a unique angle
Must be technically interesting or niche — generic marketing tools don't land
Be available to answer technical questions in the thread all day
Day 6-7: Social Amplification
Twitter/X thread: "I built a free [tool] for [audience]. Here's how it works:" → walkthrough with screenshots
Short-form video (LinkedIn/TikTok): screen recording of yourself using the tool
Reach out to 5 people who you know will love it — personal message, not mass email
Post-Launch: Weeks 2-4
Backlink Outreach
This is where the long-term SEO value comes from.
Identify targets:
Search Google: "best free tools for [your category]" — email everyone on that list
Use Ahrefs: find pages linking to similar tools → those same pages may link to yours
Search: "[competitor tool name]" site:[niche blog] — those bloggers are interested in tools like yours
Outreach template:
Subject: Free [Tool Name] that might fit your "[Resource List Title]" postHi [Name],I noticed your post on the best free tools for [category]. I recently built [Tool Name] — it helps [audience] [specific outcome] without [common pain point].[Direct link to tool]Would it fit your list? Happy to give you early access or a custom embed if that's useful.[Your name]
Volume: 50-100 personalized outreach emails in the first 30 days. Expect 5-15% positive response. One good resource page link is worth 50 generic directory submissions.
Content That Multiplies
Write a guide that uses the tool as a central reference: "How to [goal] — with a free calculator to check your numbers"
Create a results-based case study: "We analyzed 500 [things] with our [tool] — here's what we found"
Partner with a newsletter: offer to write a guest post that features the tool as the main resource
Measurement — First 90 Days
Weekly Check-ins (GA4 + GSC)
Week
What to Look For
1
Direct traffic from launch channels. Tool completion rate (anything under 40% means fix UX)
2-4
Product Hunt/HN traffic tailing off. Backlinks starting to trickle in.
5-8
First organic impressions in GSC. Check what queries are sending traffic.
9-12
Organic traffic should be visible. Lead capture rate should be stable.
The "Is It Working?" Test at 90 Days
Metric
Needs Work
Good
Great
Organic sessions/month
<200
500–2,000
>5,000
Tool completion rate
<30%
40–60%
>70%
Lead conversion rate (completions → email)
<3%
5–15%
>20%
Referring domains (backlinks)
<5
10–30
>50
When a Launch Flops
A tool can fail to gain traction for 4 reasons:
Wrong keyword — nobody searches for this. Check GSC; if you have zero impressions after 60 days, the keyword target is wrong. Pivot the page copy to a related term with volume.
Wrong problem — the tool exists, but it's not solving an acute enough problem. Talk to 5 people who used it and didn't return. What were they hoping for?
Gated too early — traffic is high but completion is low. You're asking for email before delivering value. Remove or move the gate.
Distribution failure — the tool is fine, but you only posted it once. Run the backlink outreach again with a fresh list. Submit to 10 new directories. Write the guide post.
Most "failed" tools aren't actually failures — they just didn't get the 90-day distribution campaign they needed.
Tools That Keep Working (Maintenance)
A free tool is a 3-year investment, not a 3-week campaign.
Monthly:
Check tool is still functioning (APIs, URLs, formulas)
Review top search queries in GSC → update H2s and content to match
Add one new feature based on user requests (check support inbox)
Quarterly:
Update any data the tool uses (benchmarks, averages, rates)
Refresh the landing page copy — Google rewards freshness
Identify 20 new backlink targets and run outreach
Annually:
Full UX review — does it still work on the latest mobile browsers?
Competitive audit — are better free alternatives emerging?
Decide: invest more, maintain as-is, or retire and redirect
Tool Types Guide — Comprehensive Reference for Free Marketing Tools
Each tool type explained with examples, build complexity, typical outcomes, and design guidance.
The 7 Tool Types
1. Calculators
What they do: Take numerical or categorical inputs → output a calculated result (a number, range, or score).
Examples:
SaaS Pricing Calculator ("What should you charge?")
ROI Calculator ("How much would you save?")
LTV Calculator ("What's your customer worth?")
Churn Impact Calculator ("What does 1% more churn cost you?")
Salary Calculator by role/location/experience
Build complexity: Low–Medium
Simple formula: 1-2 days of dev
Multi-variable model: 1-2 weeks
Lead potential: High — people want to save or email complex results.
SEO value: Medium-High — calculators earn links from resource pages and ranking for "[topic] calculator" queries.
Viral potential: Medium — people share results when they're surprising or validating.
Design tips:
Sliders are more satisfying than input fields for numerical ranges
Show results dynamically (real-time as they adjust inputs)
Include a "how this was calculated" section for credibility
Email results: "Send this to myself" captures the lead naturally
What makes a calculator link-worthy:
The underlying model must be credible. If you're calculating LTV, show your formula and cite your assumptions. A calculator with methodology is shareable content, not just a widget.
2. Generators
What they do: Take inputs (topic, style, parameters) → output structured text or content.
Score the output (0-100) — people anchor on scores and compare
Categorize results: Critical / Warnings / Passed
Prioritize issues — don't just list everything, rank by impact
Loading state matters — show progress (feels like analysis is happening)
4. Graders
What they do: Score something holistically against a rubric. More opinionated than a checker — you're grading against a defined standard.
Examples:
Website Grader (HubSpot's classic)
Sales Page Grader
Email Newsletter Grader
LinkedIn Company Page Grader
Onboarding Flow Grader
Pricing Page Grader
Build complexity: Medium
Define the rubric first (the criteria matter more than the tech)
Usually 1-2 weeks
Lead potential: Very High — graders feel like getting a report card; people want the full results.
SEO value: High for niche graders ("sales page grader" etc.).
Viral potential: Medium-High — share your score as social proof or to invite critique.
Design tips:
The grade (A-F or 0-100) is the hook — show it prominently
Break down the grade into components (e.g., "Design: A, Copy: C, CTA: D")
Each component should explain why and how to improve it
The improvement advice is where the lead capture is earned
5. Converters
What they do: Transform input from one format to another. Pure utility.
Examples:
Markdown to HTML Converter
Timestamp Converter
CSV to JSON Converter
Video Frame Rate Converter
UTC to Local Time Converter
File Format Converter
Currency Converter
Build complexity: Very Low – Low
Most conversions are 1-2 days
Pure client-side (no server needed)
Lead potential: Low — pure utility, low friction reason to capture email.
SEO value: Medium — "convert X to Y" queries exist but are dominated by large tool sites.
Viral potential: Low — people bookmark and return, don't share.
When to build: Only if the conversion is specific to your audience (e.g., a SaaS for designers building a "Figma token to CSS converter"). Generic converters are dominated by free sites with years of SEO authority.
6. Templates
What they do: Pre-built, fillable documents that users download, copy, or use.
Examples:
Job Description Templates
Product Roadmap Template
SaaS Metrics Dashboard Template (Google Sheets)
Email Sequence Template
SEO Content Brief Template
Brand Voice Guide Template
Engineering RFP Template
Build complexity: Very Low
Template creation: hours to 1 day
Hosting: Google Docs/Sheets share, Notion public page, or downloadable PDF
Lead potential: Very High — download = natural lead capture (email to send the file).
SEO value: High — "[role] template" queries are competitive but high-intent.
Viral potential: Medium — people share templates that save them real time.
Design tips:
The template itself is the product — make it excellent
Include instructions inside the template
Offer a "filled example" so users understand what it should look like
Update templates seasonally to keep them ranking
7. Interactive Visualizations
What they do: Show data, concepts, or comparisons in a visual, explorable way.
Examples:
SaaS Market Map (interactive, filterable)
Marketing Funnel Visualizer
Company Comparison Tool (filter by size, location, tech stack)
Real-Time Industry Benchmark Dashboard
Interactive Pricing Comparison
Build complexity: High
2-6 weeks typically
Requires data (your own research, public datasets, or API)
May require ongoing data maintenance
Lead potential: Medium — users engage deeply but email capture isn't always natural.
SEO value: Very High if data-driven — journalists and bloggers link to unique datasets.
Viral potential: Very High if the data is surprising or highly visual — these are your link magnets.
Design tips:
The data is the moat — if you have unique data, this is the highest-leverage tool type
Interactive beats static for time-on-page
Make it embeddable (embed code button) for backlink acquisition
Update the data regularly — stale data kills backlinks when someone discovers it
Build vs. No-Code Decision Guide
Tool Type
No-Code Options
When to Go Custom Dev
Calculator
Outgrow, Calconic, Typeform
When logic is complex, or brand/speed matters
Generator
Typeform + Zapier, GPT wrappers
When you need custom LLM behavior
Checker
Limited — usually needs dev
Always (URL crawling, text analysis)
Grader
Outgrow, Involve.me
When the rubric is fixed and simple
Converter
Findable no-code tools
Rarely — utility tools are trivially buildable
Template
Google Docs, Notion, Canva
When document quality matters
Visualization
Flourish, Observable
When data is complex or interactive
What Makes a Tool "10x Better Than the Existing Free Option"
If there's already a free tool for the job, you need a compelling reason to build yours. One of:
Niche specificity — existing tool is generic, yours is specific to your audience's workflow
Better UX — existing tools are ugly, clunky, or require too many steps
Integrated action — after results, existing tools drop the user; yours offers next steps or a trial
Unique data or model — your checker uses proprietary data that others don't have
Shareable output — existing tools give results in a table; yours generates a shareable card or PDF
Don't build "the same tool, but ours." That's a traffic fight you won't win. Build "the tool that does what the others don't."
#!/usr/bin/env python3"""tool_roi_estimator.py — Estimates ROI of building a free marketing tool.Models the return from a free tool given build cost, maintenance, expected traffic,conversion rate, and lead value. Outputs ROI timeline, break-even month, andminimum traffic needed to justify the investment.Usage: python3 tool_roi_estimator.py # runs embedded sample python3 tool_roi_estimator.py params.json # uses your params echo '{"build_cost": 5000, "lead_value": 200}' | python3 tool_roi_estimator.pyJSON input format: { "build_cost": 5000, # One-time engineering cost ($) — dev time × rate "monthly_maintenance": 150, # Ongoing server, API, ops cost per month ($) "traffic_month_1": 500, # Expected organic sessions in month 1 "traffic_growth_rate": 0.15, # Monthly organic traffic growth rate (0.15 = 15%) "tool_completion_rate": 0.55, # % of visitors who complete the tool (0.55 = 55%) "lead_capture_rate": 0.10, # % of completions who give email (0.10 = 10%) "lead_to_trial_rate": 0.08, # % of leads who start a trial "trial_to_paid_rate": 0.25, # % of trials who become paid customers "ltv": 1200, # Customer LTV ($) "months_to_model": 24, # How many months to project "seo_ramp_months": 3, # Months before organic traffic kicks in (0 if PH/HN spike) "backlink_value_monthly": 200, # Estimated value of earned backlinks (DA × niche rate) "tool_name": "ROI Calculator" # For display only }"""import jsonimport mathimport sys# ---------------------------------------------------------------------------# Core calculations# ---------------------------------------------------------------------------def traffic_at_month(params, month): """ Traffic grows from near-zero during SEO ramp, then compounds. Month 1 = launch spike (Product Hunt / HN etc.) if ramp=0, or baseline. """ ramp = params.get("seo_ramp_months", 3) base = params["traffic_month_1"] growth = params["traffic_growth_rate"] if month <= ramp: # Linear ramp to base traffic during SEO warmup return round(base * (month / ramp), 0) if ramp > 0 else base else: # Compound growth after ramp months_since_ramp = month - ramp return round(base * ((1 + growth) ** months_since_ramp), 0)def leads_at_month(params, sessions): completion_rate = params["tool_completion_rate"] lead_capture_rate = params["lead_capture_rate"] completions = sessions * completion_rate leads = completions * lead_capture_rate return round(leads, 1)def customers_at_month(params, leads): trial_rate = params["lead_to_trial_rate"] paid_rate = params["trial_to_paid_rate"] customers = leads * trial_rate * paid_rate return round(customers, 2)def revenue_at_month(params, customers): return round(customers * params["ltv"], 2)def cost_at_month(params, month): """ Month 1: build cost + maintenance. Subsequent months: maintenance only. """ maintenance = params["monthly_maintenance"] backlink_value = params.get("backlink_value_monthly", 0) if month == 1: return params["build_cost"] + maintenance return maintenance # backlink value is additive, not a costdef backlink_value_at_month(params, month): """Backlinks grow slowly — assume linear ramp over 6 months.""" max_val = params.get("backlink_value_monthly", 0) ramp = 6 if month >= ramp: return max_val return round(max_val * (month / ramp), 2)def build_projection(params): months = params["months_to_model"] rows = [] cumulative_cost = 0 cumulative_revenue = 0 cumulative_backlink_value = 0 for m in range(1, months + 1): sessions = traffic_at_month(params, m) leads = leads_at_month(params, sessions) customers = customers_at_month(params, leads) revenue = revenue_at_month(params, customers) cost = cost_at_month(params, m) bl_value = backlink_value_at_month(params, m) cumulative_cost += cost cumulative_revenue += revenue cumulative_backlink_value += bl_value total_value = cumulative_revenue + cumulative_backlink_value cumulative_net = total_value - cumulative_cost rows.append({ "month": m, "sessions": int(sessions), "leads": leads, "customers": customers, "revenue": revenue, "cost": round(cost, 2), "backlink_value": bl_value, "cumulative_cost": round(cumulative_cost, 2), "cumulative_revenue": round(cumulative_revenue, 2), "cumulative_backlink_value": round(cumulative_backlink_value, 2), "cumulative_net": round(cumulative_net, 2), }) return rowsdef find_break_even_month(projection): for row in projection: if row["cumulative_net"] >= 0: return row["month"] return Nonedef calculate_minimum_traffic(params): """ What monthly traffic volume is needed to break even within 12 months? Solve for traffic where 12-month cumulative net >= 0. Uses binary search. """ target_months = 12 total_cost_12mo = params["build_cost"] + params["monthly_maintenance"] * target_months # Revenue per session (steady state, month 12) completion = params["tool_completion_rate"] lead_cap = params["lead_capture_rate"] trial = params["lead_to_trial_rate"] paid = params["trial_to_paid_rate"] ltv = params["ltv"] bl_monthly = params.get("backlink_value_monthly", 0) revenue_per_session = completion * lead_cap * trial * paid * ltv # Total sessions needed over 12 months (ignoring ramp for simplification) if revenue_per_session <= 0: return None # With backlink value: total_value = sessions_total × revenue_per_session + 12 × bl_monthly # sessions_total = total needed total_bl_value = bl_monthly * 12 * 0.5 # ramp factor needed_from_sessions = max(0, total_cost_12mo - total_bl_value) min_monthly_sessions = needed_from_sessions / (target_months * 0.6 * revenue_per_session) # 0.6 factor: first 3 months lower traffic during ramp return round(min_monthly_sessions, 0)def calculate_roi_summary(projection, params): if not projection: return {} last = projection[-1] total_cost = last["cumulative_cost"] total_revenue = last["cumulative_revenue"] total_value = total_revenue + last["cumulative_backlink_value"] net = last["cumulative_net"] roi = (net / total_cost * 100) if total_cost > 0 else 0 total_leads = sum(r["leads"] for r in projection) total_customers = sum(r["customers"] for r in projection) cost_per_lead = total_cost / total_leads if total_leads > 0 else 0 return { "total_cost": round(total_cost, 2), "total_revenue": round(total_revenue, 2), "total_value_with_backlinks": round(total_value, 2), "net_benefit": round(net, 2), "roi_pct": round(roi, 1), "total_leads": round(total_leads, 0), "total_customers": round(total_customers, 1), "cost_per_lead": round(cost_per_lead, 2), }# ---------------------------------------------------------------------------# Formatting# ---------------------------------------------------------------------------def fc(value): return f"${value:,.2f}"def fp(value): return f"{value:.1f}%"def fi(value): return f"{int(value):,}"def print_report(params, projection, summary, break_even, min_traffic): tool_name = params.get("tool_name", "Free Tool") months = params["months_to_model"] print("\n" + "=" * 65) print(f"FREE TOOL ROI ESTIMATOR — {tool_name.upper()}") print("=" * 65) print("\n📊 INPUT PARAMETERS") print(f" Build cost (one-time): {fc(params['build_cost'])}") print(f" Monthly maintenance: {fc(params['monthly_maintenance'])}") print(f" Starting monthly traffic: {fi(params['traffic_month_1'])} sessions") print(f" Monthly traffic growth: {fp(params['traffic_growth_rate'] * 100)}") print(f" SEO ramp period: {params.get('seo_ramp_months', 3)} months") print(f" Tool completion rate: {fp(params['tool_completion_rate'] * 100)}") print(f" Lead capture rate: {fp(params['lead_capture_rate'] * 100)} (of completions)") print(f" Lead → trial rate: {fp(params['lead_to_trial_rate'] * 100)}") print(f" Trial → paid rate: {fp(params['trial_to_paid_rate'] * 100)}") print(f" LTV: {fc(params['ltv'])}") print(f" Backlink value (monthly): {fc(params.get('backlink_value_monthly', 0))}") print(f"\n📈 {months}-MONTH SUMMARY") print(f" Total investment: {fc(summary['total_cost'])}") print(f" Revenue from leads: {fc(summary['total_revenue'])}") print(f" Backlink value: {fc(summary.get('total_value_with_backlinks', 0) - summary['total_revenue'])}") print(f" Total value generated: {fc(summary.get('total_value_with_backlinks', summary['total_revenue']))}") print(f" Net benefit: {fc(summary['net_benefit'])}") print(f" ROI: {fp(summary['roi_pct'])}") print(f"\n🎯 LEAD & CUSTOMER METRICS") print(f" Total leads generated: {fi(summary['total_leads'])}") print(f" Total customers acquired: {round(summary['total_customers'], 1)}") print(f" Cost per lead: {fc(summary['cost_per_lead'])}") print(f" CAC via tool: {fc(summary['total_cost'] / max(summary['total_customers'], 0.01))}") print(f"\n⏱ BREAK-EVEN ANALYSIS") if break_even: print(f" Break-even month: Month {break_even}") assessment = "🟢 Fast payback" if break_even <= 6 else "🟡 Moderate" if break_even <= 12 else "🔴 Long payback" print(f" Assessment: {assessment}") else: print(f" Break-even month: Not reached in {months} months ⚠️") print(f" Action needed: Increase traffic, improve completion/capture rate, or reduce build cost") if min_traffic: print(f" Min traffic for 12-mo break-even: {fi(min_traffic)} sessions/month") current = params["traffic_month_1"] if current >= min_traffic: print(f" Your projected traffic ({fi(current)}/mo) exceeds minimum ✅") else: gap = min_traffic - current print(f" Traffic gap: need {fi(gap)} more sessions/month than projected ⚠️") print(f"\n📅 MONTHLY PROJECTION") print(f" {'Mo':>3} {'Sessions':>9} {'Leads':>6} {'Custs':>6} {'Revenue':>9} {'Cum Net':>10}") print(f" {'-'*3} {'-'*9} {'-'*6} {'-'*6} {'-'*9} {'-'*10}") for row in projection: net = row["cumulative_net"] net_str = fc(net) if net >= 0 else f"({fc(abs(net))})" be_marker = " ← break-even" if row["month"] == break_even else "" print(f" {row['month']:>3} {fi(row['sessions']):>9} {row['leads']:>6.1f} {row['customers']:>6.2f}" f" {fc(row['revenue']):>9} {net_str:>10}{be_marker}") print("\n" + "=" * 65) # Recommendations print("\n💡 RECOMMENDATIONS") roi = summary["roi_pct"] if roi > 200: print(" ✅ Strong ROI case — build it, invest in distribution") elif roi > 50: print(" 🟡 Positive ROI but slim — validate keyword volume before committing full build cost") print(" Consider: MVP version (no-code) to test demand before full dev investment") else: print(" 🔴 ROI case is weak — investigate:") print(" 1. Is the target keyword validated? (check search volume)") print(" 2. Can you reduce build cost? (no-code MVP first)") print(" 3. Is the lead-to-customer conversion realistic?") print(" 4. Is the LTV accurate?") completion = params["tool_completion_rate"] if completion < 0.40: print(" ⚠️ Low completion rate — reconsider UX or number of required inputs") if params["lead_capture_rate"] < 0.05: print(" ⚠️ Low lead capture — check gate placement (should be after value is delivered)") if break_even and break_even > 18: print(" ⚠️ Long break-even — prioritize launch distribution to accelerate traffic ramp")# ---------------------------------------------------------------------------# Default sample# ---------------------------------------------------------------------------DEFAULT_PARAMS = { "tool_name": "SaaS ROI Calculator", "build_cost": 4000, "monthly_maintenance": 100, "traffic_month_1": 600, "traffic_growth_rate": 0.12, "seo_ramp_months": 3, "tool_completion_rate": 0.55, "lead_capture_rate": 0.12, "lead_to_trial_rate": 0.08, "trial_to_paid_rate": 0.25, "ltv": 1400, "months_to_model": 18, "backlink_value_monthly": 150,}# ---------------------------------------------------------------------------# Main# ---------------------------------------------------------------------------def main(): import argparse parser = argparse.ArgumentParser( description="Estimates ROI of building a free marketing tool. " "Models return given build cost, maintenance, traffic, " "conversion rate, and lead value." ) parser.add_argument( "file", nargs="?", default=None, help="Path to a JSON file with tool parameters. " "If omitted, reads from stdin or runs embedded sample." ) args = parser.parse_args() params = None if args.file: try: with open(args.file) as f: params = json.load(f) except Exception as e: print(f"Error reading file: {e}", file=sys.stderr) sys.exit(1) elif not sys.stdin.isatty(): raw = sys.stdin.read().strip() if raw: try: params = json.loads(raw) except Exception as e: print(f"Error reading stdin: {e}", file=sys.stderr) sys.exit(1) else: print("No input provided — running with sample parameters.\n") params = DEFAULT_PARAMS else: print("No input provided — running with sample parameters.\n") params = DEFAULT_PARAMS # Fill defaults for any missing keys for k, v in DEFAULT_PARAMS.items(): params.setdefault(k, v) projection = build_projection(params) summary = calculate_roi_summary(projection, params) break_even = find_break_even_month(projection) min_traffic = calculate_minimum_traffic(params) print_report(params, projection, summary, break_even, min_traffic) # JSON output json_output = { "inputs": params, "results": { "roi_pct": summary["roi_pct"], "break_even_month": break_even, "total_leads": summary["total_leads"], "total_customers": summary["total_customers"], "cost_per_lead": summary["cost_per_lead"], "net_benefit": summary["net_benefit"], "min_monthly_traffic_for_12mo_breakeven": min_traffic, } } print("\n--- JSON Output ---") print(json.dumps(json_output, indent=2))if __name__ == "__main__": main()
Install this Skill
Skills give your AI agent a consistent, structured approach to this task — better output than a one-off prompt.