HiringCoachAI

Data map

Last reviewed 2026-05-20

Inventory of every personal data field HiringCoachAI stores, where it lives, who processes it, and how long it is retained.

Firestore collections

User-scoped subcollections live under users/{uid}/.... Top-level collections that key on userId (or equivalent) are listed flat. Operational and admin-internal collections that hold no customer personal data are excluded; the automated data-map audit maintains an explicit allowlist for those.

User identity and authentication

CollectionFieldsClassificationRetentionLawful basis (GDPR)Processors
usersid, name, email, emailVerified, phone, photoURL, displayName, lastAuthAt, role, cookieConsent (necessary, analytics, marketing, version, decidedAt; written by the cookie-consent API on user action), preferencesConfidentialUntil account deletion + audit retentionContract (6.1.b), consent for optional analytics/marketing trackingFirebase/GCP; Mailchimp for account/customer communications and communication-list management
users/{uid}/userDetailsextended profile fields, updatedAtConfidentialUntil account deletionContractFirebase
accountsuserId, provider, providerAccountId, refreshToken, accessToken, typeRestrictedUntil account deletionContractFirebase
sessionsuserId, sessionToken, expiresRestrictedMax 7 d (customer) / 12 h (admin)ContractFirebase
authTokensuserId, tokenHash, createdAt, expiresAtRestricted5 min TTLContractFirebase
verificationTokensidentifier, tokenHash, expiresRestrictedTTL per token (typically 24 h)ContractFirebase
account_deletion_challengeschallengeId, userId, confirmTokenHash, createdAt, expiresAtRestricted15 min TTLContractFirebase

Resumes, applications, and job-search content

CollectionFieldsClassificationRetentionLawful basis (GDPR)Processors
users/{uid}/resumesFile name, extracted text, metadata, createdAtConfidentialUntil account deletionContractFirebase/GCS, OpenAI (on generation; per-request store: false, no Zero Data Retention (ZDR) amendment), ElevenLabs (TTS output only)
users/{uid}/filesfileId, ownerUserId, original file name, content type, size, SHA-256 hash, storage bucket/object path, source, status, created/updated/deleted timestampsConfidentialUntil account deletionContractFirebase/GCS
users/{uid}/resumeMetadataresume tags, ATS scoring, last-edit timestampsConfidentialUntil account deletionContractFirebase
users/{uid}/coverLettersJob title, company, content, statusConfidentialUntil account deletionContractFirebase, OpenAI (per-request store: false, no Zero Data Retention (ZDR) amendment)
users/{uid}/applicationsjobId, status, dates, notes, attached resume referenceConfidentialUntil account deletionContractFirebase
users/{uid}/draftsin-progress application materialsConfidentialUntil account deletionContractFirebase
users/{uid}/customQuestionsquestion, responses, createdAtConfidentialUntil account deletionContractFirebase, OpenAI (per-request store: false, no Zero Data Retention (ZDR) amendment)
users/{uid}/shortAnswersshort-answer responses for application packetsConfidentialUntil account deletionContractFirebase
users/{uid}/fitAnalysisper-job fit analysis recordsConfidentialUntil account deletionContractFirebase, OpenAI
users/{uid}/candidateAnalysiscandidate-evaluation outputsConfidentialUntil account deletionContractFirebase, OpenAI
users/{uid}/intelBriefingsper-company intel briefingsConfidentialUntil account deletionContractFirebase, OpenAI, Perplexity
users/{uid}/exploreexploration session state (saved searches, comparisons)ConfidentialUntil account deletionContractFirebase
adminResumeBenchFixturesbenchmark fixture labels, anonymized resume text, source label, content hash, creator, notesConfidentialUntil admin deletion of fixture or superseded benchmark corpusLegitimate interest (quality assurance and model evaluation)Firebase
adminResumeBenchRunsbenchmark run configuration, sampled fixture/model IDs, status, cost/quality summary, creator, timestampsConfidential2 years or until admin deletionLegitimate interest (quality assurance and model evaluation)Firebase, OpenAI, Anthropic, Google Gemini
adminResumeBenchRuns/{runId}/attemptsper-fixture/model attempt status, run number, parser/judge outputs and scores, latency, token/cost metadata, error detailsConfidential2 years or until parent run deletionLegitimate interest (quality assurance and model evaluation)Firebase, OpenAI, Anthropic, Google Gemini

Coaching, interview prep, and pep-talks

CollectionFieldsClassificationRetentionLawful basis (GDPR)Processors
users/{uid}/interviewQuestionsgenerated practice questions per roleConfidentialUntil account deletionContractFirebase, OpenAI
users/{uid}/interviewResearchCasesresearch-case payloads for interview prepConfidentialUntil account deletionContractFirebase, OpenAI, Perplexity
users/{uid}/pepTalksgenerated pep-talks (text + audio)ConfidentialUntil account deletionContractFirebase, OpenAI, ElevenLabs / Google Cloud Text-to-Speech
users/{uid}/taskstitle, description, status, dueDate, tagsConfidentialUntil account deletionContractFirebase
users/{uid}/onboardingonboarding progress / preferencesConfidentialUntil account deletionContractFirebase

Contacts and follow-ups

CollectionFieldsClassificationRetentionLawful basis (GDPR)Processors
users/{uid}/contactsname, email, phone, LinkedIn URL, notes, lastContactedConfidentialUntil account deletionContractFirebase
users/{uid}/contactLinksper-contact relationship metadataConfidentialUntil account deletionContractFirebase
users/{uid}/followUpsscheduled follow-ups per contactConfidentialUntil account deletionContractFirebase
users/{uid}/followUpRemindersreminder records for follow-upsConfidentialUntil account deletionContractFirebase

Integrations (LinkedIn, OAuth-based imports)

CollectionFieldsClassificationRetentionLawful basis (GDPR)Processors
users/{uid}/integrationsper-integration tokens / configurationRestrictedUntil account deletion or revocationConsentFirebase
users/{uid}/linkedInLinkedIn profile snapshot, last sync, scopeConfidentialUntil account deletionConsentFirebase, LinkedIn
users/{uid}/linkedinJobExportsLinkedIn job-search exportsConfidentialUntil account deletionConsentFirebase, LinkedIn
users/{uid}/linkedinProfileExportsLinkedIn profile exportsConfidentialUntil account deletionConsentFirebase, LinkedIn
linkedinCookiesuid, liAt (AES-256-GCM encrypted), createdAt, expiresAtRestrictedTTL 1 h (configurable), or until revokeConsentFirebase

Subscriptions and feedback

CollectionFieldsClassificationRetentionLawful basis (GDPR)Processors
subscriptionsuserId, stripeCustomerId, stripeSubscriptionId, status, created, updatedConfidentialUntil account deletion + 7 y for tax recordsContract, legal obligationFirebase, Stripe
subscriptionHistoryper-user subscription lifecycle eventsConfidential7 y (tax / billing audit)Legal obligationFirebase, Stripe
feedbackuser-submitted product feedback (often includes free-text)ConfidentialUntil account deletionLegitimate interestFirebase
aiOutputFeedbackthumbs up/down on AI outputs, optional commentConfidentialUntil account deletionLegitimate interestFirebase

Pilot / group programs (per-user data within a sponsor program)

CollectionFieldsClassificationRetentionLawful basis (GDPR)Processors
pilotMembershipsuserId, pilotId, email, display name, role/status, cohort tags/subgroups, invitation/activation/removal timestampsConfidentialIdentifying fields until account deletion; anonymized program participation retained until program endContract, legitimate interestFirebase
pilotAdminsuserId, pilotId, role, permission overrides, status, invite/grant/revocation timestampsConfidentialUntil program end or access revocation + audit retentionContract, legitimate interestFirebase
pilotSessionsuserId, membershipId, sessionId, start/end/heartbeat timestamps, active/idle/engaged duration, page-view and action counters, features/page groups used, entry/exit paths, device/browser metadataConfidentialIdentifying fields until account deletion; anonymized usage retained until program endContract, legitimate interestFirebase
pilotEventsuserId, membershipId, sessionId, event name/category/feature, page path/route/referrer, timestamp, duration/count values, platform/device/browser/user-agent, event propertiesConfidentialIdentifying fields until account deletion; anonymized usage retained until program endContract, legitimate interestFirebase
pilotUserDailyRollupsuserId, membershipId, date, session count, active duration, meaningful-action count, feature-usage counts, page views, last-active timestampConfidentialIdentifying fields until account deletion; anonymized usage retained until program endContract, legitimate interestFirebase
pilotGoalsprogram-level goals and targetsInternal / ConfidentialUntil program endContractFirebase
pilotInterventionscoach interventions logged per userConfidentialUntil program endContractFirebase
therapistSessionssession metadata for coaching engagementsConfidential7 y (record retention)Legitimate interestFirebase

Account-deletion ledgers

CollectionFieldsClassificationRetentionLawful basis (GDPR)Processors
deleted_usersdeletedUid, normalizedEmail, displayEmail, userName, status, deletionReason, contentCreated, billingCleanupStatusConfidential365 d audit retentionLegitimate interest (fraud/abuse detection, restoration)Firebase
deleted_account_snapshotsfull user doc + subscription snapshot + content inventoryRestricted30 d recovery windowLegitimate interestFirebase
deleted_account_feedbackuserId, feedbackReason, feedbackNotesInternal365 dLegitimate interest (product improvement)Firebase

Audit and security ledgers

CollectionFieldsClassificationRetentionLawful basis (GDPR)Processors
auditLogts, actorUid, actorRole, ip, userAgent, action, resourceType, resourceId, delta, tenantId, requestIdConfidential2 yearsLegal obligation (security), legitimate interest (forensics)Firebase
securityAuditMonitorRunsrunId, timestamps, lookback window, reviewed-event count, finding type/severity/count, hashed actor/IP/resource identifiers, retention expiryConfidential365 daysLegitimate interest (security monitoring, compliance evidence)Firebase, Sentry for finding notifications
aiCallAudituid, endpoint, model, promptHash, tokensIn, tokensOut, requestedAt, durationMs, piiDetectedConfidential1 yearLegitimate interest (AI governance)Firebase
complianceTrainingLogsignerUid, signerEmail, signerName, document title/path/hash/version, signed statement, acknowledgment method, IP, user-agent, timestampConfidential7 years after access relationship endsLegal obligation (compliance evidence), legitimate interest (security governance)Firebase
users/{uid}/complianceAcknowledgmentslatest per-person/per-document onboarding acknowledgment rollup, latest log ID, document metadata, signer identity, timestampConfidential7 years after access relationship endsLegal obligation (compliance evidence), legitimate interest (security governance)Firebase
complianceDocumentReviewLogreviewer UID/email/name, document title/path/hash/version, review cadence, scheduled window, notes, timestampConfidential7 yearsLegal obligation (compliance evidence), legitimate interest (security governance)Firebase
complianceDocumentReviewslatest per-document review rollup, latest log ID, reviewer identity, document metadata, cadence, scheduled window, notesConfidentialSuperseded by latest review; retained in complianceDocumentReviewLog for 7 yearsLegal obligation (compliance evidence), legitimate interest (security governance)Firebase
compliancePatchVerificationRunsreviewer UID/email/name, repository, check status, Dependabot PR/alert summaries, SBOM status, notes, timestampConfidential7 yearsLegal obligation (compliance evidence), legitimate interest (security governance)Firebase
compliancePatchVerificationlatest monthly patch-verification rollup, latest passing run timestamp, latest check status, reviewer identityConfidentialSuperseded by latest run; retained in compliancePatchVerificationRuns for 7 yearsLegal obligation (compliance evidence), legitimate interest (security governance)Firebase

Non-Firestore data (sub-processors and external systems)

This section is the data-map projection of the sub-processors; both are kept in sync by the automated data-map audit.

Core infrastructure

SystemDataClassificationRetention
Google Cloud Platform / FirebaseAuthentication, Firestore database content (all rows above), Cloud Storage objects for account documents / resume binaries, Cloud Tasks payloads, Cloud Text-to-Speech inputs, backup/export buckets, and Cloud Functions source buckets.Confidential (inherits source)Until account deletion (live data); Firestore PITR retains 7 days; managed Firestore backups retain 98 days
VercelApplication hosting, Edge Middleware, Serverless Function inputs, AI Gateway routing, platform logsInternalVendor retention for runtime/platform logs; enabled log drain sends selected production/preview log sources to Sentry
CloudflarePublic DNS, reverse proxy, CDN/security edge for hiringcoach.aiInternal / Confidential if request metadata includes user identifiersPer Cloudflare defaults
Firestore backupsFirestore PITR, managed daily Firestore backups, manual local Firestore JSON export tooling, and the US multi-region backup/export bucketConfidential (inherits source)PITR: 7 days; managed daily Firestore backups: 98 days; primary export bucket: 90-day soft delete; local exports: 30 days target
Domain registrar / DNSDomain registration metadata, DNS recordsInternalUntil domain transfer or expiry
GitHubSource-code hosting, CI runs, deploy artifactsInternalPer repository policy

Payments and email

SystemDataClassificationRetention
StripeCard tokens, customer IDs, payment intents, invoices, subscription eventsRestricted (tokens); Confidential (customer IDs)Per Stripe's policy; we hold only identifiers
SendGrid (Twilio)Email addresses, send metadata, bounce / complaint records (transactional only)ConfidentialPer SendGrid default (90 d activity)
Mailchimp (Intuit)Email, name, account/customer communication status, marketing-email preferences where applicableConfidentialUntil unsubscribe or suppression

AI / generation providers

SystemDataClassificationRetention
OpenAI (called both directly and via Vercel AI Gateway)Prompts + completionsConfidential (input); output is HiringCoachAI-ownedPer-request store: false. No Zero Data Retention (ZDR) amendment: OpenAI's then-current standard API retention windows apply.
Perplexity AIResearch-backed search promptsConfidentialStandard API terms; provider default retention applies.
ElevenLabsText-to-speech audio outputConfidentialStandard API terms; provider default retention applies.
DeepgramAudio-to-text transcriptsConfidentialPer-request redact=true to redact sensitive number-like entities from transcripts, such as payment cards and Social Security numbers; provider default audio retention otherwise applies.
Google Cloud Text-to-SpeechAlternate TTS pipelineConfidentialStandard API terms; provider default retention applies.

OAuth and import providers

SystemDataClassificationRetention
Google OAuthProfile, email; Google Drive scope only on user grantConfidentialUntil user revokes
LinkedInOAuth sign-in; profile import (with user consent)ConfidentialUntil user revokes
Facebook OAuthProfile, emailConfidentialUntil user revokes
CanvaDesign asset import metadataInternalUntil user revokes
MapboxGeocoding and location display (approximate location strings)InternalPer Mapbox defaults

Monitoring and analytics (consent-gated for non-essential)

SystemDataClassificationRetention
SentryError payloads, stack traces, Vercel drained logs, user IDs only where needed for debugging after beforeSend scrubbingConfidential90 d
AmplitudeProduct analytics events (anonymous or identified)Internal / Confidential (if identified)Per vendor defaults; revocable via analytics consent
MixpanelProduct analytics eventsInternal / Confidential (if identified)Per vendor defaults; revocable via analytics consent
HotjarHeatmaps and session insights with input maskingInternalPer vendor defaults; revocable via analytics consent
Google Analytics / Google Tag Manager (GTM)Page views, conversion eventsInternalPer vendor defaults; gated by analytics consent
Meta Pixel (Facebook)Conversion events, hashed identifiersInternalPer vendor defaults; gated by marketing consent
PostHog (PostHog Inc., US) — client-sideProduct-analytics event names and properties (e.g. login_attempted, email_magic_link_sent, registration_form_opened, upgrade_page_viewed, checkout_initiated, resume_optimization_started, job_search_submitted, job_board_link_clicked); stable user identifier (Firebase UID) and email attached only after analytics consentInternal / Confidential (when identified)Per vendor defaults; gated by analytics consent. SDK is opted-out by default in instrumentation-client.ts; capture begins only after the analytics consent category is granted and ceases immediately on revocation (distinct ID is reset). Lawful basis: consent.
PostHog (PostHog Inc., US) — server-side transactionalOperational events tied to contract performance: subscription_purchased, payment_failed (from Stripe webhook), and account_deletion_confirmed (from the account-deletion confirmation handler). Distinct ID is the Firebase UID for billing reconciliation and churn/fraud analysis.ConfidentialPer vendor defaults. Lawful basis: contract performance (subscription events) and legitimate interest (account-deletion churn analysis, payment-failure fraud signal). These events are operational telemetry, not marketing or behavioral analytics, and are not gated by cookie consent.

PII fields (consolidated)

For DSR purposes, a user's personal data is distributed across:

  • users/{uid} and every user-scoped subcollection above (resumes, files, coverLetters, contacts, applications, integrations, etc.)
  • subscriptions and subscriptionHistory (rows where userId == uid)
  • linkedinCookies (rows where uid == uid)
  • accounts, sessions, authTokens, verificationTokens (rows where userId == uid)
  • auditLog, aiCallAudit (rows where actorUid == uid)
  • pilotMemberships, pilotAdmins, pilotSessions, pilotEvents, pilotUserDailyRollups, pilotGoals, pilotInterventions, therapistSessions (rows where uid, userId, or membershipId links to the data subject)
  • Stripe (customer object keyed by stripeCustomerId)
  • SendGrid (email address)
  • LinkedIn / Google / Facebook (provider-side records under the user's revocable OAuth grants)

The account-deletion flow cascades across user-scoped Firebase collections, linked authentication and session records, user-linked pilot administrator assignments, pilot-program direct identifiers, and Stripe subscription cancellation/verification before active account data removal. Pilot usage records are retained only after direct user identifiers are replaced with non-reversible deleted-participant identifiers and direct contact, name, and free-text fields are removed. SendGrid and other vendor-side records outside Stripe are handled through the DSR process rather than automatic API deletion.

The self-service account export currently includes the user's profile, recursive user subcollections, subscription record, linked authentication and session records with security secrets redacted, metadata-only audit rows from the audit log and AI call audit, and pilot membership, pilot-admin assignment, pilot-session, pilot-event, and pilot user-daily-rollup rows tied to the user. Vendor-side Stripe, SendGrid, analytics, or OAuth-provider records are handled through the DSR workflow with the applicable provider rather than the self-service JSON export.

Maintenance

  • An automated data-map audit runs during local compliance checks and the manual security workflow. It scans every Firestore collection reference in the application code and compares it to this document, fails if a collection is referenced in code but not represented here, and maintains an explicit allowlist for operational and admin-internal collections that hold no personal data.
  • The same audit surfaces drift between this document and the sub-processors when local compliance checks or the manual security workflow are run.

Change history

DateChangeAuthor
2026-04-24Initial mapSecurity Officer
2026-05-06Comprehensive rewrite: added user-scoped subcollections (applications, drafts, fitAnalysis, candidateAnalysis, intelBriefings, interviewQuestions, interviewResearchCases, pepTalks, onboarding, contactLinks, followUps, followUpReminders, integrations, linkedIn / linkedinJobExports / linkedinProfileExports, shortAnswers, resumeMetadata, userDetails, explore, feedback, aiOutputFeedback, subscriptionHistory, verificationTokens, therapistSessions, pilotMemberships, pilotGoals, pilotInterventions); split compound vendor cells in non-Firestore section so each sub-processor has its own row; added drift gate via the automated data-map audit.Security Officer
2026-05-07Clarified self-service export coverage and vendor-side deletion status after code review and export expansion.Security Officer
2026-05-07Added compliance onboarding acknowledgments, training log, scheduled document review log, and latest document review rollups after onboarding/review portal implementation.Security Officer
2026-05-08Added monthly patch-verification run and rollup collections; corrected data-map audit workflow description to local/manual checks.Security Officer
2026-05-12Clarified that the cookie marketing-consent field governs marketing/attribution tracking and is not itself a marketing-email subscription. Mailchimp processing is listed for account/customer communications and communication-list management; marketing-email preference handling remains separate from cookie tracking consent.Security Officer
2026-05-12Added user-linked pilot engagement collections (pilotAdmins, pilotSessions, pilotEvents, pilotUserDailyRollups) to the personal-data inventory and account-export coverage notes.Privacy Officer
2026-05-12Clarified account-deletion handling for pilot programs: direct user identifiers are removed from pilot membership and usage records while anonymized usage is retained for program reporting.Privacy Officer
2026-05-14Added securityAuditMonitorRuns after implementing the hourly audit-log anomaly monitor and retention target.Security Officer
2026-05-17Added PostHog (PostHog Inc., US) as a product-analytics sub-processor. Client-side capture is opted-out by default and gated through the analytics consent category. Server-side transactional events (subscription, payment-failure, account-deletion confirmation) are listed separately under contract performance / legitimate interest.Privacy Officer
2026-05-17Added users/{uid}/files metadata for server-mediated account document uploads; aligned GCP/Firebase row with account document storage now that the upload feature is live.Security Officer
2026-05-20Added resume parser benchmark fixture, run, and attempt collections after introducing the admin benchmark harness.Security Officer

← Back to the trust center

showUpgradeModal: false, modalType: migration, planName: