Industry guide · Project Management

Marketing Agency Software: A Buyer's Guide to Retainers, Approvals and Profitability

The short answer

Build only if you are running enough retainer volume that the reconciliation itself is a job. Below roughly 25 concurrent retainers, a well configured off-the-shelf stack is the right answer. Above that, a focused first release covering contracts, live retainer burn, approvals with change orders and a single profitability view runs $60,000 to $130,000 and ships in 12 to 16 weeks. A full agency platform with reporting, capacity, media pass-through billing and finance sync is $150,000 to $400,000 phased across 6 to 12 months. The payback is not the software licences you cancel. It is the retainer margin we routinely find leaking into work you never invoiced, which at 30 to 40 retainers is worth several times the seat fees you were trying to save.

Why agency operations software makes or breaks a multi-account agency

It is the 4th of the month. Your ops director exports last month's timesheets from Harvest, drops them into a Google Sheet called "Retainer Burn v11 FINAL", and runs a VLOOKUP against a tab where someone typed the contracted hours out of each SOW by hand. Three accounts are underwater. One of them, a $12,000 a month retainer, consumed 148 hours against 90 contracted, because a paid social manager spent three weeks rebuilding creative that the client kept re-approving. You are learning this 34 days after it started, and you have already invoiced.

That scene is the whole category. A 60-person agency running 30 to 40 concurrent retainers is not short of software. There is Asana or ClickUp for tasks, Harvest or Toggl for time, Float for who is booked, Slack for everything that actually gets decided, Google Drive for assets, Frame.io or Ziflow for creative review, Looker Studio and Supermetrics for client reporting, HubSpot for new business, and QuickBooks for invoicing. Each tool is competent at its job. Not one of them knows what a retainer is. The retainer only exists in a PDF and in an account director's memory.

The cost is not the subscriptions. It is that account directors burn the first week of every month on reconciliation instead of client work, that unbilled scope never appears as a line item anywhere so nobody fights for it, and that the answer to "is this account profitable" takes three days to assemble and is stale by the time it lands in the partner meeting.

Problem 1: retainer burn is a lagging indicator, so overservicing is paid for before it is seen

Your SOW says 90 hours a month: 20 strategy, 40 paid media, 30 design. Harvest tracks hours against a project called "Client X 2026". It does not know about the 90, it does not know about the role split, and it certainly does not know your clause that unused strategy hours roll forward 60 days but media hours expire monthly. So the split lives in a spreadsheet, and the spreadsheet is right once a month.

Productive.io, Scoro and Kantata do model retainers, and for a single simple retainer shape they work. They flatten the moment your contracts differ: role-level allowances, blended versus per-role rates, rollover with an expiry, minimum monthly commitments with quarterly true-ups. You end up rebuilding the exceptions in a sheet anyway, which is the same spreadsheet you were trying to kill.

A custom build makes the contract a first-class object: contracted hours per role per month, rate card, rollover rules, deliverable list, targets. Time entries join to it live. Then you set the pacing rule that matters: at day 10, if 42% of media hours are consumed against 33% expected, the account director and ops get a Slack alert naming the account, the delta, and the three tasks driving it. The conversation moves from a post-mortem to a decision you can still make. AI earns its place here on the input side: draft timesheets assembled from calendar events, Asana activity and ad platform change logs, offered at 5pm as pre-filled entries a person confirms in one tap. Across our builds this is what moves timesheet compliance from roughly six in ten entries filed on time to nearly all of them, and burn data is worthless without that.

Problem 2: approvals have no chain of custody, so scope creep never becomes a change order

The client's CMO approves a headline in a Slack DM to a junior copywriter on a Friday. Six weeks later their legal team disputes it. Separately, your SOW contracted three rounds of revision and you are on round seven, but the rounds are scattered across Ziflow proofs, email threads and a Loom link, so nobody can prove the count and nobody wants to be the person who raises it with a client mid-campaign.

Frame.io and Ziflow are good proofing tools. They give you annotations and versions. What they cannot give you is the join: a proof round tied to a contracted round count, tied to a rate card, tied to an invoice line. That join does not exist in any off-the-shelf agency tool because it is specific to how your contracts are written.

Custom means an approval record carrying deliverable ID, round number, approver identity, timestamp, an immutable snapshot of what was approved, and the SOW clause it sits under. When round four opens on a three-round deliverable, the system drafts a change order priced off the rate card and routes it to the account director, who sends it in one click while the work is still fresh and the client still remembers asking. Client emails parse back into the record through a monitored mailbox so the client never logs into anything. AI does the classification that humans skip: every inbound client message tagged as feedback, approval or new request, with the exact sentence that triggered the scope flag quoted back to the AD. Agencies we have built this for recover work they were previously writing off as goodwill.

Problem 3: forty clients, forty bespoke reports, one analyst rebuilding them every month

AgencyAnalytics, Whatagraph, DashThis and Looker Studio with Supermetrics all render per-platform widgets beautifully. The client does not want per-platform widgets. They want blended customer acquisition cost across Meta, Google and their Shopify orders, net of your fee, measured against the target written into the SOW. So an analyst exports, models it in Sheets, and rebuilds the same logic for every account. When a client has three Meta ad accounts and two Google Analytics 4 properties, the template breaks and the rebuild is manual.

The fix is a metric layer, not another dashboard. Define blended CAC once, with your agency's definition of what counts as a conversion and what fees are included, in a warehouse on Postgres or BigQuery fed by platform connectors and a per-client account mapping table. Targets come from the contract record, not from a hard-coded number in a widget. Every client inherits the definition, so a change to the model propagates to forty reports instead of forty analysts. AI helps in two specific places: the commentary paragraph, drafted from the actual metric deltas so the analyst edits rather than writes, and anomaly detection that flags a 40% week-over-week CPA jump on Thursday morning instead of on the monthly call.

Problem 4: capacity plans that have no relationship to what actually happens

Float and Forecast let you drop people into coloured blocks. Blocks are aspiration. Your senior designer is booked 32 hours across three retainers and in reality spends nine hours a week on ad hoc requests that arrive in Slack and never touch a plan. So the plan says she has capacity and she does not, and you sell a project you cannot staff.

A custom system compares booked hours against actual hours per person per account and keeps the variance. Next quarter's plan is then built on observed delivery cost rather than the estimate that has been wrong for six quarters. It also reaches into HubSpot: a deal at 60% probability with a stated start date provisionally reserves capacity, so new business and delivery are looking at the same calendar. The question that gets answered is the one your partners actually ask: can we take this $25,000 project starting in three weeks, and the answer is a number with named people behind it, not a shrug.

Problem 5: media pass-through and billing reconciliation done by hand

You front $400,000 a month of client media on the agency card, mark it up 3%, and someone in finance reconciles Meta and Google invoices against client invoices line by line in QuickBooks. Add overage hours, third-party costs, print, and freelancer bills, and a single client's monthly invoice is assembled from five systems by a human under deadline. Mistakes here are not cosmetic: a missed pass-through is real cash, and you carry the float either way.

Off-the-shelf will not solve this because it is the intersection of your contract terms, your billing entity structure and your platform spend. A build pulls actual spend from the Meta Marketing API and Google Ads API, applies the markup rule stored on the contract, appends approved change orders and overage hours from the burn engine, produces a draft invoice, and pushes it to QuickBooks or Xero with the right class and client codes. Finance reviews and approves rather than assembles. Document extraction on incoming vendor and freelancer invoices is a good use of AI here: the model reads the PDF, matches it to a purchase order and an account, and flags what it cannot match instead of silently guessing.

Cost and timeline: honest bands

These come from Digital Heroes delivery experience across more than 2,000 projects, not from a pricing page. A focused first release, typically the contract model, live retainer burn with alerting, approvals with change orders, and one profitability view, runs $60,000 to $130,000 and ships in 12 to 16 weeks. A full agency platform adding the reporting metric layer, capacity, media pass-through and finance sync runs $150,000 to $400,000 phased over 6 to 12 months. We ship it in phases because agencies that try to launch all of it at once end up with a system nobody trusts and everyone routes around.

What pushes price up in this category, specifically: the number of ad platform and analytics connectors you need and whether any client is on an unusual setup, the messiness of your existing contracts (if every SOW is bespoke prose, someone has to model the exceptions, and that is real work), finance system depth (a read-only QuickBooks sync is cheap, bidirectional with classes and multi-entity is not), migrating historical time and project data so the profitability view has more than three weeks of history, and multi-office or multi-currency structure. What pushes it down: fewer, cleaner contract shapes, and a willingness to keep Slack and Google Drive rather than rebuild them.

Build versus buy: take the position

Buy if you are under roughly 25 concurrent retainers with fairly uniform contract shapes. Productive.io or Scoro configured properly will beat anything you commission, and the money is better spent on people. Buy if your differentiator is craft and your ops burden is genuinely small. Do not build agency software because it is annoying to reconcile a spreadsheet once a month.

Build when the specific signals appear. One: you employ someone whose real job is joining tools together, and you have quietly hired a second. Two: your contracts have shapes the tools cannot express, and the exceptions live in a sheet that one person maintains and nobody else can read. Three: you can name a margin number you lose to unbilled work and you cannot prove it account by account. Four: reporting labour has crossed 40 hours a month and none of it is billable. Five: your process is a competitive asset you sell against, in which case putting it in someone else's product means capping it at their roadmap. Hitting three of those five, the build pays back on unbilled scope recovery alone, usually inside the first year.

How to choose a developer for agency operations software

Ask them to model your retainer on a whiteboard before you sign anything. Give them your ugliest SOW, the one with rollover and a quarterly true-up, and watch whether they reach for a contract entity with role-level allowances or start drawing tasks and projects. If they draw a task manager, they have never built this and you will spend the engagement teaching them.

Interrogate the integration story with names, not categories. Meta Marketing API, Google Ads API and GA4 all have rate limits, token expiry and account-hierarchy quirks that break naive builds in month two. Ask how they handle a client with three ad accounts under two business managers, and ask what happens to your dashboards when a token expires on a Saturday. The answer should include a retry and alerting strategy, not optimism.

Get compliance answered concretely. You are holding client ad data, customer lists and sometimes personal data across regions, so ask about data residency, per-client access boundaries so a junior on account A cannot query account B, audit logs on approvals, and a data processing agreement your clients' procurement teams will accept. Enterprise clients will audit you for this and you want the answer to already exist.

Finally, ask what they will not build. A partner worth hiring will tell you to keep Slack, keep Google Drive, keep Frame.io for proofing, and will spend your budget only on the join those tools cannot make. Anyone quoting you a full replacement for your entire stack is selling scope, not judgment.

Research & sources

The evidence behind this guide

Independent findings on why this investment pays off. Every link goes to the primary source.

  1. McKinsey Global Institute estimated that about half of all work activities globally have the technical potential to be automated by adapting currently demonstrated technologies, though few occupations can be fully automated. Source: McKinsey Global Institute (2017) →
  2. In a McKinsey global survey of 1,259 respondents, only about 20% said their organizations excel at decision making, and just 37% said their organizations' decisions were both high quality and high in velocity. Source: McKinsey & Company (2019) →
  3. Grand View Research valued the global field service management market at USD 4.43 billion in 2022 and projects it to reach USD 11.78 billion by 2030, a 13.3% CAGR, driven by growing field operations in telecom, utilities, construction and energy. Source: Grand View Research (2023) →
  4. Across ten outpatient clinics the mean no-show rate was 18.8%, and the marginal cost of no-shows reached $14.58 million per year for those clinics, at roughly $196 per missed appointment (2008 figures). Source: BMC Health Services Research / PubMed Central (Kheirkhah et al.) (2015) →
Rohan Malhotra · Enterprise Software Consultant

Rohan advises mid-market and enterprise teams on ERP, CRM and custom software, and has led delivery on dozens of business-software builds.

Writes for Digital Heroes, shipping business software for 2,000+ brands across 55+ countries since 2017.

FAQ

Frequently asked questions

How much does custom marketing agency software cost for a 60 person agency?
A focused first release covering contracts, live retainer burn, approvals with change orders and a profitability view runs $60,000 to $130,000 and ships in 12 to 16 weeks. A full platform adding client reporting, capacity planning, media pass-through billing and finance sync runs $150,000 to $400,000 phased over 6 to 12 months. Price is driven mainly by how many ad platform connectors you need, how bespoke your SOW terms are, and how deep the QuickBooks or Xero integration goes. Those bands are Digital Heroes delivery experience across more than 2,000 projects, not a market average.
Is it cheaper to build our own agency management system than pay for Productive.io or Scoro?
Not on licence cost alone, and you should not build to save subscription money. The case for building is the margin you lose to unbilled scope and the ops headcount joining tools together, which at 30 to 40 retainers is usually far larger than the seat fees. If your contracts fit the shapes Productive.io or Scoro model, keep them and spend the money elsewhere.
How long does it take to build a custom retainer burn and profitability tracker?
Twelve to sixteen weeks for a first release that agencies actually run on. Weeks one to three go into modelling your contracts properly, which is the part everyone underestimates, then the time capture, burn engine, alerting and profitability view follow. You should be seeing live burn data inside about eight weeks, with the rest of the window spent on the exceptions your contracts contain.
Can we migrate our Harvest time entries and Asana projects into a custom system?
Yes, and you should migrate at least 12 to 24 months of time entries so the profitability view has real history from day one. Harvest and Asana both expose APIs that make the extraction straightforward. The hard part is not the export, it is mapping historical projects to the new contract records, since your old project names rarely map cleanly to SOWs. Budget a couple of weeks and one person from your ops team for that reconciliation.
Do we own the code if Digital Heroes builds our agency platform?
Yes. You own the source code, the repositories, the infrastructure accounts and the data outright, with full IP assignment on delivery. It runs in your cloud accounts, not ours, and you can take it to any other development team at any point. If a vendor will not put that in writing before kickoff, walk.
What integrations does a custom agency platform actually need?
At minimum: the ad and analytics platforms your clients run on (Meta Marketing API, Google Ads, GA4, LinkedIn Ads), your finance system (QuickBooks or Xero), your CRM for pipeline capacity (usually HubSpot), Slack for alerting where people already work, and Google Drive for assets. Whether you also integrate Asana, Harvest or Float depends on whether you are replacing them or reading from them. Most agencies keep Slack and Drive permanently and retire the time and retainer tracking tools once burn goes live.
Can AI genuinely help with agency timesheets and client reporting, or is it hype?
It helps in two narrow places that matter. First, drafting timesheets from calendar events, Asana activity and ad platform change logs so a person confirms pre-filled entries instead of reconstructing their week, which is the single biggest lever on burn data quality. Second, drafting report commentary from actual metric deltas and flagging anomalies like a 40% CPA jump mid-week. Where it does not help is judgment: pricing a change order or deciding to fire a client stays human.
What about client data privacy and GDPR when we hold their ad account and customer data?
You need data residency choices (EU data staying in an EU region), per-client access boundaries so someone on account A cannot query account B, audit logs on approvals and data exports, and a data processing agreement your clients' procurement teams will sign. This gets designed in at the schema level, because retrofitting tenant isolation into a system that assumed everyone can see everything is expensive. Enterprise clients will audit you on it, so treat it as a build requirement rather than a later phase.
Should we replace Asana entirely or build on top of it?
Build alongside it, at least initially. Task management is a solved problem and rebuilding it burns budget for no margin gain. The value is in the layer Asana cannot hold: the contract record, burn against contracted role hours, approval chain of custody and profitability. Many agencies keep Asana for day-to-day execution and let the custom system read task and time data via API, then retire tools only where the overlap becomes confusing.
How many people should be working on my software project?
Three to five for a typical focused build: a project lead, one or two engineers, a designer, and part-time QA, which is the standard shape across 2,000+ Digital Heroes projects. Larger platforms justify 6 to 10, but a ten-person team on a small first version usually signals bill padding rather than horsepower. What predicts success is whether a senior engineer is writing your code daily, not the headcount on the proposal.
What's the most common mistake companies make when building their own PM tool?
Chasing feature parity with Asana or Jira. Across 2,000+ Digital Heroes projects, the builds that blow their budgets are the ones recreating Gantt charts, portfolio dashboards, and mobile apps nobody asked for, while the builds that succeed go deep on the two or three workflows that made the team leave their old tool. You are not competing with Asana's roadmap; you are replacing the 20 percent of it you actually use.
We run everything on spreadsheets and Airtable. How do we know it's time for custom software?
The reliable signals are re-typing the same data into multiple tools, one employee acting as human middleware between systems, and errors appearing in handoffs between teams. Hard limits force the issue too: Airtable's Team plan caps at 50,000 records per base, and Business costs $45 per seat per month, so a 20-person team pays about $10,800 a year for a tool it has already outgrown. When workarounds consume more hours than the tools save, the spreadsheet era is over.
What does it cost to keep custom project management software running each year?
Budget 15 to 20 percent of the original build cost annually, so a $100,000 platform costs $15,000 to $20,000 a year to run. That covers hosting, security patches, dependency upgrades, and the item buyers forget: fixing integrations when Slack, Google, or QuickBooks change their APIs, which happens every year. Skipping the maintenance budget is how a two-year-old tool becomes impossible to upgrade.
Can a solo freelancer build project management software, or do I need an agency?
A strong freelancer can deliver a single-team internal tracker in the $15,000 to $25,000 range. Once you need role-based permissions, real-time updates, several integrations, and someone on call after launch, you need a 4 to 5 person team, because those features cross design, backend, and QA at once. The bigger freelancer risk is continuity: one person on vacation becomes an outage in your delivery pipeline.
Can we move our existing Asana or Jira data into a custom tool?
Yes. Both expose full export APIs, and projects, tasks, comments, and assignees come across cleanly; Digital Heroes typically runs migration as a 2 to 4 week workstream in parallel with the build. The awkward parts are attachments, automation rules that must be rebuilt rather than imported, and deciding how much closed historical work to carry over. Migrate active projects fully and keep the rest as read-only archive exports.
Will an app built for 10 users survive growing to 500?
Yes, if it is built on standard cloud infrastructure with a sound data model, because moving from 10 to 500 users is a hosting configuration change, not a rebuild. The scaling decisions that actually hurt are made early and invisibly: how the database is structured, how accounts and permissions are modeled, and whether background work is queued properly. Ask your agency how the system would handle ten times the load; the right answer is boring and specific, and a promise to cross that bridge later means you will pay for the bridge twice.
Will a custom tool built for 50 people still work when we're 500?
Yes, if it sits on a standard stack; a PostgreSQL-backed application handles 500 concurrent users without exotic engineering, and unlike Monday or Asana, seats 51 through 500 add nothing to your license bill. What does need rework at that scale is organizational rather than technical: permission models, department-level reporting, and admin tooling. Have the agency design the data model for multi-team use on day one, even if version one serves a single team.
Keep reading
let's build

Build something worth launching.

A plan, a team, a timeline, within 24 hours. No decks, no discovery calls. Tell us what you're building and we'll come back with a real scope and a real number.

message us directly · we reply within one business day

mission briefing

Monthly dispatch

Playbooks, real build costs, and what we're shipping. One email a month. No fluff.

visit us

New York HQ

1140 Broadway, Suite 704 · New York, NY 10001

Get directions
Online now

Hey there 👋 How can we help you today?