Pure Source SolutionsEnterprise AI Counsel · ERP

The open ERP contract dataset

One row for every document in our library of public ERP implementation contracts: the buyer, the supplier, the platform, the public source link, the date we retrieved it, and how each of eleven fixed checks reads against that specific document — with the clause it rests on, and the sections that could not be read.

Seventeen rows. Sixteen supplier-written contracts — nine written by the software publisher implementing its own product, seven written by a third-party integrator — plus one buyer-drafted model contract, a university system’s own template, kept as a named comparator. The comparator is excluded from every supplier split and from the firing table, and carries no score: a null, not a zero.

Derived 2 October 2026. Every aggregate figure on this page carries that date.

A low score means unread, not clean.

Several documents here are partly redacted, truncated by the source, or arrive without the exhibit that governs the question. Where that happened the check reads not assessable, with the reason named against that row — never absent, and never a pass. A contract a buyer cannot read in full before signature is a finding about that contract, not a gap in the research, and this dataset is built to say so rather than hide it inside a number.

What this is

A row-level record an editor or a researcher can check against the documents themselves.

Every row is a public record with a public URL. Twelve of the buyers are public bodies; four are private companies whose contracts are public because they were filed as exhibits with the US Securities and Exchange Commission, which is a different thing and worth keeping straight. The documents span January 2001 to October 2025, across twelve distinct delivering parties and roughly seven platform families. No client or prospect document appears in this dataset. The firm has no clients, and nothing here is anyone’s confidential paper.

Each document is read against the same fixed list of eleven checks, in the same order. The dataset records, for each check and each document, the state, the severity the instance actually fired at, whether it counts toward the standing score, the clause it rests on, where that clause sits if our record captured a reference, and a note explaining the call. The standing score counts checks C1 to C7 only, so it runs 0 to 7; checks C8 to C11 are recorded where the document addresses them but are never counted.

We say “contracts” rather than “statements of work” for this set as a whole, because one of the seventeen is an executed agreement body whose statement-of-work exhibit was never in the file we retrieved.

This is a sample, not an industry benchmark. Five of the sixteen supplier-written documents come from a single publisher, Tyler Technologies — the largest single skew in the set. Nothing here supports a statement about the ERP services market as a whole, and the dataset does not rank vendors.

The eleven checks, by their column prefix: C1 data migration listed as a buyer responsibility with no supplier conversion hours; C2 integrations counted but not designed; C3 testing not budgeted by the implementer; C4 change management with no deliverable; C5 hypercare ending before the buyer’s first month-end close; C6 assumptions that shift risk silently to the buyer; C7 re-baselining or re-pricing rights for the supplier; C8 a post-design re-estimation right; C9 a no-fit-gap method with test-stage change orders; C10 a quoted fee that is contractually only an estimate billed on time and materials; C11 a single go-live with deferred functionality contractually dropped.

The analysis built from these rows, with the verbatim clauses and the score distribution, is the benchmark page.

Data dictionary

Seventy-nine columns: thirteen that describe the document, and six for each of the eleven checks. Enumerated values are given in full wherever a column has them.

row_id
An opaque dataset row id, stable across versions of this dataset. It carries no meaning beyond identifying the row. Values: sow-0001 to sow-0017.
buyer
The organisation buying the implementation, as named in the document. Free text.
supplier
The party contracted to implement, as named in the document. Free text. For the buyer-drafted comparator this reads n/a - buyer template for bidders.
paper_type
Who wrote the paper. Three values: vendor-direct (the software publisher implementing its own product), integrator-led (a third-party systems integrator), buyer-drafted-comparator (the buyer’s own model contract, excluded from every supplier split and from the firing table). Counts: 9, 7 and 1.
paper_type_as_recorded
The longer paper-type description carried in our own record, kept verbatim so the shorter value above can be checked against it. Free text.
document_type
What kind of document was read. Three values, explained in full below: statement_of_work, executed_contract_sow_exhibit_not_retrieved, buyer_drafted_model_sow_comparator. Counts: 15, 1 and 1.
platform
The software and modules being implemented, as named in the document. Free text.
sector
The buyer’s sector, with public or private marked. Eleven distinct values across the seventeen rows; twelve rows are public-sector buyers and four are private companies whose contracts are public because they were filed as exhibits with the US Securities and Exchange Commission.
standing_score
The count of checks C1 to C7 that fire, so an integer 0 to 7. Empty in the CSV and null in the JSON for the buyer-drafted comparator, which is not scored. Null is not zero. Observed values: 1, 2, 3, 4, 5, 7. No document scores 0 or 6.
retrieved_date
The date we fetched the document, ISO YYYY-MM-DD. Range 2026-09-02 to 2026-09-29. Every row has one.
source_url
The public URL the document was retrieved from. Every row has one. No row is a client or prospect document; the firm has none.
not_readable
What could not be read in that document, and why, in our own words — a missing exhibit, a truncation, a redaction, or an explicit statement that nothing was missing. Multiple notes are joined with | . Every row has an entry.
row_note
Populated only for the buyer-drafted comparator row, where it records the protective clauses that make the comparator worth keeping and the one gap found in it. Empty for all other rows.
c1_state … c11_state
The state of that check against that document. Five values, and nothing else: fired, not-fired-protective, topic-absent, not-assessable, not-evaluated. Empty for the comparator row only. The five states are set out in full below.
c1_severity … c11_severity
The severity this instance actually fired at, never a default copied from the check: high, medium, or none. A cell that did not fire reads none. Empty for the comparator row only. Only C3 is a two-tier check in which the tier changes whether the instance is counted.
c1_counts_in_standing_score … c11_counts_in_standing_score
Two values: true or false. True only for a check among C1 to C7 that fired at the tier the standing 0–7 score counts. C3 counts only at high, never at medium. C8 to C11 are never counted, so these columns are always false for them. Empty for the comparator row only. The count of true cells in a row equals that row’s standing_score, in every row.
c1_quote … c11_quote
The clause the finding rests on, as recorded at scoring time. Some entries are the sentence itself; some are a close paraphrase or a short summary of the clause. Empty where the check did not fire on a quotable clause, where the check was not assessable, and where it was never run.
c1_section … c11_section
Where in the document the clause sits. Reads not recorded or not recorded in corpus wherever the original scoring record did not capture a section reference. No section number has been invented for this dataset.
c1_note … c11_note
Why the cell reads as it does: the tier rationale where a check fired at a particular severity, or the reason a check could not be assessed or was never run. Free text, empty where our record carried none.

The five states a check can read

Every _state cell holds one of exactly five values. Two of them look similar and are not, and we keep them apart on purpose.

Neither of the last two is ever folded into a score as though it were a pass. That is the whole reason the two are separate values rather than one.

The document_type column

Three values, and the distinction between them changes how a row should be read.

Licence, citation and downloads

Use it, cite it, republish it. We ask one thing in return: quote the record itself, not a summary of it — including ours.

Licence. This dataset is published under the Creative Commons Attribution 4.0 International licence (CC BY 4.0). You may copy, redistribute, adapt and build on it, including commercially, with attribution.

Citation.

Pure Source Solutions Inc., Public ERP Contract Red-Flag Dataset, 2 October 2026, psi888.com/data/

CSV

psi-erp-contract-dataset-2026-10-02.csv

Seventeen data rows plus a header. UTF-8, comma-separated, quoted fields. Seventy-nine columns.

Download the CSV

JSON

psi-erp-contract-dataset-2026-10-02.json

The same seventeen rows, same column names, same values, with the licence, citation, composition and the five-state convention carried in the file itself.

Download the JSON

The two files agree with each other row for row and field for field, and both agree with the tables below. The tables show the columns that fit on a page; the files carry all seventy-nine, including the quoted clause, the section reference and the note for every check.

If a finding here does not match the underlying document, that is a correction we want to hear about, and we will publish it: donzou@psi888.com.

The seventeen rows

Every row carries its public source URL and the date we retrieved it. The tables scroll sideways on a narrow screen.

The seventeen documents. One row per contract. Sixteen are supplier-written; the University of Arkansas System row is the buyer-drafted comparator and carries no score. Derived 2 October 2026.
Row idBuyerSupplierPaper typeDocument typePlatformSectorScoreRetrievedSource URL
sow-0001City of Rapid City, SDTyler Technologiesvendor-directstatement_of_workTyler Munismunicipal government (public sector)5 of 72026-09-02https://archive.rcgov.org/lf20140212/LF021214-15/Rapid%20City%20SD%20SOW_02112014_ps.pdf
sow-0002City of San Rafael, CATyler Technologiesvendor-directstatement_of_workTyler Munis (SaaS)municipal government (public sector)5 of 72026-09-02https://storage.googleapis.com/proudcity/sanrafaelca/uploads/2024/02/4.e-Authorize-a-Software-Services-Agreement-with-Tyler-Technologies-Inc.-for-an-Enterprise-Resource-Planning-ERP-System.pdf
sow-0003University of Arkansas Systemn/a - buyer template for biddersbuyer-drafted-comparatorbuyer_drafted_model_sow_comparatorWorkday Financial Managementhigher education (public sector)null2026-09-02https://hogbid.uark.edu/_resources/documents/RFPR654331_ERPImplServices_App3_ModelSOW.pdf
sow-0004Weber County, UtahGraviton Consulting Servicesintegrator-ledstatement_of_workOracle Fusion Cloud HCM + OIC; Munis financials integrationcounty government (public sector)4 of 72026-09-03https://www.webercountyutah.gov/commission/documents/uploads/G1%20%20HRIS%20Implementation.pdf
sow-0005City of Chandler, ArizonaCollaborative Solutions, LLC (Cognizant)integrator-ledstatement_of_workWorkday HCM, Payroll, Time, Absence, Financials, Projects, Procurement, Inventory, Sourcing, CLM, Grants, Prism, Extend (Launch methodology)municipal government (public sector)5 of 72026-09-03https://public.destinyhosted.com/chanddocs/2025/CC/20251013_1975/8732_4771_Cognizent_Agreement.pdf
sow-0006City of Orlando, FloridaWorkday, Inc. (Professional Services)vendor-directstatement_of_workWorkday HCM Recruiting (Launch methodology); 16 integrationsmunicipal government (public sector)5 of 72026-09-03https://orlando.novusagenda.com/agendapublic/AttachmentViewer.ashx?AttachmentID=127989&ItemID=64614
sow-0007City of Portland, Bureau of Environmental ServicesInfor (US), LLC (Infor Professional Services)vendor-directstatement_of_workInfor CloudSuite Public Sector (Asset Management, Field Inspector, GIS integration, Birst, Infor OS)municipal utility (public sector)4 of 72026-09-03https://www.portland.gov/sites/default/files/council-documents/2023/infor-public-sector-wams-replacement-project-exhibit-a-attachment-2.pdf
sow-0008City of Sunrise, FloridaTyler Technologiesvendor-directstatement_of_workTyler Munis (Financials, Payroll/HR, Utility Billing CIS, Purchasing, Fixed Assets, Inventory, Work Orders, Project/Grant, Analytics) + EnerGov permitting/licensingmunicipal government (public sector)3 of 72026-09-03https://sunrise.novusagenda.com/AgendaPublic/AttachmentViewer.ashx?AttachmentID=20130&ItemID=5513
sow-0009Village of Downers Grove, IllinoisTyler Technologiesvendor-directstatement_of_workTyler Munis SaaS (Financials, HR/Payroll, Utility Billing, Licensing)municipal government (public sector)4 of 72026-09-04https://www.downers.us/public/docs/agendas/2021/02-02-21/MOT%202021-8817%20-%20ERP%20Contracts%20-%20Tyler%20Technologies%20-%202-2-2021_17134.pdf
sow-0010Utah State Board of Education (USBE) and participating Utah LEAsPowerSchool Group LLCvendor-directstatement_of_workPowerSchool Unified Administration BusinessPlus v22.4 - Financials, Purchasing, HR/Payrollstate education agency (public sector)7 of 72026-09-04https://vahara-o2-public.s3.amazonaws.com/media/115299/PowerSchool-BusinessPlus-Scope-of-Work-(DRAFT).pdf
sow-0011City of Sutter Creek, CaliforniaTyler Technologiesvendor-directstatement_of_workTyler ERP Pro (SaaS): Core Financials, HR Management, Employee Access Pro Time & Attendance, Project Accounting, Purchasing, AR, Utility Billing, Cashiering, Content Manager Coremunicipal government, small city (public sector)4 of 72026-09-08https://mccmeetingspublic.blob.core.usgovcloudapi.net/suttrcrkca-meet-02b2e46c1ed749608928e84b7e1629b5/ITEM-Attachment-001-3c72db8f5b99433f9d52b57fcd2ede8d.pdf
sow-0012Citizens Property Insurance Corporation, FloridaApplications Software Technology Corporation (AST)integrator-ledexecuted_contract_sow_exhibit_not_retrievedOracle Cloud ERP (SaaS)state-created governmental insurer (public sector)2 of 72026-09-09https://www.citizensfla.com/documents/20702/9087517/Executed+Contract+-+1615002901.pdf/c688494d-e5d4-46b0-b9b8-916816932b75?version=1.0&t=1547053370050&d=
sow-0013P. H. Glatfelter CompanyAccenture LLPintegrator-ledstatement_of_workERP Application of choice (publisher not confirmed in this exhibit) plus Click Commerce for Customer Direct websiteprivate sector - paper manufacturing4 of 72026-09-26https://www.sec.gov/Archives/edgar/data/41719/000089322002000325/w58137ex10-t.txt
sow-0014Home Interiors & Gifts, Inc.PricewaterhouseCoopers LLPintegrator-ledstatement_of_workJ.D. Edwards (JDE) Financial, Distribution and Demand Planningprivate sector - direct-sales home decor1 of 72026-09-26https://contracts.justia.com/companies/home-interiors-gifts-inc-64989/contract/1058055
sow-0015NuVasive, Inc.IBM Global Business Servicesintegrator-ledstatement_of_workSAP R/3, ECC 6.0 (IBM Express Solution for SAP Medical Devices)private sector - medical device manufacturing4 of 72026-09-28https://www.sec.gov/Archives/edgar/data/1142596/000093639207000658/a32696exv10w2.htm
sow-0016Warnaco Inc.SAP America, Inc.vendor-directstatement_of_workmySAP Business Suite (SAP NetWeaver), including RWD Info Pakprivate sector - apparel and intimate-apparel manufacturing2 of 72026-09-29https://www.sec.gov/Archives/edgar/data/801351/000095013605001442/file002.htm
sow-0017Wright County, MinnesotaCiber Global, LLC (also identified in the SOW as HTC Global Services, Inc.)integrator-ledstatement_of_workOracle Fusion Cloud Applications (Financials, HCM, Payroll, Procurement, Purchasing, Project Management, Planning & Budgeting Cloud Service)county government (public sector)3 of 72026-09-29https://www.wrightcountymn.gov/AgendaCenter/ViewFile/Item/7207?fileID=14830

Check states by document

Where a check fired, the tier it fired at is shown beside the state. Only C3 has a tier that changes whether the instance is counted in the standing score: it counts at high and never at medium.

The eleven checks, one column each, across the same seventeen rows. The comparator row carries no check cells, because it was never run through the checks. Derived 2 October 2026.
Row idBuyerC1C2C3C4C5C6C7C8C9C10C11
sow-0001City of Rapid City, SDfired highfired highfiredfired mediumfired highfired mediumtopic absentnot evaluatednot evaluatednot evaluatednot evaluated
sow-0002City of San Rafael, CAfired highnot assessablenot assessablefired mediumfired highfired mediumfired highnot evaluatednot evaluatednot evaluatednot evaluated
sow-0003University of Arkansas System———————————
sow-0004Weber County, Utahfired highfired highfirednot fired · protectivefired highfired mediumtopic absentfirednot evaluatednot fired · protectivenot evaluated
sow-0005City of Chandler, Arizonafired highfired highfired highnot fired · protectivenot fired · protectivefired mediumfired highfiredfired mediumnot fired · protectivenot evaluated
sow-0006City of Orlando, Floridafired highfired highfired highfired mediumnot fired · protectivefired mediumnot fired · protectivefiredfired mediumnot fired · protectivenot evaluated
sow-0007City of Portland, Bureau of Environmental Servicesnot fired · protectivenot fired · protectivefiredfired mediumfired highfired mediumfired highnot evaluatednot evaluatednot evaluatednot evaluated
sow-0008City of Sunrise, Floridanot fired · protectivefired highfirednot fired · protectivenot assessablefired mediumfired highnot evaluatednot evaluatedfirednot evaluated
sow-0009Village of Downers Grove, Illinoisnot fired · protectivefired highfired mediumfired mediumfired highfired mediumnot fired · protectivenot evaluatednot evaluatednot fired · protectivenot evaluated
sow-0010Utah State Board of Education (USBE) and participating Utah LEAsfired highfired highfired highfired mediumfired highfired mediumfired highnot evaluatednot evaluatedfiredfired
sow-0011City of Sutter Creek, Californianot fired · protectivetopic absentnot assessablefired mediumfired highfired mediumfired highnot evaluatednot evaluatedfirednot evaluated
sow-0012Citizens Property Insurance Corporation, Floridanot assessablenot assessablenot assessablenot assessablefired highfired mediumnot fired · protectivenot evaluatednot evaluatednot fired · protectivenot evaluated
sow-0013P. H. Glatfelter Companyfired highnot fired · protectivefiredfired mediumfired highfired mediumnot fired · protectivenot evaluatednot evaluatedfirednot evaluated
sow-0014Home Interiors & Gifts, Inc.not fired · protectivenot fired · protectivenot fired · protectivenot fired · protectivenot fired · protectivefired mediumnot fired · protectivenot evaluatednot evaluatedfirednot evaluated
sow-0015NuVasive, Inc.fired highfired highfiredfired mediumnot assessablefired mediumnot fired · protectivenot evaluatednot evaluatedfirednot evaluated
sow-0016Warnaco Inc.not assessablenot assessablefiredfired mediumnot assessablefired mediumnot assessablenot evaluatednot evaluatednot assessablenot evaluated
sow-0017Wright County, Minnesotanot fired · protectivefired highfirednot fired · protectivefired highfired mediumnot fired · protectivenot evaluatednot evaluatednot fired · protectivenot evaluated

Data-integrity notes

Stated here rather than quietly fixed. These are the things we would want to know if someone handed us this file.

1. What the review of this dataset found. Before publication, every count on these pages was re-derived from the seventeen row-level records rather than carried over from any summary. That pass found five errors, all of them in aggregate sentences and none in the rows themselves: one document had been listed twice in the score distribution, at two different scores; three check denominators had been computed on inconsistent rules, so two fire rates were stated against the wrong base and one counted documents the check was never run against; and one counter-example count was understated by one. Every figure published here is the re-derived one. The rows passed unchanged. We record this because it is the second kind of finding in this dataset: a count taken from a summary of a document set is not the same thing as a count taken from the set.

2. Every row is re-derived, never copied from a summary. Each cell is taken from that document’s own stored scoring record. Where a count printed in a summary sentence disagreed with the row-level records, the rows won.

3. Two scores were corrected on 2 October 2026. The Village of Downers Grove contract (Tyler Technologies) and the City of Sutter Creek contract (Tyler Technologies) had both been counted at C3 HIGH on the same ambiguous Tyler data-conversion-verification sentence that had already forced the San Rafael contract to not assessable on 30 September. Downers Grove now reads C3 fired at medium, not counted in the standing score; Sutter Creek now reads C3 not-assessable. Both scores move from 5 of 7 to 4 of 7. Both were re-examined from the stored record without a new fetch, because both statement-of-work exhibits remain unreadable. The direction of the underlying testing finding is unchanged; the severity split is softer than earlier published versions. It is set out in full on the benchmark page.

4. A mapping error on check C2, found and corrected 1 October 2026. While this export was being built, the C2 check was found to point at the supporting evidence patterns belonging to two other checks rather than its own. It was corrected the same day. No other check’s mapping was re-audited in that pass, so this was a single incidental fix rather than a sweep, and we say that rather than implying a full audit.

5. Two cells once counted a check as fired with no quoted clause recorded against them. The Chandler and Orlando rows each carried a fired cell with no supporting quote. As of 2 October 2026 all four of those cells — Chandler’s C3 and C9, Orlando’s C6 and C9 — carry quoted clauses with section references. There is now no cell in the dataset that reads fired with an empty quote.

6. Some quotes are close paraphrases or summaries, not the sentence itself. Each quote reproduces the text recorded at scoring time. Where that record captured a short description of the clause rather than the sentence, the cell holds the description. Nothing was reconstructed or reworded to read more like a quotation.

7. Section references are often missing, and none has been invented. A _section cell reads “not recorded” wherever the original scoring record did not capture one. We would rather publish a gap than a plausible-looking section number.

8. One document was retrieved through a third-party rendering. The Home Interiors & Gifts contract with PricewaterhouseCoopers was read from a third party’s hosted rendering of the underlying SEC exhibit; the specific filing URL could not be located, so completeness rests on the document’s own internal consistency — a dated signature block and a sequential deliverable and fee schedule — rather than on a second-source fetch. Its sibling private-sector documents were read directly from the filings.

9. Redaction is not the same as silence. In the NuVasive contract with IBM Global Business Services, total hours, total fee and all per-role hourly rates are redacted under an SEC confidential-treatment request, and the go-live and support section is redacted in full. Those are the filer’s own excisions, not a retrieval failure, and they are recorded as not assessable rather than as effort that does not exist.

10. Scores of 2 in this set are floors. The Citizens Property Insurance row scores 2 with its governing exhibits absent; the Warnaco row scores 2 with four of the seven standing checks not assessable after four exhibits of a very large filing could not be retrieved. Read both as the least the document can be shown to do, not as a clean contract.

What was made of it

The dataset is the evidence. The analysis is separate, and linked, so you can disagree with the second without re-collecting the first.

The benchmark

Who pays: what public ERP implementation contracts commit the buyer to. Eight findings with verbatim clauses, the score distribution and median, the C3 severity split, and the corrections.

Read the benchmark

Pure Source Solutions

Independent Enterprise AI Counsel for companies running ERP. We do not implement, resell, or take money from any software vendor or systems integrator.

The firm