Marketing Agency Software: A Buyer's Guide to Retainers, Approvals and Profitability
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.
The evidence behind this guide
Independent findings on why this investment pays off. Every link goes to the primary source.
- 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) →
- 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) →
- 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) →
- 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 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.