EXP 23 Requirements No UI yet · Iterate first Company-led AS

Active Sourcing · Product shift

Company-led Active Sourcing — requirements before design

Move Active Sourcing from a manual agent workflow (select candidates, recommend the job) to a company-led workflow: companies see matching candidates per job, pick from a limited batch, send a templated outreach message, and convert replies into high-priority applications for agents.

This page is the iteration surface. Open questions are marked TBD. Check off decisions as the team aligns — then hand off to design.

Status

  • Phase: Requirements freeze → design
  • Depends on: EXP 17 (anonymous visibility / opt-in)
  • Surfaces: Company app · Applicant app · Agent app · Backend
  • Gate: FeatureForCompany toggle
Reuse today: Feature / FeatureForCompany, is_reverse_recruiting_enabled, SendGrid + WhatsApp channels, match / history models. Do not overload the existing agent POST …/active-source/ semantics (agent → applicant recommend).

1. Problem & hypothesis

Problem

Active Sourcing capacity is bottlenecked by agents. Companies cannot proactively reach matching candidates; applicants only get agent-curated “Empfohlen von Alica” style recommendations. Scaling AS toward the Q2 target (10% → 20–25%) needs a company-operated loop without flooding the candidate pool.

Hypothesis

If enabled companies can browse a throttled set of matching candidates per job and send a templated personal outreach (email / WhatsApp + in-app), then company→candidate AS volume rises while applicant retention stays high — because daily outreach and inventory drip prevent spam and scarcity preserves perceived value.

2. Today vs proposed

Dimension Today (agent-led AS) Proposed (company-led AS)
Initiator Agent on job applier list Company user on a job’s candidate list
Action POST /match/matching/active-source/ → recommend job Select candidates → pick template → send outreach
Notify Power Automate → applicant Email + WhatsApp + in-app company message
Company visibility None for AS (forwarding is separate) Anonymized / limited profile cards (see EXP 17)
Rate limit Agent ops judgment + 14d contact signals Hard daily message quota + drip inventory
On apply Normal application pipeline Application flagged high priority for agents

Related but distinct: Forwarding (SENT_TO_COMPANY) is applicant/agent → company. This experiment is company → applicant. EXP 17 covers anonymous profile consent; EXP 23 is the company product loop.

3. End-to-end flow

Happy path
Company enabled? FeatureForCompany gate Open job → candidates Throttled matching batch Select ≤ daily remaining Quota visible in UI Pick template + send Merge job / company fields Notify applicant Email + WhatsApp (channel prefs) In-app company message Shown on match / inbox Applicant applies Or dismiss / ignore Agent queue High priority Retention controls (always on) Daily send cap · drip inventory · cooldown No full pool dump · no free-text spam MVP Eligibility filters Opt-in / reverse recruiting · match fit Not already contacted · active job · channels OK Audit & history Who sent · which template · when Visible to agents for follow-up

4. Requirements by actor

Company app

Primary surface
C-01

For each active job, company users with the feature enabled see a Matching candidates list scoped to that job (not a global talent pool dump).

C-02

Candidate cards show only fields allowed by privacy rules (baseline: EXP 17 anonymous card — position, experience bands, care type, shifts, distance bucket, docs types, etc.). Contact data remains hidden until the applicant engages / applies.

C-03

Company can multi-select candidates and send outreach, but selection count cannot exceed remaining daily quota. UI must show remaining sends for today before confirm.

C-04

Before send, company must choose exactly one message template from a curated catalog of X templates X = TBD. No free-text composition in MVP confirm.

C-05

After send: clear success state, decrement quota, mark candidates as contacted for this job (cannot re-message same candidate+job within cooldown).

C-06

If feature is off for the company: entry points hidden (or locked with sales/upsell state — product choice). hide vs upsell

C-07

Company sees status of outreach: sent / opened? / applied / dismissed where measurable. which statuses MVP

Applicant

Receive & decide
A-01

On company outreach: deliver via email and/or WhatsApp according to channel availability and unsubscriptions (MessageUnsubscription.

A-02

In the applicant app, the company message is visible on the relevant match (and/or a dedicated inbox entry) with company name, job, and template body (rendered).

A-03

Primary CTA: Apply (or continue existing apply flow). Secondary: dismiss / not interested required in MVP?.

A-04

Outreach must only target applicants eligible for reverse recruiting / AS visibility (align with is_reverse_recruiting_enabled and EXP 17 opt-in rules).

A-05

Copy must make clear this is a company outreach (not agent “Empfohlen von Alica”), to avoid trust confusion with agent-led AS.

Agent app

Priority follow-up
G-01

When an applicant applies after company-led AS outreach, the resulting application / match appears with a clear high priority signal in agent queues (filter + badge + sort).

G-02

Agents can see AS provenance: company, job, template used, outreach timestamp, and that this was company-initiated (distinct from agent active_sourced_by).

G-03

Agent-led AS remains available unless product decides to deprecate for enabled companies. coexistence rules

G-04

High-priority state clears or downgrades after agent action / timeout SLA / TTL.

Platform / backend

System rules
P-01

New domain concept for company outreach events (do not reuse agent active_sourced_by / ACTIVELY_SOURCED without a clear company actor distinction).

P-02

Enforce quotas server-side (never trust client). Reject over-quota and re-contact attempts with clear errors.

P-03

Matching set for a job is computed from existing match fit / eligibility; companies only see candidates already matched (or matchable) to that job — not arbitrary search. match stage filter

P-04

Idempotent send: duplicate submits must not double-message or double-charge quota.

P-05

Full audit trail for ops / support / agent follow-up.

5. Inventory drip & daily quotas

Retention-critical

Companies must not see the full candidate set at once and must be limited in how many they can message per day. Goal: keep scarcity high, reduce spray-and-pray, protect applicant experience.

Inventory drip (visibility)

  • Show at most N candidates per job per day (or per session refresh). N = ?
  • When batch is exhausted or ignored, refill on next drip window (daily reset preferred for predictability).
  • Ordering: highest fit first, with exploration / diversity rules so the same top profiles are not always burned first. ranking
  • Candidates already contacted for this job (or company cooldown) are excluded from future drips.

Daily message quota (action)

  • Max M messages per company per day M = ? — or per company-user / per job. scope
  • Quota shared across all jobs of that company unless we choose per-job caps.
  • Timezone for “day”: Europe/Berlin. propose Berlin
  • UI: “3 of 10 sends left today” (example numbers only).
  • Optional soft upsell later for higher quotas — out of MVP.
Design implication: empty states matter. “Come back tomorrow for new matches” is a feature, not a bug. Avoid infinite scroll of the full pool.

Cooldown

Same company cannot re-message same applicant for D days (even for a different job?).

Applicant load

Global cap: applicant receives at most K company AS / week across all companies.

Fairness

Prevent one company from monopolizing scarce high-fit candidates in a region. rules?

6. Message templates

Companies select from a fixed catalog. Templates keep brand voice, reduce compliance risk, and make WhatsApp / email rendering predictable.

  • Catalog size X templates in MVP propose 3–5.
  • Each template has: internal name, email subject, email body, WhatsApp body, in-app body (or one source with channel variants).
  • Merge fields: company name, job title, location, care type, applicant first name (if allowed), deep link to match.
  • länk owns template content; companies do not edit body in MVP.
  • Optional later: company-approved custom templates under review.

Example angles (not final copy)

  1. Personal fit — “Dein Profil passt zu unserer Stelle …”
  2. Urgency — “Wir besetzen zeitnah …”
  3. Employer brand — “Warum bei uns arbeiten …”
  4. Soft ask — “Kurzer Blick auf den Job — kein Druck …”

7. Company feature toggle

  • Use existing Feature + FeatureForCompany with feature_is_active_for_company().
  • Proposed key: COMPANY_LED_ACTIVE_SOURCING (or kebab PostHog twin company-led-active-sourcing).
  • Global flag off by default; enable per company for pilot.
  • allow_override = true so global on ≠ every company.
  • Ops / CS must flip without deploy (Django admin or internal tool). admin UX

Rollout plan (proposed)

  1. Internal dogfood company
  2. 3–5 pilot companies (onboarded, high job volume)
  3. Expand by CS / sales entitlement

Company app currently has empty featureFlags: {} — resolve flags from API, not static env.

8. High priority for agents

Company-sourced applies should jump the queue so agents can close while intent is hot. Today there is no dedicated “high priority application” flag — closest levers are need_action and open tasks.

  • Introduce an explicit priority signal on match/application created from company AS (name TBD: e.g. company_sourced_priority).
  • Agent home / match list: default sort or dedicated filter “Company AS applies”.
  • Visual badge distinct from agent-led “Sourced”.
  • Optional: auto-create / bump need_action for assigned agent.
  • Define SLA expectation for agents e.g. contact within 24h.

9. Privacy & eligibility

  • Only applicants who opted into reverse recruiting / anonymous AS visibility.
  • Hide PII until apply (or until explicit contact release — EXP 17 model).
  • Respect message unsubscriptions per channel.
  • Exclude HIDDEN / matching-blocked / hired (with existing hired rules).
  • Legal / marketing review of template copy before pilot.

Must align with EXP 17

If EXP 17 contact-request accept/decline is still required before messaging, EXP 23 either (a) sends only after accept, or (b) treats templated outreach as the contact request itself. pick one model

10. Success metrics

Metric Definition Target set
Company AS adoption % enabled companies that send ≥1 outreach / week TBD
Outreach → apply Applies within 7d of company AS send / sends TBD
Quota utilization Avg used / available daily sends (health of limits) Sweet spot, not 100%
Applicant retention Opt-out / complaint / unsubscribe rate after company AS No regression vs agent AS
Agent SLA Time-to-first-agent-action on priority applies TBD
AS share of applies Company-led AS contribution to overall AS / apply mix Supports 20–25% AS bet

11. Tracking (PostHog)

Naming: kebab-case. Always include company_extId, job_extId, applier_extId, match_extId where relevant.

  • company-as-candidates-viewed — batch size, job
  • company-as-candidate-selected
  • company-as-template-selectedtemplate_id
  • company-as-outreach-sent — count, channels, remaining_quota
  • company-as-quota-hit
  • company-as-message-opened (in-app)
  • company-as-apply-clicked / company-as-applied
  • company-as-dismissed
  • agent-company-as-priority-viewed / …-actioned

Dashboard: extend Active Sourcing Dashboard 494038.

12. Non-goals (MVP)

  • Free-text messaging / chat between company and applicant before apply
  • Company browsing the entire national talent pool
  • Replacing agent-led AS entirely
  • Paid quota tiers / self-serve billing
  • Company-edited custom templates
  • Full CRM / sequence automation (drip campaigns)
  • Pixel-perfect UI (this experiment is requirements-only)

13. Open decisions

Check as decided

Use these checkboxes during walkthrough. Edit mode (E) still works for copy.

14. Proposed MVP cut

In

  • Per-job throttled candidate list
  • Daily send quota
  • 3–5 templates
  • Email + WhatsApp + in-app message
  • Company feature toggle
  • Apply → agent high priority
  • Audit history

Next

  • Dismiss / not interested analytics
  • Per-job vs company-wide quota tuning
  • Template A/B by company segment
  • Agent SLA alerts

Later

  • Custom templates
  • Paid higher quotas
  • Multi-step sequences
  • Full talent search beyond matches
Next step after this page: lock the open decisions → produce company / applicant / agent screen flows (design) → API sketch → pilot with FeatureForCompany.