# Company data ready for AI agents

An AI agent answers from what it can reach. In most companies the answer to a
real question — what did we sell this customer, what is still open, which
contract says so — is spread across a CRM, an ERP, a shared drive, a few
mailboxes and a spreadsheet one person keeps. We bring that data into one place
an agent can read, give every fact one meaning, decide who may see what, and keep
it that way on every load. It is the work that comes before the agent, and it
decides how good the agent can be.

## Gathered: one place an agent can reach

We build the [pipelines](/glossary/#pipeline) that bring your systems together:
[ETL](/glossary/#etl) jobs that run on a schedule, load only what changed and
report what they skipped, into a [database](/glossary/#database) whose
[schema](/glossary/#schema) names your business in your words — customers,
orders, vessels, contracts, cases. Old PDFs, scans and mail archives are turned
into searchable text with their source kept beside them, so they can be found
rather than only stored. The agent reaches all of it through one described door:
an MCP server or an [API](/glossary/#api), never a copy of the database on
somebody's laptop.

## Cleaned: one customer, not five

The same customer is usually written five ways in five systems, and an agent that
reads two versions of one fact answers with whichever it read last. We decide
with you which system is the source of truth for each fact, merge duplicates by
rules you can read, and keep the merge running, so a new duplicate is caught on
the next load rather than at the next audit. Types and constraints in the
database refuse a bad row instead of storing it, every column says what it
means, and every [migration](/glossary/#migration) is versioned and checked, so
the schema an agent reads is the schema that is deployed.

## Permissioned: each agent sees what its user may

An agent that can read everything is a leak with a friendly voice. The rules
belong in the data, not in the prompt: roles in the database
([RBAC](/glossary/#rbac)), read-only by default, row-level rules wherever one
customer must never see another's, and personal data kept out of reach unless
the task needs it — which is also what GDPR asks. The agent acts with its user's
[privileges](/glossary/#privilege), never an administrator's, and every read is
[logged](/glossary/#logging) with the person it was made for. How we lock the
agents themselves is [its own page](/ai-security/).

## Every answer traced to its source

An answer drawn from company data is worth what its source is worth, so the
source travels with it. Every row keeps where it came from and when: the system,
the load, the file and the page. An agent can cite the record behind a figure,
and a person can open it. A load that skipped rows says how many and why rather
than reporting success, and a figure that turns out wrong leads to the load that
brought it in, not to a week of guessing. It is the rule our own reporting is
built on: a number is never printed that the run did not measure.

## The work behind it

Every claim on this page is a method we have run, and each one has its record.
We [made a geographical data pipeline 50 times faster](/portfolio/made-a-geographical-data-pipeline-50x-faster/)
by fixing its SQL and its data model, and
[designed and ran six ETL and ELT pipelines](/portfolio/designed-and-ran-6-etl-elt-pipelines/)
across BigQuery, MS SQL and [PostgreSQL](/glossary/#postgresql). We
[modelled a whole trade in 348 tables across 34 schemas](/portfolio/modeled-348-tables-across-34-postgres-schemas/)
and kept that schema honest
[across 1,022 migrations behind a drift gate](/portfolio/1022-migrations-behind-a-schema-drift-gate/).
We [generated 495 pages from a read-only SQLite export](/portfolio/generated-495-pages-from-a-sqlite-export/),
and [replaced 963 structured-data blocks with one linked graph](/portfolio/replaced-963-metadata-blocks-with-one-graph/),
which is what an agent reads first on this site.

## How an engagement runs

It starts with a map, made read-only: which systems hold what, who owns each,
and which questions an agent should be able to answer. Then we take the one
question that matters most and build its path end to end — the sources, the
cleaning, the permissions and the door — with checks that stop a load when the
data drifts. Then the next question. Everything lives in your infrastructure and
your repository, through your review, and the agents that read it can be
[built for your trade](/ai-agents/) or be the ones you already use. It is bought
like the rest of our work, on the terms in [what it costs](/what-it-costs/).

If the answers your people need are in more places than anyone can name,
[tell us where your data lives](/contact/) *(we answer the same day)*.

<https://engineer.company/ai-data/>
