The candidate pipeline that could not get stuck
Seed-stage talent platform · Startup
The business said
- “Keep candidate enrichment from getting stuck in background jobs”
- “Make resume parsing and LinkedIn enrichment retryable”
- “Batch lower-priority profiles without losing status visibility”
- “Move long API waits outside request handlers”
- “Expose every run in Temporal UI for debugging”
- “Deploy dedicated workers with safe environment configuration”
Candidate enrichment was not an API problem. It was a workflow reliability problem.
A Temporal workflow system for profile processing
The customer had a candidate enrichment pipeline that touched resumes, LinkedIn data, OpenAI batch jobs, embeddings, PostgreSQL writes, and worker deploys. Any one slow step could leave people in unclear processing states.
We moved the Person Profile Processor into Temporal. One workflow now claims the person, fetches profile data, runs LinkedIn enrichment when needed, routes urgent profiles through immediate processing, and sends normal priority profiles into batch processing.
The batch path waits durably for OpenAI parse and embedding jobs, falls back to polling when webhooks are silent, and finalizes every person status so failed work is visible instead of stuck.
We also added the FastAPI trigger endpoint, Temporal worker deployment pipelines, local and cloud Temporal configuration, Redis-backed coordination, and fixes for data persistence, retry behavior, and status transitions.
- 99.99% — System reliability
- 0.004$ — $ amount/candidate import
- 100+ — Queues managed
