Cost-code crosswalk and master data that every report agrees on
Projects, cost codes, and vendors mapped once in versioned reference data, so every report uses the same answer and gaps go back to the owner.
The problem
The same job has a different name in Procore, accounting, and the CRM, and cost codes changed partway through the year. Mappings live in someone's spreadsheet or inside report formulas, so two reports can disagree and nobody can say which mapping is right.
What we build
We build the crosswalk as reference data under version control: project-to-job-to-deal links, an old-to-new cost-code map, and vendor matches, each with an owner. It is applied once in the lakehouse transformation, so every report sees one structure, and anything without a clear match goes back to the controller as an open question.
How it works
- 1
Inventory identifiers and owners
List each entity, the field that identifies it in each system, and the person who fixes it when it fails to match.
- 2
Apply match rules in order of trust
Manual mapping first, exact system IDs or project numbers second, and a name match only when there is a single candidate.
- 3
Map cost codes as data
Old codes translate to the new standard during transformation; codes with no equivalent stay in totals under an unmapped bucket and are flagged.
- 4
Measure coverage every run
Report how many projects are fully mapped and how much budget maps cleanly, so a drop shows up as a number rather than a surprise.
- Procore
- Sage 100 Contractor
- QuickBooks Online
- HubSpot
- Microsoft Fabric
- GitHub
The value it creates
Standardization
One versioned map is applied everywhere, and a change is reviewed and re-run like any other code change.
Better decisions
Budgets and actuals across a cost-code change roll into one complete column instead of two half-empty ones.
Early warning
Mapping coverage is reported on every run, so a new unmapped job or code appears before month end.
Cost saved
Fewer wrong links moving cost onto the wrong job; tracked by the count of exceptions resolved at the source over time.
Proof
- BuildConstruction reporting: Procore, Sage 100 Contractor, Outbuild, and SharePoint (Production)
- BuildConnected financial reporting: Procore, QuickBooks Online, and HubSpot (Production)
- ArticleSource mapping example: Procore, accounting, and CRM
- ArticleHow the Procore, Sage, and Outbuild platform was built in Microsoft Fabric
Related use cases
- We design and build this
CRM to Procore integration: one job record from pursuit to closeout
Stamp the CRM deal ID onto the Procore project, keep company and contact records aligned, and report pipeline next to backlog without retyping anything.
- We design and build this
ERP migration data mapping without losing history
A versioned map from old ERP to new, reconciled before cutover, so job history, cost codes, and vendors carry over and reports read across both.
- Built and shown
Get Procore data into Power BI, reliably
A repeatable pipeline from the Procore API into a Power BI model, with validation, history and refresh you can rely on.
- Built and shown
Procore and QuickBooks Online integration for WIP and cash reporting
Procore forecasts and QuickBooks actuals joined through a trust-ordered crosswalk, so the WIP schedule builds itself and unmapped jobs stay visible.
- Built and shown
Procore and Sage integration for reporting you can reconcile
Procore projects matched to Sage jobs in a governed lakehouse, so cost, billing, and AP line up in one report and every mismatch lands on a worklist.
- Built and shown
Schedule data in your reporting: P6 and Outbuild next to cost
Milestones and activities from P6 XER files or Outbuild land in the same model as cost and project records, mapped to the right project.
Frequently asked questions
What is a crosswalk?
A table that explicitly links the same thing across systems, such as a Procore project, an accounting job, and a CRM deal. Reports join through it so they all use the same answer.
Why not put the mapping in Power BI?
Logic inside a DAX measure or Power Query step is hard to audit, test, or reuse. A crosswalk table can be reviewed, versioned, tested, and used by every report and every downstream tool.
What happens to cost under an old code with no new equivalent?
It stays in the totals under an unmapped bucket, shows up as an exception with its value visible, and goes to the controller to decide whether to split or retire it. The pipeline never invents a new code.
Who maintains the mapping after handover?
The controller or the record owner, through a short manual mapping file and fixes in the source systems. The goal is that adding the project number at the source turns most fuzzy matches into exact ones permanently.
Next step
Which report or workflow would you like to improve?
Tell us what your team does today, which systems are involved, and what you want to change. We'll discuss whether there is a practical fit.
Prefer email? charley@buildflows.ai