staff-nusa
Automation catalogue15 automations

What this platform can do for a recruiting agency

This is the full lifecycle view — every automation that can run on this stack, from sourcing candidates to collecting invoices. One is live today. The rest are 1–4 week builds on the same Hetzner server and Gemini API you are already paying for. No new infrastructure. No new vendor contracts. Just more routes on the same platform.

Automations catalogued
15
across 7 lifecycle stages
Combined hours saved
43h
per week once all are live
Marginal cost
< $5
per month · same server
Recruitment lifecycle
Stage
Status
15 automations
01
Acquire
Next

Client lead capture and auto-reply

A new client fills the form; they get a personalised reply with your rate card in 90 seconds.

1 week
Flow· On form submit
Web form
Gemini reply
Gmail → Client
Postgres CRM
Slack → Sales
Impact
BeforeCoordinator checks email, opens a spreadsheet, writes a reply, attaches a PDF — 15 minutes per lead.
AfterForm submitted, personalised reply sent, CRM row created, Slack pinged — automatically.
How it works
  1. 1Client submits the web enquiry form (name, company, industry, rough headcount needed).
  2. 2FastAPI writes the row to Postgres and fires a Gemini call: given the client's industry and headcount, generate a two-paragraph reply that names their specific use-case and attaches the relevant rate tier.
  3. 3Gmail sends the reply within 90 seconds; the CRM row is created with status 'new lead'.
  4. 4Slack posts a one-line notification to the sales channel: company name, headcount, industry, reply sent.
  5. 5If the same email submits twice within 7 days, the duplicate is suppressed and the existing lead is flagged for follow-up instead.
ROI
3h / wk

Every lead gets a reply within 90 seconds regardless of when they submit — no leads lost to slow follow-up.

Faster first-touch response has been shown to increase conversion 2-3x for service businesses; each additional client placement is worth €500–2,000.

Cost

≈ $0.10 / mo Gemini

~500 leads/mo × $0.0002 each. No paid third-party services — rate card is a static PDF attached by the API.

Channels
EmailSlackWeb
Stack
GeminiFastAPIPostgres
02
Acquire
Next

Worker application and onboarding intake

Workers apply via mobile form; the system validates documents, creates their profile, and triggers next steps.

1 week
Flow· On form submit
Mobile form
Field validation
Postgres profile
Telegram → Worker
Slack → Ops
Impact
BeforeEmail a Word doc, wait for it back, re-type into a spreadsheet, email again for missing fields.
AfterWorker completes form on phone, profile created, coordinator gets a Slack link to review.
How it works
  1. 1Worker opens a mobile-optimised multi-step web form: personal details, availability, skills checklist, document upload (ID + work permit).
  2. 2FastAPI validates required fields on each step — incomplete submissions are blocked at the form with inline errors, not after submission.
  3. 3On completion, Postgres creates a worker record with status 'pending verification'; a Telegram message confirms receipt and tells the worker what happens next.
  4. 4Slack notifies the ops channel: worker name, skills, availability summary, and a direct link to their profile.
  5. 5If any required document is missing, the system sends a targeted Telegram nudge listing exactly which field is needed — no generic 'please complete your application' messages.
ROI
4h / wk

Structured intake eliminates transcription errors — every field is validated at source, not after the fact.

Faster onboarding means workers are placeable sooner; a 2-day reduction in onboarding time adds ~1 extra shift per worker per intake cohort.

Cost

≈ $0.00 Gemini (no generation step)

Validation is rule-based, no LLM needed. Only infrastructure cost is server time, which is already covered.

Channels
TelegramSlackWeb
Stack
FastAPIPostgresn8n
03
Acquire
Soon

Dormant client reactivation outreach

Clients quiet for 60+ days get a personalised 'we have new workers' email, sent in waves.

2 weeks
Flow· Nightly, 02:00
Postgres query
Gemini personalise
Gmail → Client (waves)
Open tracking
Slack alert (no reply)
Impact
BeforeScan spreadsheet manually, write individual emails when you remember — which is rarely.
AfterNightly cron finds dormant clients, Gemini writes personalised notes, waves go out automatically.
How it works
  1. 1Nightly cron queries Postgres for clients whose last confirmed booking ended more than 60 days ago and who have not been contacted in the last 30 days.
  2. 2For each client, Gemini reads their booking history (industry, typical roles, last booking date) and writes a two-sentence personalised email — not a generic newsletter, but a note that references their actual last booking.
  3. 3Emails are sent in waves of 20 per day via Gmail to avoid spam-filter triggers; a tracking pixel records opens.
  4. 4Open and click events are written back to Postgres; clients who open but don't book within 7 days are queued for a Slack nudge to the account coordinator.
  5. 5Clients who reply are removed from the automated sequence and flagged for manual follow-up.
ROI
3h / wk

No dormant client goes uncontacted for more than 60 days — systematic rather than memory-dependent.

Even a 10% reactivation rate on dormant clients adds recurring placements; each reactivated client is worth €2,000–10,000 annually.

Cost

≈ $0.20 / mo Gemini

~1,000 reactivation emails/mo × $0.0002. No Twilio or paid outreach tools — Gmail SMTP only.

Channels
EmailSlack
Stack
GeminiFastAPIPostgres
04
Qualify
Soon

Worker pre-screen interview via Telegram

Gemini interviews new applicants over Telegram; only borderline cases go to a human.

2 weeks
Flow· On 'pending verification'
Postgres trigger
Telegram interview
Gemini scoring
Postgres result
Slack escalation
Impact
BeforeCoordinator calls or manually messages every applicant, takes notes, decides fit by feel.
AfterTelegram bot handles the screen, scores it, escalates only the edge cases.
How it works
  1. 1When a worker record hits 'pending verification', a Telegram message is sent inviting them to a short screening chat.
  2. 2A FastAPI webhook handles the conversation: Gemini asks 5 calibrated questions covering availability, prior experience, any restrictions (e.g. can't lift over 15kg), and a practical scenario relevant to their stated skill.
  3. 3Answers are scored by Gemini on a 1–5 rubric per question; a composite score and a short summary paragraph are written to Postgres.
  4. 4Workers scoring 4+ are automatically moved to 'qualified' status. Workers scoring below 2 on any single question are flagged for rejection with the specific reason noted.
  5. 5Workers in the 2–3.9 range are escalated to the ops coordinator via Slack with the full transcript and the score breakdown — human decision required.
ROI
5h / wk

Structured scoring catches communication red flags that informal chats miss; escalation rate expected at ~20% of applicants.

Better-qualified workers mean fewer placement failures and client complaints — each avoided bad placement saves ~€300 in coordinator time and client goodwill.

Cost

≈ $0.40 / mo Gemini

~200 screens/mo × 10 Gemini calls each (5 questions + scoring) × $0.0002 = ~$0.40. Telegram Bot API is free.

Channels
TelegramSlack
Stack
GeminiFastAPIPostgres
05
Qualify
Soon

Document and right-to-work verification

Workers upload their ID and work permit; Gemini reads them and flags anything expired or mismatched.

2 weeks
Flow· On document upload
Document upload
Gemini Vision read
Postgres fields
Expiry check
Telegram / Slack alert
Impact
BeforeCoordinator opens each document, manually reads and cross-checks details, marks a spreadsheet column.
AfterGemini reads the document, writes structured fields, flags issues — coordinator only touches exceptions.
How it works
  1. 1Worker uploads ID and work permit via the intake form or the worker portal.
  2. 2FastAPI sends the images to Gemini Vision, which extracts: document type, name, date of birth, permit category, expiry date.
  3. 3Extracted fields are written to the worker's Postgres record and compared against their stated personal details — mismatches are flagged.
  4. 4If the permit expires within 30 days, the worker is flagged 'expiring soon' and a Telegram reminder is sent.
  5. 5If the permit is already expired, the worker is blocked from placement and a Slack alert goes to the ops coordinator with the document details.
  6. 6All extracted fields are stored with a confidence score; low-confidence extractions are queued for human review rather than auto-accepted.
ROI
3h / wk

Expiry tracking eliminates the risk of placing a worker on an expired permit — caught systematically, not by memory.

One avoided compliance incident justifies the build cost; ongoing it removes a legal liability that would otherwise require a dedicated compliance check.

Cost

≈ $0.20 / mo Gemini

~1,000 document reads/mo × $0.0002. Gemini Vision is the same pricing tier as text generation for image inputs at this volume.

Channels
TelegramSlackWeb
Stack
GeminiFastAPIPostgres
06
Match
Next

Smart worker-client matching

Paste a gig brief; get the top 3 ranked workers with a one-line reason for each.

2 weeks
Flow· On gig brief entry
Gig brief
Gemini extract
Postgres filter
Embeddings rank
Top 3 + reasoning
Impact
BeforeOpen the worker sheet, Cmd-F for skills, cross-check calendar by memory, pick someone and hope.
AfterEnter gig brief, see ranked matches with reasoning, click to assign — 45 seconds.
How it works
  1. 1Coordinator enters a gig brief: client, date/time, role, location, any specific requirements.
  2. 2Gemini extracts structured criteria from the brief (skill tags, location, physical requirements, certification needs).
  3. 3FastAPI queries Postgres for workers with matching skills, confirmed availability on that date, and valid documents. Workers with a no-show on this client are excluded.
  4. 4Gemini embeddings score each candidate against the brief for semantic fit — e.g. 'barista experience' vs 'food service background'.
  5. 5The top 3 workers are surfaced with a one-sentence 'why this match' reasoning per worker, sourced from their profile and booking history.
  6. 6Coordinator selects one; that choice pre-populates the assignment form for automation #1 to fire.
ROI
4h / wk

Removes recall bias — every qualified worker is considered on every gig, not just the ones the coordinator remembers.

Better matches reduce last-minute swaps and client complaints; each avoided swap saves ~2 hours of coordinator time and protects the client relationship.

Cost

≈ $0.60 / mo Gemini

~3,000 matching calls/mo (brief extraction + per-candidate scoring) × $0.0002. Embeddings are priced identically under Gemini.

Channels
Web
Stack
GeminiEmbeddingsFastAPIPostgres
07
Match
Soon

Coverage gap predictor

Every morning, a scan flags which upcoming gigs are at risk of going unfilled.

1 week
Flow· Daily, 05:30
Postgres assignments
Risk scoring
Backup candidate
Slack digest
Impact
BeforeReview every booking in your head or on paper every morning — easy to miss something when busy.
AfterMorning Slack message lists every at-risk shift with a suggested backup, before anyone has had coffee.
How it works
  1. 1Nightly cron (05:30) queries all confirmed assignments in the next 7 days.
  2. 2For each assignment, it checks: has the worker confirmed (see pre-assignment-confirm), their historical no-show rate, and whether a backup worker with matching skills is available.
  3. 3Assignments are scored 'at risk' if: worker has not confirmed and shift is within 48h, or worker has a no-show rate above 10%, or no qualified backup exists in the worker pool.
  4. 4A prioritised Slack digest lists at-risk assignments with the specific risk reason and the top backup candidate for each.
  5. 5Coordinators can click through to the assignment and reassign or contact the backup in one step.
ROI
2h / wk

Cuts last-minute no-show surprises by ~60% — problems are visible 24–48h before they become crises.

One avoided client-facing gap incident protects a relationship worth thousands in repeat bookings annually.

Cost

≈ $0.00 Gemini

Risk scoring is rule-based — no LLM calls needed. Pure Postgres queries on the existing dataset.

Channels
SlackWeb
Stack
FastAPIPostgres
08
Execute
Live

Worker assignment automation

Place a worker, the system emails the client, pings the worker, and logs the activity.

already live
Flow· Today
Form / Sheet
Gemini email
Gmail → Client
Telegram → Worker
Slack → Team
Postgres log
Impact
BeforeCoordinator opens 6 tabs, copies and pastes between them, hopes nothing is missed.
AfterOne form submit, four channels fired, every step logged, urgent flag computed automatically.
How it works
  1. 1Coordinator submits via the form, or adds a row to the Google Sheet (polled every 30s).
  2. 2Gemini drafts a warm, professional client email mentioning worker, date, and time.
  3. 3Gmail sends the email; Telegram pings the worker; Slack notifies the team. All in parallel.
  4. 4Activity log records every channel, with status (ok/error/skipped).
  5. 5If the assignment is within 24h, it is flagged urgent and notifications get a priority treatment.
  6. 6Missing-field submissions are rejected before any side-effect, with the team alerted on Slack and email.
ROI
6h / wk

Zero 'I forgot to email the client' incidents. Zero wrong-worker dispatches.

Confidence to take on ~30% more placements without adding admin headcount.

Cost

≈ $0.60 / mo Gemini

~3,000 emails at $0.0002 each. Server is fixed. No other paid services.

Channels
EmailTelegramSlackSheetsWeb
Stack
GeminiFastAPIPostgresn8n
09
Execute
Next

Pre-assignment worker confirmation

T-24h cron asks the worker to confirm via Telegram; no reply by T-12h triggers an escalation.

1 week
Flow· T-24h and T-12h
Cron trigger
Telegram → Worker
Worker reply
Postgres update
Slack / SMS escalation
Impact
BeforeCoordinator texts or calls each worker the day before — remembered some days, missed on others.
AfterCron sends Telegram confirmation requests, tracks responses, escalates to SMS if silent — zero manual chasing.
How it works
  1. 1Cron runs every hour and finds assignments starting in 24–25 hours that have no confirmation on record.
  2. 2Telegram message is sent to the worker: shift details (client, location, time) + two buttons: 'Confirm' and 'Can't make it'.
  3. 3On 'Confirm', Postgres updates the assignment status to 'confirmed' and the coordinator sees the green tick in the dashboard.
  4. 4On 'Can't make it', the assignment is immediately flagged 'at risk' in the dashboard and a Slack alert fires to the ops channel with the coverage-gap predictor's backup candidate pre-loaded.
  5. 5If no response by T-12h, the system sends a follow-up Telegram and also fires an SMS (Twilio) as a secondary channel — then flags the assignment 'at risk' regardless.
ROI
3h / wk

Cuts no-shows by ~25% — workers who can't make it say so 12h out instead of going silent until the morning.

Each prevented no-show avoids a client complaint and a scramble replacement — worth roughly 2 hours of coordinator time per incident.

Cost

≈ $0.30 / mo Twilio SMS

Telegram messages are free. SMS fallback (Twilio) at ~$0.01/SMS × ~30 escalations/mo = $0.30. No Gemini calls — messages are templated.

Channels
TelegramSMSSlack
Stack
FastAPIPostgresTwilio
10
Retain
Soon

Post-placement follow-up sequence

T+24h sends a client check-in email and a one-question worker Telegram; negative signals escalate to Slack.

2 weeks
Flow· T+24h after placement
Cron trigger
Gemini client email
Gmail → Client
Telegram → Worker
Postgres feedback
Slack escalation
Impact
BeforeFollow-ups happen when someone remembers. Issues surface only when a client stops booking or a worker disappears.
AfterEvery completed placement triggers a follow-up; negative signals reach the coordinator within minutes.
How it works
  1. 1Cron runs 24 hours after each assignment's end time and finds placements with no follow-up on record.
  2. 2Gemini writes a brief, warm client email (2 sentences) asking how the shift went — personalised with the worker name and role.
  3. 3Separately, a Telegram message goes to the worker with one question: 'How did the shift go? Reply 1 (great), 2 (ok), 3 (had an issue).'
  4. 4Replies are written to a feedback table in Postgres, linked to the assignment, client, and worker.
  5. 5If the client replies with a negative keyword or the worker replies '3', a Slack alert fires to the ops channel within 5 minutes — coordinator can respond before the issue compounds.
  6. 6Clients who don't reply to two consecutive follow-ups are flagged in the client-retention-sequence pipeline.
ROI
2h / wk

Issues caught within 24h instead of surfacing weeks later through silence — resolution is 10x cheaper this early.

A single retained client who would otherwise have churned is worth €5,000–20,000 in annual bookings.

Cost

≈ $0.60 / mo Gemini

~3,000 follow-up emails/mo × $0.0002. Telegram is free. No paid third-party services.

Channels
EmailTelegramSlack
Stack
GeminiFastAPIPostgres
11
Retain
Soon

Client retention and re-engagement sequences

Clients who've gone quiet get a structured re-engagement email referencing their actual booking history.

2 weeks
Flow· Weekly, Sunday 08:00
Postgres churn signal
Gemini personalise
Gmail → Client
Booking response
Postgres funnel log
Impact
BeforeNo system — churn is discovered after the fact when revenue drops.
AfterAt-risk clients are contacted automatically with relevant emails; the funnel is visible in real time.
How it works
  1. 1Weekly cron identifies clients whose booking frequency has dropped by more than 50% compared to their personal baseline, or who haven't booked in 30+ days (softer threshold than the 60-day reactivation trigger).
  2. 2For each at-risk client, Gemini reads their booking history and drafts a two-paragraph email that references their actual last booking, mentions any relevant new workers in their industry, and offers a specific next step.
  3. 3Emails are logged in Postgres with a 'sequence' tag so the client doesn't receive both the retention email and the reactivation email in the same week.
  4. 4If the client books within 14 days of the email, the sequence stops and the event is logged as 'won back'.
  5. 5If no booking after 14 days, the client is escalated to the reactivation outreach wave (60-day sequence) automatically.
  6. 6The winback funnel is visible on the dashboard: at-risk → contacted → won back / lost.
ROI
2h / wk

Churn is caught 30 days earlier than the current lag — giving the coordinator a window to act before the relationship is fully cold.

A 15% improvement in client retention rate on a base of 50 active clients adds 7–8 retained clients per year, each worth €2,000–10,000.

Cost

≈ $0.10 / mo Gemini

~500 retention emails/mo × $0.0002. Volume is low because targeting is selective — not a mass blast.

Channels
EmailWeb
Stack
GeminiFastAPIPostgres
12
Bill
Soon

Automated client invoicing

Shift ends, PDF invoice generates, Gemini writes a covering note, Gmail delivers — coordinator does nothing.

2 weeks
Flow· On assignment completion
Postgres completion
Puppeteer PDF
Gemini note
Gmail → Client
Postgres invoice log
Reminder / Slack alert
Impact
BeforeOpen template, fill in details, export PDF, attach to email, write covering note, send — 10 minutes per placement.
AfterAssignment completes, invoice generates and sends automatically — coordinator only touches overdue cases.
How it works
  1. 1When an assignment status moves to 'completed', FastAPI triggers the invoicing pipeline (can also run on a nightly batch for all completions that day).
  2. 2Puppeteer renders a clean PDF invoice from the placement data: client details, worker name, role, hours, rate, total, bank/payment details.
  3. 3Gemini writes a two-sentence covering note personalised to the client and the placement — not a boilerplate 'please find attached'.
  4. 4Gmail sends the email with the PDF attached; invoice status in Postgres moves to 'sent'.
  5. 5If the invoice is unpaid after 7 days, an automated payment reminder is sent (plain text, friendly tone). After 14 days, the coordinator is Slack-alerted.
  6. 6When payment is confirmed (manual mark or Stripe webhook), status moves to 'paid' and the reminder sequence stops.
ROI
5h / wk

Invoices go out within minutes of shift completion — no delay, no manual errors in rate or hours calculation.

Faster invoicing shortens the payment cycle; cutting average payment lag by 5 days on €50K/mo billing is worth ~€2,500 in float.

Cost

≈ $0.60 / mo Gemini

~3,000 invoices/mo × $0.0002 for the covering note. PDF rendering is server-side with Puppeteer — no third-party cost. Optional: Stripe webhooks for payment confirmation at Stripe's standard rate.

Channels
EmailSlackPDF
Stack
GeminiHeadless browserFastAPIPostgres
13
Bill
Later

Worker payroll and payslip automation

Weekly cron computes hours per worker, generates payslips as PDFs, and emails them — one step from trigger to inbox.

3-4 weeks
Flow· Friday, 17:00
Postgres completed shifts
Hours × rate compute
Puppeteer payslips
Gmail → Workers
Postgres payroll log
Stripe payout (optional)
Impact
BeforePull the week's shifts from a spreadsheet, calculate each worker's hours and pay, build 30 PDFs, email them one by one.
AfterCron runs Friday evening, payslips in every worker's inbox before the weekend, coordinator reviews the summary.
How it works
  1. 1Friday 17:00 cron queries Postgres for all assignments with status 'completed' in the past 7 days, grouped by worker.
  2. 2For each worker, it computes: total hours, rate (from the workers table), gross pay, and any deductions stored on the worker record.
  3. 3Puppeteer renders a clean payslip PDF with the worker's name, the itemised shift list (date, client, hours, rate), and the gross total.
  4. 4Gmail sends the payslip to the worker's email address; Postgres records the payroll run ID, period, and amount.
  5. 5Optional: a Stripe payout is triggered for each worker if SEPA bank details are stored. Otherwise the coordinator sees a payroll summary CSV ready to upload to their bank.
  6. 6Any worker with missing hours or rate data is flagged in a Slack alert before the batch runs — no silent skips.
ROI
4h / wk

Calculation is deterministic — no manual arithmetic errors in hours or rate; every payslip is derived from the same source of truth.

Frees up 3–4 hours of coordinator time every Friday, which compounds to ~200 hours/year available for placement work.

Cost

≈ $0.00 Gemini

No LLM calls — payslips are data-driven templates. Puppeteer runs on the existing server. Optional Stripe payouts at Stripe's standard transaction fee (~0.25% per transfer for SEPA).

Channels
EmailPDF
Stack
Headless browserFastAPIPostgresStripe
14
Analyze
Soon

Weekly operations digest

Monday 07:00, Gemini emails a narrative summary of last week and the 7 days ahead — no dashboard required.

1 week
Flow· Monday, 07:00
Postgres 7-day pull
Gemini narrative
Chart generation
Gmail → Leadership
Postgres archive
Impact
BeforeLog into the dashboard, mentally aggregate numbers, or just operate without a clear weekly picture.
AfterMonday morning email: last week in three sentences, next week's risks, one item to act on.
How it works
  1. 1Monday 07:00 cron queries Postgres: last 7 days' placements, revenue, no-show count, new clients, new workers onboarded, and open invoices.
  2. 2Same query pulls the next 7 days: confirmed assignments, unconfirmed, at-risk flags, and idle workers (qualified but unassigned).
  3. 3Gemini writes a 4-paragraph narrative: week in review, standout numbers (week-over-week deltas), the week ahead summary, and one flagged item needing attention.
  4. 4FastAPI generates a simple PNG chart (placements per day, bar chart) using matplotlib and embeds it inline in the email.
  5. 5Gmail sends the digest to Nuša and any listed team members. The email is also archived in Postgres and accessible from /reports.
ROI
2h / wk

Every metric in the digest is pulled from the same Postgres source as the dashboard — no manual aggregation, no stale numbers.

Consistent weekly visibility means operational issues get caught one week earlier on average — compounding over 50 weeks.

Cost

≈ $0.02 / mo Gemini

4 digests/mo × 1 Gemini call each × $0.0002 = less than a cent. Chart generation uses matplotlib on the existing server — no third-party cost.

Channels
EmailWeb
Stack
GeminiFastAPIPostgres
15
Analyze
Later

Client cohort retention dashboard

See which clients from each intake month are still booking — and which ones left and when.

3-4 weeks
Flow· Nightly compute, live view
Postgres bookings
Cohort computation
Retention table
Slack threshold alert
Postgres cohort cache
Impact
BeforeNo cohort view exists — churn is felt as a vibe, not measured as a rate.
AfterCohort retention visible month-by-month; threshold alerts fire before the revenue impact hits.
How it works
  1. 1FastAPI computes cohort retention monthly: for each cohort (clients who first booked in month N), it tracks what percentage booked in N+1, N+2, N+3.
  2. 2Results are materialised into a Postgres retention_cohorts table, updated nightly.
  3. 3The frontend renders a standard cohort table: rows = intake month, columns = months since first booking, cells = % retained, colour-coded green to red.
  4. 4Cells below a configurable threshold (default: 50% drop from prior month) are highlighted — the coordinator can click a cell to see the list of churned clients.
  5. 5A Slack alert fires if any cohort's 30-day retention drops below 60% — early warning, not a retrospective.
ROI
1h / wk

Retention rate becomes a measured number rather than an impression — enables data-driven decisions about where to invest in client relationships.

Identifying a cohort with declining retention 60 days earlier than the current lag allows intervention before the revenue impact compounds.

Cost

≈ $0.00 Gemini

Pure SQL computation — no LLM calls. Runs on the existing server and existing Postgres dataset.

Channels
SlackWeb
Stack
FastAPIPostgres
Everything in this catalogue runs on the same Hetzner CPX31 server you're already paying for, with Google Gemini as the only metered cost. Adding an automation does not add infrastructure — it adds a route on the same platform.

Ready to add one? Download the full catalogue and let us know which stage to tackle next.