P6 XER → structured JSON.
No Oracle license required.

Connect Primavera P6 schedules to any tool — without Oracle licenses, desktop software, or manual exports. Developers get a clean JSON API. Project controls teams get automated DCMA compliance. PMOs get Monday-morning reporting without the copy-paste.

50 parses free · no card · instant key
Copy key
For developers — live API example
Request
curl -X POST \
  https://p6parser.com/parse \
  -H "Authorization: Bearer xer_..." \
  --data-binary "@schedule.xer"
Response
{
  "export_info": {
    "version": "19.12",
    "currency": "USD"
  },
  "schedule_summary": {
    "total_activities": 847,
    "critical_activities": 112,
    "percent_complete": 34.2
  },
  "activities": [ /* 847 items */ ],
  "wbs": [ /* hierarchy nodes */ ],
  "relationships": [ /* FS/FF/SS/SF */ ],
  "resources": [ /* assignments */ ],
  "calendars": [ /* work calendars */ ],
  "dcma": { /* Professional+ · ?dcma=true */
    "overall_score": 78,
    "overall_passed": false,
    "checks": [ /* 14 DcmaCheckResult items */ ]
  }
}

Who uses it and what for

The same API serves three different teams.

Submit with confidence.

Project controls & schedulers

Run DCMA 14-point compliance checks automatically. Know exactly which activities fail — with IDs — before submitting to your client. No ScheduleReader license, no Windows-only software.

  • Automated DCMA assessment
  • Fix list grouped by check, sorted by impact
  • Pre-Submission Pack — PDF + CSV evidence for your client
  • Critical path & float analysis
  • Works from any browser or tool
Monday morning, already done.

PMO & reporting teams

Feed live schedule data into Power BI, Tableau, Excel, or your own dashboard — without P6 installed on every machine, without manual copy-paste exports every Monday morning.

  • Structured data for any BI tool
  • Automate weekly schedule pulls
  • Baseline variance per activity
  • "What changed this week" — slipped, critical, new activities
  • WBS hierarchy preserved exactly
  • Includes our Power BI + Excel template
Add P6 support in an afternoon.

Developers & anyone building with AI

You don't need to understand the XER format. Paste this API's documentation into your AI coding tool, describe what you want to build, and it writes the integration. P6 schedule data becomes structured JSON — ready for any database, dashboard, or workflow you have in mind.

  • Paste docs into Cursor, Copilot or Claude — it handles the rest
  • Works from any language or no-code tool
  • Add P6 support to any platform in an afternoon
  • Files processed and deleted — never stored

What this is — in plain language

Primavera P6 is Oracle's project scheduling software, widely used in construction, oil and gas, defense, and government infrastructure projects. When you export a project from P6, the file format is .xer — a proprietary, tab-separated text format with no public documentation and no official API for reading it programmatically.

P6 XER API is a hosted REST endpoint that accepts an XER file and returns its contents as structured JSON. You POST the file, you receive a JSON object containing every activity with its start and finish dates, duration, float values, critical path status, predecessors, successors, resources, WBS path, and calendar assignment. No Oracle license is required. No P6 installation. No Windows-only desktop software.

For teams that need DCMA 14-Point Schedule Assessment — a compliance check required on US government and defense contracts — the API runs all 14 checks and returns pass/fail status, percentage values, and the specific activity IDs that fail each check.

For teams that submit schedules, Business adds the Pre-Submission Pack, Monday-morning reporting, and Snapshot Governance — so you can submit, report, and prove what changed, without manual work.

Files are parsed in memory and immediately discarded. Nothing is logged or retained after the HTTP response is sent. The service is not affiliated with Oracle Corporation or Primavera Systems.

For developers — full response schema

Here's exactly what you get back

Every field, every time. Evaluate whether the output has what you need before you write a line of code.

// activities[n]
{
  "activity_id": "A1010",
  "name": "Excavation",
  "wbs_path": "BRIDGE.FOUNDATION.EXCAVATION",
  "start": "2024-03-01T07:00:00Z",   // ISO 8601 — always
  "finish": "2024-03-15T17:00:00Z",
  "original_duration_days": 10,
  "remaining_duration_days": 3,
  "percent_complete": 70,
  "total_float_days": 0,
  "free_float_days": 0,
  "is_critical": true,             // total_float ≤ 0
  "is_longest_path": true,
  "predecessors": [{ "activity_id": "A1000", "type": "FS", "lag_days": 0 }],
  "successors":   [{ "activity_id": "A1020", "type": "FS", "lag_days": 0 }],
  "resources": [{
    "resource_id": "CREW_A",
    "budgeted_cost": 12500,
    "actual_cost": 8750,
    "budgeted_qty": 80,   // hours
    "actual_qty": 56
  }]
}

// wbs[n]
{
  "wbs_id": "WBS-003",
  "name": "Foundation",
  "full_path": "BRIDGE.FOUNDATION",
  "parent_wbs_id": "WBS-001"
}

The honest case against building this yourself

You can integrate xerparser. Here's what that actually means in practice.

CP1252 encoding

XER files exported from Windows P6 installations use CP1252 encoding, not UTF-8. Activity names with accented characters, em-dashes, or Windows-specific symbols silently corrupt or crash naive parsers. Every deployment needs explicit encoding handling.

Version fragmentation

XER format varies across P6 versions 15.2 through 21.12. Field names, presence of optional columns, and date formats differ. A file exported from P6 v15.2 behaves differently than one from v19.12 — you need to handle both.

Corrupt and partial exports

Real project files have missing %E terminators, truncated rows, and malformed headers. Production XER files from construction sites are not clean. Your parser needs defensive handling or it throws uncaught exceptions on real data.

Ongoing maintenance

Oracle updates P6 on its own schedule. When the format changes, someone on your team tracks it, fixes the parser, tests it against existing files, and deploys. That's engineering time away from your product.

This API is a maintained endpoint. It handles encoding, version differences, and malformed files. Your engineers ship features instead.

DCMA 14-Point Schedule
Assessment via API

Government, defense, and large infrastructure projects require DCMA compliance. Run all 14 checks programmatically — get JSON with pass/fail per check, percentages, and failing activity IDs.

Learn about DCMA checks →
Logic< 5% missing
Leads0% allowed
Lags< 5% threshold
Neg. Float0% allowed
High Float< 5% threshold
CPLI> 0.95 required
Constraints< 5% hard
+7 more checks
Engineering · Primavera P6

Why integrating Primavera P6 schedule data is so painful

CP1252 encoding, undocumented columns, version fragmentation, corrupt exports — the seven things that break every parser.

Read the article →

For teams who submit schedules

Parsing is not the job. Submitting is.

1 — DCMA Pre-Submission Pack

Submit with confidence

Run all 14 checks and get a submission-ready pack — pass/fail per check, percentages, and the exact activity IDs that fail. Fix list grouped by impact, ready to send to your client. No surprises after submission.

2 — Monday-Morning PMO Automation

Your schedule, already in Power BI

Baseline variance per activity, float erosion, and critical-path changes — calculated for you. Includes our Power BI + Excel template. No manual exports every Monday morning.

3 — Snapshot Governance + XER Diff

Prove what changed

Every parse is a snapshot. Compare any two updates and get a change log — added, removed, and moved activities, logic changes, float changes — ready to forward to your client.

Included in Business. No Monte Carlo. No delay claims. We get your P6 data out cleanly and help you prove it’s compliant.

Pricing

Monthly subscription · cancel any time · calls reset each billing cycle.

Tier Price What's included
Free Trial
$0
50 parses · no card required
Full JSON output · evaluate before you commit
Copy key
Developer
Integrators & tooling builders
$75/mo
150 parses/month
Full JSON · activities · WBS · relationships · resources · calendars
?raw_hours=true · schedule_summary · export_info
Professional
Schedule QC reviewers
$99/mo
2,000 parses/month
Everything in Developer, plus:
DCMA 14-Point Schedule Assessment (?dcma=true) · constraint analysis · LOE detection · hard constraint flags
Business
Controls teams & PMO — for teams who submit schedules
$349/mo
10,000 parses/month
Everything in Professional, plus:
DCMA Pre-Submission Pack — fix list, percentages, activity IDs
Monday-Morning PMO Automation + Power BI & Excel template
Snapshot Governance + XER Diff — prove what changed
Baseline variance per activity (?baseline=true)
Priority support
Enterprise
Unlimited · SLA · custom domain
$999/mo
Unlimited parses/month · dedicated support · custom SLA
Files parsed in memory — never stored, never logged Deleted immediately after the response Not affiliated with Oracle or Primavera GDPR DPA available for Enterprise customers

Quick start

You can prove this works in the next ten minutes.

cURL
Python
Node.js
DCMA (Pro+)
curl -X POST https://p6parser.com/parse \
  -H "Authorization: Bearer YOUR_KEY" \
  --data-binary "@schedule.xer" \
  | python3 -m json.tool
import requests

with open("schedule.xer", "rb") as f:
    r = requests.post(
        "https://p6parser.com/parse",
        headers={"Authorization": "Bearer YOUR_KEY"},
        data=f.read(),
        timeout=30
    )
    r.raise_for_status()

data = r.json()
critical = [a for a in data["activities"] if a["is_critical"]]
print(f"Critical activities: {len(critical)}")
const fs = require("fs");

const res = await fetch(
  "https://p6parser.com/parse",
  {
    method: "POST",
    headers: { "Authorization": "Bearer YOUR_KEY" },
    body: fs.readFileSync("schedule.xer"),
  }
);
const data = await res.json();
console.log(data.schedule_summary);
# Professional+ tier — add ?dcma=true to get the 14-point assessment
curl -X POST \
  "https://p6parser.com/parse?dcma=true" \
  -H "Authorization: Bearer YOUR_KEY" \
  --data-binary "@schedule.xer" | python3 -c "
import json, sys
d = json.load(sys.stdin)['dcma']
print(f'Score: {d[\"overall_score\"]}/100  Passed: {d[\"overall_passed\"]}')
for c in d['checks']:
    icon = '✓' if c['passed'] else '✗'
    print(f'  {icon}  #{c[\"check_id\"]:<2} {c[\"name\"]:<28} {c[\"percent\"]:.1f}% (threshold {c[\"threshold\"]})')
"