VakanzPuls ist eine B2B HR-Intelligence-Plattform für den DACH-Stellenmarkt. Die Plattform aggregiert Stellenanzeigen, reichert sie mit direkten HR-Kontaktdaten an und gibt Personalvermittlern einen entscheidenden Wettbewerbsvorteil bei der Kundenakquise.
Problem
Personalvermittler verbringen Stunden mit manueller Suche nach Kunden mit offenen Stellen. Kontaktdaten fehlen oder sind veraltet. Der Marktüberblick ist fragmentiert.
Lösung
VakanzPuls crawlt automatisch alle relevanten Job-Quellen im DACH-Raum, reichert Firmen mit direkten HR-Kontaktdaten an und liefert täglich aktuelle Intelligence — vollautomatisch.
ROI
Statt 2–4h täglicher Recherche: 5 Minuten Dashboard-Check. Direkte Kontaktdaten erhöhen Kaltakquise-Erfolgsrate signifikant. Wochenbericht DACH montags 08:00 automatisch.
Der DACH-Stellenmarkt umfasst über 50 Millionen Beschäftigte. Täglich werden zehntausende neue Stellen ausgeschrieben. VakanzPuls ist die erste Plattform die diesen gesamten Markt systematisch aggregiert und für Personalvermittler aufbereitet.
| Merkmal | VakanzPuls | LinkedIn/Xing | Indeed/StepStone | Manuelle Recherche |
|---|---|---|---|---|
| Echtzeit-Marktdaten | ✓ Ja | teilweise | teilweise | ✗ Nein |
| Direkte HR-Kontakte | ✓ automatisch | manuell | ✗ Nein | aufwändig |
| DACH-Vollabdeckung | ✓ 25+ ATS | unvollständig | teilweise | ✗ Nein |
| Behörden & Sozial | ✓ 25K+ Stellen | ✗ Nein | teilweise | ✗ Nein |
| Outreach-Integration | ✓ direkt | InMail (kostenpfl.) | ✗ Nein | ✗ Nein |
| Automatisierungsgrad | ✓ vollautomatisch | ✗ manuell | ✗ manuell | ✗ manuell |
Typische Anwendungsfälle
Kaltakquise & Neukundengewinnung
Personalvermittler exportieren täglich eine Liste von Unternehmen mit neuen Stellen — inkl. HR-Kontakt-E-Mail. Outreach startet automatisch.
Marktbeobachtung & Frühwarnung
Watchlist-Funktion: Bei neuen Stellen eines Wunschkunden sofortige Telegram-Benachrichtigung. Akquise beginnt bevor der Wettbewerb reagiert.
Branchenanalyse & Wochenbericht
Automatischer DACH-Report jeden Montag: Top-10 Branchen, wachsende Arbeitgeber, Engpassberufe, regionale Hotspots.
Kundenpflege & Bestandsmonitoring
Bestandskunden auf Watchlist — sobald Stellenvolumen sinkt oder neue Positionen entstehen: sofortige Benachrichtigung.
Kern-Features (Partner-Dashboard)
- Vollzugriff Markt & Quellen
- Schnelltest (50/Tag)
- Watchlist (max. 20 Firmen)
- DACH-Report wöchentlich
- E-Mail Support
- Alles aus Starter
- Outreach-Engine (80/Tag)
- Kundensegmentierung & Export
- Watchlist unbegrenzt
- Intelligence & Seismograph
- API-Zugang (read-only)
- Priority Support
- Alles aus Professional
- Outreach unbegrenzt
- Vollständiger API-Zugang
- Multi-User (5 Seats)
- White-Label Option
- Dedizierter Account Manager
- SLA-Garantie
✓ Umgesetzt
- Landing Page DSGVO-konform (Cookie-Banner, Datenschutzerklärung)
- Outreach mit Unsubscribe-Link (DSGVO Art. 17)
- Opt-out-Verwaltung in Datenbank
- Datenspeicherung ausschließlich auf EU-Servern (Contabo DE)
- HTTPS/TLS auf allen Endpunkten
⏳ Ausstehend (nach Gründung)
- EU-Vertreter Art.27 — DRINGEND
- Firmenname & Adresse im Impressum
- datenschutz@vakanzpuls.de (nach Domain)
- AV-Vertrag Contabo + SendGrid
- Echte Telefonnummer (Sandro)
Quality Score Verteilung
Government-Jobs (756K, 65% aller Jobs): government_description_fetcher läuft 4× täglich zur Verbesserung.
| ATS-System | Aktive Quellen | Jobs (aktiv) | Methode | Status |
|---|---|---|---|---|
| SmartRecruiters | 86 | 69.201 | API | Aktiv |
| Softgarden | 1.082 | 57.518 | HTML (LB) | Aktiv |
| Greenhouse | 900 | 41.409 | API + Webhook | Aktiv |
| Lever | 869 | 27.588 | API | Aktiv |
| Personio | 2.361 | 24.971 | API + Webhook | Aktiv |
| Workday | 76 | 21.614 | HTML | Aktiv |
| Workable | 1.459 | 15.633 | API | Aktiv |
| iCIMS | 163 | 7.915 | HTML (LH) | Aktiv |
| Pinpoint | 359 | 7.409 | JSON API (LF) | Aktiv |
| BambooHR | 1.873 | 6.956 | JSON API (LD) | Aktiv |
| Breezy | 549 | 5.376 | JSON API (LF) | Aktiv |
| Ashby | 1.493 | 4.272 | API (LM) | Aktiv |
| Recruitee | 64 | 2.133 | API (LN) | Aktiv |
| Teamtailor | 48 | 590 | HTML (LN) | Aktiv |
| Haufe | 66 | 553 | HTML (LN) | Aktiv |
| JOIN.com | 1.413 | 469 | API (LN) | Aktiv |
| dvinci | 28 | 360 | HTML (LN) | Aktiv |
| + Concludis, Schema.org, RSS | ~600 | ~5.000 | Verschiedene | Aktiv |
1. Query-Generator erzeugt täglich 05:00 neue Such-Kombinationen (v3: 12.271 Queries/Zyklus)
2. gosom-Docker-Container (24 parallel auf W1+W2+W3) crawlen Google Maps
3. GMaps-Reaktor verarbeitet Rohdaten → Firmenprofile
4. Impressum-Crawler reichert E-Mail, Telefon, Inhaber an
ATS / Direkt (Kernformel)
| Titel + Location | +20 Pkt |
| Description (>100 Zeichen) | +20 Pkt |
| Employment Type | +10 Pkt |
| E-Mail-Kontakt (Hauptfaktor) | +30 Pkt |
| Telefonnummer | +10 Pkt |
| Karriereseite + Gehalt | +10 Pkt |
| Maximum | 100 Pkt |
Behörden / Sozial (angepasst)
| Titel, Location, Description, Emptype | +50 Pkt |
| E-Mail (Bonus, nicht Pflicht) | +15 Pkt |
| Telefonnummer | +15 Pkt |
| PLZ / Adresse vollständig | +10 Pkt |
| Gehaltsangabe (TVöD) | +10 Pkt |
| Maximum | 100 Pkt |
Separate Formel verhindert künstliche Score-Senkung durch Behörden-Jobs.
| Komponente | Status | Details |
|---|---|---|
| SendGrid API Key | ✓ Aktiv | Konfiguriert |
| E-Mail-Templates A/B | ✓ Fertig | Direkt + Frage-Variante |
| Outreach Engine | ✓ Fertig | 80/Tag, Mo–Fr 09:00 Cron |
| Unsubscribe + Webhook | ✓ Fertig | DSGVO-konform |
| 3 Outreach-Segmente | ✓ Bereit | Staffing (201) · Mittelstand (384) · Behörden (301) |
| Domain vakanzpuls.de | ⏳ Sandro | Nach Ostern → Prompt CP |
| OUTREACH_ENABLED | false | Aktivierung nach Domain |
Tech-Stack
| Tabelle | Spalten | Beschreibung | Kategorie |
|---|---|---|---|
job_advertisements | 76 | Kern-Tabelle: alle Stellenanzeigen mit Enrichment-Daten | Core |
crawler_sources | 31 | Alle registrierten Datenquellen | Core |
gmaps_discoveries | 24 | Google-Maps-Firmendatenbank | GMaps |
outreach_contacts | 16 | GVP-Kontakte für Outreach | Outreach |
worker_heartbeats | 22 | Cluster-Health (JN-JP) | Infra |
hiring_signals | 17 | Seismograph-Signale | Analytics |
customers | 25 | Kunden-Accounts | SaaS |
subscriptions | 19 | Stripe-Subscriptions | SaaS |
| + 43 weitere Tabellen | — | Logs, Config, Geo-Daten, Analytics... | Support |
Host: 127.0.0.1 (lokal) | 161.97.79.192 (Worker)
Port: 5433 (PgBouncer — NICHT 5432!)
Pool: 40 Verbindungen (+ Reserve 15) · Session-Mode
PG-Config: max_parallel_workers_per_gather = 0
| Daemon | Server | Funktion |
|---|---|---|
master_orchestrator | Master | Koordination, Heartbeat-Check, Worker-Monitoring |
gmaps_reaktor | Master | GMaps-Queue-Management, Sofort-Neuzyklus |
gmaps_job_harvester | Master | GMaps-Rohdaten → gmaps_discoveries |
ats_crawler_daemon | Worker-1 | Kontinuierliches Crawlen aller 21 ATS-Systeme |
enrichment_pipeline_v2 | Worker-1 | Impressum + E-Mail/Phone-Enrichment 24/7 |
quality_score_v2 | Worker-1 | Scoring (5K Batch/60s), kategorisierte Formel |
phone_enricher | Worker-1 | Telefon-Propagierung via SKIP LOCKED |
career_page_daemon | Worker-2 | 150 concurrent Career-Page-Checks |
triple_enricher_daemon | Worker-2 | GMaps + Impressum + Job-Text Phone kombiniert |
shadow_monitor | Worker-1 | Master-Failover (20s Zyklus, auto-Promotion) |
Öffentliche Endpunkte
GET /api/health — Health-CheckGET /api/public/briefing — System-BriefingPOST /api/public/webhook/* — ATS-WebhooksPOST /auth/login — JWT-AuthentifizierungIQ-Features
GET /iq/akuter-bedarfGET /iq/kundensegmenteGET /iq/watchlistGET /iq/schnelltest?query=GET /iq/dach-reportGET /iq/quality-dashboardCluster & Monitor
GET /api/cluster/statusGET /api/cluster/lb-statusGET /monitor/* — 12 EndpunkteGET /api/workers/dockerGET /admin/api/auto-analyst/status — Auto-Analyst Log + StatsPOST /admin/api/auto-analyst/trigger — Analyst manuell auslösenBusiness
GET /dashboard — Partner-KPIsGET /customers/* — 9 RoutesGET /gvp/* — 6 RoutesGET /outreach/* — 5 RoutesGET /subscriptions/* — Stripe| Frequenz | Script | Funktion |
|---|---|---|
*/2 min | vakanzpuls_watchdog.sh | Master-Daemon-Überwachung + Auto-Restart |
*/5 min | worker_scheduler.py | Phase-A/B + Adaptive Rebalancing |
*/30 min | critical_alert.py | Backend, Worker-SSH, Celery, Spider-Stale |
Stündlich | watchlist_daemon.py | Watchlist-Alerts für neue Jobs |
4x täglich | government_description_fetcher.py | Descriptions für Behörden-Jobs (03/09/15/21h) |
tägl. 05:00 | gmaps_query_generator_v3.py | Neue GMaps-Queries + Sofort-Neuzyklus |
tägl. 06:00–09:00 | Alle Spider (Interamt, Stellenwerk, AWO, DRK...) | 25K+ öffentliche Stellen täglich |
tägl. 08:30 | morning_briefing.py | Telegram-Statusbericht |
Mo 08:00 | dach_report.py | Wöchentlicher DACH-Report |
So 01:00 | dedup_jobs.py | Duplikate-Bereinigung |
monatl. 1. | generate_market_report.py | Monatlicher Marktbericht |
Seit April 2026 sorgt das Always-Working System dafür, dass alle Crawling- und Enrichment-Prozesse permanent arbeiten. Kein Daemon bleibt unbemerkt idle — automatische Erkennung und Wiederherstellung in unter 60 Sekunden.
Briefing Auto-Analyst — Regel-Engine
| Bedingung | Aktion (LOW-Risk, sofort) | Cooldown |
|---|---|---|
apollo.daemon = false | Apollo-Daemon starten | 6h |
emails_pro_stunde = 0 | Enrichment-Pipeline prüfen + Restart | 2h |
| GMaps Queue pending=0 + idle | gmaps_jobs auf 'pending' zurücksetzen → Zyklus startet | 1h |
| BA-Fetcher nicht aktiv | BA-Fetcher starten | 4h |
| desc_pct < 25% + Booster down | Description-Booster neu starten | 4h |
| E-Mail-Rate < 60% | Email-Booster-Status prüfen | 6h |
| GMaps-Karriere-Funnel < 100/24h | Ungecheckte Karriereseiten analysieren | 24h |
| GVP ohne E-Mail > 50% | GVP-Kategorien analysieren | 24h |
| Alle Daemons aktiv aber Output=0 | Prozess-Status-Snapshot | 3h |
JN — Heartbeat-System
Alle Server schreiben alle 30s in worker_heartbeats: Load, RAM, Daemons, Docker-Count, Queue. Orchestrator prüft alle 60s.
JO — Adaptive LB
adaptive_lb.py routet Tasks zum besten Worker. GMaps-Docker-Load herausgerechnet. RAM + Slots entscheiden.
JP — Master-Failover
shadow_monitor.py auf W1: bei 2× Ausfall (~40s) → W1 startet Backend :8004 + Celery-Beat. Auto-Recovery.
# Deployment-Workflow:
git add -A && git commit -m "feat(KN): ..." && git push origin master
# Frontend rebuild (immer mit rm -rf .next!):
cd /home/zerocool/crawler/admin
rm -rf .next && npm run build
fuser -k 3003/tcp; sleep 8; nohup npx next start -p 3003 &
# Backend restart:
bash scripts/backend_restart.sh
Kritische Regeln
- Immer
rm -rf .nextvor Build - DB-Host Worker:
161.97.79.192(NICHT 127.0.0.1) - PgBouncer Port:
5433(NICHT 5432) - Git-Branch:
master - Backend NUR über
scripts/backend_restart.sh
Daemon-Verteilung (42)
- Master (13): orchestrator, reaktor, harvester, celery, heartbeat, bot, never-idle, auto-analyst, tis, aoe-executor, doku-updater, docker-monitor, apollo
- Worker-1 (12): ats-crawler, mass-crawler, salary, phone, description, enrichment, quality, desc-booster, shadow, emptype, heartbeat, gmaps-daemon
- Worker-2 (12): career-page, career-html, triple-enricher, ba-fetcher, description, desc-booster, domain-resolver, data-propagator, contact-completer, career-miner, heartbeat, gmaps-daemon
- Worker-3 (7): description(shard4+5), desc-booster, career-page, triple-enricher, career-html, heartbeat, gmaps-daemon
+ 2 hiberniert: ats-email-enricher, domain-email-booster (reaktiviert bei >500 neuen GMaps-Domains/Tag)
Abgeschlossene Meilensteine
Nächste Schritte
Dringend nach Gründung
- EU-Vertreter Art.27 — activemind.legal ~50€/Mo (DRINGEND)
- Firmenname + Adresse im Impressum
- datenschutz@vakanzpuls.de (nach Domain)
- AV-Vertrag Contabo + SendGrid
- Echte Telefonnummer (Sandro)
Warten auf externe Trigger
- Domain vakanzpuls.de → Sandro
- Stripe-Preise → Sandro festlegen
- Erstkunden-Demo → nach Domain
- desc_pct 33%→70% (Description-Pipeline läuft 24/7)
Stand: April 2026 · Prompt-Stand: A–MZ deployed · Nächste ID: NA
GitHub: 0xxCool/vakanzpuls · Branch: master