Freelance Hourly Rate Generator

Reverse-engineer your required hourly rate based on your target take-home pay, expenses, and billable hours.

1. Financial Goals
Desired Annual Take-Home $
2. Overhead & Taxes
Annual Business Expenses $
Estimated Tax Rate %
3. Time Capacity
Weeks Off (Vacation/Sick)
Billable Hours per Week
⚠️ Invalid inputs detected. Please check your tax rate and weeks off.
Required Hourly Rate
$0.00
Per Billable Hour
$0 Total Gross Revenue
Needed
0 Total Billable Hours
Per Year
Gross Revenue Breakdown
Take-Home ($0)
Taxes ($0)
Expenses ($0)

Pricing Your Freelance Services

Many new freelancers make the mistake of taking their desired salary, dividing it by 2,080 (40 hours × 52 weeks), and setting that as their hourly rate. This almost always leads to burnout and under-earning. Here is why:

  • You are a business: Employees have their software, hardware, internet, and office space paid for. Freelancers must pay for this themselves (Business Expenses).
  • The Tax Burden: As a freelancer, you are responsible for both the employee and employer portions of payroll taxes (Self-Employment Tax in the US), making your effective tax rate higher.
  • Unbillable Hours: You cannot bill clients for pitching, invoicing, marketing, or administrative tasks. A healthy baseline is assuming you will only be doing 20 to 25 billable hours a week, with the rest spent running the business.
  • Time Off: If you don't build paid time off (PTO) and sick days into your hourly rate, you will never be able to afford to stop working.
/* --- TABS --- */ .tab-container { display: flex; background: #e2e8f0; border-bottom: 3px solid var(--run-main); } .tab-btn { flex: 1; padding: 18px; font-family: 'Nunito'; font-weight: 900; font-size: 16px; text-transform: uppercase; letter-spacing: 1px; border: none; background: transparent; color: #64748b; cursor: pointer; transition: 0.2s; outline: none; } .tab-btn.active { background: var(--run-main); color: white; } .tab-btn:not(.active):hover { background: #cbd5e1; color: var(--ink); } .tab-content { display: none; } .tab-content.active { display: block; } /* --- INPUT FORM STYLES --- */ .input-pane { padding: 30px; background: var(--run-pale); border-bottom: 2px solid var(--run-main); } .form-row { display: flex; flex-wrap: wrap; gap: 20px; margin-bottom: 20px; justify-content: center; } .input-group { display: flex; flex-direction: column; text-align: left; flex: 1; min-width: 120px; } .input-label { font-family: 'Nunito'; font-weight: 800; font-size: 13px; text-transform: uppercase; color: var(--run-main); margin-bottom: 5px; } .calc-input, .calc-select { padding: 12px 15px; border: 2px solid #cbd5e1; border-radius: 10px; font-family: 'Nunito', sans-serif; font-weight: 800; font-size: 18px; color: var(--ink); outline: none; transition: 0.2s; background: white; width: 100%; text-align: center; } .calc-select { text-align: left; cursor: pointer; } .calc-input:focus, .calc-select:focus { border-color: var(--accent); box-shadow: 0 0 0 3px rgba(225, 29, 72, 0.2); } .time-inputs { display: flex; gap: 10px; } .time-col { display: flex; flex-direction: column; flex: 1; text-align: center; } .time-label { font-family: 'Nunito'; font-size: 11px; font-weight: 800; color: #64748b; text-transform: uppercase; margin-top: 4px; } /* --- RESULTS AREA --- */ .results-bar { padding: 30px; background: white; color: var(--ink); text-align: center; } .res-main-box { background: #f8fafc; padding: 25px 20px; border-radius: 20px; border: 2px dashed #cbd5e1; margin-bottom: 20px;} .res-number-title { font-family: 'Nunito'; font-weight: 800; font-size: 14px; text-transform: uppercase; color: #64748b; margin-bottom: 5px; letter-spacing: 1px; } .res-massive-val { font-family: 'Boogaloo', cursive; font-size: 54px; color: var(--run-main); line-height: 1.1; margin-bottom: 5px; text-shadow: 2px 2px 0px rgba(0,0,0,0.05); transition: color 0.3s ease; } .res-unit { font-family: 'Nunito'; font-weight: 800; font-size: 18px; color: var(--accent); } .stat-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 15px; } .stat-block { display: flex; flex-direction: column; align-items: center; background: white; padding: 15px; border-radius: 16px; border: 1px solid #e2e8f0; box-shadow: 0 4px 6px rgba(0,0,0,0.02); } .stat-val { font-family: 'Boogaloo', cursive; font-size: 28px; color: var(--ink); line-height: 1; } .stat-name { font-family: 'Nunito'; font-weight: 800; font-size: 12px; color: #64748b; text-transform: uppercase; margin-top: 5px; } /* --- INFO CARD --- */ .info-card { margin: 0 auto 30px auto; width: 100%; padding: 30px; background: #fff; border: 2px solid #e2e8f0; border-radius: 20px; } .info-card h2 { font-family: 'Boogaloo', cursive; font-size: 28px; color: var(--run-main); margin-top: 0; } .info-card p, .info-card li { font-family: 'Nunito', sans-serif; color: #475569; line-height: 1.6; font-size: 15px; } /* --- BUTTONS --- */ .btn-3d { display: inline-flex; align-items: center; justify-content: center; padding: 0 45px; min-height: 60px; font-family: 'Nunito', sans-serif; font-weight: 900; font-size: 20px; text-transform: uppercase; letter-spacing: 1px; border-radius: 16px; cursor: pointer; border: none; transition: all 0.1s ease; color: white; margin-bottom: 20px;} .btn-run { background: var(--run-main); box-shadow: 0 6px 0 #172554; } .btn-run:active { transform: translateY(4px); box-shadow: 0 2px 0 #172554; } .btn-blue { background: var(--sky); box-shadow: 0 6px 0 #125594; } .btn-blue:active { transform: translateY(4px); box-shadow: 0 2px 0 #125594; } .share-container { background: white; border: 2px dashed var(--border); border-radius: 16px; padding: 25px; text-align: center; margin: 40px auto; width: 100%; } .share-group { display: flex; justify-content: center; gap: 12px; flex-wrap: wrap; margin-top: 15px; } .btn-share { font-family: 'Nunito', sans-serif; font-weight: 800; font-size: 14px; padding: 12px 24px; border-radius: 50px; border: none; cursor: pointer; color: white; text-transform: uppercase; } .btn-x { background: #0f172a; } .btn-fb { background: #1877f2; } .btn-copy-link { background: #8b5cf6; }

Running Pace & Race Predictor

Calculate your running pace or predict your finish times for upcoming races based on your current fitness.

Distance
Unit
Total Time
Hrs
Min
Sec
Average Pace
08:02
min / mi
05:00 Pace (min/km)
7.46 Speed (mph)
12.00 Speed (km/h)
Recent Race Distance
Finish Time
Hrs
Min
Sec
Predicted Race Times
00:25:00 5K
00:52:05 10K
01:55:18 Half Marathon
03:59:52 Full Marathon

The Runner's Math

Whether you're aiming for a personal best or just tracking a training run, understanding the math behind running is key to hitting your goals.

  • Pace vs. Speed: Speed is how far you travel in an hour (mph or km/h). Pace is the metric runners prefer: how many minutes it takes to complete exactly one mile or one kilometer.
  • The Riegel Formula: The Race Predictor uses a formula created by research engineer Peter Riegel in 1977. It states that a runner's time ($T$) for a new distance ($D$) relates to a recent performance via the equation: $T_2 = T_1 \times (D_2 / D_1)^{1.06}$.
  • Predictor Limits: Riegel's formula assumes you have trained adequately for the target distance. A great 5K time will only predict a great marathon time if you have actually done the long runs required to survive 26.2 miles!