Automation
Ingest URL et file d'URLs : scrape réel via Playwright (LinkedIn + sources spécialisées), critères Athena 120k-150k AUD full remote AU, mêmes CV/LM PDF sous 02_SENT. Déjà vues : SQLite / scanned_jobs. Pas de second enregistrement pour une URL déjà en SQLite.
Ingérer une offre (URL réelle)
Playwright scrape la page (LinkedIn/ATS/Seek), calcule le match (>80 %), vérifie remote AU + salaire + Easy Apply, puis génère CV/LM en PDF si tout est vert. Sinon la ligne reste en brouillon.
File d'URLs (ingest réel multi-source)
Une URL d'offre par ligne (LinkedIn, ATS, Seek…). Scrape + critères + CV/LM comme pour une seule URL, avec pause entre les requêtes (rate limit).
Recherche réelle (Playwright)
Lance Chrome/Playwright, découvre des offres réelles depuis les pages de recherche configurées, scrape chaque annonce puis alimente SQLite avec génération CV/LM si les critères sont validés.
Automation logs
SQLite / automation_logs — dernier run en tête
2026-04-02T06:49:11.083Z · id=3c8ba659-7726-49a0-8700-3b5b147a1f85
analyzed=4 · matched=0 · applied=0 · rejected=4
{ "analyzed": [ { "job_title": "LLM Integration Engineer", "company": "NeoScale AI", "reason": "" }, { "job_title": "Google Ads Automation Lead", "company": "AdTech Labs", "reason": "" }, { "job_title": "Junior Prompt Tester", "company": "LowPay Startup", "reason": "" }, { "job_title": "ML Engineer", "company": "NoEasyApply Co", "reason": "" } ], "matched": [], "applied": [], "rejected": [ { "job_title": "LLM Integration Engineer", "company": "NeoScale AI", "reason": "Match 44% < 80%" }, { "job_title": "Google Ads Automation Lead", "company": "AdTech Labs", "reason": "Match 44% < 80%" }, { "job_title": "Junior Prompt Tester", "company": "LowPay Startup", "reason": "Salary below 100000 AUD/y or 60 USD/h" }, { "job_title": "ML Engineer", "company": "NoEasyApply Co", "reason": "No Easy Apply — automation skips" } ], "skipped_already_applied": [], "skipped_already_scanned": [] }