Skip to content
🚧 Early alpha — building the foundation. See the roadmap →

Extraction & ETL tooling — getting your data to the input floor

Updated

Crosswalker’s input floor is structured records — an iterable of {column: value} maps (CSV, a JSON array of records, or an XLSX sheet). Crosswalker is an ingestion target, not a document parser or scraper. Getting to the floor from a messy or unstructured source is your ETL/extraction tooling’s job.

This page recommends tools for that bridge step, by what you’re starting from. These are recommendations, not requirements — anything that emits structured records works, and most compliance frameworks already ship structured.

You have…Reach forGets you toNotes
Huge / messy CSV or XLSXChunkyCSVclean, streaming CSVAuthor’s own tool — streams multi-GB sources, cleans headers, handles merged-cell/banner-row mess. Composes with Crosswalker’s Mode 1 streaming.
Messy / deeply-nested JSONJSONautnormalized JSON recordsAuthor’s own tool — flatten/reshape nested JSON into record arrays addressable by dotted paths.
SQL-shaped / tabular transformsPolars · DuckDB · dbtCSV / JSONWhen you need joins, dedup, type-coercion, or window logic before the floor. DuckDB reads CSV/Parquet/JSON directly; dbt for warehouse-modeled data.
PDFs / scanned / HTML docsDocling · unstructured.io · LLM extractiontabular recordsLayout-aware document → tables/JSON. LLM extraction (structured-output prompting) is the pragmatic path for “pull the control table out of this vendor PDF.”
Spreadsheets you maintainExcel / Google Sheets export to CSVCSVThe zero-tooling path. Keep curating in the sheet; export when you import.
Web pages / APIsa small script (Python requests + pandas, a scraper)CSV / JSONBespoke per source; the output just has to be a record array.
XML / RDF / OWL ontologiesxmltodict · RDFLib · a SPARQL CONSTRUCT → CSVJSON / CSV recordsStructured, but not v0.1-native — convert first. XML is already a tree; RDF/OWL flatten to triples or JSON-LD records. Native parsing deferred to v0.2+.
Already structured (most frameworks)nothing—XLSX/CSV/JSON/OLIR clears the floor. Feed it straight in.

Once your data is at the floor, Crosswalker takes over via one of two modes:

  • Mode 1 — bundled projector: hand the structured rows + a recipe to Crosswalker; it streams each record through render() and writes Tier 1. Composes naturally with ChunkyCSV/JSONaut (both stream).
  • Mode 2 — direct emission: your tool (or an AI agent) writes Tier 1 Markdown directly, bypassing the engine.