Every PDF-to-ESX converter on the market promises you a file that "imports into Xactimate." But almost nobody explains what that file actually is. So let's look at what's actually inside one.
Here's the concrete truth about the .esx format and the structural rules Xactimate enforces when a file is imported.
Key Insight: An ESX file isn't a document you hand Xactimate — it's a structured project file whose sections, line items, and codes must match what Xactimate expects. Get the structure wrong and the file won't import, no matter how perfect the line items are.
What an ESX File Actually Is
At the top level, an .esx file is Xactimate's native project-file format. It carries the estimate — line items, quantities, prices, and price-list references — in the structure Xactimate reads when you import it.
That's why "just rename a CSV to .esx" doesn't work — and why import compatibility is the hard part of any converter worth using.
The Document: Groups, Items, and Embedded Price Lists
Open the document and the structure is remarkably clean. Two sections do the heavy lifting:
| Section | What it holds | Why it matters |
|---|---|---|
| GROUP > ITEMS > ITEM | The actual line items: description, quantity, unit price, and a reference (xid / SUMMARY_REF.sumRef) pointing at a price-list entry | This is what shows up in your estimate — the line items, quantities, and totals |
| EMBEDDED_PL > line-item master | The embedded price-list master: cat, sel, act, catId, itemId, description, unit | The codes Xactimate uses to reprice each line against its own loaded price list |
Each ITEM carries its quantity and calculated value in the SUMMARY_REF (sumRef + qty), and its unit price in a MODIFICATION block. The xid on each ITEM references the line item's id — that link is how Xactimate knows which price-list line each item belongs to.
The Codes: CAT|SEL and Activity
Every line in an ESX file resolves to a CAT|SEL code — the category and selector pair Xactimate's price lists are organized around. Real examples from actual files:
- RFG|300S — Laminated comp shingle rfg. (w/out felt), catId 867, itemId 507
- RFG|DRIP — Drip edge, painted aluminum, catId 867, itemId 12296
- RFG|IWS — Ice & water barrier, catId 867, itemId 12333
- DMO|DUMP — Dumpster, approx. 20 yds, catId 87, itemId 5807
- PNT|RJACK — Prime & paint roof jack, catId 828, itemId 11881
Then comes the part that trips up most people: the activity code. The same CAT|SEL prices differently depending on activity:
| Activity | Meaning | Example: RFG|300S per SQ |
|---|---|---|
| + | Install (new work) | $251.75 (full labor + material) |
| - | Removal / tear-off | $59.58 (labor only) |
| & | Add / supplement (both sides) | Priced per the add component set |
A tear-off line coded as an install is a 4x pricing error on that line. This is why activity codes matter as much as the code itself — and why converters that don't handle them produce files that "import fine" but price wrong.
The Stamp: priceList and What It Actually Means
ESX files carry a price-list stamp — a string recording which price-list edition the file was priced against when it was created (for example, a July 2026 Tulsa edition), along with a plModifiedDateTime. That stamp records which price list the file was priced against when it was created.
The stamp is history, not a promise. When you import, lines are repriced against the price list currently loaded in your copy — the stamp in the file does not control the reprice. Price lists update monthly (the month-and-year portion of the stamp identifies the edition — e.g., July 2026 for the Tulsa list), so a file priced on an older edition can move significantly on import. That's the mechanism behind the famous "my estimate came back $15K higher" surprise.
Why the Format Matters When You Buy a Converter
Once you know what's inside the file, the marketing claims of conversion tools become testable:
- "Imports into Xactimate" means the file's structure — required sections, line-item linkage, and CAT|SEL codes — matches what Xactimate accepts on import. A converter that can't produce that structure can't produce an importable file, period.
- "Resolves SEL codes" means it maps PDF descriptions to real CAT|SEL entries — the 18,054 code dictionary. The bigger and more verified the dictionary, the more lines resolve to a real catalog price.
- "Handles supplements" means it gets activity codes right, so tear-offs price as removals and adds price as adds.
- "Verifies totals" means the file's grand total traces back to the PDF — RCV, O&P, tax, depreciation, ACV.
ESXPress was built against exactly these requirements: it generates import-compatible ESX files using a verified 18,054 SEL dictionary, automated verification that flags anything it can't resolve, and a Scope Intel layer that surfaces the PDF-verified totals from every conversion. The format isn't magic — it's just precise.
Review required: AI-generated output requires professional review — verify every line item, price, and total before submission.
If you want the full workflow around this format, read PDF to Xactimate ESX: The Complete Guide, see why imported files sometimes come back repriced in Why Does Xactimate Reprice My Estimate?, or go deeper with our deep dive into the .esx file format.
Ready to convert? Start a free 14-day trial — or compare plans on the pricing page and read the feature breakdown.