Playbook · Agency · 20 min read

Multi-tenant agency: consolidated media and CRM per client

The Standard for Agencies Managing Many Clients: Consolidate Media and CRM of each in a single, multi-tenant model.

What will you take
  • View typical sources for a multi-tenant agency
  • Understand multi-source consolidation per customer
  • Have an end-to-end implementation checklist

An agency does not manage one business, it manages dozens at the same time. Each client has their Meta Ads account, their Google Ads account and the your CRM, each one in a different panel, with different field names and separate login. The traffic manager opens ten tabs to create a report, the data never matches between platforms, and at the end of the month no one can quickly answer “how was client X’s week”. This playbook shows the pattern Nekt uses to transform this patchwork quilt in a single, multi-tenant base, with media and CRM consolidated by customer, which serves reporting, internal dashboard and AI agent from the same model.

1. Context: N customers, same challenge repeated

What defines the operation of an agency is the horizontal scale: the same work, replicated for many clients. Each customer usually has the same triad of sources, Meta Ads, Google Ads and a CRM, but isolated from each other. The challenge has two faces that need to be resolved together.

The good news is that, because it is the same pattern repeated, the solution also is replicable: you model it once, with the customer as a dimension of first class, and each new account falls into the same model instead of become another loose report. It is this pattern that the next steps detail.

2. Typical agency sources

The data sources are repeated from client to client, with small variations. Each one marked with the customer it belongs to.

Note

Meta and Google count the same thing (how much was invested and what rendered) with different vocabularies: spend against cost, leads against conversions. Half the work of modeling a agency is precisely this translation, standardizing fields between platforms so that adding and comparing makes sense. Set this Early translation dictionary and document using the context feature.

3. Recommended modeling: multi-source consolidation at Gold

The objective is to reach a central table in the layer Gold:o consolidated media, with one line per customer, channel and day. The raw sources of each customer enter the Bronze, each data source is clean and typed separately in Silver, and the standardized union of them all lives in the Gold. It is the consolidation pattern multi-source, applied to the multi-tenant reality of an agency.

Bronze
Raw layer
Raw sources per customer
  • Meta Ads, Google Ads and CRM for each client
  • Each row marked with the originating customer
  • As it came, unedited
  • Names and units of each platform
refines
Silver
Treated layer
Every data source clean
  • One table per source, already typed
  • Truth dates, numeric values
  • Fields renamed to common default
  • Customer column guaranteed in everything
refines
Gold
Consumption layer
Consolidated by customer/channel/day
  • One line per customer, channel and day
  • Media and CRM united by the common key
  • Standardized investment, leads and revenue
  • This is where the report, panel and MCP read from

The common key: customer, channel and day

All consolidation depends on finding the key that joins sources different. Here she is the combination customer + channel + day. The customer says who the data belongs to (the multi-tenant dimension), the channel says which platform it came from (Meta, Google, and so on), and the day gives the temporal grain. With this key, a Meta campaign and a Google campaign on the same day, for the same client, saw two comparable rows from the same table, rather than two separate reports.

Standardization across platforms

Before stacking the sources, the fields need to speak the same language. O spend of Meta and the cost from Google saw a single column investimento. The leads of one and the conversions from the other they saw leads or conversoes, as defined by the agency. The dates, that each platform delivers in a format, they become a column data for real. This translation is the heart of modeling of agency: without it, you cannot add total investment or compare channels.

Clipping from gold.consolidado_midia

One line per customer, channel and day, with fields already standardized between Meta and Google:

date customer channel investment leads revenue
2026-03-08 Silva Store Goal R$320 18 R$ 2,400
2026-03-08 Silva Store Google R$410 22 R$ 3,100
2026-03-08 North Clinic Goal R$ 180 9 R$ 1,500
2026-03-08 North Clinic Google R$ 260 14 R$ 2,050

Filtering by cliente, you have a customer’s vision alone. Grouping by canal, you compare Meta against Google. Adding investimento and receita, you calculate the return. All from one table, with the customer always present as a column.

Tip

Treat the cliente like a first-class column, present since Bronze and propagated until Gold, never as something that you can then deduce it from the name of the campaign. When the customer is a explicit dimension in all tables, add the next account in the portfolio is just another source in the same model, not a report new from scratch.

4. Multi-tenant: isolate without duplicating work

Multi-tenant is serving many customers from one base shared, keeping each person isolated. There are two paths, and they don't are exclusive.

In practice, most agencies do well with the client column and filter discipline in consumption. The prefix per customer is reserved for cases that actually require physical separation.

Caution: leakage between clients

The biggest risk of a multi-tenant model is the leak: a customer's number appears on the report from another. This happens when someone forgets the filter for cliente, when a campaign enters Bronze without the origin brand, or when a join joins customer lines different by mistake. The consequences are serious, a customer sees the data from a competitor. Protect yourself with three habits: ensure column cliente mandatory in every table (never null), filter by customer in all consumption by default, and validate that the sum per client closes with the total before delivering any report.

5. Use case: report, dashboard and agent on the same model

With the consolidated Gold, three consumptions are born based on the same model, each serving a specific public different.

Automatic report per customer. Instead of the manager assemble ten reports by hand, each client gets their own, generated from from the same table, filtered by the column cliente. Investment, leads, revenue and return by channel, updated alone. Adding a new customer means pointing the report to one more value of cliente, don't build from scratch.

Internal agency panel. The vision that the manager of the agency didn't have: all the clients side by side, whoever is performing, who is burning money with no return, which channel yields more in the entire portfolio. It is the portfolio view that only exists because data is in a single model rather than spread across panels isolated.

An AI agent, via MCP, answers questions in natural language about the same consolidated: "which campaign yielded more this week for client X", "how much client Y invested in Google this month", "which channel has the best cost per lead in the Store Silva." Whoever needs the answer asks and receives the number immediately, without waiting for an analyst to open ten tabs.

What makes the agent trustworthy is the Semantic Layer describing consolidated: what is it each column, which investimento already unite spend and cost, that every query is always per client, which each channel means. Without this description, the AI guesses and, worse still, multi-tenant context, can mix clients. With it, the AI responds with the same rules that the report and the panel use, and all three match.

Use casemulti-tenant marketing agency

A marketing agency with a large client portfolio assembled media reports by hand, client by client, pulling Meta and Google in separate tabs and working with the CRM at the base of the patience. Each new client in the portfolio was more manual work, and the number rarely matched between platforms because of field differences. We redid the modeling with a consolidated media in Gold, one line per customer, channel and day, with spend and cost standardized in an investment-only column and the customer as a dimension in everything. On top of the same layer, they plugged an automatic report per client, an internal panel with entire portfolio and an agent who responds on a day-to-day basis to campaign yielded more for each customer. Each new account became use the same model instead of becoming another report artisanal.

6. Implementation checklist

The end-to-end path, in the order that usually makes sense. Each step is based on the previous one, so it's worth following it from top to bottom.

Try it on Nekt
Open your workspace and start with just one client: connect Meta and Google, standardize spend and cost in an investment column and assemble the first version of the consolidated by customer, channel and day. With a client running, replicating to others is pointing to the same model to new origins.
Open on Nekt
↗ Guide: Modeling types (multi-source consolidation) ↗ Go deep into the docs: Modeling and Semantic Layer
Playbooks
See all playbooks by vertical