How does an agency run AI agents across multiple clients?

Isolation enforced at the data layer instead of in the prompt: an agent's token reads one client's layer and zero rows cross between clients.

An agency runs AI agents across many clients by giving each client an isolated data layer with permissions scoped per client, so one client's data never touches another's, and by turning each learned pattern into a written rule it can reuse across clients without moving anyone's data. Isolation has to be a control at the data layer, not a sentence in a prompt, and the agency's real advantage, the pattern it learns on one account, stops living in an employee's head and becomes a versioned asset. This guide covers the isolation unit, how to set up multi-tenancy, and where the agents run per client.

How does an agency run AI agents across multiple clients?

By giving each client an isolated data layer, scoping permissions per client, and having the agents operate one client at a time, so client A's data never reaches an agent working on client B. The agency does not build one omniscient agent that knows fourteen APIs across every account; it builds agents that read a single governed layer and act in the source tools, with access that is granted, not assumed. Two things make this work and neither is a prompt instruction: isolation enforced at the data layer, and the pattern an agency learns on one client written down as a rule it can reuse on others without moving anyone's data.

In the catalog, a layer is the top-level storage and permission boundary. An agent's access token reads the layers it is granted and cannot touch a layer it is not. Isolation becomes a control, not a sentence in a prompt.

The usual agency setup has data living in a dozen places: one ad account here, a CRM there, press monitoring somewhere else, and anyone who wants to cross two of them opens four tabs and a spreadsheet. A spreadsheet does not isolate anything, does not run overnight, and nobody consults another client's spreadsheet to find a pattern. Running agents on top of that safely is exactly what a per-client data layer plus per-client permissions solves.

Why is client data isolation non-negotiable for an agency?

Because isolation is what the client is actually paying for, and a leak between clients is not a bug, it is a breach of contract. The privacy of a client's data is the product. So the rule that client A's data never touches client B cannot depend on an agent behaving well; it has to be enforced where the agent cannot override it.

This is the difference between a boundary and a request. If the only thing stopping an agent from reading another client's data is a line in its prompt telling it not to, that is a polite request, and a model under pressure will eventually cross it, confidently. A permission set at the data layer is a boundary: the agent's token simply does not return another client's rows, no matter what the prompt says. The failure mode of relying on the prompt, where an agent mixes two clients and states the blended number as fact, is the same class of problem as why AI agents give different answers on the same data.

How do you set up multi-tenancy?

There are two documented patterns, and they trade maintenance for strength. Both start from the same non-negotiable: the client is a first-class dimension, present from the Raw layer through to the Service layer, never something you deduce afterward from a campaign name.

  • Logical isolation (lighter to maintain). One model, with a client column carried through every layer, Raw to Service. Isolation happens at consumption: every query, report and agent read filters by client. The semantic layer states the rule explicitly, that every query is always per client, so the agent does not blend accounts. This is the recommended default because a model change is made once, not replicated per client.
  • Physical isolation (stronger boundary). A separate layer per client. Because a layer is the top-level permission boundary in the catalog, access control becomes hard: an agent granted client A's layer cannot read client B's at all. The cost is maintenance, since each model change is replicated per client.

Around either pattern, three things are configured per client. Sources are connected per client, and a setup link can invite the client to fill in their own source credentials, so the agency never handles them. Permissions are assigned with roles and groups, at the level of layer, folder, table and volume, so access is data-level rather than honor-system. And the agent reaches the data over the MCP server with an access token whose scope is exactly the platform permissions it was granted, which is what makes one client's agent physically unable to read another's.

WhatPer client, isolatedShared across clients
Data and tablesEach client's data, filtered by client or in its own layerNothing
Sources and permissionsConnectors and access scoped to that clientNothing
Agent access tokenReads only the granted layersNothing
Learned rulesApplied to each client's own dataThe pattern, as a written rule, not the data

How does an agency turn cross-client learning into a reusable asset?

By writing the pattern down as a rule instead of leaving it in someone's head. An agency's real advantage was never the labor; it is breadth, having seen what works across many accounts a single in-house team never touches. The problem is that this breadth usually lives in the memory of analysts, gets re-discovered every time a new account runs the same test, and walks out the door when a person leaves. The agency keeps the logo and the contract and loses the expertise, which was never written anywhere.

A written rule changes that. When an agent learns something on one account, the pattern becomes a context document in the semantic layer: plain-language business rules, annotated to the concrete tables and columns they refer to, stored and versioned, read by the agent before it acts. A definition like what counts as an active customer, or the observation that one angle outperforms another for a type of account, persists because schemas change but definitions do not. The important part for an agency is that the rule is portable while the data is not: the same written pattern can inform the agent working on another client, applied to that client's own isolated layer, without a single row crossing between accounts. What used to depend on an analyst remembering to tell the team becomes an asset the agency owns. Attaching that meaning to the data itself is context engineering for AI agents, and the governed definitions it produces are a semantic layer for AI agents.

Where do the agents run, per client?

Each agent queries one client's layer and acts in that client's tools. The split is the same one that lets a small team run many agents without chaos: reading happens in one place, the governed layer, and doing happens in the source tool, which stays the source of truth for what it owns. The CRM remains the source of truth for the lead, the ad platform for the campaign; the agent calls that tool's API directly when it is time to execute, and queries the layer when it needs to know something.

For an agency this keeps each agent simple and safe. An agent knows one read source, its client's layer, and a few execution tools, rather than becoming an omniscient system that must understand every API across every account. Token cost stays down, because a deterministic query against the layer is far cheaper than paging a tool's API repeatedly, and scope stays tight, because the agent's access token is bound to one client. It is the same architecture as an AI-native GTM stack, now drawn per tenant, and running a paid-media agent this way, querying performance in the layer and acting in the ad platforms, is covered in how to run paid ads with an AI agent.

How does Nekt do this?

Nekt is a data platform that gives AI agents governed context, and multi-tenancy is a direct example of the three parts it covers, applied per client.

  • Connect. Each client's sources land through ready-made connectors, and a setup link can invite the client to enter their own credentials, so a new account is onboarded in days rather than built from scratch.
  • Govern. Data is organized into layers, which are the top-level storage and permission boundary, with access control set per layer, folder, table and volume, and roles and groups to assign it. The client is modeled as a first-class dimension, and the semantic layer encodes the rule that every query is per client, so the agent reads one tenant and never blends two.
  • Serve. Agents read over an MCP server whose access token carries exactly the permissions granted, so an agent scoped to one client cannot reach another's layer. Reading happens in the layer; acting happens in the client's own tools.

The result is that the agency's breadth stops being fragile. It learns from many clients at once, keeps each one's data isolated by a real control, and holds the learning as a written asset instead of in the memory of whoever might leave. See how Nekt works, or create a free account and connect your first source.

Frequently asked questions

Can one agency setup serve many clients without mixing data?

Yes. Either keep one model with the client as a first-class column and filter every query by client, or give each client its own layer, which is the top-level permission boundary. In both cases the agent's access is scoped so it reads one client at a time, and the semantic layer states the rule that every query is per client, so the model does not blend accounts.

How do you stop an agent from reading another client's data?

With a permission at the data layer, not a line in the prompt. Access control is set per layer, folder, table and volume, and the agent reaches the data over an MCP server with a token scoped to exactly those permissions. An agent granted one client's layer cannot return another client's rows, regardless of what it is asked, because the boundary is enforced below the model.

Can you reuse a playbook across clients safely?

Yes, because what you reuse is the rule, not the data. A pattern learned on one account is written as a context document in the semantic layer, versioned and annotated to the data it describes. That rule can inform the agent working on another client, applied to that client's own isolated layer, without any row crossing between accounts. The learning is shared; the data stays separate.

  • An agency runs AI agents across clients by isolating each client's data and scoping permissions per client, so one client's data never reaches an agent working on another.
  • Isolation has to be a control at the data layer, not a sentence in a prompt; a layer is the top-level permission boundary, and an agent's token reads only the layers it is granted.
  • Two patterns: keep the client as a first-class column and filter every query by client (lighter), or give each client its own layer (stronger boundary, more maintenance); either way, connectors and access are per client.
  • The agency's breadth becomes a written asset: a pattern learned on one account is saved as a versioned context document and reused on others, applied to each client's own layer, without moving anyone's data.
  • Per client, agents query the client's layer and act in the client's tools, which keeps each agent simple, cheap in tokens, and tightly scoped.

More insights