---
title: "Cross-system join: one answer from two systems - actionlake"
description: "A cross-system join matches records from separate systems that describe the same thing, such as one customer, and returns one answer. How it works for agents."
canonical: https://actionlake.com/glossary/cross-system-join
updated: 2026-10-22
---

Platform and integration

# Cross-system join

A cross-system join combines records from two or more separate systems that refer to the same real-world thing, such as one customer in an accounting ledger and a ticket desk, and returns a single combined answer.

Updated 22 October 2026 Also called Cross-app join, Join across SaaS systems 2 sources checked

**On this page**

Connect an agent to every system you run.

100,000 calls free a month. No card.

[Start free](https://actionlake.com/console?start=sandbox)

## What it is

In a database, a join combines rows from two tables. The PostgreSQL documentation describes join queries as ones that access multiple tables at once, pairing rows by an expression such as `city = name`. A cross-system join does the same thing across separate products, where there is no shared database and no shared key. The accounting system calls the customer "Acme Ltd" with one ID; the PSA calls them "ACME Limited" with another.

## Why it matters

The useful business questions span systems. _Which clients are overdue on an invoice and have an open urgent ticket?_ No single vendor can answer it. An agent without a join has to pull every row from both systems into its context and match them itself, which costs tokens, hits context limits and invites mistakes.

## How it works

1. **Fetch** each side with a bounded number of rows or pages.
2. **Resolve identity**: map each record to a shared entity, such as a company, using normalised names, domains or IDs.
3. **Match**, exactly or with a similarity threshold for near-misses.
4. **Filter and aggregate**: `where`, `group by`, sums and counts.
5. **Return the answer**, not the rows.

## Example

> ask: which clients are 30+ days overdue on an invoice and have an open urgent ticket?
>
> 4 clients · $18,340 overdue · 6 tickets · 1 call billed · 236 ms

This is an illustrative run: invoices fetched live from the accounting system, tickets served from cache, joined on customer.

## Common pitfalls

- **Name drift.** "Acme Ltd" and "ACME Limited" do not match exactly; fuzzy matching helps but can pair the wrong records if the threshold is loose.
- **Partial data.** A join over the first page of each list silently misses customers.
- **Rows in the context.** Passing thousands of records to the model to match is slow, expensive and error-prone.
- **Any-field joins.** Two systems only join well on an entity both actually describe.

## How actionlake handles it

`ask` takes fetch steps and one `join` step. The join names a shared entity, such as `crm.company`, `crm.contact`, `finance.invoice`, `service.ticket` or `work.project`, not a pair of raw fields, and supports `where`, `group_by` and `select` with sum, count, min, max and avg. `match: "fuzzy"` with a `threshold` (0.85 by default) catches near-misses. The join runs in memory on our side and is free; you pay only the [upstream calls](https://actionlake.com/glossary/upstream-call) of the fetches, and cached fetches cost nothing. The rows never enter the model; only the answer does. Set `max_rows` or `max_pages` on each fetch to bound what a question can spend. See the [platform page](https://actionlake.com/platform).

## Questions

**Can an AI agent join data from two SaaS apps?**

It can if something resolves which records refer to the same thing, such as one customer. Doing it inside the model works for small lists; a server-side join scales and keeps rows out of the context.

**What is fuzzy matching in a join?**

Matching records whose keys are similar rather than identical, such as two spellings of one company name, above a similarity threshold you choose.

**Does a cross-system join copy my data?**

Not in actionlake. Each side is fetched live or from a short-lived cache, joined in memory, and only the answer is returned.

## Related terms

- [Canonical verb A canonical verb is one standard name for the same operation across every system that supports it, written domain.object.operation, such as service.ticket.create, so an agent learns an action once and can run it against any connected system.](https://actionlake.com/glossary/canonical-verb)
- [Upstream call An upstream call is one HTTP request that actionlake sent to a vendor's API on your behalf and that returned a definitive, attributable response; it is the unit actionlake meters and bills.](https://actionlake.com/glossary/upstream-call)
- [Unified API vs MCP A unified API normalises many vendors in one category behind a single common schema for developers to code against, while MCP is a protocol that lets an AI model discover and call each system's own tools at run time; the two solve different problems and are often combined.](https://actionlake.com/glossary/unified-api-vs-mcp)
- [Agent plan An agent plan is a saved, versioned procedure of actions, cross-system joins, loops, waits and approval steps that an AI agent writes once and that then runs the same way on demand or on a schedule, without the model re-deciding every step.](https://actionlake.com/glossary/agent-plan)
- [Action lake An action lake is a governed layer between AI agents and business systems where every action an agent may take is defined, every action it takes is authorised and priced, and every action it took is recorded, independent of the model, framework or vendor.](https://actionlake.com/glossary/action-lake)

## Sources

1. [Joins Between Tables](https://www.postgresql.org/docs/current/tutorial-join.html) PostgreSQL documentation · checked 22 October 2026
2. [Tool search tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool) Anthropic · checked 22 October 2026

[All 30 glossary terms](https://actionlake.com/glossary)

## Connect an agent. Start free.

[Start free](https://actionlake.com/console?start=sandbox) [Read the quickstart](https://actionlake.com/docs/quickstart)

100,000 calls free every month. No card. Hard caps on every key.

---

Source: https://actionlake.com/glossary/cross-system-join
More: https://actionlake.com/llms.txt
