Acumatica · Gi

Acumatica GI Cross-Tenant Patterns

Acumatica GI Cross-Tenant Patterns sits at the intersection of three forces: what the user wants to see, what the database can deliver, and what the platform will let you wire up.

John Kihiu12 min read

"Can we get one GI that shows data across all our tenants" is a request I get from multi-entity clients running separate tenants for separate legal entities or regional subsidiaries, and the honest first answer is: not the way you are picturing it, because a GI runs inside one tenant's context, using that tenant's login session and its CompanyID/tenant scoping. There is no native "query across tenants" mode in the GI Designer.

Why tenant isolation is not just row-level security

Branches and companies within a single tenant share a database and are separated by CompanyID discrimination that the platform applies transparently — a GI author mostly does not think about it, and cross-branch/cross-company GIs (with appropriate access rights) are entirely normal. A tenant is a different, harder boundary: multi-tenant Acumatica deployments partition data more strictly, and depending on your deployment (single database with tenant discrimination versus fully separate databases per tenant on some private-cloud setups), a session authenticated against Tenant A simply has no query path to Tenant B's data at all. A GI cannot join across that boundary because BQL never gets a connection to the other tenant's data in the first place.

Confirm your deployment topology before promising anything

"Multi-tenant" in Acumatica has two very different meanings depending on setup: logical tenants within one Acumatica instance and database, versus entirely separate instances (sometimes separate installs) that happen to be branded consistently. The second case is not a GI problem at all — it is an integration problem, full stop. Confirm which one you are dealing with before scoping any of this as GI work.

What actually works: consolidate outside the GI layer

For logical same-instance tenants, the realistic patterns are:

ODATA PULL PER TENANT — CONCEPTUAL
for tenant in [KE-Co, UG-Co, TZ-Co]:
    GET https://instance.acumatica.com/odata/{tenant}/KG-SalesSummary
        Authorization: Basic {tenant-scoped credentials}
    append rows, tag with TenantCode = tenant
-- merged result lands in a staging table or Power BI dataset,
-- not in any single Acumatica GI

Setting expectations early

The number one way this goes wrong on a project is scoping "a cross-tenant dashboard" as if it were a GI task and then discovering three weeks in that it needs an integration component and an external database. I now always ask the tenant-topology question in the first conversation, before any GI design starts, specifically because the answer determines whether this is a half-day GI task or a multi-week integration project.

Wrapping up

A single GI cannot natively query across Acumatica tenants — that boundary is enforced below the BQL layer. Real cross-tenant reporting means exporting or pulling from each tenant separately and consolidating externally, or feeding a dedicated consolidation tenant via integration. Confirm your actual tenant topology before scoping this as GI work; it rarely is, on its own.

John Kihiu
Acumatica ERP Developer · Laravel Engineer

Independent software engineer in Nairobi specialising in Acumatica customisations, Laravel backends, and tax fiscalisation integrations across East and Southern Africa.