Docket Article
Data Provenance for Deal Research: Using the W3C PROV Model
What data provenance means, how the W3C PROV model links entities, activities and agents, and a minimal provenance record for one company fact.

Summary
- 01Provenance records how a claim was produced so a reviewer can assess it. A complete trail does not establish that the claim is true.
- 02PROV connects entities, activities and agents: the page, capture, quotation and claim; retrieval and extraction; and the people or software responsible.
- 03Keep one record per claim, retain the quotation and capture, distinguish retrieval from research dates, and preserve corrected claims as new entities.
- 04Hash the exact stored bytes at capture time, record the algorithm, and compare the digest during audit. A match establishes an unchanged copy, not truthful content.
- 05An audit checks the capture, digest, quotation, company identity, support and freshness, then records the audit itself as an activity.
Inside this article
What provenance means
A research file on a private company is a pile of claims: headcount, locations, ownership, services, licences. A reviewer who opens that file asks the same questions of every claim. Where did it come from? When was it read? Who or what extracted it? Has the source changed since?
The W3C's PROV data model gives those questions a formal shape. It defines provenance as "information about entities, activities, and people involved in producing a piece of data or thing, which can be used to form assessments about its quality, reliability or trustworthiness" [1]. The first half is a record of production; the second is the purpose, assessment. Provenance does not make a claim true. It gives the reviewer what they need to judge it.
Many deal-research errors are errors of lineage: a headcount copied from a vendor record that copied an old press release, or a service line read from a similarly named company's site. Each is cheap to catch if the file records how the value was produced.
This article covers the open standard. For the review principles that sit on top of a provenance record (source ranking, quotation versus conclusion, retained copies), see Docket's evidence standards.
The PROV core model
PROV is a family of W3C documents dated 30 April 2013. The data model (PROV-DM), the ontology (PROV-O), the notation (PROV-N) and PROV-CONSTRAINTS are Recommendations; the primer, an XML schema, a Dublin Core mapping and others are Working Group Notes [2]. Start with the data model and the PROV Model Primer, which walks through the concepts with examples.
The model rests on three types [1]:
| PROV type | W3C definition (abridged) | In target research |
|---|---|---|
| Entity | "a physical, digital, conceptual, or other kind of thing with some fixed aspects" | A live web page, a saved copy of it, a quoted passage, the recorded value |
| Activity | "something that occurs over a period of time and acts upon or with entities" | Retrieving a page, extracting a value, reviewing an answer |
| Agent | "something that bears some form of responsibility for an activity taking place, for the existence of an entity, or for another agent's activity" | An analyst, a crawler or extraction model, the firm the analyst works for |
The "fixed aspects" phrase matters: the page as you retrieved it is a different entity from the page today, and PROV lets you say which one your claim rests on.
Seven core relations connect the three types [1]:
| Relation | Connects | Definition (abridged) |
|---|---|---|
| wasGeneratedBy | entity → activity | Generation is "the completion of production of a new entity by an activity" |
| used | activity → entity | Usage is "the beginning of utilizing an entity by an activity" |
| wasDerivedFrom | entity → entity | A derivation is "a transformation of an entity into another, an update of an entity resulting in a new one, or the construction of a new entity based on a pre-existing entity" |
| wasAttributedTo | entity → agent | Attribution is "the ascribing of an entity to an agent" |
| wasAssociatedWith | activity → agent | Association is "an assignment of responsibility to an agent for an activity" |
| actedOnBehalfOf | agent → agent | Delegation: an agent carries out an activity for another agent, which "retains some responsibility for the outcome" |
| wasInformedBy | activity → activity | Communication: one activity uses an entity generated by another |
PROV-DM also defines specialised kinds of derivation. Two are directly useful in diligence. A quotation is "the repeat of (some or all of) an entity, such as text or image, by someone who may or may not be its original author", and a primary source is "something produced by some agent with direct experience and knowledge about the topic, at the time of the topic's study, without benefit from hindsight" [3]. Quotation ties a value to the exact sentence it came from; primary source marks that an ownership claim came from a state filing rather than a directory summarising it.
A bundle is "a named set of provenance descriptions, and is itself an entity" [1], so a batch's provenance record can itself be attributed and dated.
From PROV to a company fact
Illustrative example (fictional company, fictional values). An analyst screening commercial HVAC contractors records that Harborline Mechanical has about 40 employees. The value came from the company's About page, which reads "Our team of 40 technicians and staff serves the tri-county area." Mapped onto PROV, the record contains:
- Entity: the live page at
https://harborline.example/about. It exists independently of the research and can change at any time. - Activity: retrieval. A crawler fetched the page on 20 October 2026 at 14:03 UTC. The activity used the live page and is associated with the crawler (a software agent).
- Entity: the capture. The saved copy of the page was generated by the retrieval and was derived from the live page. Unlike the live page, it has fixed content and can be hashed.
- Entity: the quotation. The sentence "Our team of 40 technicians and staff…" was quoted from the capture.
- Activity: extraction. The analyst read the capture and recorded a value. The activity used the capture and was associated with the analyst, who acted on behalf of the fund.
- Entity: the claim.
employee_count = 40was generated by extraction, was derived from the quotation, and was attributed to the analyst.
Two things fall out. The claim is about a statement on a page, not about payroll. And every hop can be checked independently: a reviewer can open the capture, find the quotation and judge whether a marketing sentence supports "40 employees".
Here is the same record in PROV-O, the RDF encoding of PROV [3]. The ex: namespace, identifiers and the hash value are placeholders.
@prefix prov: <http://www.w3.org/ns/prov#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix ex: <https://research.example/ns#> .
# Illustrative: fictional company, placeholder identifiers and hash
<https://harborline.example/about> a prov:Entity .
ex:retrieval-0412 a prov:Activity ;
prov:used <https://harborline.example/about> ;
prov:startedAtTime "2026-10-20T14:03:11Z"^^xsd:dateTime ;
prov:endedAtTime "2026-10-20T14:03:12Z"^^xsd:dateTime ;
prov:wasAssociatedWith ex:crawler .
ex:capture-0412 a prov:Entity ;
prov:wasGeneratedBy ex:retrieval-0412 ;
prov:wasDerivedFrom <https://harborline.example/about> ;
prov:generatedAtTime "2026-10-20T14:03:12Z"^^xsd:dateTime ;
ex:sha256 "PLACEHOLDER-NOT-A-REAL-DIGEST" .
ex:quote-0412 a prov:Entity ;
prov:value "Our team of 40 technicians and staff serves the tri-county area." ;
prov:wasQuotedFrom ex:capture-0412 .
ex:extraction-0412 a prov:Activity ;
prov:used ex:capture-0412 ;
prov:wasAssociatedWith ex:analyst-17 .
ex:claim-0412 a prov:Entity ;
prov:value 40 ;
ex:field "employee_count" ;
prov:wasGeneratedBy ex:extraction-0412 ;
prov:wasDerivedFrom ex:quote-0412 ;
prov:wasAttributedTo ex:analyst-17 .
ex:crawler a prov:SoftwareAgent .
ex:analyst-17 a prov:Person ; prov:actedOnBehalfOf ex:fund .
ex:fund a prov:Organization .
Every prov: term above is defined in PROV-O, either in its "Starting Point" set or among its expanded terms [3]. ex:sha256 and ex:field are local extensions, which PROV-O allows. The shape also fits in a spreadsheet.
- 01Live page
The company's live page exists independently of the research and can change at any time.
- 02Retrieval
A crawler retrieves the live page. The retrieval uses the page and is associated with the crawler as a software agent.
- 03Capture
The saved copy is generated by retrieval and derived from the live page. Its fixed content can be hashed.
- 04Quotation
The supporting sentence is quoted from the retained capture.
- 05Extraction
The analyst reads the capture and records a value, acting on behalf of the fund.
- 06Claim
The recorded value is generated by extraction, derived from the quotation and attributed to the analyst.
Provenance does not make a claim true. It gives the reviewer what they need to judge it.
A minimal provenance record
The flat equivalent for a CRM or spreadsheet: one row per claim, each column mapped to its PROV concept.
| Field | Example value (illustrative) | PROV mapping | Why a reviewer needs it |
|---|---|---|---|
| subject_entity | Harborline Mechanical (registry ID if resolved) | Attribute of the claim | Catches wrong-company sourcing |
| field | employee_count | Attribute of the claim | Ties the value to a defined question |
| value | 40 | prov:value | The answer itself |
| quote | "Our team of 40 technicians and staff…" | Entity, wasQuotedFrom capture | Shows the exact support |
| source_url | https://harborline.example/about | Entity used by retrieval | Where the material lived |
| source_type | company website (self-reported) | prov:type, or primary-source flag | Separates first-hand from summary |
| retrieved_at | 2026-10-20T14:03:12Z | generatedAtTime of the capture | Dates the evidence, not the research |
| retrieval_method | scripted fetch; WARC | Activity plus associated software agent | Explains how the copy was made |
| capture_ref | warc/2026-10-20/0412.warc.gz | Entity generated by retrieval | Locates the retained copy |
| capture_sha256 | (64 hex characters) | Attribute of the capture | Detects later change to the copy |
| extracted_by | analyst-17 | wasAssociatedWith / wasAttributedTo | Accountability |
| reviewed_by, reviewed_at | reviewer-04, 2026-10-22 | Second activity using the claim | Records that review happened |
| status | accepted / open / struck | Local extension | Keeps unresolved claims visible |
Three design rules:
- Separate the retrieval date from the research date. A claim recorded today from a capture made six months ago is six months old.
- Store the quote, not just the URL. A live page can change after you rely on it; the reviewer needs what you actually read.
- Never overwrite a claim. A corrected value is a new entity derived from the old one (PROV-DM's revision: "a derivation for which the resulting entity is a revised version of some original" [1]). Overwriting destroys the trail.
If your team uses Dublin Core, its DCMI Metadata Terms overlap with this record. They include source, defined as "a related resource from which the described resource is derived", created, and provenance, defined as "a statement of any changes in ownership and custody of the resource since its creation that are significant for its authenticity, integrity, and interpretation", with a ProvenanceStatement class [4]. Dublin Core's "provenance" concerns custody, narrower than PROV's sense; the W3C's PROV-DC Note gives a partial mapping between the two [5].
Hashing and archiving the source
A capture is evidence only if you can show it has not changed. NIST's Secure Hash Standard, FIPS 180-4, "specifies hash algorithms that can be used to generate digests of messages", and "the digests are used to detect whether messages have been changed since the digests were generated" [6]. SHA-256 is one of the algorithms it specifies [7]. On 28 October 2026 the CSRC page showed the August 2015 version, with a March 2023 planning note that NIST "has decided to revise FIPS 180-4"; no successor (FIPS 180-5) had been published, so FIPS 180-4 remains the current standard.
Rules for hashing captures:
- Hash at capture time, over the exact bytes you store. A later hash proves only that the copy is unchanged since that later moment.
- Record the algorithm with the value (
sha256:plus the hex digest). An unlabelled digest becomes ambiguous. - Re-hash on audit. A mismatch means the copy was altered, corrupted or replaced; every claim derived from it needs review.
- Do not over-read a match. It shows the copy is unchanged, not that the content was true or that the page belonged to the company you think it did.
The established container format is WARC. The Library of Congress says it "specifies a method for combining multiple digital resources into an aggregate archival file together with related information", and that it was approved as an international standard (ISO 28500) in May 2009 [8]. ISO has since replaced the 2009 edition with ISO 28500:2017 (edition 2, published August 2017), which ISO lists as last reviewed and confirmed in 2023 [9]. The IIPC's WARC 1.1 specification requires each record to carry a WARC-Date, defined as the instant data capture for the record began, and allows optional WARC-Block-Digest and WARC-Payload-Digest fields carrying a labelled digest; it states that "no particular algorithm is recommended" [10]. If you store WARC files, record which digest algorithm your tool writes, and add your own SHA-256 if it writes something weaker.
A PDF print or screenshot is weaker but better than a bare URL. For pages that have already changed, a public web archive capture can stand in; Docket's Wayback Machine evidence protocol covers how to cite one.
Auditing a provenance trail
Audit procedure (template):
- Draw a sample of claims from the batch. Size it for the defect rate you need to detect; the audit sampling worksheet gives zero-defect sample sizes and acceptance rules.
- Resolve each claim to its capture using
capture_ref. Missing capture: fail. - Re-hash the capture and compare with
capture_sha256. Mismatch: fail and quarantine every claim derived from that capture. - Find the quote in the capture. Not present verbatim: fail.
- Check subject identity. Does the capture belong to the entity in
subject_entity? Wrong company: fail. - Judge support. Does the quote support the value as defined by
field? Unsupported or over-read: fail. - Check dates. Is
retrieved_atrecent enough for the field's freshness rule? Stale: flag, not necessarily fail. - Record the audit as its own activity, with auditor, date and outcome, so the audit itself has provenance.
Illustrative tally (fictional): 50 sampled claims return 46 passes, 2 quotes missing from the capture, 1 wrong-company source and 1 stale flag. Three are defects, judged against the acceptance number set before sampling. Steps 2 to 4 can be scripted; steps 5 and 6 are judgement for someone other than the extractor.
- Resolve each claim to its retained capture. A missing capture fails the check.
- Compare the capture's digest. A mismatch fails and quarantines every claim derived from that capture.
- Find the quotation verbatim in the capture. An absent quotation fails the check.
- Check whether the capture belongs to the claimed company. A wrong-company source fails the check.
- Judge whether the quotation supports the defined value. Unsupported or over-read claims fail.
The article assigns subject-identity and support judgements to someone other than the extractor. Stale evidence is flagged, not necessarily failed.
A claim recorded today from a capture made six months ago is six months old.
Standards map: PROV, Dublin Core, WARC, FIPS 180-4
| Standard | What it covers | What it leaves to you | Status (as checked 2026-10-28) |
|---|---|---|---|
| W3C PROV-DM / PROV-O | Concepts and RDF terms for entities, activities, agents and their relations; derivation, quotation, primary source, revision, bundles | What counts as a valid source; field definitions; review rules | W3C Recommendations, 30 April 2013 [2] |
| DCMI Metadata Terms | Descriptive metadata: source, created, provenance statement and more | Process detail (who extracted what, how) | Issued 2020-01-20 per the DCMI page [4] |
| WARC (ISO 28500; IIPC 1.1) | Container for captured web resources with capture time and optional digests | Which pages to capture; linking captures to claims | ISO 28500:2009, replaced by ISO 28500:2017 (confirmed 2023); IIPC publishes 1.0 and 1.1 [9][8] |
| NIST FIPS 180-4 | Hash algorithms (including SHA-256) to detect change | When to hash; where to store digests | Final, August 2015; revision announced 2023, no successor published as of October 2026 [6] |
What provenance cannot do
Provenance records lineage, not truth: it is information that "can be used to form assessments" [1]. The assessment is still yours.
- A perfect trail to a wrong source is still wrong. If the company's own page overstates its headcount, the record faithfully documents an overstatement.
- Provenance does not rank sources. Preferring a filing over a self-published page is a policy question.
- Provenance does not resolve conflicts. When two well-documented sources disagree, the record shows both. Settling the disagreement needs a rule; Docket's conflicting-sources claim ledger sets out one approach.
- Identity errors are upstream. A capture of the wrong company's site produces an internally consistent, entirely wrong trail. Entity resolution has to happen before extraction, not after.
- Granularity has a cost. Record at the level where someone will ask "where did this come from?", usually the claim.
Docket's research follows the same logic: Scout's answers each quote a retained page, and Audit re-reads that material with fetch tools denied.
Sources
- PROV-DM: The PROV Data Model, W3C Recommendation — W3C (2013), https://www.w3.org/TR/prov-dm/, accessed 2026-10-28
- PROV-O: The PROV Ontology, W3C Recommendation — W3C (2013), https://www.w3.org/TR/prov-o/, accessed 2026-10-28
- PROV-Overview: An Overview of the PROV Family of Documents, W3C Working Group Note — W3C (2013), https://www.w3.org/TR/prov-overview/, accessed 2026-10-28
- PROV Model Primer, W3C Working Group Note — W3C (2013), https://www.w3.org/TR/prov-primer/, accessed 2026-10-28
- Dublin Core to PROV Mapping (PROV-DC), W3C Working Group Note — W3C (2013), https://www.w3.org/TR/prov-dc/, accessed 2026-10-28
- DCMI Metadata Terms — Dublin Core Metadata Initiative (2020), https://www.dublincore.org/specifications/dublin-core/dcmi-terms/, accessed 2026-10-28
- WARC, Web ARChive file format (fdd000236) — Library of Congress, Sustainability of Digital Formats (2024), https://www.loc.gov/preservation/digital/formats/fdd/fdd000236.shtml, accessed 2026-10-28
- The WARC Format 1.1 — International Internet Preservation Consortium (n.d.), https://iipc.github.io/warc-specifications/specifications/warc-format/warc-1.1/, accessed 2026-10-28
- FIPS 180-4, Secure Hash Standard (SHS), publication page — NIST (2015), https://csrc.nist.gov/pubs/fips/180-4/upd1/final, accessed 2026-10-28
- FIPS PUB 180-4, Secure Hash Standard (PDF) — NIST (2015), https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf, accessed 2026-10-28
- ISO 28500:2017, Information and documentation — WARC file format — International Organization for Standardization (2017), https://www.iso.org/standard/68004.html, accessed 2026-10-28
External Sources (10)
Published by
Docket Research
Docket provides deal-origination research software and managed research for private equity teams, screening companies against a mandate and showing the evidence behind each finding.
Editorial note
Researched and written by Docket Research with AI-assisted research tools; sources are cited inline and checked before publication. Report an error: https://docket.capital/evidence-standards#corrections.