Groupe Altus (altusgroup)
Employeur direct · Plateforme ATS : workday · Statut registre : actif · Connecteur : jobka/connectors/altusgroup.py
Description
- Site : Groupe Altus
- Page carrières : https://altusgroup.wd3.myworkdayjobs.com/AltusGroup
- Secteurs : Immobilier
- Région : Montréal
- Offres marquées « Offre directe » dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
Accès
- Mécanique : voir la fiche plateforme
ats-workday.md— API JSON publique du site carrières, backendrequestsdirect (Scrapfly seulement si indiqué sur la fiche plateforme). - Identifiants du tenant (attributs du connecteur) :
| Attribut | Valeur |
|---|---|
EMPLOYER |
Groupe Altus |
HOST |
wd3 |
SITE |
AltusGroup |
TENANT |
altusgroup |
- Throttle : 0.7 s entre requêtes.
- Filtre Québec : seuls les postes localisés au Québec sont conservés (facette serveur quand l'ATS en offre une, sinon
is_quebec_locationcôté client).
Champs → schéma
Complétude mesurée sur les 1 offres actives de la source (base live, 2026-10-14 18:40 EDT).
Champ (jobs.*) |
Rôle | Complétude |
|---|---|---|
title — Titre |
titre du poste | 100 % |
employer — Employeur |
nom de l'entreprise | 100 % |
url — URL |
lien direct vers l'offre originale | 100 % |
description — Description |
texte complet (HTML nettoyé) | 100 % |
city — Ville |
municipalité normalisée | 100 % |
region — Région |
région administrative | 100 % |
address — Adresse |
adresse du lieu de travail | 0 % |
postal_code — Code postal |
code postal si publié | 0 % |
work_mode — Mode |
presentiel / hybride / teletravail | 0 % |
employment_type — Type |
temps_plein / temps_partiel / … | 100 % |
salary — Salaire ($) |
bornes numériques normalisées $/h et $/an | 100 % |
salary_label — Libellé salaire |
texte salarial original | 100 % |
benefits — Avantages |
avantages sociaux publiés (JSON) | 0 % |
requirements — Exigences |
scolarité, expérience, langues (JSON) | 100 % |
date_posted — Date de parution |
ISO 8601 | 100 % |
date_deadline — Date limite |
date limite pour postuler | 0 % |
category — Catégorie |
taxonomie interne (TI, Santé, …) | 0 % |
language — Langue |
fr / en / bilingue (source ou heuristique) | 100 % |
company_logo — Logo employeur |
URL du logo si exposé par la source | 0 % |
apply_url — Candidature |
lien de candidature directe | 100 % |
gps — GPS |
lat/lng (géocodage sans invention) | 100 % |
Exemple réel : Analyste de marché - Market Analyst — Montréal · $50,000 CAD - $52,500 CAD · parue le 2026-10-09.
Fréquence & budgets
- Cadence : resynchronisation horaire (PM2
job-ka-sync=run.py watch 60), suivie du géocodage en lot puis de la déduplication inter-sources. - Throttle : 0.7 s minimum entre deux requêtes vers la source (
request_delay). - Budgets / plafonds (variables d'environnement) :
| Variable | Défaut |
|---|---|
JOBKA_WORKDAY_DETAIL_LIMIT |
300 |
- Cache BD des pages détail (
detail_cache) : le détail d'une offre n'est re-téléchargé que si sa ligne de liste change.
Volumétrie & complétude live
(mesuré le 2026-10-14 18:40 EDT dans data/jobka.db)
- Offres en base : 2 (dont 1 actives, 0 masquées comme doublons
dup_of) - Salaire : 1/1 actives (100 %)
- GPS : 1/1 actives (100 %)
- Mode : 0/1 actives (0 %)
- Parution : 1/1 actives (100 %)
- Dernier sync : 2026-10-14 18:10 — trouvées 1, +0, ~0, -0
- Syncs enregistrés (
sync_log) : 577
Erreurs & dépannage
Erreurs relevées dans sync_log :
| Erreur | Occurrences | Dernière fois |
|---|---|---|
| Workday non-JSON après 3 essais (HTTP 200, text/html) : Expecting value: line 1 column 1 (… | 6 | 2026-10-10 02:50 |
| HTTPSConnectionPool(host='altusgroup.wd3.myworkdayjobs.com', port=443): Max retries exceed… | 1 | 2026-09-18 12:51 |
| Expecting value: line 1 column 1 (char 0) | 8 | 2026-08-29 03:16 |
- Rejouer un sync isolé :
.venv/bin/python run.py sync altusgrouppuis inspectersync_log:sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='altusgroup' ORDER BY ts DESC LIMIT 5;" - Garde-fous : une source qui retourne ≤ 25 % de sa médiane historique déclenche une alerte et les retraits sont suspendus ; une offre doit manquer 2 syncs consécutifs avant
active=0.
Licence / conformité
Flux public du site carrières officiel de l'employeur (API JSON de l'ATS ou HTML rendu serveur) — le même contenu que la page carrière affiche publiquement, prévu pour la diffusion des offres, sans authentification. Chaque offre conserve son URL originale et le bouton « Postuler chez Groupe Altus » renvoie chez l'employeur. Aucune donnée personnelle de candidat n'est collectée. User-Agent identifié JobKaBot/1.0 (+https://www.job-ka.com; contact@spboucher.ai) sur les accès directs ; requêtes throttlées et plafonnées par budgets.
Historique
Mission connecteurs du 2026-08-18 — passage de 135 à 217 employeurs directs connectés, de 9 à 17 plateformes ATS, ajout de 3 portails agrégateurs et du canal de dépôt direct :
fd4bfc8qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;5a66f48+59 employeurs (sondage massif d'ATS + détection de pages carrières) ;4917d578 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;f6e7571portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;744cbfcbadge « Offre directe », stats directes/portails, dépôt direct employeurs ;1604ff9reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
Commits touchant jobka/connectors/altusgroup.py :
f5c1469d2026-10-03 [ka6] fix connecteur altusgroup: faux positif de supervision « volume QC nul » (35e cas du pattern, 4e intervention sur cette source) — le connecteur est SAIN, found=0 est le comportement CORRECT, et la cause est désormais prouvée STRUCTURELLE sous un angle neuf (M&A, leçon tsys ad3ad36) : Altus Group démantèle ses services-conseils par cessions successives — Property Tax → Ryan LLC (clôturé 2025), évaluations canadiennes → Newmark (clôturé ~2026-03-01), et Development Advisory (ex-Cost & Project Management, la division de l'UNIQUE offre QC historique R0013818 « Cost Consultant/Conseiller(ère) en analyse de coûts », Montréal, dépubliée 2026-08-26) → Newmark (annoncé 2026-08-04, clôture 2026-09-01, communiqué officiel altusgroup.com vérifié live). Le board Workday résiduel altusgroup.wd3/AltusGroup ne porte plus que logiciel/données : re-vérifié live 200, 42 offres (Toronto/US/UK/Inde/Singapour), searchText Quebec/Québec/Montréal/Montreal → 0, offre multi-lieux « 21 Locations » R0014026 vérifiée au détail cxs = 21 lieux 100 % US. Aucun site frère sur le tenant (9 noms sondés → 404, seul AltusGroup existe). Aucune migration d'ATS : careers.altusgroup.com reste la façade Phenom AGYAGUGLOBAL (200) au-dessus du même board. ANGLE MORT DOCUMENTÉ (pas de nouveau connecteur créé, hors périmètre) : les équipes montréalaises ex-Altus publient désormais chez NEWMARK sur Oracle Cloud HCM (hdow.fa.us6.oraclecloud.com, site CX_1001) — ≥1 offre QC vérifiée live (249132 « Billing Coordinator », Montréal, parue 2026-07-29) ; Newmark (et Ryan) non couverts par job-ka → connecteur candidat pour récupérer ce volume. Le stale de 901 h vient de la définition de succès de la supervision (dernier found>0 = 2026-08-26) : sync_log VERT en continu depuis (146/148 ok), les rares échecs = fenêtre de maintenance nocturne Workday ~03 h EDT (38 sources touchées simultanément le 2026-10-03 03:11, transitoire systémique déjà retryé). Tant qu'Altus ne republie rien au Québec — improbable vu la cession de la division concernée — ce connecteur sera re-signalé périodiquement : structurel, pas une panne (même classe que cclfg 43526d3 / ghgsat 5e2c122 / poolcorp 3e3fd59 / tsys ad3ad36). sources.json déjà propre (url + sectors corrigés aux passages précédents). Docstring altusgroup.py enrichie (chronologie M&A + angle mort Newmark + tenant sans site frère). Sync isolé rejoué ×2 : found=0 stable, ok=1, ~4 s ; non-régression plateforme workday sur tenant vivant mcgill : found=564, ok=1. Fiches docs/connecteurs/ altusgroup.md + ats-workday.md + INDEX.md régénérées via scripts/gen_connector_docs.py (les 1130 autres fiches, dont seuls les instantanés horodatés changeaient, restaurées — hors périmètre). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.e327f18c2026-09-26 [ka6] fix connecteur altusgroup: faux positif de supervision re-confirmé sous un angle NOUVEAU — le portail carrières officiel exclut migration d'ATS et angle mort (0 offre QC légitime, 17e cas du pattern) — le statut stale vient toujours de la définition de succès de la supervision : le board Workday altusgroup.wd3/AltusGroup n'a AUCUNE offre QC (44 offres live re-scannées ce jour, 0 occurrence de montréal/québec/laval/gatineau/sherbrooke, les 8 offres multi-lieux inspectées au détail cxs : 21+9+5+2×5 localisations toutes US/UK/Canada hors QC), donc les syncs horaires rendent ok=1 found=0 (médiane 0.0) comptés comme non-succès. ANGLE NEUF (jamais couvert par les 3 interventions précédentes f092997/09-18/09-19 qui re-vérifiaient seulement l'API cxs) : inspection de la page carrières OFFICIELLE www.altusgroup.com/careers → careers.altusgroup.com = façade Phenom People (tenant AGYAGUGLOBAL, CDN phenompeople.com) — pattern challenger/autodesk d'une migration d'ATS EXCLU car chaque applyUrl Phenom pointe vers CE board Workday (altusgroup.wd3.myworkdayjobs.com/AltusGroup/.../apply). Le portail Phenom affiche 53 offres dont UNE au Québec (« Cost Consultant/Conseiller(ère) en analyse de coûts », R0013818, Montréal, 60-75 k$, parue 2026-05-12) ABSENTE du board Workday : vérification décisive au détail cxs → 403 S22 « permission denied » (les deux variantes R0013818 et R0013818-1, avec et sans cookies de session fr-CA) = posting existant mais DÉPUBLIÉ du site externe, signature démontrée par triangulation (ID bidon → 404 S21 « not found », offre vivante témoin R0013639 → 200) et confirmée sur échantillon (R0013662, R0013813 aussi 403 = fantômes ; R0013890 présent au board → 200) : Phenom sert un CACHE jamais purgé (~31 offres périmées sur 53), le board Workday cxs est la source de vérité. Hypothèse « partition par locale » (pattern Dayforce) testée et écartée : pagination complète du board en session fr-CA = mêmes 44 offres, sans R0013818 ; la page publique 200 de l'offre est une coquille SPA vide (6 Ko, 0 JSON-LD) qui rendrait « not found » via le même cxs 403. Le connecteur est INTACT : rien à corriger dans le code (sources.json déjà propre depuis 09-18), seule la docstring est enrichie (re-vérif 2026-09-26 + signature 403 S22 documentée). Fiches docs/connecteurs/ altusgroup.md + ats-workday.md + INDEX.md régénérées via scripts/gen_connector_docs.py (les 1130 autres fiches, dont seuls les instantanés horodatés changeaient, restaurées — hors périmètre). Sync isolé rejoué : found=0 en 4,0 s, ok=1 — 0 reste le volume légitime tant qu'Altus ne republie pas au Québec ; toute republication réelle apparaîtra dans le cxs et sera capturée (filtre client + facette serveur opérationnels). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.f09299702026-09-19 [ka6] fix connecteur altusgroup: faux positif de supervision récurrent (0 offre QC toujours légitime) + échec nocturne transitoire de maintenance Workday — aucun défaut du connecteur, ajout du secteur manquant dans sources.json — le statut stale vient de la définition de succès de la supervision : le tenant Workday altusgroup.wd3 n'a AUCUNE offre QC depuis la dépublication fin août de l'unique offre montréalaise « Cost Consultant/Conseiller(ère) en analyse de coûts » R0013818 (active=0 depuis le 2026-08-26), donc les syncs horaires rendent ok=1 found=0 (médiane 0.0) et sont comptés comme non-succès depuis 565 h — même profil que quadreal ef41976, cpab e498c30, drop_genie 8a53793, et déjà diagnostiqué sur CE connecteur les 2026-08-26, 2026-09-12 et 2026-09-18. Le seul échec réel (sync de 02:43 cette nuit : « Workday non-JSON après 3 essais, HTTP 200 text/html ») est la fenêtre de maintenance nocturne Workday ~03 h EDT documentée dans workday.py (retry+backoff déjà en place), non reproduite au matin. Le connecteur est INTACT et re-vérifié live sous un angle NOUVEAU (l'angle mort multi-lieux type quadreal) : 42 offres sur 3 pages, zéro occurrence de quebec/montréal/laval/gatineau/sherbrooke/rougemont dans le JSON complet des listes, recherche serveur searchText Quebec/Montréal → total 0, et les 8 offres « N Locations » (jusqu'à 21 lieux) vérifiées UNE À UNE au détail cxs : 41 localisations cumulées, toutes US/UK (Texas, New York, Illinois, London, Manchester…), aucune canadienne hors Ontario/Alberta déjà exclues. Correction au passage du dernier artefact vague D dans data/sources.json : sectors [] → [Immobilier] (Altus Group = intelligence en immobilier commercial ; secteur déjà au vocabulaire, 29 sources ; la fiche affichait « Secteurs : n/d »). Docstring du connecteur mise à jour (re-vérif 2026-09-19, multi-lieux couverts). Sync isolé rejoué : found=0 en 3,9 s, ok=1 — 0 reste le volume légitime tant qu'Altus ne republie pas au Québec ; les offres reviendront d'elles-mêmes si republiées (filtre client is_quebec_location + repli facette serveur opérationnels). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.2fc9e63a2026-09-18 [ka6] fix connecteur altusgroup: faux positif de supervision (0 offre QC légitime — Altus n'a plus de poste au Québec) + échec DNS transitoire ponctuel — aucun défaut du connecteur, correction d'un artefact sources.json (url vide) — le statut stale vient de la définition de succès de la supervision : le tenant Workday altusgroup.wd3 (site AltusGroup) n'a AUCUNE offre QC depuis le retrait de l'unique offre montréalaise fin août (R0013818, déjà constaté le 2026-08-26), donc chaque sync horaire rend ok=1 found=0 (médiane 0.0) et est compté comme non-succès depuis le 2026-08-26 (551 h). Le connecteur est INTACT et re-vérifié live : l'API cxs répond 200 avec 42 offres (Toronto, Calgary, Ottawa, US, UK, Paris, Sydney, Singapour, Inde…) — recherche serveur « Quebec »/« Montréal » = 0 résultat, zéro occurrence de quebec/montréal/laval/gatineau/sherbrooke dans le JSON complet des 3 pages (l'aveuglement type stateindustrial est exclu ; le hook _external_id posé le 2026-09-12 reste correct). L'unique sync en échec (18/09 12:51) est une NameResolutionError DNS transitoire sur altusgroup.wd3.myworkdayjobs.com, non reproduite (API OK en live). Même profil que altom_transport ea13137, earthrated f7b1c35, canadasmotorcycle 175b215, jsheldllc bdc5d09, psacunion 4d8080b : tenant à volume QC nul/faible compté non-succès par la supervision. Correction au passage de l'artefact du générateur vague D : url vide dans data/sources.json → https://www.altusgroup.com (vérifié 200, titre « Altus Group - Data-Powered CRE Technology & Analytics » ; la fiche affichait « Site : Groupe Altus »). Le nom d'employeur « Groupe Altus » est correct. Docstring du connecteur mise à jour (42 offres, re-vérif 2026-09-18). Sync isolé rejoué : found=0 en 4,0 s, ok=1 — 0 est le volume légitime tant qu'Altus ne republie pas au Québec ; les offres reviendront d'elles-mêmes si republiées. 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.4e9be2432026-09-12 [ka6] fix connecteur altusgroup: external_id régional → ID de réquisition (hook _external_id dans la plateforme workday, défaut inchangé) — le tenant altusgroup.wd3 préfixe bulletFields par la région quand il y en a une (['Ontario','R0013639'] vs ['R0013942'] seul), si bien que bullets[0] devenait l'external_id : l'offre QC historique était en base sous external_id='Quebec', et le sync du 2026-08-26 trouvait 2 offres pour 1 seule stockée (collision d'ID entre postes d'une même région). L'extraction est désormais isolée dans un hook _external_id() de WorkdayConnector (comportement par défaut strictement identique pour les autres tenants) et surchargée dans altusgroup.py : premier bullet au format réquisition R+chiffres, sinon suffixe du chemin. Vérifié live : 36 postes scannés → 36 IDs uniques au format R00xxxxx, 0 poste non conforme. Volume 0 légitime AUJOURD'HUI : 7 postes Canada, tous Toronto — aucune offre QC depuis la dépublication de l'offre montréalaise le 2026-08-26 (médiane historique 0.0). Le statut stale vient de là (la supervision date le dernier succès au dernier sync found>0, 2026-08-26 14:19) ; l'unique échec récent (2026-09-12 03:04, « Workday non-JSON HTTP 200 text/html ») est la fenêtre de maintenance hebdomadaire Workday du vendredi/samedi nuit (28 occurrences multi-sources cette nuit, mêmes plages 02h30–03h15 les 2026-08-29 et 2026-09-05), transitoire et déjà retryée. Sync isolé rejoué : found=0 en 2,4 s, statut ok. 101 tests pytest verts. pm2 restart job-ka-sync OK, site 200.856863d22026-08-25 Vague D implémentée — 75 nouveaux connecteurs (968 -> 1044 employeurs), ~768 offres QC