Affiliate Link Revenue Estimator
Estimate how much affiliate income your traffic could generate. Adjust clicks, conversion, AOV, commission, refunds, and costs.
Inputs
Some networks take a cut.
Optional: cost to generate one conversion.
Monthly conversions
โ
Gross revenue
โ
Refunds / fees
โ
Net monthly revenue
โ
Revenue per 1,000 clicks (RPM)
โ
Annual net revenue
โ
Conversion rate sensitivity
Net monthly revenue at different conversion rates, holding your current clicks, AOV, commission, and costs.
How the math works
- Conversions = clicks ร conversion rate.
- Gross commission = conversions ร AOV ร commission rate.
- Deductions = refunds + network fees + (CPA ร conversions).
- Net revenue = gross commission โ deductions.
- RPM = net revenue รท (clicks รท 1,000).
Affiliate reality checks
- โข AI hardware programs typically pay 1-4% on $300-1,500 orders.
- โข SaaS recurring programs can pay 20-50% of first-year revenue.
- โข Refund clawbacks usually remove 3-8% of commission.
- โข Higher conversion rate usually beats higher traffic if traffic quality is similar.
๐ค Use this tool in your agent
โ Agent-ready codeCopy the snippet below into your agent, newsletter, or script. The tool page at hermesdispatch.dev/tools/affiliate-revenue-estimator/ is the canonical contract: inputs, outputs, and formulas.
# Hermes Dispatch Tool โ Affiliate Link Revenue Estimator
# Source: https://hermesdispatch.dev/tools/affiliate-revenue-estimator/
# Description: Estimate affiliate earnings from traffic and conversion assumptions.
# License: MIT (generated by hermesdispatch.dev)
#
# INSTALL:
# 1. Save this file as ~/.hermes/hermes-agent/tools/affiliate_revenue_estimator.py
# 2. Restart Hermes or run /reset in a session
#
# MANUAL REGISTRY:
# from tools.affiliate_revenue_estimator import register
# register()
import json
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 = "affiliate_revenue_estimator"
TOOLSET = "revenue"
SCHEMA = {
"type": "function",
"function": {
"name": TOOL_NAME,
"description": "Estimate monthly and annual affiliate revenue from clicks, conversion rate, AOV, and commission.",
"parameters": {
"type": "object",
"properties": {
"monthly_clicks": {"type": "integer", "default": 10000, "description": "Monthly affiliate link clicks."},
"conversion_rate_pct": {"type": "number", "default": 2.0, "description": "Conversion rate as a percentage."},
"aov": {"type": "number", "default": 150, "description": "Average order value in USD."},
"commission_rate_pct": {"type": "number", "default": 5.0, "description": "Commission rate as a percentage."},
"refund_rate_pct": {"type": "number", "default": 5.0, "description": "Refund/chargeback rate as a percentage."},
"network_fee_pct": {"type": "number", "default": 0.0, "description": "Network fee as a percentage."},
"fixed_cpa": {"type": "number", "default": 0, "description": "Fixed CPA per conversion in USD."},
},
"required": []
}
}
}
def affiliate_revenue(monthly_clicks=10000, conversion_rate_pct=2.0, aov=150,
commission_rate_pct=5.0, refund_rate_pct=5.0, network_fee_pct=0.0, fixed_cpa=0):
conversions = monthly_clicks * (conversion_rate_pct / 100)
gross = conversions * aov * (commission_rate_pct / 100)
refunds = gross * (refund_rate_pct / 100)
fees = gross * (network_fee_pct / 100)
cpa_total = conversions * fixed_cpa
net = gross - refunds - fees - cpa_total
rpm = (net / monthly_clicks) * 1000 if monthly_clicks else 0
return _ok({
"monthly_conversions": round(conversions, 1),
"gross_revenue": round(gross, 2),
"net_revenue": round(net, 2),
"annual_net_revenue": round(net * 12, 2),
"rpm": round(rpm, 2),
})
def HANDLER(args):
try:
return affiliate_revenue(
monthly_clicks=int(args.get("monthly_clicks", 10000)),
conversion_rate_pct=float(args.get("conversion_rate_pct", 2.0)),
aov=float(args.get("aov", 150)),
commission_rate_pct=float(args.get("commission_rate_pct", 5.0)),
refund_rate_pct=float(args.get("refund_rate_pct", 5.0)),
network_fee_pct=float(args.get("network_fee_pct", 0.0)),
fixed_cpa=float(args.get("fixed_cpa", 0)),
)
except Exception as e:
return _err(str(e))
def register():
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__":
print(HANDLER({{}}))
Want early access to the next locked tool? Subscribe to The Hermes Dispatch.