Skip to content
FonteumThe Graph
DataResearchCare CompareThe DifferAttestAPI
See the proof
  • Data
  • Research
  • Care Compare
  • The Differ
  • Attest
  • API
See the proof
Scheduled jobs · Reference

86 scheduled jobs across two systems. Each job lives in exactly one.

Fonteum runs scheduled work across two cron systems: Inngest (for jobs that need step-level retries, event emission, or observability) and Vercel cron (for lightweight HTTP-only operations). Ownership is decided by the AGENTS.md §cron-doctrine decision tree; the tools/cron-ownership-check.sh CI gate blocks any job that lands in both systems or is missing from this page.

/sources → /freshness → /docs/source-coverage →

1. Inngest functions (65)

Step-orchestrated work — retries, observability, event emission.

Inngest owns work that needs structured failure handling. Source pullers (network can flap), identity-linker (multi-step batch), webhook-deliverer (per-recipient retry), and citation-discoverer (rate-limited external API) all rely on Inngest’s step primitives + dashboard observability.

Job IDSchedule (UTC)Source filePurpose
ai-content-qa0 20 * * 0src/inngest/functions/ai-content-qa.tsWeekly Sunday 20:00 UTC AI content-QA: flag-gated (AI_CONTENT_QA_ENABLED=1). Classifies money pages as ok/thin/stale/duplicate; writes proposals to ai_review_queue. Never edits live pages.
ai-entity-summaries0 22 * * 0src/inngest/functions/ai-entity-summaries.tsWeekly Sunday 22:00 UTC AI entity-summary scaffold: flag-gated (AI_ENTITY_SUMMARIES_ENABLED=1, default OFF). Scaffold only — no-ops until implementation is reviewed. Writes to ai_review_queue only.
ai-link-suggestions0 21 * * 0src/inngest/functions/ai-link-suggestions.tsWeekly Sunday 21:00 UTC AI embedding-based link suggestions: flag-gated (AI_LINK_SUGGESTIONS_ENABLED=1). Uses OpenAI text-embedding-3-small to find semantically similar pages; writes link proposals to ai_review_queue. Never modifies live pages.
care-compare-asc-monthly0 6 1 * *src/inngest/functions/care-compare-asc-monthly.tsMonthly CMS Care Compare ASC refresh reminder; emits fonteum/source.refresh_due for the operator-triggered ASC ingest.
care-compare-dialysis-monthly0 6 1 * *src/inngest/functions/care-compare-dialysis-monthly.tsMonthly CMS Care Compare Dialysis refresh reminder; emits fonteum/source.refresh_due for the operator-triggered dialysis ingest.
cwv-anomaly-monitor0 11 * * *src/inngest/functions/cwv-anomaly-monitor.tsDaily 11:00 UTC CWV + data-freshness anomaly monitor: runs PageSpeed Insights against curated pages, checks row-count baselines on key tables, writes anomaly rows to selfheal_anomaly_log, and alerts operator on regressions.
citation-discoverer0 9 * * *src/inngest/functions/citation-discoverer.tsDaily OpenAlex poll for papers citing Fonteum data; populates discovered_citations moderation queue.
daily-refresh-stale-check0 9 * * *src/inngest/functions/source-refresh-reminders.tsLogs sources that have not refreshed within their declared cadence; surfaces in /freshness degraded badge.
health-check0 7 * * *src/inngest/functions/health-check.tsDaily Inngest dashboard ping confirming the function-registration round-trip is alive.
link-404-watchdog0 1 * * *src/inngest/functions/link-404-watchdog.tsDaily 01:00 UTC 404/broken-link watchdog: HEADs sitemap URLs, queues 404s in selfheal_redirect_queue with auto-inferred redirect destinations where safe. Operator reviews + approves before any redirect is promoted.
identity-linker*/5 * * * *src/inngest/functions/identity-linker.tsPolling job that resolves NPI ↔ PECOS-ID ↔ CCN ↔ LEIE provider identity links in batches.
indexnow-retry-nightly0 2 * * *src/inngest/functions/indexnow-retry-nightly.tsNightly retry of failed IndexNow URL submissions persisted to failed_indexnow_submissions (F-12).
m16-ai-referral-share0 22 * * 0src/inngest/functions/moat-m16-ai-referral.tsWeekly Sunday 22:00 UTC AI referral traffic share: pulls Plausible referral data for AI assistants and writes an ai_referral_share row to moat_metrics.
m4-fhir-api-usage0 8 * * 1src/inngest/functions/moat-m4-fhir-api-usage.tsWeekly Monday 08:00 UTC FHIR API usage tracker: reads 7d of fhir_request_logs, classifies requests by user-agent class and FHIR resource type, and writes fhir_api_usage rows to moat_metrics.
m6-press-mentions0 11 * * 1src/inngest/functions/moat-m6-press-mentions.tsWeekly Monday 11:00 UTC press-mention tracker: queries DataForSEO News for brand mentions, dedupes by URL, enriches each domain with its DR, and writes press_mention rows to moat_metrics.
m7-email-list-growth0 7 * * 1src/inngest/functions/moat-m7-email-list-growth.tsWeekly Monday 07:00 UTC email-list growth tracker: reads email_subscribers, computes new/unsub/total by source over the trailing 7 days, and writes email_list_growth rows to moat_metrics.
m8-internal-link-health0 8 * * 1src/inngest/functions/moat-m8-internal-link-health.tsWeekly Monday 08:00 UTC internal-link graph audit: crawls the sitemap, counts inbound internal links per page, and writes orphan/violation/healthy/avg_inbound rows (doctrine G7) to moat_metrics.
m9-topical-authority0 1 1 * *src/inngest/functions/moat-m9-topical-authority.tsMonthly (1st, 01:00 UTC) topical-authority score: counts pages with GSC impressions per topic cluster and records newest-page rank, writing topical_authority rows to moat_metrics.
m13-performance-regression0 6 * * 1src/inngest/functions/moat-m13-performance-regression.tsWeekly Monday 06:00 UTC performance-regression monitor: runs PageSpeed Insights against curated pages and writes per-metric LCP/INP/CLS/FCP/TBT pass/fail rows (doctrine G3) to moat_metrics.
m15-dataforseo-spend0 9 * * 1src/inngest/functions/moat-m15-dataforseo-spend.tsWeekly Monday 09:00 UTC DataForSEO spend tracker: queries the account balance API and writes balance + burn_rate rows (cost_dataforseo) to moat_metrics; alerts when balance < $10.
moat-m1-ai-citation0 4 * * 2src/inngest/functions/moat-m1-ai-citation.tsWeekly Tuesday 04:00 UTC AI citation-count tracker: queries assistants for Fonteum dataset citations and writes an ai_citation_count row to moat_metrics (headline moat metric).
moat-m11-fhir-empty0 * * * *src/inngest/functions/moat-m11-fhir-empty.tsHourly FHIR empty-bundle monitor: GETs each FHIR resource endpoint and flags any that return an empty Bundle (total=0), writing a fhir_empty_resource row to moat_metrics.
m19-velocity0 23 * * 0src/inngest/functions/moat-m19-velocity.tsWeekly Sunday 23:00 UTC founder-velocity metric: counts merged PRs + route/table growth over the trailing 7 days (GitHub API) and writes an m19_velocity row to moat_metrics.
m2-research-scorecard0 3 * * 1src/inngest/functions/moat-m2-research-scorecard.tsWeekly Monday 03:00 UTC research-study scorecard: classifies each published study as compounding or decaying from GSC impression trend and writes a research_scorecard row to moat_metrics.
m17-doctrine-pass-rate0 4 * * 1src/inngest/functions/moat-m17-doctrine-pass-rate.tsWeekly Monday 04:00 UTC doctrine-gate pass-rate metric: runs the doctrine gates across research/methodology pages and writes an m17_doctrine_pass_rate row to moat_metrics.
m18-fhir-partner-ping30 8 * * 1src/inngest/functions/moat-m18-fhir-partner-ping.tsWeekly Monday 08:30 UTC FHIR partner-ping tracker: reads 7d of fhir_request_logs, flags requests from enterprise healthcare-data vendor user-agents (Komodo, Definitive, Verisys, …) as enterprise probes, and writes alert-fired m18_fhir_partner_ping rows to moat_metrics (acqui-hire diligence signal).
moat-digest-weekly0 1 * * 1src/inngest/functions/moat-digest-weekly.tsWeekly Monday 01:00 UTC (09:00 PHT) founder digest: reads 14d of moat_metrics, computes top-3 movers + week-over-week deltas across all 19 metrics, collects fired alerts, and emails the summary via Resend to MOAT_DIGEST_RECIPIENT.
methodology-publisher0 7 * * *src/inngest/functions/methodology-publisher.tsDetects methodology version bumps + emits fonteum/methodology.published event for downstream consumers.
moat-m10-route-integrity0 */6 * * *src/inngest/functions/moat-m10-route-integrity.tsEvery-6-hours route integrity check across all CRITICAL_ROUTES; emails operator if any route returns 404/500 or a FHIR bundle returns total=0.
moat-m3-snapshot-depth0 1 * * 1src/inngest/functions/moat-m3-snapshot-depth.tsWeekly Monday 01:00 UTC snapshot historical-depth metric: counts retained research_snapshots vintages per dataset and writes a snapshot_depth row to moat_metrics (the data-moat metric).
moat-m5-claim-volume0 2 * * 1src/inngest/functions/moat-m5-claim-volume.tsWeekly Monday 02:00 UTC claim-volume + badge-embed-rate snapshot: counts total/7d/30d claimed facilities, writes a claim_volume row to moat_metrics (network-effect curve).
records-request-reminders0 8 * * *src/inngest/functions/records-request-reminders.tsScans outstanding public-records requests; emails operator when SLA breach is imminent (e.g. AZ ROC PR-0006673).
seo-schema-watchdog0 3 * * *src/inngest/functions/seo-schema-watchdog.tsDaily 03:00 UTC SEO/schema regression watchdog: fetches curated production pages, validates title/meta/H1/canonical/JSON-LD presence, writes results to selfheal_seo_checks, and alerts operator on failures.
sitemap-orphan-audit0 5 * * 3src/inngest/functions/sitemap-orphan-audit.tsWeekly Wednesday 05:00 UTC sitemap/orphan/internal-link audit: flags orphan pages (0 inbound), pages below the 3-link doctrine threshold, and sitemap URLs returning 404. Writes to selfheal_page_audit.
refresh-reminder-<family>per-source from cron-sources.cron_expressionsrc/inngest/functions/source-refresh-reminders.tsFamily-specific cadence reminder that nags the operator to refresh a source on schedule (NPPES, Care Compare, etc.).
source-health-monitor*/15 * * * *src/inngest/functions/source-health-monitor.tsHEAD probe per source upstream URL; flips source_health_status row + emits fonteum/source.health_status_changed.
source-puller-bea-regional0 6 1 10 *src/inngest/functions/source-puller-bea-regional.tsAnnual October BEA Regional pull — area-level GDP + per-capita income.
source-puller-bls-oews0 6 1 5 *src/inngest/functions/source-puller-bls-oews.tsAnnual May BLS OEWS pull — occupational employment + wage statistics.
source-puller-hrsa-hpsa0 6 1 1,4,7,10 *src/inngest/functions/source-puller-hrsa-hpsa.tsQuarterly HRSA HPSA pull — Health Professional Shortage Area designations.
source-puller-leie0 6 1 * *src/inngest/functions/source-puller-leie.tsMonthly OIG LEIE pull — federal program exclusions list.
source-puller-open-payments0 6 30 6 *src/inngest/functions/source-puller-open-payments.tsAnnual late-June CMS Open Payments pull — Sunshine Act manufacturer-physician general payments.
source-puller-pecos0 6 * * 0src/inngest/functions/source-puller-pecos.tsWeekly Sunday CMS PECOS PPEF pull — Medicare provider enrollment status.
event-emitter
event: fonteum/source.snapshot_inserted
eventsrc/inngest/functions/event-emitter.tsFans source-snapshot-inserted events into downstream consumers (webhook-deliverer, methodology-publisher).
refresh-manual-trigger
event: source.refresh.manual_triggered
eventsrc/inngest/functions/source-refresh-reminders.tsOperator-fired manual refresh of a source family — re-runs the puller out-of-cadence.
webhook-deliverer
event: webhook.delivery.queued
eventsrc/inngest/functions/webhook-deliverer.tsPer-recipient webhook delivery with backoff retry; consumes events emitted by the source-snapshot pipeline.
source-puller-provider-utilizationper-source cron_expression (0 6 * * *)src/inngest/functions/source-puller-provider-utilization.tsDaily CMS Provider Utilization & Payment Data snapshot pull; attests, chains, and emits snapshot events.
source-puller-inpatient-utilizationper-source cron_expression (20 6 * * *)src/inngest/functions/source-puller-inpatient-utilization.tsDaily CMS Inpatient Utilization snapshot pull; attests, chains, and emits snapshot events.
source-puller-outpatient-utilizationper-source cron_expression (40 6 * * *)src/inngest/functions/source-puller-outpatient-utilization.tsDaily CMS Outpatient Utilization snapshot pull; attests, chains, and emits snapshot events.
fhir-bulk-export-worker
event: fhir.bulk.export.requested
eventsrc/inngest/functions/fhir-bulk-export-worker.tsProcesses FHIR R4 Bulk Data Access ($export) job requests; writes NDJSON output, updates job status.
nsa-compliance-quarterly0 9 15 3,6,9,12 *src/inngest/functions/nsa-compliance-quarterly.tsQuarterly NSA/surprise-billing compliance score computation across IDR + MRF datasets.
real-act-compliance-quarterly0 9 15 3,6,9,12 *src/inngest/functions/real-act-compliance-quarterly.tsQuarterly REAL Act network-adequacy compliance scoring for health plans.
provider-directory-accuracy-quarterly0 9 15 3,6,9,12 *src/inngest/functions/provider-directory-accuracy-quarterly.tsQuarterly Provider Directory Accuracy Index (PDAI) computation across all 51 jurisdictions.
hospital-margin-annual0 9 1 12 *src/inngest/functions/hospital-margin-annual.tsAnnual hospital financial margin computation from HCRIS cost reports; runs each December 1.
chain-extender*/5 * * * *src/inngest/functions/chain-extender.tsPolls snapshot_attestations for unchained rows; links previous_link_hash to extend the attestation chain.
endpoint-uptime-monitor*/5 * * * *src/inngest/functions/endpoint-uptime-monitor.ts5-min /api/health ping; records result in endpoint_uptime_checks for rolling 24h/30d uptime % shown on /status dashboard.
freshness-watchdog0 14 * * *src/inngest/functions/freshness-watchdog.tsDaily dataset freshness audit: fetches /api/freshness, compares last_updated against declared cadence, emails operator when any dataset exceeds its threshold or endpoint uptime < 99% over 24h.
snapshot-archive0 3 * * *src/inngest/functions/snapshot-archive.tsDaily 03:00 UTC content-addressed snapshot of NPPES + PECOS source datasets to S3 (fonteum-snapshots). Deduped by SHA-256; indexes captured_at in dataset_snapshots for /status Last-snapshot column and 36h freshness gate.
risk-signal-refresh0 4 * * *src/inngest/functions/risk-signal-refresh.tsDaily 04:00 UTC recompute of risk signals for up to 10K NPIs in provider_risk_signals (stalest first). Fires 1h after snapshot-archive so fresh NPPES/PECOS data is captured first. Upserts via ON CONFLICT (npi, signal_type).
risk-signal-refresh-error-alert
event: inngest/function.failed
eventsrc/inngest/functions/risk-signal-refresh.tsEvent-triggered: listens for inngest/function.failed scoped to risk-signal-refresh and sends a Resend operator alert.
daily-dataset-snapshotter15 6 * * *src/inngest/functions/daily-dataset-snapshotter.tsDaily 06:15 UTC row-count snapshot for 7 core dataset families (NPPES, OIG LEIE, PECOS, QPP MIPS, POS, Care Compare NH, source manifest). Upserts source_snapshot rows and inserts snapshot_attestation rows so the chain-extender can sign them. Supports the Wave 6Z W1.1 chain bootstrap goal of ≥7 daily signed links.
moat-m12-sitemap-drift0 */12 * * *src/inngest/functions/moat-m12-sitemap-drift.tsEvery-12-hours sitemap drift detector: fetches sitemap-index recursively, HEAD-checks all URLs (10s/10-worker), diffs vs prior run url_set, writes sitemap_drift row, fires alert if broken>0 or dropped>5.
moat-m14-cms-freshness0 3 * * *src/inngest/functions/moat-m14-cms-freshness.tsDaily 03:00 UTC CMS data freshness check — fetches upstream modified date from data.cms.gov API for 5 datasets, compares to our source_snapshots, computes lag_days, emails operator per stale source (lag > 14 days).
journorequest-monitor*/30 * * * *src/inngest/functions/journorequest-monitor.tsEvery-30-min scraper of Twitter #journorequest (via Nitter) and Qwoted public opportunities; keyword-matches against tier config; stores in journalist_requests table; sends Tier 1 matches via Resend immediately.
journorequest-digest0 1 * * 1-5src/inngest/functions/journorequest-monitor.tsMon-Fri 01:00 UTC (09:00 PHT) Tier 2 daily digest email bundling all unnotified Tier 2 journalist request matches from the prior 24h; silent on zero matches.
bulk-snapshot-on-demand
event: fonteum/bulk.snapshot.requested
eventsrc/inngest/functions/bulk-snapshot-on-demand.tsOn-demand source puller for bootstrapping source_cache_log. Triggered by POST /api/admin/bulk/trigger-seed; runs runSourcePullerJob for the requested source_id. Requires AWS_S3_* env vars. Fixes C-1 bulk-download-routing — seeds latest.csv.gz endpoints after first deploy.
2. Vercel cron (21)

Lightweight HTTP-only ticks — fire-and-forget acceptable.

Vercel cron owns work that completes fast, has no external dependencies that fail interestingly, and doesn’t need step-orchestration. Defined in vercel.json crons[]; each entry maps to a src/app/api/cron/<name>/route.ts handler.

Job IDSchedule (UTC)Source filePurpose
ai-citation-sampler0 6 * * *src/app/api/cron/ai-citation-sampler/route.tsSamples AI assistants for citations of Fonteum data; logs to ai_citations.
archive-events0 4 * * *src/app/api/cron/archive-events/route.tsDaily housekeeping — archives old page_views + claim_funnel_events to keep hot tables small.
auction-sweeper*/15 * * * *src/app/api/cron/auction-sweeper/route.tsCloses expired ppl_auctions + locks the winning bid as the active featured listing.
audit-deploy0 8 * * *src/app/api/cron/audit-deploy/route.tsDaily post-deploy audit — checks recent deploys against schema-validation + launch-gate baselines.
monthly-market-reports0 6 1 * *src/app/api/cron/monthly-market-reports/route.tsMonthly per-vertical local-market PDF report generator for owner_digest distribution.
outreach-drip0 15 * * *src/app/api/cron/outreach-drip/route.tsDaily outbound drip campaigns to claim-targets; reads outreach_queue.
outreach-followup0 9 * * *src/app/api/cron/outreach-followup/route.tsDaily backlink outreach followup cron — sends d+5 and d+12 follow-up emails to prospects who have not replied.
owner-digest0 14 * * *src/app/api/cron/owner-digest/route.tsDaily owner-tier digest email — review aggregates, listing performance, alerts.
partner-reconciliation0 9 * * 1src/app/api/cron/partner-reconciliation/route.tsWeekly Monday partner-attribution reconciliation — matches partner_clicks to landed conversions.
ping-new-urls17 * * * *src/app/api/cron/ping-new-urls/route.tsHourly IndexNow ping for newly-published URLs (claim_drafts → published listings, new research studies).
ping-sitemaps30 2 * * *src/app/api/cron/ping-sitemaps/route.tsDaily Google + Bing sitemap-ping notification.
provenance-audit0 7 * * *src/app/api/cron/provenance-audit/route.tsNightly 07:00 UTC provenance source health check — HEAD/GETs every cited source_url, logs reachability + latency + content-SHA drift to provenance_audit_log; surfaces on /admin/provenance-audit.
recompute-response-leaderboards0 4 * * *src/app/api/cron/recompute-response-leaderboards/route.tsDaily response_leaderboards rollup — owner-response-rate analytics.
referrals-expire0 3 * * *src/app/api/cron/referrals-expire/route.tsDaily owner_referrals expiry — closes unredeemed referral credits past their TTL.
review-request-drip*/15 * * * *src/app/api/cron/review-request-drip/route.tsEvery 15 min — sends queued review_requests to owner-claimed customers.
revalidate-stats0 * * * *src/app/api/revalidate-stats/route.tsHourly ISR cache revalidation for /coverage + per-vertical stat pages.
schema-audit0 6 * * 0src/app/api/cron/schema-audit/route.tsWeekly Sunday rich-results / Schema.org test against every public surface; logs to schema_audit_reports.
schema-validate30 3 * * *src/app/api/cron/schema-validate/route.tsDaily JSON-LD validity scan; logs to schema_validation_runs.
snapshot-review-themes0 3 * * *src/app/api/cron/snapshot-review-themes/route.tsDaily snapshot of business_review_themes deltas → business_review_theme_snapshots.
submit-gsc-sitemaps15 3 * * *src/app/api/cron/submit-gsc-sitemaps/route.tsDaily Google Search Console sitemap submission across the 40-domain network.
weekly-seo-report0 8 * * 1src/app/api/cron/weekly-seo-report/route.tsWeekly Monday SEO performance rollup → weekly_seo_reports table; consumed by /admin dashboards.
3. Picking a system

Decision tree per AGENTS.md §cron-doctrine.

  1. Does the job need step-level retries, idempotency, or step-orchestration? → Inngest.
  2. Does the job emit events that downstream Inngest functions consume? → Inngest.
  3. Does the job need observability beyond simple HTTP-200/non-200? → Inngest.
  4. Lightweight HTTP-only operation that completes in seconds with no external failure modes? → Vercel cron.

When unclear, default to Inngest — it is strictly more capable. The tools/cron-ownership-check.shCI gate blocks any job that lands in both systems and any job that is missing from this page’s registry.

Compliance posture

Methodology · Corrections log · Editorial policy

Fonteum
Products
The DifferAttestAPIFHIR API
Data
Care CompareResearchData catalogSources
Company
AboutPressEditorial policyCorrections
Legal
Privacy policyTerms of serviceMedical disclaimer

Reviewed by Jennifer Montecillo, MD, medical reviewer. Non-practicing medical reviewer.

© 2026 Fonteum, Inc. All rights reserved.

The U.S. healthcare graph AI can cite — every fact carries its source.

Request access→