Coming soon

DataCrafter is in active development and not yet generally available.

Register your interest →
How it works Modules AI Where you work Control Security Testing About Demo Get in touch
Data preparation and reporting

Build the numbers.
Show the workings.

DataCrafter is a self-hosted workbench for the data behind your reports. Load it, model it, classify it, aggregate it and publish it as one repeatable run you can explain afterwards.

// Java server, browser + desktop clients, Excel add-in
// runs on your PostgreSQL, Oracle or embedded H2
// your infrastructure, your data, no hosted tenancy

workflow / month-end close running
01 Load ledger extractDataLoader · ledger_mar.xlsx DONE
02 Join positions to referenceDataModel · 4 sources DONE
03 Classify by product treeClassifier · deepest match wins DONE
04 Aggregate by desk and productAggregation · SUM, AVG, COUNT RUNNING
05 Produce the returnFreeStyleReport · XLSX out PENDING
as-of 2026-03-31 · same tuple re-runs overwrite · every step logged
Self-hosted
Runs inside your network
PostgreSQL · Oracle · H2
Your database, your rules
Browser, desktop, Excel
One server behind all three
Early access
Talk to us about a trial
Where it fits

A general-purpose MI platform, and a companion to regulatory reporting.

Management information (MI) is the reporting a business runs on itself: the numbers that go to a board pack, a desk head, a client or a committee. That is what DataCrafter is built to produce, whatever your subject matter. It has no opinion about your industry and no built-in chart of accounts.

Where you also file regulatory returns from a reporting tool, DataCrafter can sit alongside them rather than replacing them. It prepares, classifies and aggregates the data a return is built from, and gives you the same numbers for internal use. Your filing tool still does the filing.

We are deliberate about that boundary. A full regulatory reporting system needs deeper audit and control features than DataCrafter has today, and we are building towards them. Until they land, calling it a reporting companion is the accurate description.

How it works

Every report is the end of a chain you built on purpose.

Raw data comes in as it is. You shape it through steps that are objects in their own right, each one saved, versioned and re-runnable. Nothing is a script someone wrote once and left behind.

Modules

Each step is an object you can open, edit and re-run.

You compose the platform from the modules you actually need. They all read the same data model, so adding the next one never means rebuilding the last.

DB Space

Where DataCrafter connects

A named connection to one of your databases - PostgreSQL, Oracle or embedded H2. Credentials are held separately and encrypted at rest.

Data Source

Where the rows live

A table in one of your databases. DataCrafter can manage it, register one that already exists, or evaluate a live query on read.

Data Loader

Getting data in

Fills a Data Source from an Excel or CSV file, or from another table. Re-run it for a new date and you get a new instance, not a mess.

Data Model

How sources fit together

A join specification across one or more Data Sources, authored once and read by everything downstream.

Model Extender

Extra columns, no forking

Overlays additional nodes and fields onto a Data Model without touching it, so one shared model can serve several jobs.

Data Generator

Realistic test data

Manufactures rows against a model to a shape you specify - volumes, distributions, null rates. Build and test a chain before the real feed arrives.

Classifier

Your taxonomy, applied

Sorts every row through a tree of conditions you author. Deepest match wins. The output is tags beside your data, never a copy of it.

Aggregation

Grouping and measures

Group by any dimension with SUM, COUNT, MIN, MAX, AVG, variance, weighted average and distinct counts. Sub-totals roll up correctly.

Pipeline

A chain that checks itself

An ordered run of classifiers and aggregations. DataCrafter reads how the data really flows and refuses an order that contradicts it.

Tabular Report

Flat extracts

A straight tabular report over a data model, written out to CSV or Excel on a schedule or on demand.

Free Style Report

Real spreadsheet output

A grid of cells whose formulas pull governed values from your models. Export as static values or as live formulas that recalculate in Excel.

Workflow

The orchestrator

A canvas of nodes wired together. Runs loaders, pipelines and reports in order, in parallel where it can, and stops where it should.

On the way

Designed and specified, not yet shipped. They hold their place in the module tree so you can see where the product is going.

Data Forms Coming soon

Capture and correct

Hand-entered data and adjustments through a form you author, written back down the same governed path as everything else.

Detectors Coming soon

Checks and findings

Standing checks over a model that raise findings rather than fail a run - data quality, outliers and rule breaches in one place.

Delegations Coming soon

The escape hatch to code

Hands a step to an external runtime - Python first, any language by design - and takes the result back as an ordinary generated model. For the work SQL genuinely cannot express. Runs out of process, with no access to your credentials.

AI assistance

An assistant that knows the product, and drafts with you.

Most of the cost of a tool like this is the learning curve, and most of the rest is typing. DataCrafter's assistant is aimed squarely at both. It is a usage copilot: it knows DataCrafter, not your industry, and it never pretends otherwise.

Explain the options

Ask what a thing does, where you are.

The assistant knows which object your active editor holds, so questions are answered in context rather than in general. It is grounded in DataCrafter's own documentation: the object types, the editor fields, the rule and formula grammars, and what actually happens when you run something.

? what does "deepest match wins" mean here
? why did this run finish with a warning
? what is the difference between EQUAL and LATEST
Co-author the modules

Describe it, then review what it drafted.

On a blank Data Source, Data Model or Data Generator editor, describe what you want and the assistant drafts the whole object. On a populated one, it edits what is already there. The result opens unsaved in the editor for you to check and change, and saves through the same chokepoint as anything you typed by hand.

> add a customers child on the sales datamodel,
  match the primary keys, left outer join,
  filter to UK customers
Draft the rules

Suggestions you can accept or throw away.

The Data Generator editor proposes field-value rules from the input model's schema, validated by the generation engine itself before they reach the grid. Failed runs and SQL Console statements get an Explain button that stages an editable question rather than firing one blindly.

Where the line is

It authors content, never structure it cannot know.

The assistant will not guess keys, join columns or indexes - the choices where a confident wrong answer is worse than no answer. Everything it drafts is validated server-side (types, naming rules, reference resolution) before you see it, and every answer surface takes a follow-up question.

Off until you turn it on, and on your own key. No AI affordance appears anywhere in DataCrafter until an administrator configures a provider and grants the permission. Bring any Chat-Completions-compatible API, Anthropic's native API, or a local runtime such as Ollama - keys are stored encrypted. It sends your messages, documentation excerpts and object metadata only. It does not send your data rows, and it does not send stored secrets.
Where you work

Three ways in. One server behind them.

Analysts, reviewers and spreadsheet people do not want the same tool. They should still be looking at the same numbers.

Desktop client

A native application for the people who build and run the work. Full editors, live spreadsheet authoring and a bundled mini-Excel for offline sheets.

authoringrunningadmin

Browser client

Zero-install access for reviewers and occasional users. Same server, same objects, same results, nothing to deploy to a laptop.

no installreviewshared

Excel add-in

Pull governed values straight into a worksheet with a retrieval formula, then build the analysis and charts you want on top. The workbook stays a workbook, the numbers stay under control.

Office.jslive valuescharts
Control

Answering for a number starts long before anyone asks.

If a figure you publish can be questioned by a regulator, a client or an auditor, the controls have to be part of how the work is built, not a report you write afterwards.

  • Versioned in Sets

    Every object you author belongs to a Set. Copy the whole Set to branch a body of work, with or without its data, and point the copy at a different database.

  • Runs are repeatable

    A run is tied to an as-of date and its instance keys. Re-run the same tuple and it overwrites cleanly, so last month stays last month.

  • Dependencies are tracked

    Objects know what they depend on. Change something upstream and the platform marks what is now in doubt instead of letting it drift quietly.

  • Access is granular

    Users, groups and per-Set permissions, with database credentials encrypted at rest and an audit log of what was changed and by whom.

  • Move work between environments

    Export an object with everything it references, then import it into test or production with conflicts shown before anything is written.

  • Testable like software

    Pin the behaviour you rely on and find out when it changes. Tests are workflows, run in the editor or as a build gate - the testing framework below.

Security

Sign-in you can tighten, on a server you control.

DataCrafter is self-hosted, so the boundary around your data is one you draw. These are the controls you get inside it, and what each one is actually worth.

Two-factor sign-in

Codes from any authenticator app. A user can switch it on for themselves, and an administrator can require it for a whole group. Enrolling issues eight one-time recovery codes for the day a phone goes missing, and repeated wrong codes lock the factor for a few minutes rather than letting a guess run.

TOTPrecovery codesper-group policy

Passkeys

Sign in with Windows Hello, Touch ID or a security key. A passkey is tied to your server's own hostname, so a lookalike site cannot use it - that is the whole point of them. It satisfies the two-factor requirement by itself, because unlocking it already proved both possession and identity. In the browser client today.

WebAuthnFIDO2phishing-resistant

Keys for machines, not passwords

The Excel add-in and any other caller sign in with a revocable key, so nobody types a password into a spreadsheet. The key is shown once and only its hash is kept. Each one carries its owner's permissions and nothing more: it cannot enrol a second factor, reset one, or mint another key.

revocablehashedscoped to the owner

HTTPS with your certificate

Serve the whole thing over TLS, either directly or behind a proxy that terminates it. That is a configuration setting, not a rebuild. Passkeys and the Excel add-in both require it - the browser's rule and Office's rule respectively, not ours.

TLSyour certificate

Secrets are not kept in the clear

Passwords and recovery codes are hashed with PBKDF2-HMAC-SHA256, so nothing can read them back. Database credentials and AI provider keys are encrypted where they are stored, and the server strips provider keys out of anything it hands to a client.

PBKDF2encrypted at rest

The security actions are logged

Sign-ins and refusals, permission changes, second factors enrolled and reset, keys minted and revoked - each one a named event that says who did it. Resetting somebody else's second factor is the classic way around two-factor, so it is permission-gated and recorded like one.

named eventswho and when
Nothing calls home. The licence is a signed file the server checks by itself, so there is no licence server to reach and no usage reported anywhere. Two-factor is off until somebody turns it on, and the honest limit is worth stating: second factors defend against a stolen or guessed password, which is the common case. They are not a defence against someone who already holds your database and your server binary, because at that point they hold the credential store outright.
Testing

Your reporting chain can have a regression suite.

Reporting logic is software, and it breaks the way software breaks: quietly, upstream, months after anyone touched it. The Application Test Framework lets you pin the behaviour you rely on and find out the moment it changes, instead of finding out from the number.

The idea

A test is a workflow, not a script.

You build a test out of the same objects you build everything else from, with two extra kinds of node: build nodes that construct what the test needs, and assert nodes that check the result. The engine that runs your month-end close is the engine that runs the suite, so the framework cannot drift away from the thing it is testing.

SetupTestSet → BuildDataSource → LoadFixtureRows
→ BuildAggregation → AssertRowCount → TeardownTestSet
What you can assert

Row counts, result sets, whole reports.

Compare a count or a full result set against a stored expected one, check that an object exists with the storage type you expect, count the instances a run produced, or diff a generated report file against the file it should have produced. A failed assertion does not stop the run, so one pass tells you everything that is wrong rather than the first thing.

AssertRowCount · AssertSqlEqual
AssertObjectExists · AssertInstanceCount
AssertReportOutput · AssertConsistency
The built-in suite

Twenty-one invariants you did not have to write.

One assertion node runs a library of checks against the objects and their runs: that every layout reference still resolves, that instance key tuples are unique, that dates are stored in the canonical format, that a single-instance source really has no as-of date. Point it at one test Set or at everything you have.

INSTANCE_KEY_TUPLE_UNIQUE  PASS
LAYOUT_REF_RESOLVES      PASS
DATES_IN_ODBC_FORMAT     PASS
Where it runs

In the editor, from a script, or as a build gate.

Run it from the Workflow Runner and watch the nodes colour in, with an Assertions tab listing every check beside its expected and actual values. Drive it over REST from whatever you already script with. Or run it headless, where the exit code decides whether the build passes.

java -jar datacrafter.jar \
  --datacrafter.ci.run-workflow=MonthEndClose
echo $?  # 0 pass · 1 fail · 2 not found
Tests run against the real thing. There is no mock database and no separate test runner. A scenario builds its objects in its own Set, against your actual PostgreSQL, Oracle or H2, and drops them again afterwards - so the same suite tells you whether the thing works on the database you are going to run it on. Nothing here needs Python: the worked examples that ship with the server are written in it, but the framework is the workflow engine you already have.
Who it is for

Teams who have to stand behind what they publish.

Reporting teams

Turn a pile of source extracts into the same set of outputs every cycle, without rebuilding the plumbing each month.

month-endreturnsextracts

Risk and finance

Classify and aggregate positions against your own hierarchies, then produce the same numbers to management and to the regulator.

taxonomiesmeasuresreconciliation

Data teams under review

Replace the spreadsheet-and-script layer that nobody wants to inherit with objects that are saved, permissioned and re-runnable.

governancehandoveraudit
Who we are

An Australian software company building the tool we wanted.

DataCrafter is built by DataCrafter Software Labs Pty. Ltd., an Australian owned software company.

Our founders and directors have multiple decades of experience in software development and in regulatory reporting tools. Long enough to have worked around the same gaps often enough to want to close them properly.

That background is why the product is shaped the way it is. It is self-hosted rather than a tenancy, because the people we build for cannot hand their data to someone else. Every step is an object you can open, re-run and hand to a colleague, rather than a script nobody wants to inherit. And we would rather tell you plainly what it does not do yet than describe a product that does not exist.

Get in touch

Tell us what you have to produce.

If you are wrangling source extracts into reports that somebody checks, we would like to hear what that looks like today. DataCrafter is in active development and we work closely with the people trying it.

hello@datacrafter.net
DataCrafter · Australia

See it running

A public instance you can sign in to and use in the browser. It is being sandboxed before it opens - worth a look at what it will show.

https://demo.datacrafter.net
What the demo shows

A shared sandbox. Ask us if you would like early access.