๐Ÿ–ฅ๏ธ

Local LLM Hosting Revenue Estimator

Estimate monthly profit from renting your GPU for LLM inference. Pick a GPU, marketplace, utilization, and electricity rate to see net revenue, $/hour, and break-even months.

Inputs

Best consumer card for local LLM hosting. High demand on Vast.ai / RunPod.

Reboots, updates, relocations.

GPU + system used for break-even.

Gross monthly revenue

โ€”

Platform fees

โ€”

Electricity cost

โ€”

Net monthly profit

โ€”

Net $ per rented hour

โ€”

Break-even months

โ€”

Annual net profit (after hardware)

โ€”

Verdict

โ€”

Utilization sensitivity

Net monthly profit at different utilization rates, holding your current hourly rate, power, and fees.

How the math works

  • Rentable hours = hours/day ร— days/month ร— (1 โˆ’ downtime reserve).
  • Gross revenue = rentable hours ร— utilization ร— hourly rate.
  • Platform fees = gross revenue ร— platform fee %.
  • Electricity = hours online ร— power (kW) ร— electricity rate.
  • Net profit = gross โˆ’ fees โˆ’ electricity โˆ’ maintenance.
  • Break-even = hardware cost รท monthly net profit.

Hosting reality checks

  • โ€ข 24 GB cards (RTX 3090/4090) are the sweet spot for local LLM rentals.
  • โ€ข Typical consumer rates: $0.70-2.00/hr depending on VRAM and demand.
  • โ€ข Utilization above 70% is excellent; below 40% is hard to justify vs selling the hardware.
  • โ€ข Power costs dominate in regions above $0.20/kWh.
  • โ€ข Self-hosting direct customers keeps the most margin but requires support.

๐Ÿค– Use this tool in your agent

โœ“ Agent-ready code

Copy the snippet below into your agent, newsletter, or script. The tool page at hermesdispatch.dev/tools/local-llm-hosting-revenue-estimator/ is the canonical contract: inputs, outputs, and formulas.

python
# Hermes Dispatch Tool โ€” Local LLM Hosting Revenue Estimator
# Source: https://hermesdispatch.dev/tools/local-llm-hosting-revenue-estimator/
# Description: Estimate monthly revenue from renting local GPU inference capacity.
# License: MIT (generated by hermesdispatch.dev)
#
# INSTALL:
#   1. Save this file as ~/.hermes/hermes-agent/tools/local_llm_hosting_revenue_estimator.py
#   2. Restart Hermes or run /reset in a session
#   3. The tool auto-registers if Hermes uses auto-discovery of tools/*.py
#
# MANUAL REGISTRY (if auto-discovery is off):
#   from tools.local_llm_hosting_revenue_estimator import register
#   register()

import json

DATA = {"defaults": {"hourly_rate": 1.25, "hours_per_day": 20, "days_per_month": 30, "utilization_pct": 65, "electricity_rate": 0.13, "gpu_power_w": 350, "platform_fee_pct": 15, "hardware_cost": 2200, "maintenance_per_month": 25, "downtime_reserve_pct": 10}, "gpus": [{"slug": "rtx-4090", "name": "NVIDIA RTX 4090 (24 GB)", "vram_gb": 24, "power_w": 350, "typical_rate": 1.5, "hardware_cost": 2200, "notes": "Best consumer card for local LLM hosting. High demand on Vast.ai / RunPod."}, {"slug": "rtx-3090", "name": "NVIDIA RTX 3090 (24 GB)", "vram_gb": 24, "power_w": 320, "typical_rate": 0.85, "hardware_cost": 1200, "notes": "Workhorse for inference. Slower than 4090 but cheaper to acquire."}, {"slug": "rtx-3090-ti", "name": "NVIDIA RTX 3090 Ti (24 GB)", "vram_gb": 24, "power_w": 360, "typical_rate": 0.95, "hardware_cost": 1400, "notes": "Slightly faster 3090 variant. Watch power draw."}, {"slug": "rtx-4080", "name": "NVIDIA RTX 4080 (16 GB)", "vram_gb": 16, "power_w": 280, "typical_rate": 0.75, "hardware_cost": 1200, "notes": "Good for 7B-13B quantized models. Lower rental demand than 24 GB cards."}, {"slug": "rx-7900-xtx", "name": "AMD RX 7900 XTX (24 GB)", "vram_gb": 24, "power_w": 330, "typical_rate": 0.7, "hardware_cost": 1000, "notes": "Linux/ROCm inference. Smaller rental marketplace but cheap per GB."}, {"slug": "a100-40gb", "name": "NVIDIA A100 40GB", "vram_gb": 40, "power_w": 250, "typical_rate": 2.5, "hardware_cost": 8000, "notes": "Datacenter reliability. Higher rates but slower turnover for hobbyists."}, {"slug": "h100", "name": "NVIDIA H100 80GB", "vram_gb": 80, "power_w": 350, "typical_rate": 6.0, "hardware_cost": 30000, "notes": "Enterprise demand. High barrier to entry, top revenue per hour."}], "platforms": [{"slug": "vastai", "name": "Vast.ai", "fee_pct": 15, "notes": "Peer-to-peer. You set price. High competition."}, {"slug": "runpod", "name": "RunPod Secure Cloud", "fee_pct": 20, "notes": "Managed marketplace. Easier ops, higher take rate."}, {"slug": "lambda", "name": "Lambda Cloud", "fee_pct": 20, "notes": "Curated supply. Good for stable demand."}, {"slug": "fluidstack", "name": "FluidStack", "fee_pct": 20, "notes": "GPU cloud focused on AI training/inference."}, {"slug": "self-hosted", "name": "Self-hosted / direct customers", "fee_pct": 3, "notes": "Stripe/payment fees only. You do support and billing."}], "presets": [{"slug": "crypto-pivot", "name": "Crypto miner pivot", "icon": "\u26cf\ufe0f", "hourly_rate": 1.35, "hours_per_day": 20, "utilization_pct": 60, "electricity_rate": 0.12, "platform_fee_pct": 15, "maintenance_per_month": 20, "downtime_reserve_pct": 15, "gpu_slug": "rtx-3090"}, {"slug": "hobbyist", "name": "Hobbyist home node", "icon": "\ud83c\udfe0", "hourly_rate": 1.1, "hours_per_day": 12, "utilization_pct": 50, "electricity_rate": 0.15, "platform_fee_pct": 15, "maintenance_per_month": 15, "downtime_reserve_pct": 20, "gpu_slug": "rtx-4090"}, {"slug": "small-farm", "name": "Small inference farm", "icon": "\ud83d\udda5\ufe0f", "hourly_rate": 1.2, "hours_per_day": 22, "utilization_pct": 70, "electricity_rate": 0.11, "platform_fee_pct": 18, "maintenance_per_month": 40, "downtime_reserve_pct": 10, "gpu_slug": "rtx-4090"}, {"slug": "enterprise", "name": "Enterprise A100/H100", "icon": "\ud83c\udfe2", "hourly_rate": 3.5, "hours_per_day": 24, "utilization_pct": 75, "electricity_rate": 0.13, "platform_fee_pct": 20, "maintenance_per_month": 100, "downtime_reserve_pct": 8, "gpu_slug": "a100-40gb"}]}

def _ok(result):
    return json.dumps({"success": True, "data": result}, indent=2)

def _err(message):
    return json.dumps({"success": False, "error": message}, indent=2)


TOOL_NAME = "local_llm_hosting_revenue_estimator"
TOOLSET = "hardware"

SCHEMA = {
  "type": "function",
  "function": {
    "name": "local_llm_hosting_revenue_estimator",
    "description": "Estimate revenue from renting local GPU inference capacity by the hour.",
    "parameters": {
      "type": "object",
      "properties": {
        "gpu": {
          "type": "string",
          "description": "GPU slug: rtx-4090, rtx-3090, rtx-3090-ti, rtx-4080, rx-7900-xtx, a100-40gb, h100"
        },
        "platform": {
          "type": "string",
          "description": "Platform slug or generic."
        },
        "hours_per_day": {
          "type": "number",
          "description": "Average rented hours per day."
        },
        "hourly_rate": {
          "type": "number",
          "description": "Rental price per hour in USD."
        }
      },
      "required": []
    }
  }
}

def _run(args):
    gpu_slug = args.get("gpu", DATA["defaults"].get("gpu", DATA["gpus"][0]["slug"]))
    platform_slug = args.get("platform", DATA["defaults"].get("platform", "generic"))
    hourly_usage = float(args.get("hours_per_day", DATA["defaults"]["hours_per_day"]))
    price_per_hour = float(args.get("hourly_rate", DATA["defaults"]["hourly_rate"]))
    gpu = next((g for g in DATA["gpus"] if g["slug"] == gpu_slug), DATA["gpus"][0])
    days = DATA["defaults"]["days_per_month"]
    monthly_hours = hourly_usage * days
    utilization = DATA["defaults"]["utilization_pct"] / 100
    billable_hours = monthly_hours * utilization
    gross_revenue = billable_hours * price_per_hour
    platform_fee = gross_revenue * (DATA["defaults"]["platform_fee_pct"] / 100)
    power_cost = gpu["power_w"] * monthly_hours / 1000 * DATA["defaults"]["electricity_rate"]
    maintenance = DATA["defaults"]["maintenance_per_month"]
    net_revenue = gross_revenue - platform_fee - power_cost - maintenance
    return _ok({
        "monthly_hours": round(monthly_hours, 0),
        "billable_hours": round(billable_hours, 0),
        "gross_revenue": round(gross_revenue, 2),
        "platform_fee": round(platform_fee, 2),
        "power_cost": round(power_cost, 2),
        "maintenance": round(maintenance, 2),
        "net_revenue": round(net_revenue, 2),
        "roi_months": round(gpu["hardware_cost"] / max(net_revenue, 0.01), 1)
    })

def HANDLER(args):
    try:
        return _run(args)
    except Exception as e:
        return _err(str(e))


def register():
    """Manual registry hook. Import and call this to register with Hermes."""
    try:
        from tools.registry import registry
        registry.register(
            name=TOOL_NAME,
            toolset=TOOLSET,
            schema=SCHEMA,
            handler=HANDLER,
        )
    except ImportError:
        print("Hermes registry not found; skipping manual registration.")

if __name__ == "__main__":
    # CLI smoke test
    print(HANDLER({}))

Want early access to the next locked tool? Subscribe to The Hermes Dispatch.

๐Ÿš€ Get AI automation insights daily

15:00 MST. One-click unsubscribe.

Subscribe