Skip to content

Data Flow & Subprocessor Disclosure

One-pager for vendor security reviews (HECVAT, TX-RAMP, campus procurement). Covers where customer data lives, moves, and which third parties touch it.

What data we handle

ClassExamplesWhere it lives
Customer documentsUploaded PDFs, DOCX, PPTX, HTML; converted accessible outputsCloudflare R2 (primary object store), AWS S3 (processing shim), processing hosts (transient)
Account dataEmail, name, org, auth identifiersSupabase (PostgreSQL, AWS us-east-2)
Billing dataPayment method, invoicesStripe (we store only Stripe customer/charge IDs)
Operational metadataJob status, page counts, cost records, structured logsSupabase, Loki (30-day retention)

Documents are the sensitive class. They may contain FERPA-covered student records (syllabi, advising worksheets, forms). We do not solicit and do not knowingly process PHI; HIPAA is out of scope contractually.

Data flow

Browser (TLS 1.2+)
β”‚ upload
β–Ό
Cloudflare (Pages frontends, R2 object storage β€” SSE at rest)
β”‚ signed transfer
β–Ό
API: AWS API Gateway β†’ Lambda (us-east-1) ── small/synchronous jobs
Node processing host (Docker, private LAN, ── large/chunked jobs
outbound-only via Cloudflare Tunnel)
β”‚ inference (document images / extracted text)
β–Ό
AWS Bedrock β€” Anthropic Claude (us-east-1, zero data retention;
no training on inputs, no log retention of prompts/outputs)
β”œβ”€ Amazon Textract AnalyzeDocument (us-east-1, synchronous, page image
β”‚ bytes in the request β€” no S3 handoff). Covered by the org AI services
β”‚ opt-out policy. ON in production; see "Amazon Textract" below for
β”‚ which pages are sent.
β”‚ results
β–Ό
Accessible output written back to R2 β†’ customer download (TLS)

Amazon Textract β€” status and history

Textract is in production use (checked 2026-10-03). Customer page images reach it from four places, each behind its own flag:

PathFlagWhat is sentLive since
Convert (PDF to HTML) layout parser, replacing Datalab Marker (#2703)PDF_TEXTRACT_ENABLED (API Lambda, EC2 anchor)Page images of documents routed to the layout parser, including text-only documents on the fast path, not only scans2026-09-06 (first ledgered call 17:39Z)
Convert figure detectionTEXTRACT_FIGURE_DETECTION (API Lambda, EC2 anchor)Candidate pages only (see docs/admin/products/pdf/textract-figure-detection.md)2026-09-07
Forms detection, image lane(forms-detect)Scanned or image-only PDFs2026-09-07
Auto-tagger OCR lane (#3418)FLYER_TAGGER_TEXTRACT_ENABLED (flyer-tagger Lambda env, EC2 anchor via infra/anchor/anchor.config.env)Scanned or flattened pages only2026-09-25 (Lambda), 2026-09-28 (anchor, #3865)

The auto-tagger lane’s enable gate (#3502) was closed on 2026-10-03. Its role has carried textract:AnalyzeDocument since 2026-09-23 (deploy of 46feeac19).

Pre-policy exposure, recorded here so it does not live only in a CRM task. One document (job 8bab5965) was sent to Textract on 2026-09-05 during evaluation, one day before the organisation AI services opt-out policy was attached on 2026-09-06. That single request predates the opt-out and is therefore not covered by it. No other document was sent before the policy was attached; every request since 2026-09-06 is covered. CRM task 628225a8-… holds the operational detail and must not be closed while it is the only other record.

Scope caveat. The opt-out policy is attached at the organisation level and does not travel with the workload: a deploy of this service outside AWS org o-jehmi38iqm would not inherit it, and the retention posture above would not hold.

Supporting paths: SQS queues carry job pointers (IDs + R2 keys), never document content. Structured logs carry metadata (request IDs, user IDs, durations), never document content.

Subprocessors

SubprocessorPurposeCustomer data receivedRetention posture
Amazon Web ServicesAPI compute (Lambda), queues (SQS), S3, Bedrock inferenceDocuments (processing + inference)Bedrock: zero data retention; S3 lifecycle-managed
CloudflareFrontend hosting, CDN, R2 object storage, tunnelDocuments (storage), traffic metadataStored until customer deletes; SSE at rest
SupabasePostgreSQL, authenticationAccount data, job/document metadataDaily backups; deleted on account deletion
Anthropic (via AWS Bedrock)AI document analysisDocument page images / text during inferenceZDR β€” not retained, not used for training
Amazon Textract (AWS)Layout, table and text recognition for conversion, figure and form detection, and OCR of scanned pages (AnalyzeDocument, synchronous, bytes only)Rendered page images (see β€œAmazon Textract” above for which pages)Not retained: org-level AI services opt-out policy p-90qu1cuzca (all services, child overrides disallowed, target r-sml2, org o-jehmi38iqm). Synchronous API, no S3 handoff, no async job store.
MathpixOCR of math/scientific notation (conversion pipeline)Page images of documents routed to OCRPer Mathpix API terms; only pages needing math OCR
Google (Gemini API)Legacy AI paths being retired from document processing (see issue #2242)See #2242 auditNOT zero-retention β€” the reason for retirement
StripePaymentsBilling data (card data never touches our systems)Stripe-managed
ResendTransactional emailEmail address, message content (no documents)Provider-managed
TwilioPhone/voicemail (support line, voice OTP)Phone numbers, voicemail audioProvider-managed
Backblaze B2Encrypted server backups (ops databases, scripts β€” not customer documents)None (operational data only)30-day rolling

Admin alerting (Telegram) carries operational text only β€” never customer data or document content.

Regionality

All storage and processing is in the United States (AWS us-east-1/us-east-2, Cloudflare US-region R2, Supabase us-east-2). No offshore processing.

Deletion

Account deletion removes Supabase records and R2 objects for the account (see docs/admin/access/account-deletion.md and docs/admin/security/data-privacy-implementation.md). Customers can delete individual files at any time; deletion removes the stored original and outputs.

Known items in flight (tracked, disclosed)

  • Gemini retirement from document paths β€” PDF inference already moved to Bedrock ZDR (epic #1980); remaining non-PDF paths under audit in #2242.
  • Secrets management centralization β€” migration of runtime credentials from host env files to managed secret stores, #2243.
  • TX-RAMP β€” not yet certified; provisional certification via sponsoring institution is the intended path.
  • SOC 2 β€” not certified; roadmap letter available on request.