{"id":12351,"date":"2026-04-05T20:53:04","date_gmt":"2026-04-05T13:53:04","guid":{"rendered":"https:\/\/upbase.io\/blog\/?p=12351"},"modified":"2026-04-05T22:16:26","modified_gmt":"2026-04-05T15:16:26","slug":"agency-pricing-models","status":"publish","type":"post","link":"https:\/\/upbase.io\/blog\/agency-pricing-models\/","title":{"rendered":"Agency pricing models: 7 options compared (with a framework for choosing)"},"content":{"rendered":"\n<p>You&#8217;re winning clients but barely breaking even. <\/p>\n\n\n\n<p>Or worse, you&#8217;re profitable on paper but your team is grinding through unscoped work at 11 p.m. because the pricing model doesn&#8217;t account for how the work actually gets delivered.<\/p>\n\n\n\n<p>The pricing model you pick shapes everything: your cash flow, your margins, your client relationships, and whether your team burns out by Q3. <\/p>\n\n\n\n<p>Pick the wrong one and you&#8217;ll work harder every year for the same revenue. <\/p>\n\n\n\n<p>Pick the right one and the same team generates 30-50% more profit without taking on extra clients.<\/p>\n\n\n\n<p>This guide breaks down <strong>7 agency pricing models with real numbers, a side-by-side comparison table, and a decision framework you can use<\/strong> today to match the right model to each service you sell. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What is an agency pricing model (and why it matters more than your hourly rate)<\/h2>\n\n\n\n<p>An agency pricing model is the structure you use to calculate what you charge clients and which variables drive the price. <\/p>\n\n\n\n<p>Hourly rate, project scope, deliverables, outcomes, ad spend. These are all different levers. <\/p>\n\n\n\n<p>The model you choose determines which lever you pull.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"559\" src=\"https:\/\/upbase.io\/blog\/wp-content\/uploads\/2026\/04\/agency_pricing_models_1-1024x559.png\" alt=\"\" class=\"wp-image-12353\" srcset=\"https:\/\/upbase.io\/blog\/wp-content\/uploads\/2026\/04\/agency_pricing_models_1-1024x559.png 1024w, https:\/\/upbase.io\/blog\/wp-content\/uploads\/2026\/04\/agency_pricing_models_1-300x164.png 300w, https:\/\/upbase.io\/blog\/wp-content\/uploads\/2026\/04\/agency_pricing_models_1-768x419.png 768w, https:\/\/upbase.io\/blog\/wp-content\/uploads\/2026\/04\/agency_pricing_models_1.png 1408w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Most agency owners obsess over the rate (&#8220;Should I charge $150\/hour or $175\/hour?&#8221;) when the real question is the structure. <\/p>\n\n\n\n<p>A $150\/hour rate on a time-and-materials contract produces a completely different outcome than a $15,000 flat fee for the same project.<\/p>\n\n\n\n<p>Same work. <\/p>\n\n\n\n<p>Same team. <\/p>\n\n\n\n<p>Different economics.<\/p>\n\n\n\n<p><strong>The model determines who carries the risk.<\/strong> In hourly billing, the client carries the risk. If the project takes longer, they pay more. <\/p>\n\n\n\n<p>In fixed-fee pricing, the agency carries the risk. If the project runs over, you eat the cost. <\/p>\n\n\n\n<p>In performance-based pricing, both sides share the risk.<\/p>\n\n\n\n<svg width=\"100%\" viewBox=\"0 0 680 420\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<style>\ntext{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}\n.th{font-size:14px;font-weight:500;fill:#2c2c2a}\n.ts{font-size:12px;fill:#5f5e5a}\n.leader{stroke:#b4b2a9;stroke-width:0.5;stroke-dasharray:4 3}\n.arr{stroke:#5f5e5a;stroke-width:1.5}\n.c-coral rect{fill:#FAECE7;stroke:#993C1D;stroke-width:0.5}\n.c-coral .th{fill:#712B13}.c-coral .ts{fill:#993C1D}\n.c-purple rect{fill:#EEEDFE;stroke:#534AB7;stroke-width:0.5}\n.c-purple .th{fill:#3C3489}.c-purple .ts{fill:#534AB7}\n.c-teal rect{fill:#E1F5EE;stroke:#0F6E56;stroke-width:0.5}\n.c-teal .th{fill:#085041}.c-teal .ts{fill:#0F6E56}\n.c-blue rect{fill:#E6F1FB;stroke:#185FA5;stroke-width:0.5}\n.c-blue .th{fill:#0C447C}.c-blue .ts{fill:#185FA5}\n.c-amber rect{fill:#FAEEDA;stroke:#854F0B;stroke-width:0.5}\n.c-amber .th{fill:#633806}.c-amber .ts{fill:#854F0B}\n.c-gray rect{fill:#F1EFE8;stroke:#5F5E5A;stroke-width:0.5}\n.c-gray .th{fill:#444441}.c-gray .ts{fill:#5F5E5A}\n<\/style>\n<defs><marker id=\"a1\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\"><path d=\"M2 1L8 5L2 9\" fill=\"none\" stroke=\"context-stroke\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/marker><\/defs>\n<text class=\"th\" x=\"340\" y=\"30\" text-anchor=\"middle\">Who carries the risk in each pricing model?<\/text>\n<line x1=\"100\" y1=\"60\" x2=\"100\" y2=\"370\" stroke=\"#5f5e5a\" stroke-width=\"0.5\" marker-end=\"url(#a1)\"><\/line>\n<line x1=\"100\" y1=\"370\" x2=\"620\" y2=\"370\" stroke=\"#5f5e5a\" stroke-width=\"0.5\" marker-end=\"url(#a1)\"><\/line>\n<text class=\"ts\" x=\"94\" y=\"215\" text-anchor=\"end\" transform=\"rotate(-90 94 215)\">Agency risk<\/text>\n<text class=\"ts\" x=\"360\" y=\"398\" text-anchor=\"middle\">Client risk<\/text>\n<text class=\"ts\" x=\"106\" y=\"82\">High<\/text>\n<text class=\"ts\" x=\"106\" y=\"366\">Low<\/text>\n<text class=\"ts\" x=\"600\" y=\"390\">High<\/text>\n<g class=\"c-coral\"><rect x=\"130\" y=\"80\" width=\"170\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"215\" y=\"100\" text-anchor=\"middle\" dominant-baseline=\"central\">Fixed fee<\/text><text class=\"ts\" x=\"215\" y=\"118\" text-anchor=\"middle\" dominant-baseline=\"central\">You absorb overruns<\/text><\/g>\n<g class=\"c-purple\"><rect x=\"130\" y=\"160\" width=\"170\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"215\" y=\"180\" text-anchor=\"middle\" dominant-baseline=\"central\">Value-based<\/text><text class=\"ts\" x=\"215\" y=\"198\" text-anchor=\"middle\" dominant-baseline=\"central\">High reward, high stakes<\/text><\/g>\n<g class=\"c-teal\"><rect x=\"380\" y=\"80\" width=\"200\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"480\" y=\"100\" text-anchor=\"middle\" dominant-baseline=\"central\">Performance-based<\/text><text class=\"ts\" x=\"480\" y=\"118\" text-anchor=\"middle\" dominant-baseline=\"central\">Both sides share risk<\/text><\/g>\n<g class=\"c-blue\"><rect x=\"380\" y=\"270\" width=\"200\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"480\" y=\"290\" text-anchor=\"middle\" dominant-baseline=\"central\">Hourly \/ T&amp;M<\/text><text class=\"ts\" x=\"480\" y=\"308\" text-anchor=\"middle\" dominant-baseline=\"central\">Client pays for time<\/text><\/g>\n<g class=\"c-amber\"><rect x=\"130\" y=\"270\" width=\"170\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"215\" y=\"290\" text-anchor=\"middle\" dominant-baseline=\"central\">Productized<\/text><text class=\"ts\" x=\"215\" y=\"308\" text-anchor=\"middle\" dominant-baseline=\"central\">Low risk, systematized<\/text><\/g>\n<g class=\"c-gray\"><rect x=\"255\" y=\"170\" width=\"170\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"340\" y=\"190\" text-anchor=\"middle\" dominant-baseline=\"central\">Retainer<\/text><text class=\"ts\" x=\"340\" y=\"208\" text-anchor=\"middle\" dominant-baseline=\"central\">Balanced, predictable<\/text><\/g>\n<line x1=\"100\" y1=\"60\" x2=\"620\" y2=\"370\" stroke=\"#b4b2a9\" stroke-width=\"0.5\" stroke-dasharray=\"6 4\"><\/line>\n<text class=\"ts\" x=\"340\" y=\"410\" text-anchor=\"middle\">Diagonal = balanced risk. Above it = agency carries more. Below it = client carries more.<\/text>\n<\/svg>\n\n\n\n<p>Understanding who carries the risk (and who captures the upside) is the single most important concept in agency pricing. <\/p>\n\n\n\n<p>Every other decision flows from it. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The 7 agency pricing models that actually work<\/h2>\n\n\n\n<svg width=\"100%\" viewBox=\"0 0 680 500\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<style>\ntext{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}\n.th{font-size:14px;font-weight:500;fill:#2c2c2a}\n.ts{font-size:12px;fill:#5f5e5a}\n.c-blue rect{fill:#E6F1FB;stroke:#185FA5;stroke-width:0.5}.c-blue .th{fill:#0C447C}\n.c-teal rect{fill:#E1F5EE;stroke:#0F6E56;stroke-width:0.5}.c-teal .th{fill:#085041}\n.c-coral rect{fill:#FAECE7;stroke:#993C1D;stroke-width:0.5}.c-coral .th{fill:#712B13}\n.c-purple rect{fill:#EEEDFE;stroke:#534AB7;stroke-width:0.5}.c-purple .th{fill:#3C3489}\n.c-amber rect{fill:#FAEEDA;stroke:#854F0B;stroke-width:0.5}.c-amber .th{fill:#633806}\n<\/style>\n<defs><marker id=\"a2\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\"><path d=\"M2 1L8 5L2 9\" fill=\"none\" stroke=\"context-stroke\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/marker><\/defs>\n<text class=\"th\" x=\"340\" y=\"30\" text-anchor=\"middle\">7 agency pricing models at a glance<\/text>\n<text class=\"ts\" x=\"340\" y=\"50\" text-anchor=\"middle\">Sorted by profit ceiling (lowest to highest)<\/text>\n<g class=\"c-blue\"><rect x=\"40\" y=\"75\" width=\"150\" height=\"44\" rx=\"8\"><\/rect><text class=\"th\" x=\"115\" y=\"97\" text-anchor=\"middle\" dominant-baseline=\"central\">Hourly<\/text><\/g>\n<text class=\"ts\" x=\"210\" y=\"92\" text-anchor=\"start\">Bill for time. Simple but caps revenue.<\/text>\n<text class=\"ts\" x=\"210\" y=\"107\" text-anchor=\"start\">Target margin: 50-60%<\/text>\n<g class=\"c-teal\"><rect x=\"40\" y=\"130\" width=\"150\" height=\"44\" rx=\"8\"><\/rect><text class=\"th\" x=\"115\" y=\"152\" text-anchor=\"middle\" dominant-baseline=\"central\">Project-based<\/text><\/g>\n<text class=\"ts\" x=\"210\" y=\"147\" text-anchor=\"start\">Flat fee per project. Rewards efficiency.<\/text>\n<text class=\"ts\" x=\"210\" y=\"162\" text-anchor=\"start\">Target margin: 60-70%<\/text>\n<g class=\"c-teal\"><rect x=\"40\" y=\"185\" width=\"150\" height=\"44\" rx=\"8\"><\/rect><text class=\"th\" x=\"115\" y=\"207\" text-anchor=\"middle\" dominant-baseline=\"central\">Retainer<\/text><\/g>\n<text class=\"ts\" x=\"210\" y=\"202\" text-anchor=\"start\">Monthly fee for ongoing work. Predictable.<\/text>\n<text class=\"ts\" x=\"210\" y=\"217\" text-anchor=\"start\">Target margin: 60%+<\/text>\n<g class=\"c-coral\"><rect x=\"40\" y=\"240\" width=\"150\" height=\"44\" rx=\"8\"><\/rect><text class=\"th\" x=\"115\" y=\"262\" text-anchor=\"middle\" dominant-baseline=\"central\">% of ad spend<\/text><\/g>\n<text class=\"ts\" x=\"210\" y=\"257\" text-anchor=\"start\">Fee scales with client budget. Best for paid media.<\/text>\n<text class=\"ts\" x=\"210\" y=\"272\" text-anchor=\"start\">Target margin: 60-70%<\/text>\n<g class=\"c-purple\"><rect x=\"40\" y=\"295\" width=\"150\" height=\"44\" rx=\"8\"><\/rect><text class=\"th\" x=\"115\" y=\"317\" text-anchor=\"middle\" dominant-baseline=\"central\">Performance<\/text><\/g>\n<text class=\"ts\" x=\"210\" y=\"312\" text-anchor=\"start\">Base fee + bonus for hitting KPIs.<\/text>\n<text class=\"ts\" x=\"210\" y=\"327\" text-anchor=\"start\">Target margin: 55-65% base + bonus<\/text>\n<g class=\"c-amber\"><rect x=\"40\" y=\"350\" width=\"150\" height=\"44\" rx=\"8\"><\/rect><text class=\"th\" x=\"115\" y=\"372\" text-anchor=\"middle\" dominant-baseline=\"central\">Productized<\/text><\/g>\n<text class=\"ts\" x=\"210\" y=\"367\" text-anchor=\"start\">Standardized packages. Scales with efficiency.<\/text>\n<text class=\"ts\" x=\"210\" y=\"382\" text-anchor=\"start\">Target margin: 65-75%<\/text>\n<g class=\"c-coral\"><rect x=\"40\" y=\"405\" width=\"150\" height=\"44\" rx=\"8\"><\/rect><text class=\"th\" x=\"115\" y=\"427\" text-anchor=\"middle\" dominant-baseline=\"central\">Value-based<\/text><\/g>\n<text class=\"ts\" x=\"210\" y=\"422\" text-anchor=\"start\">Price on outcomes, not hours. Highest ceiling.<\/text>\n<text class=\"ts\" x=\"210\" y=\"437\" text-anchor=\"start\">Target margin: 70%+<\/text>\n<line x1=\"30\" y1=\"70\" x2=\"30\" y2=\"460\" stroke=\"#5f5e5a\" stroke-width=\"0.5\" marker-end=\"url(#a2)\"><\/line>\n<text class=\"ts\" x=\"24\" y=\"270\" text-anchor=\"end\" transform=\"rotate(-90 24 270)\">Profit ceiling<\/text>\n<text class=\"ts\" x=\"340\" y=\"480\" text-anchor=\"middle\">Higher profit ceiling = more upside, but harder to sell and implement<\/text>\n<\/svg>\n\n\n\n<h3 class=\"wp-block-heading\">1. Hourly billing<\/h3>\n\n\n\n<p>You track time. You bill for hours worked. The client pays based on how long your team spends on their project.<\/p>\n\n\n\n<p>A web development agency charges $150\/hour. The team logs 80 hours on a client&#8217;s site redesign. The invoice is $12,000.<\/p>\n\n\n\n<p><strong>Where it works:<\/strong> Undefined scopes, consulting engagements, maintenance work, and early-stage agencies still learning how long projects actually take. It&#8217;s also useful for staff augmentation or overflow work where you&#8217;re essentially lending a body to the client&#8217;s team.<\/p>\n\n\n\n<p><strong>Where it breaks:<\/strong> Any project where your team gets faster over time. A brand identity package that took you 40 hours two years ago now takes 20. Under hourly billing, getting better at your job means earning less.<\/p>\n\n\n\n<p>Clients also tend to scrutinize timesheets under this model. &#8220;Did it really take 3 hours to write that email sequence?&#8221; <\/p>\n\n\n\n<p>Those conversations erode trust and turn you into a vendor instead of a partner.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Pricing Design Work &amp; Creativity - Stop Charging Hourly\" width=\"1200\" height=\"675\" src=\"https:\/\/www.youtube.com\/embed\/jE53O1PzmNU?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Target delivery margin:<\/strong> 50-60%. If your blended cost per hour is $60 and you&#8217;re billing $150, you&#8217;re at 60%. That&#8217;s healthy. Below 50%, you&#8217;re subsidizing the client&#8217;s project with your overhead. <\/p>\n\n\n\n<svg width=\"100%\" viewBox=\"0 0 680 340\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<style>\ntext{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}\n.th{font-size:14px;font-weight:500;fill:#2c2c2a}\n.ts{font-size:12px;fill:#5f5e5a}\n.c-blue rect{fill:#E6F1FB;stroke:#185FA5;stroke-width:0.5}.c-blue .th{fill:#0C447C}.c-blue .ts{fill:#185FA5}\n.c-teal rect{fill:#E1F5EE;stroke:#0F6E56;stroke-width:0.5}.c-teal .th{fill:#085041}.c-teal .ts{fill:#0F6E56}\n.c-red rect{fill:#FCEBEB;stroke:#A32D2D;stroke-width:0.5}.c-red .th{fill:#791F1F}\n.c-green rect{fill:#EAF3DE;stroke:#3B6D11;stroke-width:0.5}.c-green .th{fill:#27500A}\n<\/style>\n<text class=\"th\" x=\"340\" y=\"30\" text-anchor=\"middle\">The efficiency trap: hourly vs fixed fee<\/text>\n<text class=\"ts\" x=\"340\" y=\"50\" text-anchor=\"middle\">Same brand identity project, two pricing models<\/text>\n<text class=\"th\" x=\"170\" y=\"82\" text-anchor=\"middle\">Hourly at $150\/hr<\/text>\n<text class=\"th\" x=\"510\" y=\"82\" text-anchor=\"middle\">Fixed fee at $25,000<\/text>\n<line x1=\"340\" y1=\"68\" x2=\"340\" y2=\"310\" stroke=\"#b4b2a9\" stroke-width=\"0.5\" stroke-dasharray=\"4 4\"><\/line>\n<g class=\"c-blue\"><rect x=\"50\" y=\"98\" width=\"240\" height=\"44\" rx=\"8\"><\/rect><text class=\"th\" x=\"170\" y=\"112\" text-anchor=\"middle\" dominant-baseline=\"central\">Year 1: 160 hours<\/text><text class=\"ts\" x=\"170\" y=\"128\" text-anchor=\"middle\" dominant-baseline=\"central\">Revenue: $24,000<\/text><\/g>\n<g class=\"c-blue\"><rect x=\"50\" y=\"155\" width=\"240\" height=\"44\" rx=\"8\"><\/rect><text class=\"th\" x=\"170\" y=\"169\" text-anchor=\"middle\" dominant-baseline=\"central\">Year 2: 120 hours<\/text><text class=\"ts\" x=\"170\" y=\"185\" text-anchor=\"middle\" dominant-baseline=\"central\">Revenue: $18,000<\/text><\/g>\n<g class=\"c-blue\"><rect x=\"50\" y=\"212\" width=\"240\" height=\"44\" rx=\"8\"><\/rect><text class=\"th\" x=\"170\" y=\"226\" text-anchor=\"middle\" dominant-baseline=\"central\">Year 3: 90 hours<\/text><text class=\"ts\" x=\"170\" y=\"242\" text-anchor=\"middle\" dominant-baseline=\"central\">Revenue: $13,500<\/text><\/g>\n<g class=\"c-teal\"><rect x=\"390\" y=\"98\" width=\"240\" height=\"44\" rx=\"8\"><\/rect><text class=\"th\" x=\"510\" y=\"112\" text-anchor=\"middle\" dominant-baseline=\"central\">Year 1: 160 hours<\/text><text class=\"ts\" x=\"510\" y=\"128\" text-anchor=\"middle\" dominant-baseline=\"central\">Revenue: $25,000<\/text><\/g>\n<g class=\"c-teal\"><rect x=\"390\" y=\"155\" width=\"240\" height=\"44\" rx=\"8\"><\/rect><text class=\"th\" x=\"510\" y=\"169\" text-anchor=\"middle\" dominant-baseline=\"central\">Year 2: 120 hours<\/text><text class=\"ts\" x=\"510\" y=\"185\" text-anchor=\"middle\" dominant-baseline=\"central\">Revenue: $25,000<\/text><\/g>\n<g class=\"c-teal\"><rect x=\"390\" y=\"212\" width=\"240\" height=\"44\" rx=\"8\"><\/rect><text class=\"th\" x=\"510\" y=\"226\" text-anchor=\"middle\" dominant-baseline=\"central\">Year 3: 90 hours<\/text><text class=\"ts\" x=\"510\" y=\"242\" text-anchor=\"middle\" dominant-baseline=\"central\">Revenue: $25,000<\/text><\/g>\n<g class=\"c-red\"><rect x=\"50\" y=\"270\" width=\"240\" height=\"36\" rx=\"8\"><\/rect><text class=\"th\" x=\"170\" y=\"288\" text-anchor=\"middle\" dominant-baseline=\"central\">You got faster. You earned less.<\/text><\/g>\n<g class=\"c-green\"><rect x=\"390\" y=\"270\" width=\"240\" height=\"36\" rx=\"8\"><\/rect><text class=\"th\" x=\"510\" y=\"288\" text-anchor=\"middle\" dominant-baseline=\"central\">You got faster. Margin went up.<\/text><\/g>\n<text class=\"ts\" x=\"340\" y=\"330\" text-anchor=\"middle\">Fixed fees reward efficiency. Hourly billing punishes it.<\/text>\n<\/svg>\n\n\n\n<h3 class=\"wp-block-heading\">2. Project-based (fixed fee)<\/h3>\n\n\n\n<p>You scope the work, quote a flat price, and deliver the project regardless of how many hours it takes.<\/p>\n\n\n\n<p>A branding agency quotes $25,000 for a full brand identity: strategy workshop, logo system, brand guidelines, and collateral templates. Whether it takes 100 hours or 150, the price stays the same.<\/p>\n\n\n\n<p><strong>Where it works:<\/strong> Clearly defined deliverables with predictable scopes. Website builds, brand identities, campaign launches, video production. Anything you&#8217;ve done enough times to estimate accurately.<\/p>\n\n\n\n<p><strong>Where it breaks:<\/strong> Open-ended projects. R&amp;D work. Anything where the client is still figuring out what they want. If scope shifts mid-project and you don&#8217;t have a change order process, you&#8217;ll bleed hours.<\/p>\n\n\n\n<p>The agencies that thrive on fixed fees have two things in common: tight scoping documents and a clear change order policy. <\/p>\n\n\n\n<p>Without both, fixed fees become a slow leak in your profitability.<\/p>\n\n\n\n<p><strong>Target delivery margin:<\/strong> 60-70%. Because you&#8217;re absorbing the risk, you need higher margins to cover overruns on the projects that go sideways.<\/p>\n\n\n\n<svg width=\"100%\" viewBox=\"0 0 680 370\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<style>\ntext{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}\n.th{font-size:14px;font-weight:500;fill:#2c2c2a}\n.ts{font-size:12px;fill:#5f5e5a}\n.arr{stroke:#5f5e5a;stroke-width:1.5}\n.c-green rect{fill:#EAF3DE;stroke:#3B6D11;stroke-width:0.5}.c-green .th{fill:#27500A}.c-green .ts{fill:#3B6D11}\n.c-amber rect{fill:#FAEEDA;stroke:#854F0B;stroke-width:0.5}.c-amber .th{fill:#633806}.c-amber .ts{fill:#854F0B}\n.c-red rect{fill:#FCEBEB;stroke:#A32D2D;stroke-width:0.5}.c-red .th{fill:#791F1F}.c-red .ts{fill:#A32D2D}\n<\/style>\n<defs><marker id=\"a11\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\"><path d=\"M2 1L8 5L2 9\" fill=\"none\" stroke=\"context-stroke\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/marker><\/defs>\n<text class=\"th\" x=\"340\" y=\"28\" text-anchor=\"middle\">Fixed fee: how scope creep eats your margin<\/text>\n<text class=\"ts\" x=\"340\" y=\"48\" text-anchor=\"middle\">$25,000 brand identity project. Your cost per hour: $100.<\/text>\n<g class=\"c-green\"><rect x=\"40\" y=\"75\" width=\"180\" height=\"70\" rx=\"8\"><\/rect><text class=\"th\" x=\"130\" y=\"99\" text-anchor=\"middle\" dominant-baseline=\"central\">Scoped: 100 hrs<\/text><text class=\"ts\" x=\"130\" y=\"119\" text-anchor=\"middle\" dominant-baseline=\"central\">Cost: $10,000<\/text><\/g>\n<line x1=\"220\" y1=\"110\" x2=\"260\" y2=\"110\" class=\"arr\" marker-end=\"url(#a11)\"><\/line>\n<g class=\"c-green\"><rect x=\"260\" y=\"75\" width=\"180\" height=\"70\" rx=\"8\"><\/rect><text class=\"th\" x=\"350\" y=\"99\" text-anchor=\"middle\" dominant-baseline=\"central\">Profit: $15,000<\/text><text class=\"ts\" x=\"350\" y=\"119\" text-anchor=\"middle\" dominant-baseline=\"central\">Margin: 60%<\/text><\/g>\n<line x1=\"440\" y1=\"110\" x2=\"480\" y2=\"110\" class=\"arr\" marker-end=\"url(#a11)\"><\/line>\n<g class=\"c-green\"><rect x=\"480\" y=\"83\" width=\"160\" height=\"54\" rx=\"8\"><\/rect><text class=\"th\" x=\"560\" y=\"110\" text-anchor=\"middle\" dominant-baseline=\"central\">Healthy<\/text><\/g>\n<g class=\"c-amber\"><rect x=\"40\" y=\"170\" width=\"180\" height=\"70\" rx=\"8\"><\/rect><text class=\"th\" x=\"130\" y=\"194\" text-anchor=\"middle\" dominant-baseline=\"central\">Actual: 130 hrs<\/text><text class=\"ts\" x=\"130\" y=\"214\" text-anchor=\"middle\" dominant-baseline=\"central\">Cost: $13,000<\/text><\/g>\n<line x1=\"220\" y1=\"205\" x2=\"260\" y2=\"205\" class=\"arr\" marker-end=\"url(#a11)\"><\/line>\n<g class=\"c-amber\"><rect x=\"260\" y=\"170\" width=\"180\" height=\"70\" rx=\"8\"><\/rect><text class=\"th\" x=\"350\" y=\"194\" text-anchor=\"middle\" dominant-baseline=\"central\">Profit: $12,000<\/text><text class=\"ts\" x=\"350\" y=\"214\" text-anchor=\"middle\" dominant-baseline=\"central\">Margin: 48%<\/text><\/g>\n<line x1=\"440\" y1=\"205\" x2=\"480\" y2=\"205\" class=\"arr\" marker-end=\"url(#a11)\"><\/line>\n<g class=\"c-amber\"><rect x=\"480\" y=\"178\" width=\"160\" height=\"54\" rx=\"8\"><\/rect><text class=\"th\" x=\"560\" y=\"205\" text-anchor=\"middle\" dominant-baseline=\"central\">Squeezed<\/text><\/g>\n<g class=\"c-red\"><rect x=\"40\" y=\"265\" width=\"180\" height=\"70\" rx=\"8\"><\/rect><text class=\"th\" x=\"130\" y=\"289\" text-anchor=\"middle\" dominant-baseline=\"central\">Blown: 180 hrs<\/text><text class=\"ts\" x=\"130\" y=\"309\" text-anchor=\"middle\" dominant-baseline=\"central\">Cost: $18,000<\/text><\/g>\n<line x1=\"220\" y1=\"300\" x2=\"260\" y2=\"300\" class=\"arr\" marker-end=\"url(#a11)\"><\/line>\n<g class=\"c-red\"><rect x=\"260\" y=\"265\" width=\"180\" height=\"70\" rx=\"8\"><\/rect><text class=\"th\" x=\"350\" y=\"289\" text-anchor=\"middle\" dominant-baseline=\"central\">Profit: $7,000<\/text><text class=\"ts\" x=\"350\" y=\"309\" text-anchor=\"middle\" dominant-baseline=\"central\">Margin: 28%<\/text><\/g>\n<line x1=\"440\" y1=\"300\" x2=\"480\" y2=\"300\" class=\"arr\" marker-end=\"url(#a11)\"><\/line>\n<g class=\"c-red\"><rect x=\"480\" y=\"273\" width=\"160\" height=\"54\" rx=\"8\"><\/rect><text class=\"th\" x=\"560\" y=\"300\" text-anchor=\"middle\" dominant-baseline=\"central\">Underwater<\/text><\/g>\n<text class=\"ts\" x=\"340\" y=\"360\" text-anchor=\"middle\">Without a change order process, every extra hour comes straight out of your profit.<\/text>\n<\/svg>\n\n\n\n<h3 class=\"wp-block-heading\">3. Monthly retainers<\/h3>\n\n\n\n<p>The client pays a fixed monthly fee to retain your services. You reserve capacity on your team for their work each month.<\/p>\n\n\n\n<p>A content agency charges $8,000\/month for a retainer that includes 8 blog posts, 20 social media posts, and a monthly analytics report. The scope is defined. The fee is predictable.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"578\" src=\"https:\/\/upbase.io\/blog\/wp-content\/uploads\/2026\/04\/CleanShot-2026-04-05-at-10-.02.34@2x-1024x578.png\" alt=\"\" class=\"wp-image-12378\" srcset=\"https:\/\/upbase.io\/blog\/wp-content\/uploads\/2026\/04\/CleanShot-2026-04-05-at-10-.02.34@2x-1024x578.png 1024w, https:\/\/upbase.io\/blog\/wp-content\/uploads\/2026\/04\/CleanShot-2026-04-05-at-10-.02.34@2x-300x169.png 300w, https:\/\/upbase.io\/blog\/wp-content\/uploads\/2026\/04\/CleanShot-2026-04-05-at-10-.02.34@2x-768x434.png 768w, https:\/\/upbase.io\/blog\/wp-content\/uploads\/2026\/04\/CleanShot-2026-04-05-at-10-.02.34@2x-1536x867.png 1536w, https:\/\/upbase.io\/blog\/wp-content\/uploads\/2026\/04\/CleanShot-2026-04-05-at-10-.02.34@2x-2048x1156.png 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><em>profitability tracking in Upbase<\/em><\/figcaption><\/figure>\n\n\n\n<p><strong>Where it works:<\/strong> Ongoing, repeatable work with relatively stable scope. SEO, content marketing, social media management, PPC management, and ongoing design support.<\/p>\n\n\n\n<p><strong>Where it breaks:<\/strong> When scope creep goes unchecked. Month 1, the retainer covers exactly what was agreed. <\/p>\n\n\n\n<p>By month 6, the client expects weekly strategy calls, one-off landing pages, and &#8220;quick&#8221; ad hoc requests that were never part of the deal.<\/p>\n\n\n\n<p>The fix is a retainer agreement that explicitly lists what&#8217;s included and what isn&#8217;t. <\/p>\n\n\n\n<p>Anything outside the scope gets quoted separately or rolls into next month&#8217;s allocation. <\/p>\n\n\n\n<svg width=\"100%\" viewBox=\"0 0 680 320\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<style>\ntext{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}\n.th{font-size:14px;font-weight:500;fill:#2c2c2a}\n.ts{font-size:12px;fill:#5f5e5a}\n<\/style>\n<text class=\"th\" x=\"340\" y=\"28\" text-anchor=\"middle\">How retainer scope creep kills margin<\/text>\n<text class=\"ts\" x=\"340\" y=\"48\" text-anchor=\"middle\">$6,000\/month retainer. Same fee, growing workload.<\/text>\n<line x1=\"60\" y1=\"240\" x2=\"640\" y2=\"240\" stroke=\"#b4b2a9\" stroke-width=\"0.5\"><\/line>\n<line x1=\"60\" y1=\"80\" x2=\"60\" y2=\"240\" stroke=\"#b4b2a9\" stroke-width=\"0.5\"><\/line>\n<text class=\"ts\" x=\"54\" y=\"240\" text-anchor=\"end\">0 hrs<\/text>\n<text class=\"ts\" x=\"54\" y=\"200\" text-anchor=\"end\">15 hrs<\/text>\n<text class=\"ts\" x=\"54\" y=\"160\" text-anchor=\"end\">30 hrs<\/text>\n<text class=\"ts\" x=\"54\" y=\"120\" text-anchor=\"end\">45 hrs<\/text>\n<text class=\"ts\" x=\"54\" y=\"80\" text-anchor=\"end\">60 hrs<\/text>\n<line x1=\"60\" y1=\"200\" x2=\"640\" y2=\"200\" stroke=\"#b4b2a9\" stroke-width=\"0.5\" stroke-dasharray=\"2 4\" opacity=\"0.3\"><\/line>\n<line x1=\"60\" y1=\"160\" x2=\"640\" y2=\"160\" stroke=\"#b4b2a9\" stroke-width=\"0.5\" stroke-dasharray=\"2 4\" opacity=\"0.3\"><\/line>\n<line x1=\"60\" y1=\"120\" x2=\"640\" y2=\"120\" stroke=\"#b4b2a9\" stroke-width=\"0.5\" stroke-dasharray=\"2 4\" opacity=\"0.3\"><\/line>\n<line x1=\"60\" y1=\"80\" x2=\"640\" y2=\"80\" stroke=\"#b4b2a9\" stroke-width=\"0.5\" stroke-dasharray=\"2 4\" opacity=\"0.3\"><\/line>\n<rect x=\"80\" y=\"160\" width=\"60\" height=\"80\" rx=\"4\" fill=\"#5DCAA5\" opacity=\"0.8\"><\/rect>\n<text class=\"ts\" x=\"110\" y=\"256\" text-anchor=\"middle\">Mo 1<\/text>\n<rect x=\"170\" y=\"148\" width=\"60\" height=\"92\" rx=\"4\" fill=\"#5DCAA5\" opacity=\"0.8\"><\/rect>\n<text class=\"ts\" x=\"200\" y=\"256\" text-anchor=\"middle\">Mo 2<\/text>\n<rect x=\"260\" y=\"136\" width=\"60\" height=\"104\" rx=\"4\" fill=\"#EF9F27\" opacity=\"0.8\"><\/rect>\n<text class=\"ts\" x=\"290\" y=\"256\" text-anchor=\"middle\">Mo 3<\/text>\n<rect x=\"350\" y=\"120\" width=\"60\" height=\"120\" rx=\"4\" fill=\"#EF9F27\" opacity=\"0.8\"><\/rect>\n<text class=\"ts\" x=\"380\" y=\"256\" text-anchor=\"middle\">Mo 4<\/text>\n<rect x=\"440\" y=\"100\" width=\"60\" height=\"140\" rx=\"4\" fill=\"#E24B4A\" opacity=\"0.8\"><\/rect>\n<text class=\"ts\" x=\"470\" y=\"256\" text-anchor=\"middle\">Mo 5<\/text>\n<rect x=\"530\" y=\"88\" width=\"60\" height=\"152\" rx=\"4\" fill=\"#E24B4A\" opacity=\"0.8\"><\/rect>\n<text class=\"ts\" x=\"560\" y=\"256\" text-anchor=\"middle\">Mo 6<\/text>\n<line x1=\"60\" y1=\"160\" x2=\"640\" y2=\"160\" stroke=\"#1D9E75\" stroke-width=\"1.5\" stroke-dasharray=\"6 4\"><\/line>\n<text class=\"ts\" x=\"644\" y=\"156\" text-anchor=\"start\" fill=\"#1D9E75\">Agreed scope<\/text>\n<text class=\"ts\" x=\"110\" y=\"152\" text-anchor=\"middle\" fill=\"#085041\">30h<\/text>\n<text class=\"ts\" x=\"200\" y=\"140\" text-anchor=\"middle\" fill=\"#085041\">34h<\/text>\n<text class=\"ts\" x=\"290\" y=\"128\" text-anchor=\"middle\" fill=\"#633806\">39h<\/text>\n<text class=\"ts\" x=\"380\" y=\"112\" text-anchor=\"middle\" fill=\"#633806\">45h<\/text>\n<text class=\"ts\" x=\"470\" y=\"92\" text-anchor=\"middle\" fill=\"#791F1F\">52h<\/text>\n<text class=\"ts\" x=\"560\" y=\"80\" text-anchor=\"middle\" fill=\"#791F1F\">57h<\/text>\n<text class=\"ts\" x=\"340\" y=\"300\" text-anchor=\"middle\">By month 6, you&#8217;re doing 90% more work for the same $6,000<\/text>\n<\/svg>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Upbase tip:<\/strong> Retainers require tight tracking of deliverables, hours, and client requests across months. <a href=\"https:\/\/upbase.io\/features\/tasks\">Upbase&#8217;s task management<\/a> and <a href=\"https:\/\/upbase.io\/features\/time-tracking\">time tracking<\/a> let you see exactly how much capacity each retainer client consumes, so you can catch scope creep before it kills your margin.<\/p>\n<\/blockquote>\n\n\n\n<p><strong>Target delivery margin:<\/strong> 60%+. Retainers should get more profitable over time as your team learns the client&#8217;s brand, processes, and preferences. If margins shrink month over month, something is wrong with scope management. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. Value-based pricing<\/h3>\n\n\n\n<p>You price based on the outcome your work creates for the client, not the time or deliverables involved.<\/p>\n\n\n\n<p>A conversion rate optimization agency audits a SaaS company&#8217;s signup flow. <\/p>\n\n\n\n<p>The client converts 50,000 visitors\/month at 2%. A 1% improvement means 500 additional signups\/month. At $100 average revenue per user, that&#8217;s $50,000\/month in new revenue. <\/p>\n\n\n\n<p>The agency charges $40,000 for the project. <\/p>\n\n\n\n<p>Nobody asks how many hours it took. <\/p>\n\n\n\n<svg width=\"100%\" viewBox=\"0 0 680 310\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<style>\ntext{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}\n.th{font-size:14px;font-weight:500;fill:#2c2c2a}\n.ts{font-size:12px;fill:#5f5e5a}\n.arr{stroke:#5f5e5a;stroke-width:1.5}\n.c-gray rect{fill:#F1EFE8;stroke:#5F5E5A;stroke-width:0.5}.c-gray .th{fill:#444441}.c-gray .ts{fill:#5F5E5A}\n.c-purple rect{fill:#EEEDFE;stroke:#534AB7;stroke-width:0.5}.c-purple .th{fill:#3C3489}.c-purple .ts{fill:#534AB7}\n.c-green rect{fill:#EAF3DE;stroke:#3B6D11;stroke-width:0.5}.c-green .th{fill:#27500A}.c-green .ts{fill:#3B6D11}\n.c-amber rect{fill:#FAEEDA;stroke:#854F0B;stroke-width:0.5}.c-amber .th{fill:#633806}.c-amber .ts{fill:#854F0B}\n.c-coral rect{fill:#FAECE7;stroke:#993C1D;stroke-width:0.5}.c-coral .th{fill:#712B13}.c-coral .ts{fill:#993C1D}\n<\/style>\n<defs><marker id=\"a9\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\"><path d=\"M2 1L8 5L2 9\" fill=\"none\" stroke=\"context-stroke\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/marker><\/defs>\n<text class=\"th\" x=\"340\" y=\"28\" text-anchor=\"middle\">Value-based pricing: the math that justifies premium fees<\/text>\n<text class=\"ts\" x=\"340\" y=\"48\" text-anchor=\"middle\">CRO project for a SaaS company<\/text>\n<g class=\"c-gray\"><rect x=\"40\" y=\"70\" width=\"180\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"130\" y=\"90\" text-anchor=\"middle\" dominant-baseline=\"central\">50,000 visitors\/mo<\/text><text class=\"ts\" x=\"130\" y=\"108\" text-anchor=\"middle\" dominant-baseline=\"central\">Current: 2% conversion<\/text><\/g>\n<line x1=\"220\" y1=\"98\" x2=\"260\" y2=\"98\" class=\"arr\" marker-end=\"url(#a9)\"><\/line>\n<g class=\"c-purple\"><rect x=\"260\" y=\"70\" width=\"180\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"350\" y=\"90\" text-anchor=\"middle\" dominant-baseline=\"central\">Your CRO work<\/text><text class=\"ts\" x=\"350\" y=\"108\" text-anchor=\"middle\" dominant-baseline=\"central\">Improves to 3%<\/text><\/g>\n<line x1=\"440\" y1=\"98\" x2=\"480\" y2=\"98\" class=\"arr\" marker-end=\"url(#a9)\"><\/line>\n<g class=\"c-green\"><rect x=\"480\" y=\"70\" width=\"160\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"560\" y=\"90\" text-anchor=\"middle\" dominant-baseline=\"central\">+500 signups\/mo<\/text><text class=\"ts\" x=\"560\" y=\"108\" text-anchor=\"middle\" dominant-baseline=\"central\">At $100\/user = $50k\/mo<\/text><\/g>\n<line x1=\"340\" y1=\"126\" x2=\"340\" y2=\"155\" class=\"arr\" marker-end=\"url(#a9)\"><\/line>\n<g class=\"c-amber\"><rect x=\"140\" y=\"160\" width=\"400\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"340\" y=\"180\" text-anchor=\"middle\" dominant-baseline=\"central\">You charge $40,000 for the project<\/text><text class=\"ts\" x=\"340\" y=\"198\" text-anchor=\"middle\" dominant-baseline=\"central\">Client gets $600k\/yr in new revenue. ROI: 15x.<\/text><\/g>\n<line x1=\"340\" y1=\"216\" x2=\"340\" y2=\"240\" class=\"arr\" marker-end=\"url(#a9)\"><\/line>\n<g class=\"c-coral\"><rect x=\"90\" y=\"245\" width=\"230\" height=\"44\" rx=\"8\"><\/rect><text class=\"th\" x=\"205\" y=\"259\" text-anchor=\"middle\" dominant-baseline=\"central\">Hourly: ~80hrs x $150<\/text><text class=\"ts\" x=\"205\" y=\"277\" text-anchor=\"middle\" dominant-baseline=\"central\">= $12,000<\/text><\/g>\n<g class=\"c-green\"><rect x=\"360\" y=\"245\" width=\"230\" height=\"44\" rx=\"8\"><\/rect><text class=\"th\" x=\"475\" y=\"259\" text-anchor=\"middle\" dominant-baseline=\"central\">Value-based<\/text><text class=\"ts\" x=\"475\" y=\"277\" text-anchor=\"middle\" dominant-baseline=\"central\">= $40,000 (3.3x more)<\/text><\/g>\n<\/svg>\n\n\n\n<p><strong>Where it works:<\/strong> High-impact work where the ROI is measurable and significant. Lead generation, CRO, sales funnel overhauls, and strategic consulting. It requires strong positioning, proven results, and a confident sales process.<\/p>\n\n\n\n<p><strong>Where it breaks:<\/strong> Commoditized services where the client has 50 alternatives. If you&#8217;re competing on price for basic website maintenance, value-based pricing won&#8217;t fly. <\/p>\n\n\n\n<p>It also fails when results are hard to attribute. <\/p>\n\n\n\n<p>Did your social media strategy cause the revenue spike, or was it the client&#8217;s new sales hire?<\/p>\n\n\n\n<p>This model has the highest profit potential of any pricing structure. But it demands something most agencies don&#8217;t have yet: documented proof that your work produces specific, measurable outcomes.<\/p>\n\n\n\n<p>Start building that proof now. <\/p>\n\n\n\n<p>For every client engagement, track the business impact of your work. Revenue generated. Leads created. Conversion rates improved. Cost per acquisition reduced. <\/p>\n\n\n\n<p>After 3-5 engagements with documented outcomes, you have enough ammunition to sell on value instead of hours.<\/p>\n\n\n\n<p><strong>Target delivery margin:<\/strong> 70%+. The whole point is decoupling price from cost. If you can generate $500,000 in value for $30,000 in delivery cost, your pricing reflects the value, not the hours.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5. Performance-based pricing<\/h3>\n\n\n\n<p>You tie some or all of your fee to hitting specific KPIs. If you hit the target, you earn a bonus (or your full fee). If you don&#8217;t, you earn less.<\/p>\n\n\n\n<p>A PPC agency charges a $3,000\/month base fee plus a $1,500 bonus for every month the client&#8217;s cost per acquisition stays below $25. The base covers the agency&#8217;s costs. The bonus rewards performance.<\/p>\n\n\n\n<p><strong>Where it works:<\/strong> Digital marketing, paid media, and lead generation where results are trackable and attributable. <\/p>\n\n\n\n<p>It&#8217;s best as a hybrid (base fee + performance bonus) rather than pure performance. <\/p>\n\n\n\n<p>Pure performance pricing with no base fee is a cash flow disaster.<\/p>\n\n\n\n<p><strong>Where it breaks:<\/strong> When attribution is murky. A client&#8217;s revenue goes up 30%. Was it your Facebook ads, their email marketing, a seasonal trend, or all three? <\/p>\n\n\n\n<p>Performance models need crystal-clear KPI definitions and attribution agreements upfront.<\/p>\n\n\n\n<p><strong>Target delivery margin:<\/strong> 55-65% on the base fee, with bonuses adding margin on top. Structure the base to cover your costs and the bonus to drive profit.<\/p>\n\n\n\n<svg width=\"100%\" viewBox=\"0 0 680 360\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<style>\ntext{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}\n.th{font-size:14px;font-weight:500;fill:#2c2c2a}\n.ts{font-size:12px;fill:#5f5e5a}\n.arr{stroke:#5f5e5a;stroke-width:1.5}\n.c-gray rect{fill:#F1EFE8;stroke:#5F5E5A;stroke-width:0.5}.c-gray .th{fill:#444441}.c-gray .ts{fill:#5F5E5A}\n.c-amber rect{fill:#FAEEDA;stroke:#854F0B;stroke-width:0.5}.c-amber .th{fill:#633806}.c-amber .ts{fill:#854F0B}\n.c-green rect{fill:#EAF3DE;stroke:#3B6D11;stroke-width:0.5}.c-green .th{fill:#27500A}.c-green .ts{fill:#3B6D11}\n<\/style>\n<defs><marker id=\"a12\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\"><path d=\"M2 1L8 5L2 9\" fill=\"none\" stroke=\"context-stroke\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/marker><\/defs>\n<text class=\"th\" x=\"340\" y=\"28\" text-anchor=\"middle\">Performance-based pricing: base + bonus structure<\/text>\n<text class=\"ts\" x=\"340\" y=\"48\" text-anchor=\"middle\">PPC agency example. KPI: cost per acquisition below $25.<\/text>\n<g class=\"c-gray\"><rect x=\"40\" y=\"75\" width=\"280\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"180\" y=\"95\" text-anchor=\"middle\" dominant-baseline=\"central\">Base fee: $3,000\/mo<\/text><text class=\"ts\" x=\"180\" y=\"113\" text-anchor=\"middle\" dominant-baseline=\"central\">Covers your delivery costs<\/text><\/g>\n<g class=\"c-gray\"><rect x=\"380\" y=\"75\" width=\"260\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"510\" y=\"95\" text-anchor=\"middle\" dominant-baseline=\"central\">Bonus: $1,500\/mo<\/text><text class=\"ts\" x=\"510\" y=\"113\" text-anchor=\"middle\" dominant-baseline=\"central\">Earned when CPA stays below $25<\/text><\/g>\n<line x1=\"180\" y1=\"131\" x2=\"180\" y2=\"165\" class=\"arr\" marker-end=\"url(#a12)\"><\/line>\n<line x1=\"510\" y1=\"131\" x2=\"510\" y2=\"165\" class=\"arr\" marker-end=\"url(#a12)\"><\/line>\n<text class=\"th\" x=\"340\" y=\"185\" text-anchor=\"middle\">Two outcomes:<\/text>\n<g class=\"c-amber\"><rect x=\"40\" y=\"205\" width=\"280\" height=\"70\" rx=\"8\"><\/rect><text class=\"th\" x=\"180\" y=\"229\" text-anchor=\"middle\" dominant-baseline=\"central\">KPI missed (CPA = $32)<\/text><text class=\"ts\" x=\"180\" y=\"249\" text-anchor=\"middle\" dominant-baseline=\"central\">Revenue: $3,000. Margin: ~55%.<\/text><\/g>\n<g class=\"c-green\"><rect x=\"380\" y=\"205\" width=\"260\" height=\"70\" rx=\"8\"><\/rect><text class=\"th\" x=\"510\" y=\"229\" text-anchor=\"middle\" dominant-baseline=\"central\">KPI hit (CPA = $19)<\/text><text class=\"ts\" x=\"510\" y=\"249\" text-anchor=\"middle\" dominant-baseline=\"central\">Revenue: $4,500. Margin: ~70%.<\/text><\/g>\n<text class=\"ts\" x=\"180\" y=\"300\" text-anchor=\"middle\">You still cover costs. No disaster.<\/text>\n<text class=\"ts\" x=\"510\" y=\"300\" text-anchor=\"middle\">Bonus is pure profit on top.<\/text>\n<line x1=\"40\" y1=\"325\" x2=\"640\" y2=\"325\" stroke=\"#b4b2a9\" stroke-width=\"0.5\" stroke-dasharray=\"4 4\"><\/line>\n<text class=\"ts\" x=\"340\" y=\"348\" text-anchor=\"middle\">The base keeps the lights on. The bonus keeps the team hungry.<\/text>\n<\/svg>\n\n\n\n<h3 class=\"wp-block-heading\">6. Productized services<\/h3>\n\n\n\n<p>You package a specific service into a standardized offering with a fixed scope and a public price. Clients buy it like a product.<\/p>\n\n\n\n<p>A design agency offers three plans: Starter ($2,500\/month for 4 design requests), Growth ($5,000\/month for 10 requests), and Scale ($9,000\/month for unlimited requests with a dedicated designer). <\/p>\n\n\n\n<p>Scope, turnaround time, and pricing are listed on the website. No proposals. No custom quotes.<\/p>\n\n\n\n<p><strong>Where it works:<\/strong> Repeatable, well-defined services where the delivery process is standardized. Design subscriptions, content packages, SEO audits, and monthly reporting. It shortens the sales cycle because there&#8217;s nothing to negotiate.<\/p>\n\n\n\n<p><strong>Where it breaks:<\/strong> Complex, strategic work that requires discovery. You can&#8217;t productize a brand strategy engagement because every client&#8217;s situation is different. <\/p>\n\n\n\n<p>Productized services also create a ceiling on what you can charge per client, since the price is public and standardized.<\/p>\n\n\n\n<p>The agencies that win with productized services invest heavily in delivery efficiency. If your team can fulfill a $5,000\/month design subscription in 30 hours instead of 50, your margins are excellent.<\/p>\n\n\n\n<p><strong>Target delivery margin:<\/strong> 65-75%. Productized services should be your most efficient delivery model. If they&#8217;re not, your process isn&#8217;t standardized enough.<\/p>\n\n\n\n<svg width=\"100%\" viewBox=\"0 0 680 380\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<style>\ntext{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}\n.th{font-size:14px;font-weight:500;fill:#2c2c2a}\n.ts{font-size:12px;fill:#5f5e5a}\n.c-teal rect{fill:#E1F5EE;stroke:#0F6E56;stroke-width:0.5}.c-teal .th{fill:#085041}.c-teal .ts{fill:#0F6E56}\n.c-purple rect{fill:#EEEDFE;stroke:#534AB7;stroke-width:0.5}.c-purple .th{fill:#3C3489}.c-purple .ts{fill:#534AB7}\n.c-coral rect{fill:#FAECE7;stroke:#993C1D;stroke-width:0.5}.c-coral .th{fill:#712B13}.c-coral .ts{fill:#993C1D}\n.c-amber rect{fill:#FAEEDA;stroke:#854F0B;stroke-width:0.5}.c-amber .th{fill:#633806}.c-amber .ts{fill:#854F0B}\n.c-green rect{fill:#EAF3DE;stroke:#3B6D11;stroke-width:0.5}.c-green .th{fill:#27500A}.c-green .ts{fill:#3B6D11}\n<\/style>\n<text class=\"th\" x=\"340\" y=\"28\" text-anchor=\"middle\">Productized services: margin scales with efficiency<\/text>\n<text class=\"ts\" x=\"340\" y=\"48\" text-anchor=\"middle\">Design subscription example. Same team, three tiers.<\/text>\n<g class=\"c-teal\"><rect x=\"40\" y=\"75\" width=\"185\" height=\"120\" rx=\"8\"><\/rect><text class=\"th\" x=\"132\" y=\"100\" text-anchor=\"middle\" dominant-baseline=\"central\">Starter<\/text><text class=\"ts\" x=\"132\" y=\"120\" text-anchor=\"middle\" dominant-baseline=\"central\">$2,500\/mo<\/text><text class=\"ts\" x=\"132\" y=\"140\" text-anchor=\"middle\" dominant-baseline=\"central\">4 requests<\/text><text class=\"ts\" x=\"132\" y=\"160\" text-anchor=\"middle\" dominant-baseline=\"central\">~15 hrs delivery<\/text><\/g>\n<g class=\"c-purple\"><rect x=\"248\" y=\"75\" width=\"185\" height=\"120\" rx=\"8\"><\/rect><text class=\"th\" x=\"340\" y=\"100\" text-anchor=\"middle\" dominant-baseline=\"central\">Growth<\/text><text class=\"ts\" x=\"340\" y=\"120\" text-anchor=\"middle\" dominant-baseline=\"central\">$5,000\/mo<\/text><text class=\"ts\" x=\"340\" y=\"140\" text-anchor=\"middle\" dominant-baseline=\"central\">10 requests<\/text><text class=\"ts\" x=\"340\" y=\"160\" text-anchor=\"middle\" dominant-baseline=\"central\">~30 hrs delivery<\/text><\/g>\n<g class=\"c-coral\"><rect x=\"455\" y=\"75\" width=\"185\" height=\"120\" rx=\"8\"><\/rect><text class=\"th\" x=\"548\" y=\"100\" text-anchor=\"middle\" dominant-baseline=\"central\">Scale<\/text><text class=\"ts\" x=\"548\" y=\"120\" text-anchor=\"middle\" dominant-baseline=\"central\">$9,000\/mo<\/text><text class=\"ts\" x=\"548\" y=\"140\" text-anchor=\"middle\" dominant-baseline=\"central\">Unlimited requests<\/text><text class=\"ts\" x=\"548\" y=\"160\" text-anchor=\"middle\" dominant-baseline=\"central\">~50 hrs delivery<\/text><\/g>\n<text class=\"th\" x=\"340\" y=\"225\" text-anchor=\"middle\">The efficiency lever<\/text>\n<g class=\"c-amber\"><rect x=\"40\" y=\"245\" width=\"290\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"185\" y=\"265\" text-anchor=\"middle\" dominant-baseline=\"central\">Slow team: 50 hrs on Growth<\/text><text class=\"ts\" x=\"185\" y=\"283\" text-anchor=\"middle\" dominant-baseline=\"central\">Cost: $5,000. Margin: 0%.<\/text><\/g>\n<g class=\"c-green\"><rect x=\"355\" y=\"245\" width=\"290\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"500\" y=\"265\" text-anchor=\"middle\" dominant-baseline=\"central\">Fast team: 30 hrs on Growth<\/text><text class=\"ts\" x=\"500\" y=\"283\" text-anchor=\"middle\" dominant-baseline=\"central\">Cost: $3,000. Margin: 40%.<\/text><\/g>\n<text class=\"ts\" x=\"340\" y=\"335\" text-anchor=\"middle\">Same $5,000 plan. Same 10 requests. Efficiency is the entire margin.<\/text>\n<text class=\"ts\" x=\"340\" y=\"360\" text-anchor=\"middle\">If your productized service isn&#8217;t your most profitable line, your process needs work.<\/text>\n<\/svg>\n\n\n\n<h3 class=\"wp-block-heading\">7. Percentage of ad spend<\/h3>\n\n\n\n<p>You charge a percentage of the client&#8217;s media budget as your management fee. Common in paid media and media buying.<\/p>\n\n\n\n<p>A paid social agency charges 15% of ad spend. A client spending $100,000\/month on Facebook and Instagram ads pays a $15,000\/month management fee.<\/p>\n\n\n\n<p><strong>Where it works:<\/strong> Paid media management where the client&#8217;s spend scales. As their budget grows, your fee grows. <\/p>\n\n\n\n<p>It aligns your incentive with theirs: you want them to spend more (profitably), and they benefit from the growth.<\/p>\n\n\n\n<p><strong>Where it breaks:<\/strong> When the client&#8217;s spend doesn&#8217;t correlate with your workload. Managing $50,000\/month in ad spend isn&#8217;t twice the work of managing $25,000\/month. <\/p>\n\n\n\n<p>Some clients view the model as unfair once they realize you&#8217;re earning more without doing proportionally more work.<\/p>\n\n\n\n<p>It also breaks at the low end. 15% of a $5,000\/month spend is $750. That&#8217;s not enough to cover a senior media buyer&#8217;s time, let alone reporting and strategy.<\/p>\n\n\n\n<p><strong>Target delivery margin:<\/strong> 60-70%. Set minimum fee floors ($2,000-3,000\/month) so small-spend clients don&#8217;t tank your margins. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"559\" src=\"https:\/\/upbase.io\/blog\/wp-content\/uploads\/2026\/04\/agency_pricing_models_2-1024x559.png\" alt=\"\" class=\"wp-image-12355\" srcset=\"https:\/\/upbase.io\/blog\/wp-content\/uploads\/2026\/04\/agency_pricing_models_2-1024x559.png 1024w, https:\/\/upbase.io\/blog\/wp-content\/uploads\/2026\/04\/agency_pricing_models_2-300x164.png 300w, https:\/\/upbase.io\/blog\/wp-content\/uploads\/2026\/04\/agency_pricing_models_2-768x419.png 768w, https:\/\/upbase.io\/blog\/wp-content\/uploads\/2026\/04\/agency_pricing_models_2.png 1408w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Agency pricing models compared<\/h2>\n\n\n\n<p>Here&#8217;s every model side by side on the dimensions that actually affect your business:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Model<\/th><th>Cash flow predictability<\/th><th>Scalability<\/th><th>Scope creep risk<\/th><th>Client friction<\/th><th>Best for<\/th><\/tr><\/thead><tbody><tr><td>Hourly<\/td><td>Low<\/td><td>Low (capped by hours)<\/td><td>Low (client pays for time)<\/td><td>High (timesheet scrutiny)<\/td><td>Consulting, maintenance, undefined scopes<\/td><\/tr><tr><td>Project-based<\/td><td>Medium (lumpy payments)<\/td><td>Medium<\/td><td>High (without change orders)<\/td><td>Low (clear deliverables)<\/td><td>Website builds, campaigns, brand identity<\/td><\/tr><tr><td>Retainer<\/td><td>High<\/td><td>Medium<\/td><td>Medium (creeps over time)<\/td><td>Low<\/td><td>Ongoing marketing, SEO, content, design<\/td><\/tr><tr><td>Value-based<\/td><td>Medium<\/td><td>High (price rises with impact)<\/td><td>Low<\/td><td>Medium (must prove ROI)<\/td><td>CRO, lead gen, strategic consulting<\/td><\/tr><tr><td>Performance-based<\/td><td>Low to medium<\/td><td>Medium<\/td><td>Low<\/td><td>Medium (attribution debates)<\/td><td>PPC, paid media, lead gen<\/td><\/tr><tr><td>Productized<\/td><td>High<\/td><td>High (systematized delivery)<\/td><td>Low (fixed scope)<\/td><td>Very low<\/td><td>Design subscriptions, audits, content packages<\/td><\/tr><tr><td>% of spend<\/td><td>Medium to high<\/td><td>High (grows with spend)<\/td><td>Low<\/td><td>Medium (at scale)<\/td><td>Paid media management, media buying<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to calculate your minimum viable rate<\/h2>\n\n\n\n<p>Before picking a model, you need to know your floor. <strong>Your minimum viable rate is the lowest amount you can charge per hour of work and still hit your target profit margin.<\/strong> <\/p>\n\n\n\n<p>Every model, no matter how it&#8217;s structured, eventually comes down to this number.<\/p>\n\n\n\n<p>Here&#8217;s the formula:<\/p>\n\n\n\n<p><strong>Minimum viable rate = (salary + benefits + overhead) \u00f7 annual billable hours \u00f7 (1 &#8211; target profit margin)<\/strong> <\/p>\n\n\n\n<svg width=\"100%\" viewBox=\"0 0 680 380\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<style>\ntext{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}\n.th{font-size:14px;font-weight:500;fill:#2c2c2a}\n.ts{font-size:12px;fill:#5f5e5a}\n.arr{stroke:#5f5e5a;stroke-width:1.5}\n.c-blue rect{fill:#E6F1FB;stroke:#185FA5;stroke-width:0.5}.c-blue .th{fill:#0C447C}.c-blue .ts{fill:#185FA5}\n.c-gray rect{fill:#F1EFE8;stroke:#5F5E5A;stroke-width:0.5}.c-gray .th{fill:#444441}\n.c-amber rect{fill:#FAEEDA;stroke:#854F0B;stroke-width:0.5}.c-amber .th{fill:#633806}.c-amber .ts{fill:#854F0B}\n.c-coral rect{fill:#FAECE7;stroke:#993C1D;stroke-width:0.5}.c-coral .th{fill:#712B13}.c-coral .ts{fill:#993C1D}\n<\/style>\n<defs><marker id=\"a3\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\"><path d=\"M2 1L8 5L2 9\" fill=\"none\" stroke=\"context-stroke\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/marker><\/defs>\n<text class=\"th\" x=\"340\" y=\"30\" text-anchor=\"middle\">Minimum viable rate calculation<\/text>\n<text class=\"ts\" x=\"340\" y=\"50\" text-anchor=\"middle\">Your pricing floor for a senior designer role<\/text>\n<g class=\"c-blue\"><rect x=\"40\" y=\"75\" width=\"175\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"128\" y=\"95\" text-anchor=\"middle\" dominant-baseline=\"central\">Salary<\/text><text class=\"ts\" x=\"128\" y=\"113\" text-anchor=\"middle\" dominant-baseline=\"central\">$85,000\/yr<\/text><\/g>\n<text class=\"th\" x=\"230\" y=\"103\" text-anchor=\"middle\" dominant-baseline=\"central\">+<\/text>\n<g class=\"c-blue\"><rect x=\"250\" y=\"75\" width=\"175\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"338\" y=\"95\" text-anchor=\"middle\" dominant-baseline=\"central\">Benefits + taxes<\/text><text class=\"ts\" x=\"338\" y=\"113\" text-anchor=\"middle\" dominant-baseline=\"central\">$20,000\/yr<\/text><\/g>\n<text class=\"th\" x=\"440\" y=\"103\" text-anchor=\"middle\" dominant-baseline=\"central\">+<\/text>\n<g class=\"c-blue\"><rect x=\"460\" y=\"75\" width=\"175\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"548\" y=\"95\" text-anchor=\"middle\" dominant-baseline=\"central\">Overhead share<\/text><text class=\"ts\" x=\"548\" y=\"113\" text-anchor=\"middle\" dominant-baseline=\"central\">$15,000\/yr<\/text><\/g>\n<line x1=\"340\" y1=\"131\" x2=\"340\" y2=\"155\" class=\"arr\" marker-end=\"url(#a3)\"><\/line>\n<g class=\"c-gray\"><rect x=\"200\" y=\"160\" width=\"280\" height=\"44\" rx=\"8\"><\/rect><text class=\"th\" x=\"340\" y=\"182\" text-anchor=\"middle\" dominant-baseline=\"central\">Loaded cost = $120,000\/yr<\/text><\/g>\n<line x1=\"340\" y1=\"204\" x2=\"340\" y2=\"228\" class=\"arr\" marker-end=\"url(#a3)\"><\/line>\n<g class=\"c-amber\"><rect x=\"140\" y=\"233\" width=\"400\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"340\" y=\"253\" text-anchor=\"middle\" dominant-baseline=\"central\">$120,000 \/ 1,400 billable hrs<\/text><text class=\"ts\" x=\"340\" y=\"271\" text-anchor=\"middle\" dominant-baseline=\"central\">Cost per billable hour = $85.71<\/text><\/g>\n<line x1=\"340\" y1=\"289\" x2=\"340\" y2=\"313\" class=\"arr\" marker-end=\"url(#a3)\"><\/line>\n<g class=\"c-coral\"><rect x=\"140\" y=\"318\" width=\"400\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"340\" y=\"338\" text-anchor=\"middle\" dominant-baseline=\"central\">$85.71 \/ (1 &#8211; 0.60 target margin)<\/text><text class=\"ts\" x=\"340\" y=\"356\" text-anchor=\"middle\" dominant-baseline=\"central\">Minimum viable rate = $214\/hr<\/text><\/g>\n<\/svg>\n\n\n\n<p>Walk through it with real numbers:<\/p>\n\n\n\n<p>A senior designer earns $85,000\/year. Benefits and taxes add $20,000. Your share of overhead (rent, software, insurance, admin staff) is $15,000 per person. Total loaded cost: $120,000.<\/p>\n\n\n\n<p>That designer realistically bills 1,400 hours\/year (about 70% utilization after PTO, admin, internal meetings, and bench time).<\/p>\n\n\n\n<p>Cost per billable hour: $120,000 \u00f7 1,400 = <strong>$85.71\/hour<\/strong><\/p>\n\n\n\n<p>If your target delivery margin is 60%, your minimum viable rate is: $85.71 \u00f7 (1 &#8211; 0.60) = <strong>$214\/hour<\/strong><\/p>\n\n\n\n<p>That&#8217;s the floor. Anything below it and you&#8217;re not hitting your margin target for that role.<\/p>\n\n\n\n<p>Now apply it: if you&#8217;re quoting a fixed-fee project, estimate the hours and multiply by your minimum viable rate. If the number is higher than what the client will pay, you either reduce scope or walk away. <\/p>\n\n\n\n<p>No more guessing. <\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to pick the right model for your agency<\/h2>\n\n\n\n<p>Parakeeto&#8217;s Marcel Petitpas popularized a useful framework for this decision: map your services on two axes, risk and value. We&#8217;ve adapted that into a decision table you can use right now.<\/p>\n\n\n\n<p><strong>Risk<\/strong> = how predictable is the delivery cost? If you&#8217;ve done the work 50 times and can estimate within 10%, it&#8217;s low risk. If every project is a snowflake, it&#8217;s high risk.<\/p>\n\n\n\n<p><strong>Value<\/strong> = how specific is your positioning and how large is the client impact? Commodity design work is low value. CRO on a $10M\/year ecommerce site is high value.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><\/th><th>Low value<\/th><th>High value<\/th><\/tr><\/thead><tbody><tr><td><strong>High risk<\/strong><\/td><td>Hourly \/ T&amp;M (share risk with the client)<\/td><td>Hourly with value-based milestones (share risk, capture upside)<\/td><\/tr><tr><td><strong>Low risk<\/strong><\/td><td>Productized \/ fixed fee (systematize and scale)<\/td><td>Value-based \/ fixed fee with premium (capture the upside)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<svg width=\"100%\" viewBox=\"0 0 680 380\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<style>\ntext{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}\n.th{font-size:14px;font-weight:500;fill:#2c2c2a}\n.ts{font-size:12px;fill:#5f5e5a}\n.c-blue rect{fill:#E6F1FB;stroke:#185FA5;stroke-width:0.5}.c-blue .th{fill:#0C447C}.c-blue .ts{fill:#185FA5}\n.c-teal rect{fill:#E1F5EE;stroke:#0F6E56;stroke-width:0.5}.c-teal .th{fill:#085041}.c-teal .ts{fill:#0F6E56}\n.c-amber rect{fill:#FAEEDA;stroke:#854F0B;stroke-width:0.5}.c-amber .th{fill:#633806}.c-amber .ts{fill:#854F0B}\n.c-purple rect{fill:#EEEDFE;stroke:#534AB7;stroke-width:0.5}.c-purple .th{fill:#3C3489}.c-purple .ts{fill:#534AB7}\n<\/style>\n<text class=\"th\" x=\"340\" y=\"30\" text-anchor=\"middle\">The pricing fit framework<\/text>\n<text class=\"ts\" x=\"340\" y=\"50\" text-anchor=\"middle\">Match your service to the right model based on risk and value<\/text>\n<text class=\"ts\" x=\"170\" y=\"85\" text-anchor=\"middle\">Low value (commodity)<\/text>\n<text class=\"ts\" x=\"500\" y=\"85\" text-anchor=\"middle\">High value (strategic)<\/text>\n<text class=\"ts\" x=\"60\" y=\"145\" text-anchor=\"middle\">High risk<\/text>\n<text class=\"ts\" x=\"60\" y=\"265\" text-anchor=\"middle\">Low risk<\/text>\n<rect x=\"100\" y=\"100\" width=\"230\" height=\"80\" rx=\"0\" fill=\"none\" stroke=\"#b4b2a9\" stroke-width=\"0.5\"><\/rect>\n<rect x=\"380\" y=\"100\" width=\"250\" height=\"80\" rx=\"0\" fill=\"none\" stroke=\"#b4b2a9\" stroke-width=\"0.5\"><\/rect>\n<rect x=\"100\" y=\"220\" width=\"230\" height=\"80\" rx=\"0\" fill=\"none\" stroke=\"#b4b2a9\" stroke-width=\"0.5\"><\/rect>\n<rect x=\"380\" y=\"220\" width=\"250\" height=\"80\" rx=\"0\" fill=\"none\" stroke=\"#b4b2a9\" stroke-width=\"0.5\"><\/rect>\n<g class=\"c-blue\"><rect x=\"115\" y=\"112\" width=\"200\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"215\" y=\"132\" text-anchor=\"middle\" dominant-baseline=\"central\">Hourly \/ T&amp;M<\/text><text class=\"ts\" x=\"215\" y=\"150\" text-anchor=\"middle\" dominant-baseline=\"central\">Share risk with client<\/text><\/g>\n<g class=\"c-teal\"><rect x=\"395\" y=\"112\" width=\"220\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"505\" y=\"132\" text-anchor=\"middle\" dominant-baseline=\"central\">Hourly + value milestones<\/text><text class=\"ts\" x=\"505\" y=\"150\" text-anchor=\"middle\" dominant-baseline=\"central\">Share risk, capture upside<\/text><\/g>\n<g class=\"c-amber\"><rect x=\"115\" y=\"232\" width=\"200\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"215\" y=\"252\" text-anchor=\"middle\" dominant-baseline=\"central\">Productized \/ fixed fee<\/text><text class=\"ts\" x=\"215\" y=\"270\" text-anchor=\"middle\" dominant-baseline=\"central\">Systematize and scale<\/text><\/g>\n<g class=\"c-purple\"><rect x=\"395\" y=\"232\" width=\"220\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"505\" y=\"252\" text-anchor=\"middle\" dominant-baseline=\"central\">Value-based \/ premium<\/text><text class=\"ts\" x=\"505\" y=\"270\" text-anchor=\"middle\" dominant-baseline=\"central\">Absorb risk, price upside<\/text><\/g>\n<text class=\"ts\" x=\"340\" y=\"340\" text-anchor=\"middle\">High risk? Share it with the client. Low risk? Absorb it and price the upside.<\/text>\n<\/svg>\n\n\n\n<p>The guiding principle: <strong>when risk is high, share it with the client. When risk is low, absorb it and price the upside.<\/strong><\/p>\n\n\n\n<p>A few specific recommendations:<\/p>\n\n\n\n<p><strong>If you&#8217;re a new agency (under 2 years):<\/strong> Start with hourly. You don&#8217;t have enough data to scope projects accurately yet. Hourly billing protects you from underpricing while you build that data.<\/p>\n\n\n\n<p><strong>If you run a content or design shop with repeatable deliverables:<\/strong> Productized services or retainers. You know how long a blog post or social media package takes. Systematize it and sell it at scale.<\/p>\n\n\n\n<p><strong>If you run a paid media agency:<\/strong> Percentage of spend with a minimum monthly fee. Your effort grows with the budget, but set a floor so small-spend clients don&#8217;t eat your margin.<\/p>\n\n\n\n<p><strong>If you do high-impact strategic work (CRO, brand strategy, consulting):<\/strong> Value-based pricing. You need case studies and documented results to back it up. If you don&#8217;t have those yet, start with fixed-fee pricing and build your proof. <\/p>\n\n\n\n<svg width=\"100%\" viewBox=\"0 0 680 300\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<style>\ntext{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}\n.th{font-size:14px;font-weight:500;fill:#2c2c2a}\n.ts{font-size:12px;fill:#5f5e5a}\n.arr{stroke:#5f5e5a;stroke-width:1.5}\n.c-blue rect{fill:#E6F1FB;stroke:#185FA5;stroke-width:0.5}.c-blue .th{fill:#0C447C}.c-blue .ts{fill:#185FA5}\n.c-teal rect{fill:#E1F5EE;stroke:#0F6E56;stroke-width:0.5}.c-teal .th{fill:#085041}.c-teal .ts{fill:#0F6E56}\n.c-amber rect{fill:#FAEEDA;stroke:#854F0B;stroke-width:0.5}.c-amber .th{fill:#633806}.c-amber .ts{fill:#854F0B}\n.c-purple rect{fill:#EEEDFE;stroke:#534AB7;stroke-width:0.5}.c-purple .th{fill:#3C3489}.c-purple .ts{fill:#534AB7}\n<\/style>\n<defs><marker id=\"a10\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\"><path d=\"M2 1L8 5L2 9\" fill=\"none\" stroke=\"context-stroke\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/marker><\/defs>\n<text class=\"th\" x=\"340\" y=\"28\" text-anchor=\"middle\">Pricing model progression by agency stage<\/text>\n<text class=\"ts\" x=\"340\" y=\"48\" text-anchor=\"middle\">Start simple. Add complexity as you grow.<\/text>\n<line x1=\"60\" y1=\"100\" x2=\"620\" y2=\"100\" stroke=\"#b4b2a9\" stroke-width=\"1\"><\/line>\n<circle cx=\"60\" cy=\"100\" r=\"5\" fill=\"#5f5e5a\"><\/circle>\n<circle cx=\"240\" cy=\"100\" r=\"5\" fill=\"#5f5e5a\"><\/circle>\n<circle cx=\"430\" cy=\"100\" r=\"5\" fill=\"#5f5e5a\"><\/circle>\n<circle cx=\"620\" cy=\"100\" r=\"5\" fill=\"#5f5e5a\"><\/circle>\n<text class=\"ts\" x=\"60\" y=\"82\" text-anchor=\"middle\">Year 0<\/text>\n<text class=\"ts\" x=\"240\" y=\"82\" text-anchor=\"middle\">Year 2<\/text>\n<text class=\"ts\" x=\"430\" y=\"82\" text-anchor=\"middle\">Year 3-4<\/text>\n<text class=\"ts\" x=\"620\" y=\"82\" text-anchor=\"middle\">Year 5+<\/text>\n<g class=\"c-blue\"><rect x=\"15\" y=\"120\" width=\"120\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"75\" y=\"140\" text-anchor=\"middle\" dominant-baseline=\"central\">Hourly<\/text><text class=\"ts\" x=\"75\" y=\"158\" text-anchor=\"middle\" dominant-baseline=\"central\">Learn your costs<\/text><\/g>\n<g class=\"c-teal\"><rect x=\"170\" y=\"120\" width=\"150\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"245\" y=\"140\" text-anchor=\"middle\" dominant-baseline=\"central\">Fixed fee<\/text><text class=\"ts\" x=\"245\" y=\"158\" text-anchor=\"middle\" dominant-baseline=\"central\">Scope with confidence<\/text><\/g>\n<g class=\"c-amber\"><rect x=\"355\" y=\"120\" width=\"155\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"432\" y=\"140\" text-anchor=\"middle\" dominant-baseline=\"central\">+ Retainers<\/text><text class=\"ts\" x=\"432\" y=\"158\" text-anchor=\"middle\" dominant-baseline=\"central\">Build recurring rev<\/text><\/g>\n<g class=\"c-purple\"><rect x=\"545\" y=\"120\" width=\"130\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"610\" y=\"140\" text-anchor=\"middle\" dominant-baseline=\"central\">+ Value-based<\/text><text class=\"ts\" x=\"610\" y=\"158\" text-anchor=\"middle\" dominant-baseline=\"central\">Price on outcomes<\/text><\/g>\n<line x1=\"135\" y1=\"148\" x2=\"168\" y2=\"148\" class=\"arr\" marker-end=\"url(#a10)\"><\/line>\n<line x1=\"320\" y1=\"148\" x2=\"353\" y2=\"148\" class=\"arr\" marker-end=\"url(#a10)\"><\/line>\n<line x1=\"510\" y1=\"148\" x2=\"543\" y2=\"148\" class=\"arr\" marker-end=\"url(#a10)\"><\/line>\n<text class=\"ts\" x=\"75\" y=\"200\" text-anchor=\"middle\">You&#8217;re learning<\/text>\n<text class=\"ts\" x=\"75\" y=\"215\" text-anchor=\"middle\">how long work<\/text>\n<text class=\"ts\" x=\"75\" y=\"230\" text-anchor=\"middle\">actually takes<\/text>\n<text class=\"ts\" x=\"245\" y=\"200\" text-anchor=\"middle\">You can estimate<\/text>\n<text class=\"ts\" x=\"245\" y=\"215\" text-anchor=\"middle\">within 10-15%.<\/text>\n<text class=\"ts\" x=\"245\" y=\"230\" text-anchor=\"middle\">Efficiency = profit.<\/text>\n<text class=\"ts\" x=\"432\" y=\"200\" text-anchor=\"middle\">Convert best clients<\/text>\n<text class=\"ts\" x=\"432\" y=\"215\" text-anchor=\"middle\">to monthly. Build<\/text>\n<text class=\"ts\" x=\"432\" y=\"230\" text-anchor=\"middle\">predictable revenue.<\/text>\n<text class=\"ts\" x=\"610\" y=\"200\" text-anchor=\"middle\">You have case studies.<\/text>\n<text class=\"ts\" x=\"610\" y=\"215\" text-anchor=\"middle\">Charge on impact,<\/text>\n<text class=\"ts\" x=\"610\" y=\"230\" text-anchor=\"middle\">not hours.<\/text>\n<text class=\"ts\" x=\"340\" y=\"280\" text-anchor=\"middle\">You don&#8217;t abandon earlier models. You add new ones on top.<\/text>\n<\/svg>\n\n\n\n<h2 class=\"wp-block-heading\">How to mix pricing models across your service lines<\/h2>\n\n\n\n<p>The best agencies don&#8217;t use one model. They match the model to the service.<\/p>\n\n\n\n<p>Here&#8217;s what that looks like in practice for a mid-size digital marketing agency: <\/p>\n\n\n\n<svg width=\"100%\" viewBox=\"0 0 680 400\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<style>\ntext{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}\n.th{font-size:14px;font-weight:500;fill:#2c2c2a}\n.ts{font-size:12px;fill:#5f5e5a}\n.c-teal rect{fill:#E1F5EE;stroke:#0F6E56;stroke-width:0.5}.c-teal .th{fill:#085041}.c-teal .ts{fill:#0F6E56}\n.c-coral rect{fill:#FAECE7;stroke:#993C1D;stroke-width:0.5}.c-coral .th{fill:#712B13}.c-coral .ts{fill:#993C1D}\n.c-purple rect{fill:#EEEDFE;stroke:#534AB7;stroke-width:0.5}.c-purple .th{fill:#3C3489}.c-purple .ts{fill:#534AB7}\n.c-amber rect{fill:#FAEEDA;stroke:#854F0B;stroke-width:0.5}.c-amber .th{fill:#633806}.c-amber .ts{fill:#854F0B}\n.c-blue rect{fill:#E6F1FB;stroke:#185FA5;stroke-width:0.5}.c-blue .th{fill:#0C447C}\n<\/style>\n<text class=\"th\" x=\"340\" y=\"30\" text-anchor=\"middle\">Example: hybrid pricing for a digital agency<\/text>\n<text class=\"ts\" x=\"340\" y=\"50\" text-anchor=\"middle\">Each service line gets its own pricing model<\/text>\n<g class=\"c-teal\"><rect x=\"40\" y=\"75\" width=\"280\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"180\" y=\"95\" text-anchor=\"middle\" dominant-baseline=\"central\">SEO retainers<\/text><text class=\"ts\" x=\"180\" y=\"113\" text-anchor=\"middle\" dominant-baseline=\"central\">$5k-12k\/mo, defined deliverables<\/text><\/g>\n<text class=\"ts\" x=\"340\" y=\"103\" text-anchor=\"start\">\u2190 Retainer model<\/text>\n<g class=\"c-coral\"><rect x=\"40\" y=\"145\" width=\"280\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"180\" y=\"165\" text-anchor=\"middle\" dominant-baseline=\"central\">Website builds<\/text><text class=\"ts\" x=\"180\" y=\"183\" text-anchor=\"middle\" dominant-baseline=\"central\">$15k-50k, 50\/40\/10 payments<\/text><\/g>\n<text class=\"ts\" x=\"340\" y=\"173\" text-anchor=\"start\">\u2190 Fixed fee model<\/text>\n<g class=\"c-purple\"><rect x=\"40\" y=\"215\" width=\"280\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"180\" y=\"235\" text-anchor=\"middle\" dominant-baseline=\"central\">PPC management<\/text><text class=\"ts\" x=\"180\" y=\"253\" text-anchor=\"middle\" dominant-baseline=\"central\">12% of spend, $3k min<\/text><\/g>\n<text class=\"ts\" x=\"340\" y=\"243\" text-anchor=\"start\">\u2190 % of spend model<\/text>\n<g class=\"c-amber\"><rect x=\"40\" y=\"285\" width=\"280\" height=\"56\" rx=\"8\"><\/rect><text class=\"th\" x=\"180\" y=\"305\" text-anchor=\"middle\" dominant-baseline=\"central\">Brand strategy<\/text><text class=\"ts\" x=\"180\" y=\"323\" text-anchor=\"middle\" dominant-baseline=\"central\">$8k-15k flat, outcome-priced<\/text><\/g>\n<text class=\"ts\" x=\"340\" y=\"313\" text-anchor=\"start\">\u2190 Value-based model<\/text>\n<g class=\"c-blue\"><rect x=\"40\" y=\"345\" width=\"280\" height=\"44\" rx=\"8\"><\/rect><text class=\"th\" x=\"180\" y=\"367\" text-anchor=\"middle\" dominant-baseline=\"central\">Ad hoc design overflow<\/text><\/g>\n<text class=\"ts\" x=\"340\" y=\"367\" text-anchor=\"start\">\u2190 Hourly at preferred rate<\/text>\n<\/svg>\n\n\n\n<p><strong>SEO retainers:<\/strong> $5,000-12,000\/month. Ongoing, predictable work. Retainer model with a defined deliverable set each month.<\/p>\n\n\n\n<p><strong>Website builds:<\/strong> $15,000-50,000 per project. Clear scope, defined deliverables, one-time engagement. Project-based fixed fee with a 50\/40\/10 payment structure (50% at signing, 40% at staging, 10% at launch).<\/p>\n\n\n\n<p><strong>PPC management:<\/strong> 12% of ad spend with a $3,000\/month minimum. Scales with the client&#8217;s investment. Add a performance bonus for exceeding ROAS targets.<\/p>\n\n\n\n<p><strong>Brand strategy workshops:<\/strong> $8,000-15,000 flat fee. High-value, low-risk (you&#8217;ve done dozens of them). Price based on the outcome, not the hours.<\/p>\n\n\n\n<p><strong>Ad hoc design requests from retainer clients:<\/strong> Hourly at a preferred rate. Keeps scope clean. Anything outside the retainer gets billed separately.<\/p>\n\n\n\n<p>This isn&#8217;t complicated. <\/p>\n\n\n\n<p>It just requires you to think about each service line independently instead of forcing one model across your entire agency.<\/p>\n\n\n\n<p>Here&#8217;s a quick test: list every service you sell. Next to each one, write down whether the scope is predictable or unpredictable, and whether the value to the client is commodity-level or high-impact. <\/p>\n\n\n\n<p>Then match each service to the model in the decision table above. <\/p>\n\n\n\n<p>If the same model appears for every service, you&#8217;re either extremely specialized or you&#8217;re not thinking critically enough about the differences.<\/p>\n\n\n\n<p>The agencies that grow fastest are the ones that treat pricing as a portfolio, not a policy.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote has-background is-layout-flow wp-block-quote-is-layout-flow\" style=\"background-color:#d4e9ff\">\n<p><strong>Upbase tip:<\/strong> Want to see which clients and projects actually make you money? <a href=\"https:\/\/upbase.io\/features\/\">Upbase<\/a> tracks profitability at both the project and client level, so you can spot underwater accounts before they drain your margin. <a href=\"https:\/\/upbase.io\/\">See how it works \u2192<\/a><\/p>\n<\/blockquote>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5 pricing mistakes that drain agency profit<\/h2>\n\n\n\n<svg width=\"100%\" viewBox=\"0 0 680 380\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<style>\ntext{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}\n.th{font-size:14px;font-weight:500;fill:#2c2c2a}\n.ts{font-size:12px;fill:#5f5e5a}\n.c-red rect{fill:#FCEBEB;stroke:#A32D2D;stroke-width:0.5}.c-red .th{fill:#791F1F}\n<\/style>\n<text class=\"th\" x=\"340\" y=\"30\" text-anchor=\"middle\">5 pricing mistakes that drain agency profit<\/text>\n<g class=\"c-red\"><rect x=\"40\" y=\"55\" width=\"600\" height=\"44\" rx=\"8\"><\/rect><text class=\"th\" x=\"60\" y=\"77\" text-anchor=\"start\" dominant-baseline=\"central\">1. Not knowing your true cost per hour<\/text><\/g>\n<g class=\"c-red\"><rect x=\"40\" y=\"115\" width=\"600\" height=\"44\" rx=\"8\"><\/rect><text class=\"th\" x=\"60\" y=\"137\" text-anchor=\"start\" dominant-baseline=\"central\">2. Letting retainers creep unchecked<\/text><\/g>\n<g class=\"c-red\"><rect x=\"40\" y=\"175\" width=\"600\" height=\"44\" rx=\"8\"><\/rect><text class=\"th\" x=\"60\" y=\"197\" text-anchor=\"start\" dominant-baseline=\"central\">3. Pricing the same way for every service<\/text><\/g>\n<g class=\"c-red\"><rect x=\"40\" y=\"235\" width=\"600\" height=\"44\" rx=\"8\"><\/rect><text class=\"th\" x=\"60\" y=\"257\" text-anchor=\"start\" dominant-baseline=\"central\">4. Waiting too long to raise prices<\/text><\/g>\n<g class=\"c-red\"><rect x=\"40\" y=\"295\" width=\"600\" height=\"44\" rx=\"8\"><\/rect><text class=\"th\" x=\"60\" y=\"317\" text-anchor=\"start\" dominant-baseline=\"central\">5. Saying yes too fast (zero pushback = underpriced)<\/text><\/g>\n<text class=\"ts\" x=\"340\" y=\"365\" text-anchor=\"middle\">If two or more apply to your agency, your pricing model needs work<\/text>\n<\/svg>\n\n\n\n<p><strong>1. Not knowing your true cost per hour.<\/strong> Most agencies set rates based on what competitors charge or what &#8220;feels right.&#8221; That&#8217;s guessing.<\/p>\n\n\n\n<p>If you don&#8217;t know your loaded cost per billable hour for each role, you can&#8217;t know whether a project is profitable until it&#8217;s already done. <\/p>\n\n\n\n<p>Run the formula in the section above.<\/p>\n\n\n\n<p><strong>2. Letting retainers creep unchecked.<\/strong> A $6,000\/month retainer that started at 30 hours of work is now consuming 45 hours because the client keeps adding &#8220;quick requests.&#8221; <\/p>\n\n\n\n<p>That&#8217;s a 33% margin cut you didn&#8217;t agree to. <a href=\"https:\/\/upbase.io\/features\/time-tracking\">Track your time<\/a> against retainer scopes monthly.<\/p>\n\n\n\n<p><strong>3. Pricing the same way for every service.<\/strong> A website build and a monthly content retainer have completely different risk profiles, delivery patterns, and value propositions. <\/p>\n\n\n\n<p>Using the same pricing structure for both means you&#8217;re leaving money on the table on at least one of them.<\/p>\n\n\n\n<p><strong>4. Waiting too long to raise prices.<\/strong> Your costs go up every year. Salaries, software, rent, insurance. If your rates stay the same for 3 years while costs rise 15%, your margins are shrinking even if revenue stays flat. <\/p>\n\n\n\n<p>Review pricing at least annually. <\/p>\n\n\n\n<p>Build a 3-5% annual increase into retainer agreements from day one.<\/p>\n\n\n\n<p><strong>5. Saying yes too fast.<\/strong> If every prospect says yes to your first quote without pushback, you&#8217;re underpriced. <\/p>\n\n\n\n<p>Some resistance during negotiation is healthy. It means the price is in the right range. <\/p>\n\n\n\n<p>If nobody ever flinches, raise your rates by 20% on the next proposal and see what happens.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Don&#039;t Justify Your Prices. Do This Instead.\" width=\"1200\" height=\"675\" src=\"https:\/\/www.youtube.com\/embed\/Abi8kwkfZbA?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">FAQ<\/h2>\n\n\n\n<p><strong>What is the most profitable agency pricing model?<\/strong> <\/p>\n\n\n\n<p>Value-based pricing has the highest profit ceiling because it decouples your fee from your delivery cost. But it requires strong positioning, measurable results, and sales confidence. For most agencies, productized services offer the best combination of high margins and operational simplicity because they reward efficiency.<\/p>\n\n\n\n<p><strong>How do I transition from hourly to value-based pricing?<\/strong> <\/p>\n\n\n\n<p>Start by tracking the outcomes your work produces for current clients. Document revenue generated, leads created, or costs saved. Once you have 3-5 case studies with specific numbers, begin quoting new projects based on the expected outcome rather than estimated hours. Keep hourly billing for existing clients and test value-based pricing on new engagements.<\/p>\n\n\n\n<p><strong>What delivery margin should agencies target?<\/strong> <\/p>\n\n\n\n<p>Target 60% or higher on delivery margin (the ratio of gross income to delivery cost on a project). This leaves room for overhead (typically 25-30% of gross income) and a healthy net profit margin of 15-20%. If your delivery margin consistently sits below 50%, your pricing model needs work.<\/p>\n\n\n\n<p><strong>Can I use multiple pricing models at the same time?<\/strong> <\/p>\n\n\n\n<p>Yes, and you should. Most mature agencies use 2-3 models across their service lines. Retainers for ongoing work, fixed fees for projects, and percentage of spend for paid media is a common combination. The key is matching the model to the risk and value profile of each service.<\/p>\n\n\n\n<p><strong>How often should I review my agency&#8217;s pricing?<\/strong> <\/p>\n\n\n\n<p>At least twice a year. Review whenever your costs increase (team raises, new tools, office changes), when you improve your positioning (new case studies, awards, niche specialization), or when clients consistently say yes without negotiating. Any of those signals mean it&#8217;s time to raise rates.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Start with one thing: calculate your minimum viable rate for each role on your team. If you don&#8217;t know that number, nothing else in this guide matters yet. <\/p>\n\n\n\n<p>Once you have it, audit your current projects against it. <\/p>\n\n\n\n<p>You&#8217;ll find at least one client that&#8217;s underwater.<\/p>\n\n\n\n<p>Fix that one first. Then work your way through the rest.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>You&#8217;re winning clients but barely breaking even. Or worse, you&#8217;re profitable on paper but your team is grinding through unscoped work at 11 p.m. because the pricing model doesn&#8217;t account for how the work actually gets delivered. The pricing model you pick shapes everything: your cash flow, your margins, your client relationships, and whether your &#8230; <a title=\"Agency pricing models: 7 options compared (with a framework for choosing)\" class=\"read-more\" href=\"https:\/\/upbase.io\/blog\/agency-pricing-models\/\" aria-label=\"More on Agency pricing models: 7 options compared (with a framework for choosing)\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":12353,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"generate_page_header":"","footnotes":""},"categories":[27],"tags":[],"class_list":["post-12351","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-client-work"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Agency Pricing Models: 7 Models + How to Pick<\/title>\n<meta name=\"description\" content=\"Compare 7 agency pricing models side by side. Includes a decision framework, true cost formula, and hybrid pricing strategies for every service type\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/upbase.io\/blog\/agency-pricing-models\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Agency Pricing Models: 7 Models + How to Pick\" \/>\n<meta property=\"og:description\" content=\"Compare 7 agency pricing models side by side. Includes a decision framework, true cost formula, and hybrid pricing strategies for every service type\" \/>\n<meta property=\"og:url\" content=\"https:\/\/upbase.io\/blog\/agency-pricing-models\/\" \/>\n<meta property=\"og:site_name\" content=\"The Upbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-05T13:53:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-05T15:16:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/upbase.io\/blog\/wp-content\/uploads\/2026\/04\/agency_pricing_models_1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1408\" \/>\n\t<meta property=\"og:image:height\" content=\"768\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Paul Wilson\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Paul Wilson\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/upbase.io\\\/blog\\\/agency-pricing-models\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/upbase.io\\\/blog\\\/agency-pricing-models\\\/\"},\"author\":{\"name\":\"Paul Wilson\",\"@id\":\"https:\\\/\\\/upbase.io\\\/blog\\\/#\\\/schema\\\/person\\\/52707528eb779a2887f172af09c4aa39\"},\"headline\":\"Agency pricing models: 7 options compared (with a framework for choosing)\",\"datePublished\":\"2026-04-05T13:53:04+00:00\",\"dateModified\":\"2026-04-05T15:16:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/upbase.io\\\/blog\\\/agency-pricing-models\\\/\"},\"wordCount\":4019,\"publisher\":{\"@id\":\"https:\\\/\\\/upbase.io\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/upbase.io\\\/blog\\\/agency-pricing-models\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/upbase.io\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/agency_pricing_models_1.png\",\"articleSection\":[\"Client work\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/upbase.io\\\/blog\\\/agency-pricing-models\\\/\",\"url\":\"https:\\\/\\\/upbase.io\\\/blog\\\/agency-pricing-models\\\/\",\"name\":\"Agency Pricing Models: 7 Models + How to Pick\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/upbase.io\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/upbase.io\\\/blog\\\/agency-pricing-models\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/upbase.io\\\/blog\\\/agency-pricing-models\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/upbase.io\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/agency_pricing_models_1.png\",\"datePublished\":\"2026-04-05T13:53:04+00:00\",\"dateModified\":\"2026-04-05T15:16:26+00:00\",\"description\":\"Compare 7 agency pricing models side by side. Includes a decision framework, true cost formula, and hybrid pricing strategies for every service type\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/upbase.io\\\/blog\\\/agency-pricing-models\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/upbase.io\\\/blog\\\/agency-pricing-models\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/upbase.io\\\/blog\\\/agency-pricing-models\\\/#primaryimage\",\"url\":\"https:\\\/\\\/upbase.io\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/agency_pricing_models_1.png\",\"contentUrl\":\"https:\\\/\\\/upbase.io\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/agency_pricing_models_1.png\",\"width\":1408,\"height\":768},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/upbase.io\\\/blog\\\/agency-pricing-models\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/upbase.io\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Agency pricing models: 7 options compared (with a framework for choosing)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/upbase.io\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/upbase.io\\\/blog\\\/\",\"name\":\"The Upbase Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/upbase.io\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/upbase.io\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/upbase.io\\\/blog\\\/#organization\",\"name\":\"The Upbase Blog\",\"url\":\"https:\\\/\\\/upbase.io\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/upbase.io\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/upbase.io\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/04\\\/Upbase_logo.png\",\"contentUrl\":\"https:\\\/\\\/upbase.io\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/04\\\/Upbase_logo.png\",\"width\":830,\"height\":200,\"caption\":\"The Upbase Blog\"},\"image\":{\"@id\":\"https:\\\/\\\/upbase.io\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/upbase.io\\\/blog\\\/#\\\/schema\\\/person\\\/52707528eb779a2887f172af09c4aa39\",\"name\":\"Paul Wilson\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d72f05cc42ab68f0c6fdf4e567dd62345aa01dc2628d66e69643a56708cf685b?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d72f05cc42ab68f0c6fdf4e567dd62345aa01dc2628d66e69643a56708cf685b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d72f05cc42ab68f0c6fdf4e567dd62345aa01dc2628d66e69643a56708cf685b?s=96&d=mm&r=g\",\"caption\":\"Paul Wilson\"},\"sameAs\":[\"https:\\\/\\\/upbase.io\\\/blog\"],\"url\":\"https:\\\/\\\/upbase.io\\\/blog\\\/author\\\/admin_upbase\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Agency Pricing Models: 7 Models + How to Pick","description":"Compare 7 agency pricing models side by side. Includes a decision framework, true cost formula, and hybrid pricing strategies for every service type","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/upbase.io\/blog\/agency-pricing-models\/","og_locale":"en_US","og_type":"article","og_title":"Agency Pricing Models: 7 Models + How to Pick","og_description":"Compare 7 agency pricing models side by side. Includes a decision framework, true cost formula, and hybrid pricing strategies for every service type","og_url":"https:\/\/upbase.io\/blog\/agency-pricing-models\/","og_site_name":"The Upbase Blog","article_published_time":"2026-04-05T13:53:04+00:00","article_modified_time":"2026-04-05T15:16:26+00:00","og_image":[{"width":1408,"height":768,"url":"https:\/\/upbase.io\/blog\/wp-content\/uploads\/2026\/04\/agency_pricing_models_1.png","type":"image\/png"}],"author":"Paul Wilson","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Paul Wilson","Est. reading time":"19 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/upbase.io\/blog\/agency-pricing-models\/#article","isPartOf":{"@id":"https:\/\/upbase.io\/blog\/agency-pricing-models\/"},"author":{"name":"Paul Wilson","@id":"https:\/\/upbase.io\/blog\/#\/schema\/person\/52707528eb779a2887f172af09c4aa39"},"headline":"Agency pricing models: 7 options compared (with a framework for choosing)","datePublished":"2026-04-05T13:53:04+00:00","dateModified":"2026-04-05T15:16:26+00:00","mainEntityOfPage":{"@id":"https:\/\/upbase.io\/blog\/agency-pricing-models\/"},"wordCount":4019,"publisher":{"@id":"https:\/\/upbase.io\/blog\/#organization"},"image":{"@id":"https:\/\/upbase.io\/blog\/agency-pricing-models\/#primaryimage"},"thumbnailUrl":"https:\/\/upbase.io\/blog\/wp-content\/uploads\/2026\/04\/agency_pricing_models_1.png","articleSection":["Client work"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/upbase.io\/blog\/agency-pricing-models\/","url":"https:\/\/upbase.io\/blog\/agency-pricing-models\/","name":"Agency Pricing Models: 7 Models + How to Pick","isPartOf":{"@id":"https:\/\/upbase.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/upbase.io\/blog\/agency-pricing-models\/#primaryimage"},"image":{"@id":"https:\/\/upbase.io\/blog\/agency-pricing-models\/#primaryimage"},"thumbnailUrl":"https:\/\/upbase.io\/blog\/wp-content\/uploads\/2026\/04\/agency_pricing_models_1.png","datePublished":"2026-04-05T13:53:04+00:00","dateModified":"2026-04-05T15:16:26+00:00","description":"Compare 7 agency pricing models side by side. Includes a decision framework, true cost formula, and hybrid pricing strategies for every service type","breadcrumb":{"@id":"https:\/\/upbase.io\/blog\/agency-pricing-models\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/upbase.io\/blog\/agency-pricing-models\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/upbase.io\/blog\/agency-pricing-models\/#primaryimage","url":"https:\/\/upbase.io\/blog\/wp-content\/uploads\/2026\/04\/agency_pricing_models_1.png","contentUrl":"https:\/\/upbase.io\/blog\/wp-content\/uploads\/2026\/04\/agency_pricing_models_1.png","width":1408,"height":768},{"@type":"BreadcrumbList","@id":"https:\/\/upbase.io\/blog\/agency-pricing-models\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/upbase.io\/blog\/"},{"@type":"ListItem","position":2,"name":"Agency pricing models: 7 options compared (with a framework for choosing)"}]},{"@type":"WebSite","@id":"https:\/\/upbase.io\/blog\/#website","url":"https:\/\/upbase.io\/blog\/","name":"The Upbase Blog","description":"","publisher":{"@id":"https:\/\/upbase.io\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/upbase.io\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/upbase.io\/blog\/#organization","name":"The Upbase Blog","url":"https:\/\/upbase.io\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/upbase.io\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/upbase.io\/blog\/wp-content\/uploads\/2021\/04\/Upbase_logo.png","contentUrl":"https:\/\/upbase.io\/blog\/wp-content\/uploads\/2021\/04\/Upbase_logo.png","width":830,"height":200,"caption":"The Upbase Blog"},"image":{"@id":"https:\/\/upbase.io\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/upbase.io\/blog\/#\/schema\/person\/52707528eb779a2887f172af09c4aa39","name":"Paul Wilson","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/d72f05cc42ab68f0c6fdf4e567dd62345aa01dc2628d66e69643a56708cf685b?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d72f05cc42ab68f0c6fdf4e567dd62345aa01dc2628d66e69643a56708cf685b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d72f05cc42ab68f0c6fdf4e567dd62345aa01dc2628d66e69643a56708cf685b?s=96&d=mm&r=g","caption":"Paul Wilson"},"sameAs":["https:\/\/upbase.io\/blog"],"url":"https:\/\/upbase.io\/blog\/author\/admin_upbase\/"}]}},"_links":{"self":[{"href":"https:\/\/upbase.io\/blog\/wp-json\/wp\/v2\/posts\/12351","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/upbase.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/upbase.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/upbase.io\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/upbase.io\/blog\/wp-json\/wp\/v2\/comments?post=12351"}],"version-history":[{"count":0,"href":"https:\/\/upbase.io\/blog\/wp-json\/wp\/v2\/posts\/12351\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/upbase.io\/blog\/wp-json\/wp\/v2\/media\/12353"}],"wp:attachment":[{"href":"https:\/\/upbase.io\/blog\/wp-json\/wp\/v2\/media?parent=12351"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/upbase.io\/blog\/wp-json\/wp\/v2\/categories?post=12351"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/upbase.io\/blog\/wp-json\/wp\/v2\/tags?post=12351"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}