Phalanx
Metadata-driven ETL · SYSPRO · dbt

Your SYSPRO data,
warehouse-ready in a weekend.

Phalanx auto-discovers your SYSPRO schema via its own Dds metadata, loads it into Postgres with watermarked incremental sync, and generates dbt staging models — all from a YAML config.

See it work
  1. SYSPRO
    MSSQL source
  2. Phalanx
    DdsTables
  3. Postgres
    raw schemas
  4. dbt
    stg → marts
  5. BI
    dim_ / fct_
The problem

SYSPRO is a black box for analytics

Getting clean, current data out of SYSPRO is where most BI projects burn their first quarter. Three reasons it stays painful.

  • 4,000+tables
    Most of them undocumented
    A typical SYSPRO install holds thousands of relational tables — and SYSPRO's own catalogue is the only thing that knows which ones matter.
  • Everyupgrade
    Hand-coded ETL breaks silently
    Column renames, type widening, and new foreign keys land with each SYSPRO release. Static pipelines mask the damage until a month-end report disagrees with itself.
  • 8-12weeks
    To a first usable dashboard
    Off-the-shelf CDC tools need hand-mapped schemas before they extract anything. By the time the data is in Postgres, the business has lost the quarter to spreadsheets.
The insight

SYSPRO already knows its own shape

Every SYSPRO install ships with a Dds* metadata catalogue describing every table, column, and foreign key. Phalanx reads it on first run — no hand-mapped schemas, no guesswork.

DdsTables
DdsColumns
DdsForeignKeys
DdsColumnValues
0

tables auto-discovered in a typical Phalanx first run

  • Columns mapped0+
  • Foreign keys traced0+
  • Manual schema work0

Indicative volumes from a mid-size SYSPRO 8 install.

Coverage

Every SYSPRO module, mapped

Ten core SYSPRO modules ship with extractors and dbt staging out of the box. Each tile loads as-is — no per-table configuration.

  • Inv142

    Inventory

    Stock master, transactions, warehouses, movements.

    rows12.8M
  • Ar87

    Accounts Receivable

    Customers, invoices, payments, aged balances.

    rows4.2M
  • Sor96

    Sales Orders

    Order entry, allocations, releases, dispatch.

    rows8.6M
  • Por78

    Purchase Orders

    Supplier orders, receipts, returns.

    rows3.1M
  • Gl64

    General Ledger

    Accounts, journals, balances, periods.

    rows21.4M
  • Ap71

    Accounts Payable

    Suppliers, bills, payments, aged balances.

    rows2.8M
  • Sal32

    Salesperson

    Reps, territories, commissions.

    rows0.9M
  • Wip58

    Work in Progress

    Job costing, work orders, labour, materials.

    rows5.7M
  • Bom44

    Bill of Materials

    Routings, structures, where-used.

    rows1.6M
  • Grn28

    Goods Received Notes

    Receipts vs purchase orders, variances.

    rows0.8M

Indicative volumes from a mid-size SYSPRO 8 install. Tile numbers are SYSPRO table counts; rows are post-load Postgres row counts.

From YAML to mart

One config. Generated dbt. Materialised marts.

Phalanx reads your sources, generates typed dbt staging from SYSPRO's metadata, and lets dbt join the rest. No hand-mapped columns. No drift.

1

Configure

Declare what to extract in YAML — one block per source table.

config/sources.yaml
2

Generate

`phalanx generate --module INV` emits typed dbt staging models with column-level type coercion.

dbt/models/staging/stg_inv_master.sql
3

Materialize

`dbt run` joins staging into dimensional marts. Watermarks keep subsequent runs incremental.

marts.dim_product
materializedtable
columns14
rows0
last run28.4 s
next run: only 412 rows (0.3%)

Snippets are illustrative. Generated SQL follows the column casing and type rules in src/phalanx/metadata.

Pairs with Pharos

Ask your warehouse in English

Pharos sits on top of the warehouse Phalanx builds. Plain-English questions become parameterised SQL against your dim_* / fct_* marts — no dashboards to author, no BI cube to maintain.

  • Schema-aware: Pharos reads the same dbt manifest dbt does.
  • Read-only by default. Pharos never writes back to source SYSPRO.
  • Every answer ships with the SQL it ran — auditable, repeatable.
What's our top-selling SKU this quarter?
You
Querying fct_sales joined with dim_product, filtered to the current quarter.
SKUDescriptionRevenue
ROL-25-150Industrial roller 150mmR 4.2M
ROL-30-200Industrial roller 200mmR 3.8M
BRG-44ASealed bearing 44mmR 2.1M
Proof, not promises

Numbers from a real install

Phalanx ships in production today. The figures below are from a live SYSPRO 8 site, not a sandbox.

  • Tru-Trac

    Manufacturing · Centurion, ZA

    Live since 2025. SYSPRO 8 install with 4,200+ tables and 89M+ rows resynced to Postgres every night.

  • 0.3% rows / cycle

    Incremental by default

    Watermark-based sync touches only the delta. A full SYSPRO 8 install resyncs overnight on commodity hardware.

  • 48hours

    From init to first mart

    `phalanx init` to first dim_/fct_ mart on a representative engagement. Most of that time is talking to stakeholders, not waiting on ETL.

New deployments will appear here as they come online. Want to be next?

Next step

Ready to see your SYSPRO data in dbt?

30-minute discovery call. We'll look at your install, map a path, and give you a no-bullshit timeline. Nothing to install beforehand.

[email protected]
Part of the Ph-Ecosystem.See all products