Marketing agencies land in the same Projects-module bucket as consulting and IT services firms, with one recurring twist: a meaningful share of project cost is media spend and third-party vendor pass-through (ad platforms, printers, freelance creative), and clients expect to see that cost billed through — often with an agency markup — cleanly separated from the agency's own labor billing.
Retainer-plus-project is the default shape
Most agencies run a base monthly retainer (ongoing account management, reporting) plus discrete campaign or production projects billed separately. Model these as they are: the retainer as a recurring billing schedule against a low-task-count Project (same pattern as an IT services managed-services contract), and each campaign as its own Project with its own budget and task breakdown, even if it's the same client. Collapsing everything into one giant client-level project is the setup mistake that makes campaign profitability impossible to see later — you want "was the Q3 product launch profitable" answerable on its own, not buried in a year of retainer noise.
Billing through vendor spend with markup
Media buys and vendor costs come in as AP bills against the Project (AP bill entry lets you code a bill line to a Project and Project Task directly). The billing side then needs a markup rule rather than a straight pass-through:
Billing step: Time and Material
Source: AP-coded project expenses (media, print, freelance)
Markup: 15% agency handling fee on vendor cost lines
(set on the billing rule step, applies at invoice time —
not baked into the AP bill amount, so vendor cost and
client-billed amount stay reconcilable to two different
numbers on purpose)
Keeping the markup at the billing-rule level rather than inflating the AP bill itself matters for two reasons: the agency's actual vendor cost stays accurate for its own margin reporting, and if a client renegotiates the markup percentage mid-contract, you change one rule instead of re-entering historical bills.
Separate production labor budget from media budget
A campaign project budget conflated into one number ("Q3 launch: $80,000") tells a producer nothing useful. Split the Project Task structure so labor hours and media/vendor spend have independent budgets and independent burn tracking — a campaign can be under budget on creative hours and dangerously over on ad spend at the same time, and the Project Status report only surfaces that if the tasks are actually separated.
Agencies burn media budgets fast; an AP approval workflow gated purely on dollar amount misses the more useful trigger, which is spend velocity against the remaining campaign budget. A $2,000 media bill is unremarkable in isolation but alarming if it's the fourth one this week against a $10,000 budget. This needs a small workflow condition referencing cumulative project-task spend, not just the bill's own amount — worth the half-day of workflow configuration for any agency spending real media dollars through the system.
Wrapping up
Agencies fit the Projects-module pattern well once retainer and project work are split and vendor pass-through billing uses a markup rule instead of inflated AP bills. The detail that actually earns its keep is separating labor and media budgets at the task level — that's the difference between a Project Status report producers trust and one they ignore.
Independent software engineer in Nairobi specialising in Acumatica customisations, Laravel backends, and tax fiscalisation integrations across East and Southern Africa.