Ten thousand pages, read by lunch.
Documents is a document intelligence surface for the unstructured PDFs, scans, and contracts that everyone has and no one reads. Compare, summarize, redact, and extract at scale, with citations and an audit trail built in.
Five capabilities, on any document.
Documents handles PDFs, scans, DOCX, PPTX, and XLSX, with OCR across Latin, Cyrillic, Greek, Arabic, Hebrew, CJK, and Devanagari scripts. Every operation comes with citations and an audit trail.
Returns a 2-page summary of a 500-page filing, with page-and-paragraph citations on every sentence.
Stable diff between a v2 and v3 contract, with semantic alignment when paragraphs have moved or been renumbered.
Obligations, dates, amounts, SLAs, parties, addresses. Returns JSON with cited source spans. Validates against a schema you provide.
14 PII classes, custom dictionaries, regex, and a per-document review queue. Burned into the rendered PDF, with reversible originals in audit.
"Where does the agreement let us terminate for convenience?" Returns the clause, the section number, and a one-paragraph plain-English answer.
Three passes, in series.
Every document runs through three passes before it lands in your workspace. Each pass is cached, so reprocessing is free.
OCR and layout
Pages are parsed for layout: headers, columns, footnotes, tables, signature blocks. OCR runs only where text is rasterized.
Tag entities and structures
Named entities, dates, monetary amounts, obligations, clauses, and parties are tagged. Each tag carries page, paragraph, and bounding-box coordinates.
Reason over the corpus
Q&A, summarization, compare, and extract run over the tagged corpus. Every answer ships with citations down to the paragraph and is verified before display.
Nine more, all in production.
Each capability below ships in the product today. None requires a separate product, integration, or per-page upcharge.
Bulk ingest
Drop a folder, an S3 prefix, or a SharePoint library. Hundreds of thousands of files index in hours.
Encrypted throughout
TLS 1.3 in transit and encryption at rest from our managed host. Your content is never used to train a model.
Semantic search
"Find the clause that lets us audit their subprocessors." Returns ranked results across your whole corpus.
Multi-script OCR
Latin, Cyrillic, Greek, Arabic, Hebrew, CJK, Devanagari. Mixed-script pages handled.
Schema-bound extract
Define your JSON schema. We extract and validate. Failures route to a human-in-loop queue with the page in view.
Webhooks
Every upload, every page parsed, every entity tagged. Fire a webhook with a stable schema.
Reversible redaction
Burned-in for the recipient, originals stay in audit with role-gated reveal. Watermarked per recipient.
Page quality scoring
Every page gets a quality score. Low-quality scans route to a higher-cost OCR pass, and pages below your threshold enter a manual queue.
BYO model
Bring an Anthropic key, an OpenAI key, or a self-hosted inference endpoint. Documents calls through unchanged.
Documents flows back in.
A document is rarely a destination. The output usually needs to land as a task, a contract, a row in CRM, or a doc.
Five destinations for parsed output
A vendor MSA you uploaded becomes a Contract record. A claim file extracts to Tasks. A customer-supplied data dictionary becomes an indexed source for Search. A board pack drops into Docs. A signed proposal updates the deal in CRM.
Programmatic documents.
Upload, ask, redact, or extract. Same surface, batch or interactive.
# Ingest 1,400 vendor MSAs, extract obligations into a typed schema. from wrxstack import Wrx wrx = Wrx(token=os.environ["WRX_TOKEN"]) job = await wrx.documents.ingest( source="s3://acme-legal/msas/2024/*.pdf", redact_pii=True, extract={ "obligations": { "section": "str", "text": "str", "days_to_breach": "int?" }, "liability_cap_multiplier": "float", "governing_law": "str", "renewal_terms": "str" } ) await job.wait() # runs in parallel across the corpus for doc in job.results: if doc.extract.liability_cap_multiplier > 2.0: await wrx.tasks.create( title=f"Review liability cap on {doc.title}", links=[{ "kind": "document", "ref": doc.id }], owner="legal-ops" )
Documents vs. Google Document AI.
Google's Document AI is a layer of cloud services you assemble. wrxstack Documents is the end-to-end product.
wrxstack Documents vs. Google Document AI
| Capability | Google Document AI | wrxstack Documents |
|---|---|---|
| End-to-end product | SDK + services | UI + API, ready out of box |
| Q&A with citations | Bring your own RAG | Built in, cited to the paragraph |
| Compare across versions | Not provided | Semantic diff with renumbering |
| Reversible redaction | DLP API only | UI + reversible audit trail |
| Email container ingest | Not provided | MSG, EML, MBOX, recursive |
| Pricing predictability | Per-page tiered | Predictable, no per-page fees |
Common questions.
Six things legal, claims, and procurement teams ask before adopting Documents.
How do you guarantee the AI does not hallucinate when summarizing?
Every claim in a summary is bound to a span in the source document. Spans are verified by a second model that returns a yes/no entailment score. Sentences below the threshold are dropped before display, so what you read traces back to the page it came from.
How is our document data secured?
Documents runs over TLS 1.3 in transit, and content is encrypted at rest by our managed hosting provider. When you configure redaction to run before storage, the sensitive spans never persist. Your content is not used to train any model, which is enforced by the model provider's API terms.
What happens to a 2,000-page filing with mixed scan quality?
Layout detection handles per-page variation. Low-quality scans route to a higher-cost OCR pass automatically. The job dashboard shows page-level quality scores. You can configure a minimum threshold below which pages enter a manual queue.
How does ingest scale for a large library?
Ingest runs in parallel across your corpus, and the job dashboard shows live progress per document. Larger workloads scale on dedicated capacity, and reprocessing is cached, so re-running an extract does not re-parse the pages.
What about unstructured emails and attachments with embedded documents?
The ingest pipeline unwraps email containers (MSG, EML, MBOX), extracts every attachment, and processes recursively. Relationships between the cover email and the attachments are preserved as edges in the graph.
Can extraction match a custom schema for our forms?
Yes. You define the schema with types and validation rules. The extractor returns rows with cited spans. Failures route to a human-in-loop queue with the page in view. Schema versions are tracked, so a v2 of your form does not break a v1 extraction pipeline.
Pairs well with.
Documents is the upstream surface for Contracts and Search. Tasks owns the exceptions queue.
Who this is not for.
Documents reads, redacts, and extracts from PDFs at volume. If you are a law firm or records team that needs a full document-management system with matter-centric filing, retention schedules, and legal hold, a dedicated DMS will fit better. Documents processes and understands files, it is not a system of record for regulated retention.
Upload a 500-page PDF right now.
Free to start, no credit card. Redaction and schema extraction are included. The first redacted set lands the same day.