New: the $2,500 CRM System→
← All case studies

B2B marketing agency · Marketing & Creative · Build 11

Hours, budgets and contracts a marketing agency's clients see for themselves.

A B2B marketing agency billed against contracts and retainers but tracked hours in ClickUp timers nobody outside the team could see. Their portal turns those timers into live budgets: every client sees hours against their contract, the agency sees who's over, running hot or behind pace, and the numbers export to Excel or a branded PDF.

3.

Budget call-outs — over budget, running hot, behind pace

15 min.

Company ↔ client records kept in step across four lists

1 click.

From a CRM row to a live client portal

The brief

The hours were in ClickUp's timers. Nobody outside the team could see them — and nobody saw a contract running hot until the month was over.

The problem

An agency selling contracts and retainers lives or dies on whether hours match the budget. The hours were there — in ClickUp's own timers — but only the team could see them, nobody saw a contract running hot until the month was over, and every client asked the same question by email.

The solution

A portal that turns the timers into live budgets: clients see hours against their contract, the agency sees pacing call-outs on working days, and every view exports to Excel or a branded PDF.

01 · Time & budgets

Every timer, by client, project, contract and person.

Retainers against their monthly budget, fixed-scope projects against their total, billable or not — with call-outs for over budget, running hot and behind pace, counted on working days so a Friday doesn't look like a crisis. Charts by client, month, function and person.

  • Read from ClickUp's own time tracking
  • Pacing on working days
  • Billable / non-billable filter
  • Excel workbook or branded PDF export
Live simulation · dashboard

portal — reporting · time & budgets

412h

logged this month

86%

billable

2

running hot

Retainer — Northwind

38 of 40 h · day 18 of 22

Running hot

Website rebuild — Halcyon

112 of 160 h total

On pace

Brand refresh — Lumen

9 of 30 h · day 18

Behind pace

paced on working days, not calendar days — so Friday doesn't look like a crisis

02 · The client's view

Clients see their own hours — and stop asking.

Each client's portal shows hours against their contract, their projects and to-dos, a calendar, files, meeting recaps and agreements to sign. Contacts on the company in the CRM can sign in; nobody needs a password.

  • Hours against the contract, live
  • Meeting recaps
  • Agreements filed into the Contracts list
Live simulation · portal

portal — client dashboard

Client — marketing director

reads ClickUp live via API

Hours this month

31 of 40

Q4 campaign — landing pages

In review

Contract renewal

Signed ✓

in the agency's own logo and colours

03 · Move hours

Carry time into next month — matched to the minute.

An admins-only tool to re-date a client's time entries into a later month, by picking them or by matching an amount exactly. Edits are allowed, and every move can be undone.

  • Admins only
  • Match an amount to the minute
  • Undo
Live simulation · automation

portal — reporting · move hours

1

Pick a client and a month

admins only

2

Match 6h 15m exactly

or pick the entries

3

Entries re-dated into next month

in ClickUp itself

4

Undo, if you change your mind

every move is logged

matched to the minute — the client's total lands exactly where it should

04 · New clients

A CRM row becomes a client portal.

Create Portal on a company in the CRM and it's live. Behind it, company and client records are kept in step every 15 minutes across projects, contracts, contacts and to-dos — a to-do inherits its project's company automatically.

  • One click from CRM to portal
  • Four lists kept in step every 15 minutes
  • Alerts for expiring contracts and client uploads
Live simulation · two-way sync

CRM → portal

CRM · Companies

Halcyon Health

Prospect
⇄

Client portal

portal.agency.co/halcyon

—

a row in the CRM becomes a client portal — contacts on the company can sign in

The outcome

Clients see where their hours went. The agency sees a contract running hot while there's still time to act.

Next.js 15React 19TypeScriptTailwind 4Vercel + CronClickUp API (v2 + v3)ClickUp time trackingClaude APIResendExcel (xlsx) exportPDF export
01

Clients stopped asking where their hours went — they can see it. The agency sees a contract running hot while there's still time to act.

Want a system like this one?

A 30-minute call to map what you have to what you need. Fixed-fee where the scope is known, $100/hr beyond it, and everything documented so your team runs it without me.

The agency and its clients are not named. Every client name and figure shown is illustrative.

Next case study — In-house video production team

A portal for an in-house video team — every role sees its own work.

→