{"version":"2026-05-29","reviewedAt":"2026-05-29","status":"specification_only_not_deployed_tracking","site":{"name":"GoalPulse","url":"https://goalpulse.io","purpose":"Document the minimum first-party, privacy-reviewed event schema GoalPulse may use later to measure search success, content usefulness and release quality without third-party advertising trackers."},"deploymentBoundary":{"currentCollection":"No product analytics events are collected by this schema in the current release.","beforeCollectionRequires":["privacy policy update that lists event names, retention and opt-out path","first-party endpoint or privacy-preserving analytics provider review","no third-party advertising tracker dependency","release manifest update and external evidence ledger note"],"defaultRetentionDays":30,"optOutRequirement":"A visible opt-out or privacy request path must exist before event collection starts."},"prohibitedFields":["email","phone","full IP address","precise GPS location","payment details","betting account identifiers","free-text personal data","cross-site advertising identifiers"],"allowedContextFields":["eventName","occurredAt","locale","canonicalPath","pageType","entityType","entityId","referrerCategory","experimentId","variantId","viewportClass","anonymousSessionBucket","queryIntentGroup","normalizedEntityHit","resultCount","riskIntentGroup","sourcePath","targetPath","moduleId","moduleName","modulePosition","fromLocale","toLocale","depthBucket","returnWindowBucket","searchSurface","zeroResultReason","suggestedFallbackPath","articleSlug","contentType","impressionBucket"],"events":[{"name":"landing_page_view","purpose":"Understand which locale and page type starts a session.","allowedFields":["locale","canonicalPath","pageType","referrerCategory","viewportClass"],"disallowedUse":"Do not build cross-site advertising audiences."},{"name":"site_search","purpose":"Measure search demand and zero-result risk without storing raw personal text.","allowedFields":["locale","queryIntentGroup","normalizedEntityHit","resultCount","riskIntentGroup"],"disallowedUse":"Do not store raw high-risk betting queries if they contain personal data."},{"name":"zero_result_search","purpose":"Detect missing search coverage and unsafe query fallbacks without storing raw query text.","allowedFields":["locale","queryIntentGroup","riskIntentGroup","searchSurface","zeroResultReason","suggestedFallbackPath"],"disallowedUse":"Do not preserve raw search strings, personal details or betting-account context."},{"name":"entity_click","purpose":"Measure whether search and article modules route users to relevant teams, matches, groups, venues and sources.","allowedFields":["locale","sourcePath","targetPath","entityType","entityId","moduleId"],"disallowedUse":"Do not infer sensitive traits or betting intent profiles."},{"name":"article_entity_jump","purpose":"Measure whether editorial previews and explainers lead readers to verifiable entity pages.","allowedFields":["locale","articleSlug","contentType","sourcePath","targetPath","entityType","entityId","moduleId"],"disallowedUse":"Do not combine reading behavior with personal identifiers or off-site profiles."},{"name":"module_view","purpose":"Measure whether high-value answer modules such as source cards, probability disclaimers and fixture summaries are seen.","allowedFields":["locale","canonicalPath","pageType","moduleId","moduleName","modulePosition","impressionBucket"],"disallowedUse":"Do not use module visibility for personalized betting recommendations."},{"name":"language_switch","purpose":"Improve hreflang, locale labels and translation coverage.","allowedFields":["fromLocale","toLocale","canonicalPath","pageType"],"disallowedUse":"Do not combine with personal identifiers."},{"name":"scroll_depth_bucket","purpose":"Detect thin, unclear or unreadable pages by coarse depth bucket only.","allowedFields":["locale","canonicalPath","pageType","depthBucket"],"disallowedUse":"Do not record precise scroll coordinates."},{"name":"return_visit_bucket","purpose":"Estimate whether match, team and source pages create repeat utility.","allowedFields":["locale","pageType","anonymousSessionBucket","returnWindowBucket"],"disallowedUse":"Do not fingerprint devices."},{"name":"experiment_exposure","purpose":"Support privacy-safe A/B tests for search success, answer modules and recommendation ordering.","allowedFields":["locale","canonicalPath","pageType","experimentId","variantId","moduleId"],"disallowedUse":"Do not run experiments that alter factual tournament data or source attribution."}],"privacyControls":{"rawQueryStorage":"forbidden; only normalized queryIntentGroup and riskIntentGroup may be recorded","ipAddressHandling":"server logs may exist under the privacy policy, but product analytics events must not store full IP addresses","identifiers":"no user id, email, phone, payment, account or cross-site advertising identifier","aggregationMinimum":"Do not use low-volume event slices for editorial or ranking decisions without manual review.","botFiltering":"Known bots and monitoring checks should be excluded from product analytics summaries.","rolloutRequirement":"Collection remains disabled until privacy policy, opt-out path and release evidence are updated."},"evaluationUseCases":["search success rate","zero-result rate","article-to-entity click rate","language switch success","next-click rate for recommended content","module view rate for trust and source cards","experiment guardrail monitoring","release regression detection"],"guardrails":["This schema is informational until product analytics is explicitly enabled and documented.","Events must be aggregated before editorial or ranking decisions are made.","Risk-intent and football odds queries may be used only for safe routing quality, not betting recommendations.","Analytics must not override the canonical tournament graph or source verification workflow."]}