Extracting data lineage
from source code.
- Column-level lineage · every transformation, field by field
- Automated extraction · no analyst reading code line by line
- Marked, not guessed · where the code cannot resolve it
- Data lineage, not code lineage · the path the data took, not the structure of the code
Currently supportedPython
Architecture
Four design principles the architecture rests on, and what follows from each.
Never depend on how much a single agent can read at once.
- An agent per part of the code — a script, or a chunk of one
- Agents read rather than follow rules, so nothing is hard-coded to a coding style
- Robust where a parser is brittle — a new coding style is not a new project
- Refinement is mostly prompt engineering, so corrections land fast
Keep the agent context window small, and spend it deliberately.
- The context gathered, maintained and used by every agent working a repository
- Fetched on demand from outside the context window — what the agent asked for, nothing else
- Frugal context costs less, and keeps the agent’s attention where it matters
LLM-first, yet highly reproducible.
- Every inference comes from what the context layer returned, never from what the model already knows
- The context layer is written and read through MCP tools, so maintaining it is deterministic
- The same codebase produces the same lineage, run after run
Where the evidence stops, stop.
- A path that only resolves at run time is declared as such, not guessed
- Where cascading cannot attribute a column to one table, it is raised for a human or for metadata
- Whoever reviews the lineage is pointed at exactly those places, and only those
- An incomplete graph and a wrong graph cost about the same. Only one of them is honest
Roadmap
Where the system is today, and where it goes next.
- DoneExtraction from Python source code, with the unresolved marked.
- In progressStoring the lineage, and a UI to explore it rather than read it.
- PlannedJava, Scala and SAS — validated on smaller codebases so far.
- PlannedHarness engineering — smaller models, same output, lower cost.
- PlannedDeeper cascading — more resolved, ambiguity still raised.
- PlannedOptional table metadata — names and types, never rows.
- Usable nowPython, in a lineage format you define. We run it with you.
FAQs
What is data lineage?
The movement of data across systems — which source it came from, which code moved it, what happened on the way, where it landed. Coarsest: one system feeds another. Finest: a single field traced through every transformation between them.
Why is lineage harder to extract from programming languages?
The code never declares it. One transformation is spread across functions, files and imports. A destination may exist only at run time. The same logic can be written a dozen ways, so no fixed set of rules holds. It takes understanding what the code does, not matching its shape.How to extract column-level lineage from application code →
Why does this matter now?
Regulators require it. BCBS 239 obliges systemically important banks to trace risk data end to end, at column level. Ten years on, the Basel Committee assessed all 31 global systemically important banks and reported that further work was needed at every one of them to attain or sustain full compliance. The requirement is settled; the means of meeting it is not.Basel Committee progress report, November 2023 ↗
What does ADL do?
ADL is an automated system that extracts data lineage from high-level programming languages. It reads the code and returns the lineage in it, at the finest grain the code holds, with anything unresolvable marked for review rather than guessed. Minimal human intervention by design.
Which languages do you cover?
Python today. Java and Scala next, then analytical languages — starting with SAS, still heavily used in banking. SQL, XML and mainframe languages such as COBOL are out of scope.
Is ADL parser-first or LLM-first?
LLM-first. Parser-first is high maintenance and still cannot cover every style of code it meets.
Do you need access to our data?
No. The lineage lives in the code, not in the data — ADL extracts the footprint the code leaves behind, so your tables are never read. Supplying database metadata, which table holds which columns, sharpens column cascading; rows are never needed.
What happens to the code we share?
Never used for training or refinement — ADL trains nothing; it runs on closed-source models as they ship. Never stored: your code goes through the pipeline, the lineage comes out, the rest is deleted. You bring your own LLM API key, so model calls fall under your agreement with that provider, not ours. Happy to sign an NDA before you send anything.
Which models does it run on?
All the major providers — Anthropic, Google, OpenAI — through their own API or a cloud platform you already run on, such as Azure or Bedrock. It needs a frontier model rather than a small one: Opus-class today, and the equivalent top tier elsewhere. Where the model runs often matters more than which one it is — it can sit inside your own tenancy, under agreements you already hold.
What does it cost?
Two parts, kept separate. The model cost is yours — your own API key, paid to your provider directly, with nothing added by us. Then a licence for the software, kept deliberately low while we are early. What a run itself costs depends on the code, not the line count.
What exactly do you sell?
A software licence, not services. ADL is orchestration around frontier models — we train nothing of our own; the product is knowing how to drive them at this problem. You run it yourself; we are not a team you retain.
What is ready right now?
Lineage out of Python, delivered in a format you define. In stealth we run it with you: you bring the LLM API keys and name the output format, we point ADL at your codebase — or at an open-source repository, if you would rather not share code yet.
Get in touch
Worth a conversation if any of these is you.
- Data engineeringconfirming where a field came from still means someone reading the code, every time it changes.
- Governance and auditlineage has to stand up to an examiner, and stay current between reviews.
- Investorswe are building this, and welcome anyone who wants to look closely.