pac.dog pac.dog

Security

pac.dog's posture is minimal attack surface: the corpus is read-only public data mirrored from primary U.S. government sources, the only persistent user data we hold is an email address (for sign-in), and we sit on audited subprocessor platforms for compute, storage, payments, and email.

Last reviewed: 2026-05-17

Subprocessors

Every system that handles user data is run by a subprocessor with a current independent audit. We do not operate our own hosting, database, payments, or email infrastructure.

SubprocessorFunctionIndependent attestations
VercelApp, API, cron, edge cacheSOC 2 Type II, ISO 27001, PCI DSS Level 1
NeonPostgres database (encrypted at rest)SOC 2 Type II, HIPAA-aware
StripePayments (Checkout, Webhooks)SOC 1/2 Type II, PCI DSS Level 1
SendGrid (Twilio)Magic-link + transactional emailSOC 2 Type II, ISO 27001
ReplicateInference for /askSOC 2 Type II

The data we send each subprocessor is the minimum required to serve the user's request. Stripe never sees pac.dog's database; Replicate sees only the question + the retrieved context block, not user identity or wallet state.

Authentication & session

Encryption

Data we handle — and don't

KindHandled?Detail
Email addressYesSign-in identifier. Stored in users.email.
Watchlist + reaction + thread contentYesUser-created records, owned by the user, deletable via the API.
Wallet ledgerYesToken balance + append-only charge log for /ask. No card data.
Card / bank dataNoStripe Checkout is hosted; card details never reach pac.dog servers.
SSN, DOB, government ID, biometricsNoNot collected. Not stored.
Geolocation, device fingerprintNoNo third-party analytics. No tracking pixels. No ad SDKs.
Public-record corpusYesFEC, congress.gov, govinfo.gov, IRS Form 990, House Clerk / Senate LIS roll-call XML, Senate LDA, DOJ FARA, Federal Register, Regulations.gov, U.S. Census ACS, each state's SoS / LegInfo. Source URLs preserved on every row.

Audit trail

SOC 2 control mapping

pac.dog does not yet hold an independent SOC 2 Type II report. We can speak to the Trust Service Criteria as observed posture today:

CriterionObserved posture
Security (CC)TLS 1.3 everywhere, HSTS, magic-link auth, session cookies HttpOnly/Secure/SameSite, PAT entropy ≥ 128 bits, webhook signature verification, Neon-managed at-rest encryption. Subprocessors are SOC 2 Type II.
AvailabilityVercel edge cache fronts every read endpoint with s-maxage; Neon serves Postgres with multi-AZ replication. Live status: /status.
Processing IntegrityMechanical extractors only — no LLM in any ingest path. Idempotent upserts (ON CONFLICT DO NOTHINGor single-statement CTEs). Source URL preserved on every row. Drift detection on every filing-form spec we generate (/api/v1/filing-forms).
ConfidentialityMinimal PII (email only). Cards handled by Stripe Checkout off-platform. API keys + webhook secrets are environment variables, not database rows. Personal Access Tokens are hashed at rest.
PrivacyNo third-party analytics, no advertising SDKs, no tracking pixels. One first-party session cookie. Users can delete their account + every owned record from the account page. See /privacy.

ISO 27001 Annex A mapping

Annex A controlObserved posture
A.5 Information security policiesThis page + /privacy are the published policies.
A.8 Asset managementSingle repository, single Postgres database, enumerated subprocessors above.
A.9 Access controlMagic-link sign-in; PAT scoping; admin surfaces gated on users.is_admin.
A.10 CryptographyTLS 1.3 in transit; AES-256 at rest (Neon-managed); SHA-256 PAT hashes.
A.12 Operations securityAppend-only ingest + wallet ledgers; per-source cron with lock; nightly drift checks.
A.13 Communications securityHTTPS-only, HSTS, no plain-HTTP listener; Stripe webhook signature verification.
A.14 System acquisition, development & maintenanceSingle source tree; every change is a versioned commit; database migrations are forward-only files in drizzle/.
A.15 Supplier relationshipsSubprocessor list above; each is independently audited.
A.16 Incident managementSecurity disclosures to security@pac.dog. Acknowledgment within one business day.
A.18 ComplianceFederal data is public-domain (no licensing constraints). User data handled per /privacy.

What we don't claim

Each of these is roadmap. Until they land, the controls above are what we can attest to as the operator. Subprocessor attestations are linked above and verifiable directly with each vendor.

Reporting a security issue

Email security@pac.dog. Include a clear reproduction. We acknowledge within one business day and aim to remediate critical issues within 7 days. Coordinated disclosure preferred; we will not pursue legal action against good-faith research that respects user data.

pac.dog is a free, independent, non-partisan research tool. Every candidate, committee, bill, vote, member, and nonprofit on this site is mirrored from primary U.S. government sources (FEC, congress.gov, govinfo.gov, IRS) and each state's Secretary of State / election commission — no third-party data vendors, no paywall, no editorial intermediation. Citations to the originating source are on every detail page.

Estimated value: $180/mo per user — but we made it free.