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.
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
- Fetch each side with a bounded number of rows or pages.
- Resolve identity: map each record to a shared entity, such as a company, using normalised names, domains or IDs.
- Match, exactly or with a similarity threshold for near-misses.
- Filter and aggregate:
where,group by, sums and counts. - 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 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.
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 verbA 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.
- Upstream callAn 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.
- Unified API vs MCPA 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.
- Agent planAn 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.
- Action lakeAn 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.
Sources
Connect an agent. Start free.
100,000 calls free every month. No card. Hard caps on every key.