Skip to content
Guides & Comparisons

White label reporting for agencies: when to build it in-house and when to buy it

Build it in-house only if it pays for itself in fewer report cycles than you are going to run before rebuilding it. An agency stack lasts 6 to 9 months.

12 min readStriqTech

End of the month, Monday meeting. Someone on the team has spent two days putting reports together and says the line: "I can automate this myself in a couple of weekends." Nobody asks for the math, because the comparison everyone has in mind is one big one-off number —70 hours of building— against a small monthly number, a fee. Framed that way, building in-house always wins, and the agency finds out it lost when it has to rebuild the stack for the second time.

The math that actually decides is two divisions. Payback cycles: the build hours converted into minutes, divided by the net minutes each report gives back to you. Useful life cycles: your monthly report volume multiplied by the 6 to 9 months an agency stack lasts without structural intervention. If you need 105 cycles and you are going to run 106, it barely fits and you build it. If you need 280 and you are going to run 36, you are going to pay for it twice.

The trap is in the net minutes, which is where any eyeballed estimate falls apart. Automation does not give you back what each report takes today: it gives you that minus a floor of 20 to 30 minutes of judgment that no tool takes off your hands, and minus the stack maintenance spread across the month's reports. And the question is not whether automating reporting is worth it either: above three accounts that is already decided, you do it anyway, with a template or by hand. The question is who you build it against —your team or someone who already has it built— and answering it takes four numbers, two of which only come out of using a stopwatch.

The three numbers that only come out of timing your next close

This calculation cannot be done from memory. Eyeballed, the minutes per report always come out low and the result always tips the scale toward building in-house, because whoever estimates is the same person who wants to build it. In the coming close, with a stopwatch and the month's calendar:

  1. Time two reports end to end, one for a small account and one for a large account. End to end means from the moment you log into the first platform until the email goes out, including the wait for the media buyer's comment. That wait is the invisible part and it is usually the most expensive: those are calendar days that appear in no estimate.
  2. Count the month's real cycles, not the clients. A monthly account is worth 1; an account you report on every week is worth 4.3. Nine monthly accounts and two weekly ones are 17.6 cycles, not 11.
  3. Split those two reports into two columns: assembly and judgment. Assembly is logging in, exporting, pasting, adjusting formatting, changing the month in the title. Judgment is looking at the numbers, writing the comment and answering the follow-up question. The first column is the only thing that gets automated.

The fourth number you do not measure, you estimate: the build hours. For three or four sources the honest range is 50 to 90 effective hours, and you are better off taking the ceiling.

The division: cycles it takes to pay back against cycles you have left

With those four numbers:

net minutes per cycle = (today's minutes − floor) − monthly maintenance in minutes ÷ cycles per month

payback cycles = build hours × 60 ÷ net minutes per cycle

useful life cycles = cycles per month × 6

An agency with 9 monthly accounts and 2 weekly ones has 17.6 cycles. It takes 75 minutes per report and its judgment floor is 25, so the gross saving is 50 minutes. Stack maintenance, 3 hours a month, is 180 minutes spread across 17.6 reports: 10 per cycle. That leaves it with 39.8 net minutes per cycle. With 70 build hours (4,200 minutes) it needs 105 cycles to pay it back, and it is going to run 106 before the next rebuild. It barely fits and it gets built. If the build stretches to 80 hours —the most common overrun— it moves to needing 121 cycles and no longer makes it.

The same agency with 6 monthly accounts and 60 minutes per report saves 35 gross. But its 2 hours of maintenance spread across 6 reports is 20 minutes per cycle: it is left with 15 net. It needs 280 cycles and it is going to run 36. Nothing gets built.

Look at what maintenance did between one case and the other: it ate 20% of the saving at the large agency and 57% at the small one. Updating connectors, reconnecting an account that expired and fixing the source that changed its name costs practically the same whether you have 6 reports or 30. It is a fixed watch, and a small agency pays it in full with nothing to spread it across.

The vendor fee, on the buy side, comes in this same unit and that is why the comparison is direct: divide it by your cycles for the month and you have the price per report, against which you put the net minutes it gives you back. If they quote it per account and you have weekly accounts, ask them to requote it per cycle before comparing anything.

Subtract the floor before multiplying or the math will look twice as good

The mistake that moves the most money in this decision is counting the minutes saved as if they were the total minutes.

What automation eats is collection and assembly. What it does not eat, and will not eat, is the judgment block: looking at whether a CPA that went up 40% is a signal or a strange weekend, writing the three lines the client actually reads, and answering the reply email asking about one specific campaign.

That block is 20 to 30 minutes per account and it is the same with a template, without a template or with the most expensive dashboard on the market. If you are at 45 minutes per report today, your gross saving is 15 to 25, not 45, and once you subtract maintenance per cycle a good share of small agencies is left with fewer than 10 net minutes: at that point no build pays for itself.

Useful life cycles: how often something forces you to rebuild

The multiplier of 6 is not a round number picked to make the math work out: it is how long an agency reporting stack lasts without structural intervention, which is typically 6 to 9 months. Four things reset the clock, and none of them depends on whether you did the job well:

  • A client adds a channel mid-year. TikTok Ads, WhatsApp, a marketplace. A new source is not touched in one template: it is touched in all of them.
  • Platforms retire API versions and rename metrics. Meta releases new Graph API versions several times a year and phases out the old ones; intermediate connectors usually break before that.
  • The client roster turns over. With normal agency client churn, the client you made the exception for leaves and another one comes in with a different exception. What you are left with is not a template: it is a template shaped like a client who is no longer there.
  • Whoever built it leaves. Without service accounts in the agency's name and without one page of documentation per source, the cycles still missing to pay it back are lost entirely.

That is why a build that needs 200 cycles when you are going to run 100 does not pay back "more slowly": it never pays back, because at cycle 100 you are rebuilding.

How many cycles it takes to pay back a 70-hour build

Cycles needed to pay for 70 build hours, with 2.5 monthly maintenance hours already deducted and spread across each row's reports. In bold, the combinations where that number fits within the useful life:

Cycles per monthUseful lifeSaves 30 minSaves 45 minSaves 60 minSaves 90 min
636 cycles84021012065
1060 cycles2801409356
1590 cycles2101208453
20120 cycles1871128051
30180 cycles1681057649

The ten cells in bold form a triangle in the bottom right: you need both things at once, report volume and a lot of time lost on each one. One alone is not enough. At six cycles a month there is no combination that works: even saving 90 minutes per report and giving maintenance away for free, you need 65 cycles and you are going to run 36.

And look at the first column, which is the counterintuitive part: going from 6 to 30 monthly cycles brings payback down from 840 cycles to 168 without anyone saving a single extra minute per report. That is not dashboard scale, it is the fixed watch spread across five times as many reports.

The bottleneck has a date: from day 1 to day 5

At an agency, reporting is not a cost spread across the month: it is an entire queue that lands in the same window. Reports go out between day 1 and day 5, and they are done by the same account manager or the same performance person who during those days also closes proposals, puts together the new month's plan and takes in the account that just came in. That is why the number that decides is not how much the hour is worth, but how many cycles fit in the window before something falls out of it.

The ceiling calculation: a closing window is 5 business days, and a person with meetings, emergencies and their own client roster puts in about 4 net hours a day, that is 1,200 minutes. At 75 minutes per cycle, that person absorbs 16 reports; at 40 minutes, 30. The agency in the example, with 17.6 cycles, is already above the ceiling of a single person: either it puts a second account manager into the window, or the small accounts' reports go out on day 8.

That is what you pay when the math comes out against you, and it is not paid in hours: it is paid in reports that arrive late to the account that can least tolerate a late report, in proposals answered on day 6 and in the onboarding of the new account you cannot do during the first week of the month. That is why two agencies of the same size decide differently with the same formula: the one at 60% of its window is buying comfort, and the one at 110% is buying the capacity to take on clients.

If you still want to put a money figure on that hour, the loaded cost derivation —employer contributions, mandatory bonus, accruals, with the bands per country— is worked out in hiring someone or outsourcing and we do not repeat it here. For this decision it is enough to know which week it falls in.

Below the threshold you build nothing: you renegotiate the report

If the math came out against you, the problem does not go away: you still lose the first week of the month. What changes is where it gets solved. None of these four decisions is technical; you make all four with the client, and all of them bring down minutes or cycles without touching a tool:

  • One single format for everyone, with a single custom block per client. Exceptions are what multiplies the work. Limiting them to one per account is a commercial decision, and it is made at contract renewal, not at month close.
  • All reports on the same two days. Reporting one at a time, as each request comes in, costs considerably more than reporting all fifteen together: every start has its own cost of logging into all the platforms.
  • Ask for the comment in a fixed format and on a fixed date: what changed, why, what we do next month. Three lines, requested on day 2 from all the media buyers at once. Chasing that comment usually takes more time than putting the entire report together.
  • Lower the frequency where it does not add value. A four-line weekly summary by email plus a full monthly report is a good replacement for four long reports a month, and it has to be written that way in the contract. That account stops weighing 4.3 cycles and goes back to weighing a little over 1: it is the lever that moves the denominator the most, because it does not lower minutes, it lowers cycles.

Those four decisions usually cut between 20% and 30% of the minutes —a typical range, not a measurement of your operation— and along the way they leave you the measured data to run the division again at the next close.

What this version does not give you is the branding: the report still lives at a vendor URL. That is the honest limit of the whole calculation, because the formula compares minutes against minutes and white label does not save any. If the report with your logo is part of how you sell, put a price on it as a commercial line and add it to the build side before dividing. If nobody has ever asked you for it, do not pay for it.

The benchmark, the handover and live access: three requests that change the question

Two of the classic requests —"how are we doing against the same month last year?" and "why did it drop?"— are not template problems but data plumbing problems: history that someone has to be saving every day, and two sources that today do not talk to each other. That is quoted separately and the breakdown is in how much a custom dashboard costs. The three that follow, on the other hand, are specific to an agency and appear in no BI quote:

  1. "How am I doing against the average of your client roster?" It is the most flattering request and the hardest to answer, because your reporting is designed for the opposite: each client in their own template, with their own definitions and their own access. A benchmark demands unifying accounts you deliberately kept apart, and before being a technical problem it is a confidentiality decision: what gets published in aggregate, with how many accounts minimum so nobody can deduce who is who, and what happens when the client who came out last asks who you are measuring them against.
  2. The handover, which arrives at the worst possible moment. An account leaves, or a consultant comes in to audit you, and the request is the campaign-level and creative-level detail for the last twelve months, in a format that is not your template. If your reporting reads live with the client's credentials, the day they take your access away you also lose your own history: the cases you use to sell the next account live in the ad account of someone who is no longer your client.
  3. "I want to log in whenever I want, with my logo, and be alerted if CPA goes above X." That is no longer a monthly report: it is a product with a domain, users, per-account permissions and uptime. And it brings an uncomfortable change in who discovers the failures: while you are the one building the report, you find the broken connector on day 3 and fix it without anyone noticing; with the client logging in whenever they want, they find it, on a Monday at 9:05, and they write to you.

All three can be solved, but none of them with spare hours from your team on a Tuesday afternoon. When any of the three shows up, the question stops being build or buy and becomes how much it is worth to keep that running every month, which is a different budget and a different conversation.

Nothing in this article is decided with an opinion. It is decided with three numbers that come out of timing your next close, and no vendor can give you any of the three:

  1. Your floor, the hours you are going to keep spending per cycle even if the build turns out perfect: interpreting, writing the comment, sending.
  2. The build hours, counted honestly and not optimistically, including those of the person who knows SQL and already has another job.
  3. Your useful life cycles, how often a change of client, of platform or of format forces you to rebuild the template.

With those three, the two divisions above do themselves and in most cases the result is building it in-house. If you would rather we run them with you, the three numbers fit in two lines: send them to info@striqtech.com — and if what is squeezing turns out to be the history or the cross-source join, that is no longer reporting: it has a different price and it is in how much a custom dashboard costs.

Frequently asked questions

How many hours does it really take to build an agency's white label reporting?

The typical range to cover three or four sources (Meta Ads, Google Ads, GA4 and a CRM) with presentable templates runs from 50 to 90 hours of effective work, counting data cleanup, quality control on the first two closes and each client's exceptions. It is a market range, not a quote. The practical rule is to double whatever the team estimates: the error is almost never in building the dashboard, it is in discovering that two clients define conversion differently.

How far does Looker Studio go for an agency's reporting?

It holds up well and it is the right starting point below 10 monthly report cycles. The three walls that show up afterwards are predictable and none of them is about price: the report lives at a vendor URL and not on your domain; every client exception gets solved by duplicating the template, and duplicates do not inherit changes from the parent, so redefining a metric turns into editing it five times; and access runs through Google accounts, which makes every addition and removal of a client contact manual work on your side. With three or four duplicated templates you have already lost the advantage of having templates.

How do I count an account I report on every week in the formula?

It is worth 4.3 monthly accounts, because reporting is paid per cycle and not per logo on the wall. An agency with nine monthly accounts and two weekly ones does not have 11 cycles: it has 17.6. Counting by account is what makes small agencies look like they are on the side where building in-house does not pay for itself when in fact it does, and it is also what makes you compare a fee badly: if the vendor quotes you per account and you have weekly accounts, ask them to requote per cycle before comparing.

What happens to the dashboards when the person who built them leaves?

It is the specific risk of building in-house and it is worth looking at before deciding. A reporting stack built in-house usually lives in the personal account of whoever made it, with client platform credentials tied to their user and with no documentation, because documenting never fits into billable hours. Mitigation is cheap: service accounts in the agency's name, shared access and a one-page document per source. If that is not in place, the useful life cycles end the day they hand in their resignation, and the ones still missing to pay it back are lost entirely.

Can I charge the client for reporting so it stops being a cost?

Yes, and it changes the whole calculation: reporting stops being an expense to minimize and becomes a line with margin. Charging for it separately is more viable when the report includes analysis and a recommendation, not just numbers. Watch out for the side effect: a client who pays for the report feels entitled to ask for their own metrics, and exceptions are precisely what breaks the template model. If you go down that road, put in writing how many custom blocks are included in the price.

Did this content help?

Implement this in your business in 72 hours

Let's talk for 15 minutes. No cost, no commitment. I'll audit one process and show you the projected ROI.

Let's talk on WhatsApp