What Is an XER File

Last reviewed 9 September 20261,974 words9 min read

Structure, tables, what's actually inside

๐ŸŸฉ In one line: An XER is a plain tab-delimited text file that carries a P6 project as a set of database tables โ€” activities, logic, calendars, resources, codes โ€” with every duration and float stored in hours, every percent stored as a fraction, and a one-line header that decides whether it will import at all.

๐Ÿ‘ค Who this is for: Junior planners who have only ever double-clicked one; mid-level planners who need to read a file before it touches an enterprise database; seniors checking what a contractor actually sent. You should know what a P6 project, WBS and calendar are.

e / c
First, let's be honest about why this page exists

Most planners treat an XER as a black box: export, email, import, hope. That works until the day a client's reviewer says "your file shows a 3.75-day duration" and you have no idea why, or an Oracle-type enterprise database inherits forty stray calendars because nobody looked inside a subcontractor's file first.

The file is not mysterious. It is around thirty named tables written one after another in a text format you can open in any editor. Once you can read the five tables that matter, you can audit a submission, diagnose an import failure, and explain every strange number P6 shows after import.

๐ŸŸจ The standard โ€” what "good" looks like

There is no standard that defines XER; it is Oracle's proprietary interchange format. But the standards say a great deal about native electronic files being the record.

SourceWhat it says (paraphrased)
Oracle P6 XER Import/Export Data Map GuideDefines each table, field and unit in the file; the authoritative reference for what a column means
FIDIC 2017 Cl 8.3 (check the edition in your contract)Programme to be submitted in paper and electronic form, using the software named in the Specification โ€” in practice, the native XER
SCL Delay & Disruption Protocol 2nd ed., Guidance Part B, section 1Programme should be kept and exchanged in native electronic form so logic and float can be examined, not just PDF bars
Typical Gulf client schedule specificationsNative XER submitted with every update; PDF alone is non-compliant
AACE RP 29R-03 (forensic)Analysis relies on the electronic files as maintained at the time โ€” the XER is the evidence

๐ŸŸข Rule to remember: the XER is the programme; the PDF is a picture of it. Whoever holds the XER holds the logic, the float and the argument.

How it actually works

The file skeleton. Open an XER in a text editor and you see four kinds of line, distinguished by their first characters:

Line starts withMeaningNotes
ERMHDRSingle header line, first in the fileHolds the P6 version number, export date, the exporting user, database name and base currency. The version field is what blocks imports into older P6
%TStart of a tableFollowed by the table name, e.g. TASK
%FThe field (column) names for that tableOne tab-separated list
%ROne record (row)Same number of tab-separated values as the %F line. Every row, no exceptions
%EEnd of fileMissing %E means a truncated file

Everything is tab-delimited. Spaces are data; tabs are structure. That is why opening the file in a spreadsheet and saving it back usually destroys it.

The tables that matter. A typical export contains 25โ€“35 tables. Five of them are the programme; the rest are enterprise furniture.

TableWhat it holdsKey fields to know
PROJECTOne row per project: ID, planned start, data dateproj_short_name (Project ID), last_recalc_date (data date), plan_start_date, scd_end_date (must-finish-by), clndr_id (default calendar)
PROJWBSThe WBS tree, including the project root nodewbs_id, parent_wbs_id, wbs_short_name, wbs_name
TASKOne row per activitytask_code (Activity ID), task_name, task_type, status_code, clndr_id, wbs_id, durations, dates, float, constraint fields
TASKPREDOne row per relationshiptask_id, pred_task_id, pred_type (PR_FS / PR_SS / PR_FF / PR_SF), lag_hr_cnt
CALENDAREvery calendar referencedclndr_name, clndr_type (CA_Base global / CA_Project / CA_Rsrc), day_hr_cnt, week_hr_cnt, and a long encoded clndr_data string holding the work week and date exceptions

The supporting cast:

Table(s)PurposeWhy you care
RSRC, TASKRSRC, RSRCRATEResources, assignments, ratesResources are global; they land in the enterprise database on import
ACTVTYPE, ACTVCODE, TASKACTVActivity code types, values, assignmentsCode types can be global, EPS or project scope (actv_code_type_scope)
UDFTYPE, UDFVALUEUser-defined fields and valuesGlobal; duplicate names cause silent confusion
MEMOTYPE, TASKMEMONotebook topics and textDuration-basis notes live here; so do comments you may not want a client to read
SCHEDOPTIONSThe F9 scheduling options for the projectRetained logic vs progress override, calendar for lags โ€” all here
PROJCOST, ACCOUNTExpenses and cost accountsConfidential on most contractor submissions
FINDATES, TRSRCFIN, TASKFINFinancial periods and stored period performanceA frequent import complaint
OBS, POBSOrganisational breakdownPOBS is a known bloat table in P6 8.x onward; safe to delete
CURRTYPECurrenciesBase currency mismatch triggers a prompt on import

Units and encodings inside TASK. This is where every "P6 is showing a strange number" question is answered.

FieldStored asExampleWhat P6 shows
target_drtn_hr_cnt (original duration)Hours24024 d on a 10 h/day calendar; 30 d on 8 h/day
remain_drtn_hr_cntHours606 d or 7.5 d depending on hours/day
total_float_hr_cntHours-80-8 d on 10 h/day
phys_complete_pctPercent as a number4545%
complete_pct_typeCodeCP_Phys / CP_Drtn / CP_UnitsPhysical / Duration / Units
task_typeCodeTT_Task / TT_Mile / TT_FinMile / TT_LOE / TT_Rsrc / TT_WBSTask Dependent, Start Milestone, Finish Milestone, LOE, Resource Dependent, WBS Summary
status_codeCodeTK_NotStart / TK_Active / TK_CompleteNot Started / In Progress / Completed
cstr_type, cstr_dateCode + dateCS_MSOA, 2025-03-01 08:00Start On or After 01-Mar-25
DatesText YYYY-MM-DD HH:MM2025-06-14 17:0014-Jun-25 17:00
driving_path_flagY/NYOn the longest path at last F9

The hours-to-days conversion is done on your side. P6 uses Admin > Admin Preferences > Time Periods (hours per day), unless "Use assigned calendar to specify the number of work hours for each time period" is ticked, in which case each activity's calendar does it. A file exported from a 10-hour database and imported into an 8-hour one shows 10 days as 12.5 days. Nothing in the file changed; the divisor did.

IDs are internal, not the ones you see. task_id, wbs_id, clndr_id are database integers. The human Activity ID is task_code. TASKPRED links by the integers, which is why a tool-generated XER with mismatched integers imports with missing logic.

๐ŸŸฅ Where people go wrong
  1. Opening the XER in Excel and saving it. Excel strips leading zeros from codes like 0010, reformats dates, and may replace tabs. The file is now unimportable or, worse, imports with corrupted IDs. Use a text editor or a purpose-built parser; if you must use Excel, import it as a copy and never save over the original.
  1. Assuming the days shown are the days sent. A contractor plans on 9 h/day; the client's database defaults to 8. Every duration and float value grows by 12.5% on the client's screen. Agree hours/day in the schedule specification and state it in the narrative.
  1. Treating the header as decoration. The ERMHDR version field is the first thing P6 reads. A 22.12 file will not open in 19.12 until the number is changed (see xer-file-wont-import).
  1. Forgetting resources, calendars and codes are global. They do not belong to the project. Importing a subcontractor's XER without checking pushes their calendars and 200 resources into your enterprise database permanently.
  1. Sending cost you didn't mean to send. PROJCOST, TASKRSRC and RSRCRATE carry unit rates and expenses. A resource-loaded contractor file handed straight to a client is a commercial disclosure. Export from a copy with costs removed.
  1. Reading Notebook as private. TASKMEMO is in the file in plain text. "Client's consultant is useless, pad this by 2 weeks" is now in the client's database.
โš–๏ธ When you're challenged

"Why does your duration show 12.5 days when your narrative says 10?" "The file stores 100 hours. Our calendar is 10 hours a day; your database is dividing by 8. Tick 'use assigned calendar' in Admin Preferences, or check the calendar table in the file, and it reads 10."

"Can you just send the PDF? The XER is too complicated." "The specification calls for the native file, and the PDF can't show logic or float. I'll send both, with the XER named by revision and data date."

"Is the XER you sent the same one you're working in?" "Yes. The header records the export date and database, and the data date in the PROJECT table matches the update. I keep a copy of every exported file by revision."

"There's no cost in your file โ€” is it resource-loaded or not?" "It's manhour-loaded. Costs are removed on export as agreed; the TASKRSRC table carries units, not rates."

๐Ÿ“„ Related pages
โœ๏ธ Worked example

A mid-rise in Sharjah. The client's reviewer opens the contractor's XER and reports "negative float of -100 days on the tower crane dismantle; contractor's narrative says -10". One TASK record, decoded:

Field in fileValueMeaning
task_codeTC-DIS-01Activity ID
task_nameDismantle tower crane TC2โ€”
task_typeTT_TaskTask dependent
status_codeTK_NotStartNot started
clndr_id1187Points to CALENDAR row "6-Day 10h Site" (day_hr_cnt = 10)
target_drtn_hr_cnt505 days on a 10 h calendar
total_float_hr_cnt-100-10 days on a 10 h calendar
early_start_date2025-09-04 07:00โ€”
late_start_date2025-08-23 07:0010 working days earlier
cstr_type / cstr_date(blank)No constraint on this activity

The reviewer's database divided -100 hours by 1 hour/day because their Admin Preferences had been left at a test setting. The contractor's -10 days was correct. Ten minutes in the file settled what an email chain would not.

๐Ÿ“– References
  • Oracle, P6 XER Import/Export Data Map Guide (table and field definitions)
  • Oracle, P6 Professional User Guide โ€” Importing and Exporting; Admin Preferences, Time Periods
  • FIDIC Conditions of Contract 2017, Cl 8.3 (check the edition in your contract)
  • SCL Delay and Disruption Protocol, 2nd ed. (2017), Part B Guidance, section 1
  • AACE RP 29R-03, Forensic Schedule Analysis โ€” source validation

From the field

Experience from working planners. Unreviewed โ€” read it as experience, not guidance.

Add what you know about what is an xer file. What worked, what the consultant pushed back on, what you would do differently next time. A paragraph is plenty.

Contributors get their name and one link on the site โ€” your own templates, course or consultancy. We take nothing and hold nothing.

Add your experience