Skip to main content

AI-Assisted Job Search Automation

Job Pipeline

A job-search assistant that reduces the repetitive work around finding, comparing, drafting for, and tracking roles without applying on the candidate’s behalf.

Job Pipeline repository table listing seven workflow exports with their schedules and responsibilities.
The checked-in workflow inventory makes each independently scheduled export and its responsibility explicit before activation.

The problem

Finding new listings, removing duplicates, checking fit, drafting from real experience, and tracking outcomes consumes time before an application is even sent.

A retry can surface the same role twice, a fluent draft can claim unsupported experience, and an automated sender can take away the candidate’s final judgment.

My contribution

Workflow Automation Engineer

Solo project · Validated; disabled by default

Designed seven independently scheduled n8n workflows for discovery, drafting, Slack alerts, manual review, archival, analytics, and recommendations.

Built the pipeline from versioned configuration, an 89-field canonical job record, additive Google Sheet migration, and 147 deterministic tests.

The choices behind the work

The pipeline prepares a smaller, better-supported review queue; the candidate decides what is true, worth pursuing, and ready to send.

Generate seven automations from one policy

Editing exported workflows directly would let runtime behavior drift from profile, ranking, alert, analytics, and application rules.

Treat versioned configuration as the source of truth and generate the seven workflow exports and Sheet setup from it.

Review and test one set of rules before producing the files n8n and Google Sheets consume.

Give every listing one durable identity

Independent schedules, retries, legacy rows, and reviewer actions could otherwise duplicate work or overwrite a newer decision.

Use canonical job identities, append-only claims, processing tokens, state guards, idempotent upserts, and archive confirmation before deletion.

Recognize the same listing across active and archived Sheets even when work overlaps or retries.

Automate preparation, never submission

The pipeline needed better prioritization and feedback without allowing generated output or aggregate analytics to take action for the candidate.

Keep review, Apply Points, submission, and outcomes explicit while limiting analytics and weekly recommendations to versioned, evidence-backed advisory output.

Use past outcomes to improve the review queue without making the candidate’s decision.

The system prepares and prioritizes work but never applies for a job.

Outcome

Separates discovery, generation, Slack alerts, manual review, archival, analytics, and recommendations into independently scheduled n8n workflows.

Runs a versioned search catalog while reconciling active and archived records around one canonical job identity.

Covers profile and policy contracts, discovery, ranking, generation, review, alerts, archival, analytics, recommendations, generated artifacts, and a synthetic lifecycle.

Prepares application material while requiring the candidate to review and submit every application.

What I learned

The safest way to maintain exported automation is to generate it from checked-in rules instead of editing seven copies by hand.

A durable listing identity matters more than row position when schedules overlap, retries happen, and records move to an archive.

What comes next

Enable external services one at a time, inspect real listing, Sheet, model, and alert behavior, then increase the schedule frequency.

The 147 deterministic tests prove checked-in behavior, not better application conversion or reliable live provider performance.

Stack

  • n8n
  • Node.js
  • JavaScript
  • Groq API
  • Google Sheets API
  • Google Apps Script
  • Slack Webhooks