SPB Git

spb/job-ka

Public

[ka6] fix connecteur ingeniuinc: migration d'ATS SmartRecruiters → site Odoo de l'employeur le 2026-10-27 — tenant SR vidé, nouvelle plateforme odoo.py. Diagnostic : vert found=1 en continu jusqu'à 07:32 EDT, puis ok=1 found=0 dès 10:23 (removed=1 à la règle des 2 absences) — l'unique offre, un fantôme paru le 2021-08-02, dépubliée entre les deux. Vérification live : API postings SmartRecruiters IngeniuInc 200 totalFound=0 (tenant existant mais vidé), page board 404 ; l'entreprise s'est rebaptisée Ingeniu Solutions (ingeniu.ca → www.ingeniusolutions.com) et publie désormais sur son PROPRE site Odoo (module website_hr_recruitment, /jobs) : 2 offres publiées. Nouvelle classe de plateforme jobka/connectors/odoo.py (pattern glow) : liste HTML rendue serveur (cartes jobs_grid, ancre /jobs/<slug>-<id>, titre <h3>, libellé <address>), pagination /jobs/page/N suivie, détail par MICRODONNÉES schema.org/JobPosting (meta datePosted/employmentType, div itemprop=description) — ⚠️ la div description ne porte que l'intro, le corps (responsabilités, compétences, avantages) vit dans les blocs website-builder qui la suivent : capture jusqu'au footer, CTA retiré ; cache BD + budget de re-visites (JOBKA_ODOO_DETAIL_LIMIT=60), garde-fou anti faux « 0 offre » (marqueur jobs_grid + retry). Lieux en cascade (doctrine bento_sushi, rien d'inventé) : addressLocality structurée → libellé <address> QC → ville citée dans le bloc JobPosting (« à notre bureau de Montréal », « Située à Montréal ») validée contre le référentiel des municipalités QC ; tout ce qui suit <footer> (siège en pied de page) jamais lu. ingeniuinc.py re-pointé sur OdooConnector (ids 743999764601957 → 15/38), sources.json mis à jour (url, careers_url, connector=odoo). Tests réels : fetch isolé 2 offres Montréal (teletravail/hybride, temps_plein, descriptions 2623/3633 car.), sync vert ok=1 found=2 added=2 en 0,3 s (médiane 0.5 — le nouveau board porte réellement 2 offres), 2 offres actives en base, l'ancienne offre SR inactive. 108 tests pytest verts, pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200. Fiches ingeniuinc.md/ats-odoo.md/ats-smartrecruiters.md/INDEX.md régénérées (1132 autres restaurées, hors périmètre).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Simon-Pierre Boucher committed (Oct 27, 2026) parent a0bc5a1 Browse files

7 changed files +545 −243

modified data/sources.json +4 −4
@@ -8963,13 +8963,13 @@
8963 8963 {
8964 8964 "id": "ingeniuinc",
8965 8965 "name": "Ingeniu inc.",
8966 − "url": "",
8967 − "careers_url": "https://jobs.smartrecruiters.com/company/IngeniuInc",
8966 + "url": "https://www.ingeniusolutions.com",
8967 + "careers_url": "https://www.ingeniusolutions.com/jobs",
8968 8968 "sectors": [
8969 8969 "Ingénierie",
8970 8970 "Conseil"
8971 8971 ],
8972 − "connector": "smartrecruiters",
8972 + "connector": "odoo",
8973 8973 "status": "actif",
8974 8974 "region": "Montréal"
8975 8975 },
@@ -13680,4 +13680,4 @@
13680 13680 "region": "Québec (province)"
13681 13681 }
13682 13682 ]
13683 −}
\ No newline at end of file
13683 +}
modified docs/connecteurs/INDEX.md +37 −36
@@ -5,16 +5,16 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/INDEX.md
7 7 Rôle : Index généré de la documentation des connecteurs (ATS, employeurs, portails, dépôt)
8 −Généré : 2026-10-27 13:26 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-10-27 13:42 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
12 12
13 13 # Job·Ka — Connecteurs (index)
14 14
15 −> Index généré le 2026-10-27 13:26 EDT par `scripts/gen_connector_docs.py` (rejouable). Croise `data/sources.json`, l'introspection de `jobka/connectors/*.py` et la base live `data/jobka.db`.
15 +> Index généré le 2026-10-27 13:42 EDT par `scripts/gen_connector_docs.py` (rejouable). Croise `data/sources.json`, l'introspection de `jobka/connectors/*.py` et la base live `data/jobka.db`.
16 16
17 −**1104 employeurs directs** connectés via **26 plateformes ATS** + **3 portails agrégateurs** + le canal de **dépôt direct** — **26174 offres actives** (23120 directes, 3054 portails ; 111 masquées comme doublons inter-sources, soit 26063 visibles). 1135 fiches.
17 +**1104 employeurs directs** connectés via **27 plateformes ATS** + **3 portails agrégateurs** + le canal de **dépôt direct** — **26161 offres actives** (23107 directes, 3054 portails ; 111 masquées comme doublons inter-sources, soit 26050 visibles). 1136 fiches.
18 18
19 19 Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conserve son URL originale ; la candidature se fait chez l'employeur (badge « Offre directe » sur les sources directes).
20 20
@@ -22,17 +22,17 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
22 22
23 23 | Plateforme | Employeurs | Actives | Salaire | GPS |
24 24 |---|---|---|---|---|
25 −| [`workday`](ats-workday.md) | 232 | 7510 | 48 % | 87 % |
26 −| [`smartrecruiters`](ats-smartrecruiters.md) | 172 | 2868 | 16 % | 99 % |
27 −| [`workable`](ats-workable.md) | 71 | 2015 | 18 % | 100 % |
28 −| [`dayforce`](ats-dayforce.md) | 129 | 1985 | 9 % | 100 % |
29 −| [`successfactors`](ats-successfactors.md) | 12 | 1683 | 18 % | 99 % |
25 +| [`workday`](ats-workday.md) | 232 | 7516 | 48 % | 87 % |
26 +| [`smartrecruiters`](ats-smartrecruiters.md) | 171 | 2865 | 15 % | 99 % |
27 +| [`workable`](ats-workable.md) | 71 | 2016 | 18 % | 100 % |
28 +| [`dayforce`](ats-dayforce.md) | 129 | 1983 | 9 % | 100 % |
29 +| [`successfactors`](ats-successfactors.md) | 12 | 1668 | 18 % | 99 % |
30 30 | [`njoyn`](ats-njoyn.md) | 11 | 1253 | 70 % | 87 % |
31 −| [`workland`](ats-workland.md) | 1 | 1154 | 37 % | 100 % |
32 −| [`greenhouse`](ats-greenhouse.md) | 132 | 814 | 18 % | 99 % |
31 +| [`workland`](ats-workland.md) | 1 | 1156 | 36 % | 100 % |
32 +| [`greenhouse`](ats-greenhouse.md) | 132 | 812 | 18 % | 99 % |
33 33 | [`wpjobmanager`](ats-wpjobmanager.md) | 8 | 807 | 6 % | 100 % |
34 −| [`lever`](ats-lever.md) | 58 | 611 | 21 % | 95 % |
35 −| [`breezy`](ats-breezy.md) | 71 | 427 | 38 % | 94 % |
34 +| [`lever`](ats-lever.md) | 58 | 609 | 21 % | 95 % |
35 +| [`breezy`](ats-breezy.md) | 71 | 426 | 38 % | 94 % |
36 36 | [`ashby`](ats-ashby.md) | 41 | 293 | 53 % | 58 % |
37 37 | [`recruitee`](ats-recruitee.md) | 30 | 285 | 20 % | 97 % |
38 38 | [`bamboohr`](ats-bamboohr.md) | 37 | 278 | 8 % | 100 % |
@@ -40,14 +40,15 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
40 40 | [`teamtailor`](ats-teamtailor.md) | 10 | 158 | 28 % | 96 % |
41 41 | [`zoho_recruit`](ats-zoho_recruit.md) | 16 | 145 | 14 % | 86 % |
42 42 | [`jazzhr`](ats-jazzhr.md) | 28 | 141 | 17 % | 91 % |
43 −| [`adp`](ats-adp.md) | 17 | 133 | 36 % | 95 % |
43 +| [`adp`](ats-adp.md) | 17 | 134 | 37 % | 94 % |
44 44 | [`taleo`](ats-taleo.md) | 5 | 107 | 0 % | 100 % |
45 −| [`eightfold`](ats-eightfold.md) | 1 | 55 | 89 % | 98 % |
45 +| [`eightfold`](ats-eightfold.md) | 1 | 55 | 89 % | 96 % |
46 46 | [`icims`](ats-icims.md) | 7 | 53 | 28 % | 96 % |
47 47 | [`ultipro`](ats-ultipro.md) | 4 | 48 | 52 % | 100 % |
48 48 | [`digitalrecruiters`](ats-digitalrecruiters.md) | 2 | 36 | 83 % | 100 % |
49 49 | [`custom`](ats-custom.md) | 1 | 32 | 38 % | 91 % |
50 50 | [`glow`](ats-glow.md) | 1 | 9 | 44 % | 0 % |
51 +| [`odoo`](ats-odoo.md) | 1 | 2 | 0 % | 0 % |
51 52
52 53 ## Portails agrégateurs & dépôt
53 54
@@ -62,10 +63,10 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
62 63
63 64 | Employeur | ATS | Actives | Salaire | GPS | Dernier sync OK |
64 65 |---|---|---|---|---|---|
65 −| [Réseau Atlas Workland (~80 employeurs QC : CSS, cégeps, Santé Québec, STQ, UQTR…)](atlas_workland.md) | [`workland`](ats-workland.md) | 1154 | 37 % | 100 % | ✅ |
66 +| [Réseau Atlas Workland (~80 employeurs QC : CSS, cégeps, Santé Québec, STQ, UQTR…)](atlas_workland.md) | [`workland`](ats-workland.md) | 1156 | 36 % | 100 % | ✅ |
66 67 | [Couche-Tard / Circle K](circlek.md) | [`workday`](ats-workday.md) | 1003 | 70 % | 68 % | ✅ |
67 68 | [Solution SFT](solution_sft.md) | [`workable`](ats-workable.md) | 969 | 25 % | 100 % | ✅ |
68 −| [Bombardier](bombardier.md) | [`successfactors`](ats-successfactors.md) | 941 | 1 % | 100 % | ✅ |
69 +| [Bombardier](bombardier.md) | [`successfactors`](ats-successfactors.md) | 929 | 1 % | 100 % | ✅ |
69 70 | [Walmart Canada](walmart.md) | [`workday`](ats-workday.md) | 917 | 98 % | 89 % | ✅ |
70 71 | [Santé Québec — Montréal](sante_montreal.md) | [`njoyn`](ats-njoyn.md) | 818 | 98 % | 98 % | ✅ |
71 72 | [Université McGill](mcgill.md) | [`workday`](ats-workday.md) | 431 | 82 % | 99 % | ✅ |
@@ -75,12 +76,12 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
75 76 | [Go RH](gorh.md) | [`lever`](ats-lever.md) | 263 | 17 % | 96 % | ✅ |
76 77 | [Slihrms](slihrms.md) | [`workday`](ats-workday.md) | 263 | 10 % | 95 % | ✅ |
77 78 | [CIMA+](cima2.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 260 | 1 % | 100 % | ✅ |
78 −| [Alstom](alstom.md) | [`successfactors`](ats-successfactors.md) | 248 | 8 % | 100 % | ✅ |
79 +| [Alstom](alstom.md) | [`successfactors`](ats-successfactors.md) | 247 | 8 % | 100 % | ✅ |
79 80 | [Rechercher des](gianttiger.md) | [`workday`](ats-workday.md) | 239 | 0 % | 100 % | ✅ |
80 81 | [Globalhr](globalhr.md) | [`workday`](ats-workday.md) | 234 | 0 % | 83 % | ✅ |
81 82 | [Airbus Canada](airbus.md) | [`workday`](ats-workday.md) | 209 | 4 % | 98 % | ✅ |
82 83 | [Reitmans](reitmanscanadalteltd.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 208 | 18 % | 100 % | ✅ |
83 −| [American Iron and Metal](americanironandmetal.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 199 | 21 % | 100 % | ✅ |
84 +| [American Iron and Metal](americanironandmetal.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 201 | 20 % | 100 % | ✅ |
84 85 | [Groupe Banque TD](td.md) | [`workday`](ats-workday.md) | 199 | 94 % | 96 % | ✅ |
85 86 | [CISSS de Laval](cisss_laval.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 179 | 3 % | 100 % | ✅ |
86 87 | [La Vie en Rose](lavieenrose.md) | [`dayforce`](ats-dayforce.md) | 164 | 4 % | 100 % | ✅ |
@@ -93,7 +94,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
93 94 | [CISSS des Laurentides](cisss_laurentides.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 130 | 6 % | 100 % | ✅ |
94 95 | [Deloitte Canada](deloitte.md) | [`successfactors`](ats-successfactors.md) | 127 | 98 % | 100 % | ✅ |
95 96 | [TJX Canada (Winners, HomeSense, Marshalls)](tjx.md) | [`workday`](ats-workday.md) | 115 | 98 % | 100 % | ✅ |
96 −| [Cascades](cascades.md) | [`successfactors`](ats-successfactors.md) | 112 | 83 % | 98 % | ✅ |
97 +| [Cascades](cascades.md) | [`successfactors`](ats-successfactors.md) | 110 | 83 % | 98 % | ✅ |
97 98 | [Artelia Canada](artelia.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 106 | 0 % | 100 % | ✅ |
98 99 | [Dentalcorp](dentalcorp.md) | [`workday`](ats-workday.md) | 105 | 15 % | 100 % | ✅ |
99 100 | [Groupe Helios](groupehelios.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 105 | 2 % | 100 % | ✅ |
@@ -101,7 +102,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
101 102 | [Vidéotron](videotron.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 102 | 7 % | 100 % | ✅ |
102 103 | [CISSS de Lanaudière](cisss_lanaudiere.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 100 | 9 % | 100 % | ✅ |
103 104 | [CISSS de Chaudière-Appalaches](cisss_chaudiere_appalaches.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 99 | 3 % | 99 % | ✅ |
104 −| [BMO Groupe financier](bmo.md) | [`workday`](ats-workday.md) | 95 | 86 % | 81 % | ✅ |
105 +| [BMO Groupe financier](bmo.md) | [`workday`](ats-workday.md) | 96 | 86 % | 80 % | ✅ |
105 106 | [Intact Corporation financière](intactfc.md) | [`workday`](ats-workday.md) | 95 | 1 % | 81 % | ✅ |
106 107 | [Genetec](genetec_inc.md) | [`workable`](ats-workable.md) | 94 | 0 % | 99 % | ✅ |
107 108 | [iA Groupe financier](ia_groupe.md) | [`workday`](ats-workday.md) | 94 | 100 % | 94 % | ✅ |
@@ -111,9 +112,9 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
111 112 | [Linen Chest](linenchest.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 84 | 8 % | 100 % | ✅ |
112 113 | [Gflenv](gflenv.md) | [`workday`](ats-workday.md) | 83 | 5 % | 84 % | ✅ |
113 114 | [Renaud-Bray](renaud_bray.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 82 | 1 % | 100 % | ✅ |
114 −| [Bulkbarn](bulkbarn.md) | [`dayforce`](ats-dayforce.md) | 81 | 0 % | 100 % | ✅ |
115 +| [Bulkbarn](bulkbarn.md) | [`dayforce`](ats-dayforce.md) | 80 | 0 % | 100 % | ✅ |
115 116 | [CISSS de l'Outaouais](cisss_outaouais.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 79 | 30 % | 100 % | ✅ |
116 −| [CAE](cae.md) | [`workday`](ats-workday.md) | 77 | 16 % | 95 % | ✅ |
117 +| [CAE](cae.md) | [`workday`](ats-workday.md) | 78 | 15 % | 94 % | ✅ |
117 118 | [MaintainX](maintainx.md) | [`ashby`](ats-ashby.md) | 70 | 93 % | 76 % | ✅ |
118 119 | [Norda Stelo](nordastelo.md) | [`teamtailor`](ats-teamtailor.md) | 67 | 0 % | 97 % | ✅ |
119 120 | [Laporte Experts Conseils](laportefr.md) | [`greenhouse`](ats-greenhouse.md) | 65 | 0 % | 94 % | ✅ |
@@ -134,7 +135,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
134 135 | [Agropur](agropur.md) | [`workday`](ats-workday.md) | 57 | 95 % | 96 % | ✅ |
135 136 | [Automobileendirect](automobileendirect.md) | [`dayforce`](ats-dayforce.md) | 57 | 2 % | 100 % | ✅ |
136 137 | [Galderma](galderma.md) | [`workday`](ats-workday.md) | 56 | 0 % | 100 % | ✅ |
137 −| [Autodesk](autodesk.md) | [`eightfold`](ats-eightfold.md) | 55 | 89 % | 98 % | ✅ |
138 +| [Autodesk](autodesk.md) | [`eightfold`](ats-eightfold.md) | 55 | 89 % | 96 % | ✅ |
138 139 | [Agnico Eagle Mines](agnico_eagle.md) | [`taleo`](ats-taleo.md) | 54 | 0 % | 100 % | ✅ |
139 140 | [Kruger](kruger.md) | [`taleo_tbe`](ats-taleo_tbe.md) | 53 | 9 % | 100 % | ✅ |
140 141 | [Squarepoint Capital](squarepointcapital.md) | [`greenhouse`](ats-greenhouse.md) | 53 | 38 % | 100 % | ✅ |
@@ -155,18 +156,19 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
155 156 | [Unoria](unoria.md) | [`dayforce`](ats-dayforce.md) | 45 | 0 % | 100 % | ✅ |
156 157 | [Alterra](alterra.md) | [`workday`](ats-workday.md) | 44 | 68 % | 98 % | ✅ |
157 158 | [Bdo](bdo.md) | [`workday`](ats-workday.md) | 44 | 7 % | 70 % | ✅ |
159 +| [Beneva](beneva.md) | [`workday`](ats-workday.md) | 44 | 2 % | 100 % | ✅ |
158 160 | [Cogeco](cogeco.md) | [`workday`](ats-workday.md) | 44 | 18 % | 45 % | ✅ |
159 −| [Beneva](beneva.md) | [`workday`](ats-workday.md) | 43 | 2 % | 100 % | ✅ |
160 −| [Brand Momentum](brandmomentum.md) | [`breezy`](ats-breezy.md) | 43 | 95 % | 95 % | ✅ |
161 161 | [Camions Excellence Peterbilt](excellencepeterbilt.md) | [`dayforce`](ats-dayforce.md) | 43 | 37 % | 100 % | ✅ |
162 162 | [JD Sports Canada](jdsports.md) | [`dayforce`](ats-dayforce.md) | 43 | 0 % | 100 % | ✅ |
163 163 | [Levio](levio.md) | [`greenhouse`](ats-greenhouse.md) | 43 | 0 % | 100 % | ✅ |
164 164 | [Rio Tinto](riotinto.md) | [`workday`](ats-workday.md) | 43 | 0 % | 98 % | ✅ |
165 165 | [Saputo](saputo.md) | [`workday`](ats-workday.md) | 43 | 81 % | 100 % | ✅ |
166 +| [Brand Momentum](brandmomentum.md) | [`breezy`](ats-breezy.md) | 42 | 95 % | 95 % | ✅ |
166 167 | [Investissements PSP](investpsp.md) | [`workday`](ats-workday.md) | 42 | 2 % | 100 % | ✅ |
167 168 | [Valsoft](valsoft_corp.md) | [`workable`](ats-workable.md) | 42 | 7 % | 100 % | ✅ |
168 169 | [Groupe CH (Canadiens de Montréal, Centre Bell)](groupech.md) | [`dayforce`](ats-dayforce.md) | 41 | 0 % | 100 % | ✅ |
169 170 | [Info-Ways](info_ways.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 39 | 0 % | 100 % | ✅ |
171 +| [CDPQ — Caisse de dépôt et placement du Québec](cdpq.md) | [`workday`](ats-workday.md) | 38 | 0 % | 95 % | ✅ |
170 172 | [Cohere](cohere.md) | [`ashby`](ats-ashby.md) | 38 | 92 % | 26 % | ✅ |
171 173 | [exo (transport métropolitain)](exo.md) | [`taleo_tbe`](ats-taleo_tbe.md) | 38 | 0 % | 89 % | ✅ |
172 174 | [Sapsol Technologies Inc](sapsol_technologies_inc_7.md) | [`workable`](ats-workable.md) | 38 | 0 % | 100 % | ✅ |
@@ -177,13 +179,12 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
177 179 | [Kenworthmaska](kenworthmaska.md) | [`dayforce`](ats-dayforce.md) | 37 | 3 % | 100 % | ✅ |
178 180 | [Progesys](progesys_inc.md) | [`breezy`](ats-breezy.md) | 37 | 5 % | 97 % | ✅ |
179 181 | [Uhaul](uhaul.md) | [`workday`](ats-workday.md) | 37 | 0 % | 100 % | ✅ |
180 −| [CDPQ — Caisse de dépôt et placement du Québec](cdpq.md) | [`workday`](ats-workday.md) | 36 | 0 % | 100 % | ✅ |
181 182 | [EXFO](exfo.md) | [`workday`](ats-workday.md) | 35 | 0 % | 97 % | ✅ |
183 +| [Abinbev](abinbev.md) | [`workday`](ats-workday.md) | 34 | 100 % | 97 % | ✅ |
182 184 | [KABS](kabs.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 34 | 0 % | 100 % | ✅ |
183 185 | [OPENLANE Canada](openlane.md) | [`workday`](ats-workday.md) | 34 | 21 % | 88 % | ✅ |
184 186 | [QSL](qsl.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 34 | 29 % | 100 % | ✅ |
185 187 | [Rollsroyce](rollsroyce.md) | [`workday`](ats-workday.md) | 34 | 0 % | 100 % | ✅ |
186 −| [Abinbev](abinbev.md) | [`workday`](ats-workday.md) | 33 | 100 % | 100 % | ✅ |
187 188 | [Advanceauto](advanceauto.md) | [`workday`](ats-workday.md) | 33 | 0 % | 36 % | ✅ |
188 189 | [Domtar](domtar.md) | [`successfactors`](ats-successfactors.md) | 33 | 12 % | 100 % | ✅ |
189 190 | [Imperial Brady Canada](imperialdade.md) | [`dayforce`](ats-dayforce.md) | 33 | 0 % | 100 % | ✅ |
@@ -202,10 +203,8 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
202 203 | [LGI Healthcare Solutions Santé Inc.](lgihealthcaresolutionssanteinc.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 29 | 0 % | 100 % | ✅ |
203 204 | [Lgs](lgs.md) | [`dayforce`](ats-dayforce.md) | 29 | 0 % | 100 % | ✅ |
204 205 | [Service alimentaire Gordon](gfs.md) | [`workday`](ats-workday.md) | 29 | 66 % | 97 % | ✅ |
205 −| [AccorHotel](accorhotel.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 28 | 57 % | 100 % | ✅ |
206 206 | [Best Buy Canada](bestbuycanada.md) | [`workday`](ats-workday.md) | 28 | 0 % | 36 % | ✅ |
207 207 | [Ms](ms.md) | [`workday`](ats-workday.md) | 28 | 0 % | 100 % | ✅ |
208 −| [Behaviour Interactif](bhvr.md) | [`lever`](ats-lever.md) | 27 | 0 % | 100 % | ✅ |
209 208 | [Rodeo FX](rodeofx.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 27 | 0 % | 93 % | ✅ |
210 209 | [Structube](structube1.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 27 | 0 % | 100 % | ✅ |
211 210 | [The Children's Place](childrensplace.md) | [`workday`](ats-workday.md) | 27 | 0 % | 22 % | ✅ |
@@ -219,6 +218,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
219 218 | [RM Staffing B.V.](rebootmonkey.md) | [`recruitee`](ats-recruitee.md) | 26 | 85 % | 100 % | ✅ |
220 219 | [Altasciences](altasciences.md) | [`workday`](ats-workday.md) | 25 | 0 % | 92 % | ✅ |
221 220 | [Baseten](baseten.md) | [`ashby`](ats-ashby.md) | 25 | 100 % | 0 % | ✅ |
221 +| [Behaviour Interactif](bhvr.md) | [`lever`](ats-lever.md) | 25 | 0 % | 100 % | ✅ |
222 222 | [Clinical Research Associate](syneoshealth.md) | [`workday`](ats-workday.md) | 25 | 0 % | 96 % | ✅ |
223 223 | [Huawei Canada](huaweicanada.md) | [`recruitee`](ats-recruitee.md) | 25 | 4 % | 100 % | ✅ |
224 224 | [Wabtec](wabtec.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 25 | 16 % | 100 % | ✅ |
@@ -240,6 +240,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
240 240 | [Soprema](soprema.md) | [`dayforce`](ats-dayforce.md) | 23 | 13 % | 100 % | ✅ |
241 241 | [Tmx](tmx.md) | [`workday`](ats-workday.md) | 23 | 0 % | 83 % | ✅ |
242 242 | [Transat A.T.](transatat1.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 23 | 0 % | 100 % | ✅ |
243 +| [AccorHotel](accorhotel.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 22 | 50 % | 100 % | ✅ |
243 244 | [Baro RH](barorh.md) | [`workable`](ats-workable.md) | 22 | 0 % | 100 % | ✅ |
244 245 | [Canada Vie](canada_vie.md) | [`successfactors`](ats-successfactors.md) | 22 | 95 % | 86 % | ✅ |
245 246 | [CSS des Découvreurs](cssdd.md) | [`digitalrecruiters`](ats-digitalrecruiters.md) | 22 | 86 % | 100 % | ✅ |
@@ -517,7 +518,6 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
517 518 | [Altitude Sports](altitude_sports.md) | [`zoho_recruit`](ats-zoho_recruit.md) | 7 | 14 % | 100 % | ✅ |
518 519 | [Alveole](alveole.md) | [`greenhouse`](ats-greenhouse.md) | 7 | 100 % | 100 % | ✅ |
519 520 | [Artefact North America](artefactnoram.md) | [`greenhouse`](ats-greenhouse.md) | 7 | 57 % | 100 % | ✅ |
520 −| [Bain Magique](bainmagique.md) | [`greenhouse`](ats-greenhouse.md) | 7 | 57 % | 100 % | ✅ |
521 521 | [Big Bang](bigbang.md) | [`bamboohr`](ats-bamboohr.md) | 7 | 29 % | 100 % | ✅ |
522 522 | [Boart Longyear](bly.md) | [`dayforce`](ats-dayforce.md) | 7 | 100 % | 100 % | ✅ |
523 523 | [Carrier](carrier.md) | [`workday`](ats-workday.md) | 7 | 86 % | 43 % | ✅ |
@@ -549,11 +549,13 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
549 549 | [Telesat](telesat.md) | [`lever`](ats-lever.md) | 7 | 0 % | 100 % | ✅ |
550 550 | [Terrapure](terrapure.md) | [`dayforce`](ats-dayforce.md) | 7 | 14 % | 100 % | ✅ |
551 551 | [Trigyn Technologies](trigyntechnologies1.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 7 | 0 % | 100 % | ✅ |
552 +| [Abritek](abritek.md) | [`adp`](ats-adp.md) | 6 | 100 % | 83 % | ✅ |
552 553 | [Accedian Networks](accediannetworks.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 6 | 0 % | 100 % | ✅ |
553 554 | [Alimentiv](alimentiv_2.md) | [`lever`](ats-lever.md) | 6 | 100 % | 0 % | ✅ |
554 555 | [Alo Yoga](aloyoga.md) | [`greenhouse`](ats-greenhouse.md) | 6 | 50 % | 67 % | ✅ |
555 556 | [Also Recrutement - Carrière](alsorecrutement.md) | [`zoho_recruit`](ats-zoho_recruit.md) | 6 | 17 % | 50 % | ✅ |
556 557 | [Altitude Aerospace](altitudeaerospace.md) | [`jazzhr`](ats-jazzhr.md) | 6 | 0 % | 100 % | ✅ |
558 +| [Bain Magique](bainmagique.md) | [`greenhouse`](ats-greenhouse.md) | 6 | 67 % | 100 % | ✅ |
557 559 | [Bdx](bdx.md) | [`workday`](ats-workday.md) | 6 | 17 % | 83 % | ✅ |
558 560 | [Bilingual (French/English) Sales Broker (RIBO Licensed)](ogc.md) | [`dayforce`](ats-dayforce.md) | 6 | 33 % | 100 % | ✅ |
559 561 | [Board](deltastar.md) | [`dayforce`](ats-dayforce.md) | 6 | 33 % | 100 % | ✅ |
@@ -581,6 +583,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
581 583 | [MSI Gestion immobilière](msi_gestion.md) | [`adp`](ats-adp.md) | 6 | 100 % | 100 % | ✅ |
582 584 | [Nexapp](nexapp.md) | [`bamboohr`](ats-bamboohr.md) | 6 | 0 % | 100 % | ✅ |
583 585 | [Nomic Bio](nomic.md) | [`ashby`](ats-ashby.md) | 6 | 0 % | 83 % | ✅ |
586 +| [Nuvei](nuvei.md) | [`workable`](ats-workable.md) | 6 | 17 % | 83 % | ✅ |
584 587 | [Oldcastle BuildingEnvelope](oldcastlebuildingenvelope.md) | [`greenhouse`](ats-greenhouse.md) | 6 | 0 % | 100 % | ✅ |
585 588 | [PEAK Groupe financier](peakgroup.md) | [`bamboohr`](ats-bamboohr.md) | 6 | 0 % | 100 % | ✅ |
586 589 | [Place et Forme inc](placeetforme.md) | [`zoho_recruit`](ats-zoho_recruit.md) | 6 | 50 % | 50 % | ✅ |
@@ -594,7 +597,6 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
594 597 | [Weir Group](weir.md) | [`workday`](ats-workday.md) | 6 | 17 % | 67 % | ✅ |
595 598 | [Yaksa](yaksa.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 6 | 0 % | 100 % | ✅ |
596 599 | [36Pix](pix36.md) | [`jazzhr`](ats-jazzhr.md) | 5 | 20 % | 100 % | ✅ |
597 −| [Abritek](abritek.md) | [`adp`](ats-adp.md) | 5 | 100 % | 100 % | ✅ |
598 600 | [Adèle Express](adeleexpressfr.md) | [`recruitee`](ats-recruitee.md) | 5 | 60 % | 100 % | ✅ |
599 601 | [Agile DSS](agiledss.md) | [`recruitee`](ats-recruitee.md) | 5 | 0 % | 100 % | ✅ |
600 602 | [Aleanza Recrutement Durable](aleanzarecrutementdurable.md) | [`teamtailor`](ats-teamtailor.md) | 5 | 40 % | 100 % | ✅ |
@@ -613,7 +615,6 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
613 615 | [Ecosystem Énergie](ecosystem.md) | [`lever`](ats-lever.md) | 5 | 0 % | 100 % | ✅ |
614 616 | [EQ Bank](eqbank.md) | [`lever`](ats-lever.md) | 5 | 80 % | 60 % | ✅ |
615 617 | [Fccfac](fccfac.md) | [`workday`](ats-workday.md) | 5 | 80 % | 20 % | ✅ |
616 −| [FOREMAN ASSISTANT SHIPPING RECEIVING](benmor.md) | [`dayforce`](ats-dayforce.md) | 5 | 40 % | 100 % | ✅ |
617 618 | [Framestore](framestore.md) | [`recruitee`](ats-recruitee.md) | 5 | 0 % | 100 % | ✅ |
618 619 | [Ggi](ggi.md) | [`dayforce`](ats-dayforce.md) | 5 | 0 % | 100 % | ✅ |
619 620 | [GoMaterials](gomaterials.md) | [`lever`](ats-lever.md) | 5 | 0 % | 100 % | ✅ |
@@ -633,7 +634,6 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
633 634 | [MVV](mvv1.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 5 | 0 % | 100 % | ✅ |
634 635 | [Médialo](medialo.md) | [`recruitee`](ats-recruitee.md) | 5 | 0 % | 80 % | ✅ |
635 636 | [Nrfcanada](nrfcanada.md) | [`workday`](ats-workday.md) | 5 | 40 % | 60 % | ✅ |
636 −| [Nuvei](nuvei.md) | [`workable`](ats-workable.md) | 5 | 20 % | 100 % | ✅ |
637 637 | [Omni Hôtel Mont-Royal](omni_hotels_gestion.md) | [`icims`](ats-icims.md) | 5 | 20 % | 100 % | ✅ |
638 638 | [Omni Hôtel Mont-Royal](omni_hotels_horaire.md) | [`icims`](ats-icims.md) | 5 | 20 % | 100 % | ✅ |
639 639 | [Pfizer Canada](pfizer.md) | [`workday`](ats-workday.md) | 5 | 100 % | 0 % | ✅ |
@@ -652,7 +652,6 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
652 652 | [AutoTrader Canada](autotradercanada.md) | [`greenhouse`](ats-greenhouse.md) | 4 | 100 % | 100 % | ✅ |
653 653 | [Aviya Aerospace Systems](aviyatech.md) | [`lever`](ats-lever.md) | 4 | 0 % | 100 % | ✅ |
654 654 | [Avocat en immigration d'affaires américaine](fragomen.md) | [`workday`](ats-workday.md) | 4 | 0 % | 100 % | ✅ |
655 −| [Bath Fitter Corporate](bathfitterdistributinginc.md) | [`greenhouse`](ats-greenhouse.md) | 4 | 50 % | 100 % | ✅ |
656 655 | [Boreala Management](borealamanagement.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 4 | 0 % | 100 % | ✅ |
657 656 | [CAPREIT](capreit.md) | [`icims`](ats-icims.md) | 4 | 0 % | 100 % | ✅ |
658 657 | [Chanel](cc.md) | [`workday`](ats-workday.md) | 4 | 25 % | 100 % | ✅ |
@@ -670,6 +669,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
670 669 | [Fellow Insights Inc.](fellowai.md) | [`ashby`](ats-ashby.md) | 4 | 0 % | 0 % | ✅ |
671 670 | [Flatgigs](flatgigs.md) | [`workable`](ats-workable.md) | 4 | 0 % | 100 % | ✅ |
672 671 | [Flowcontrol](flowcontrol.md) | [`dayforce`](ats-dayforce.md) | 4 | 0 % | 100 % | ✅ |
672 +| [FOREMAN ASSISTANT SHIPPING RECEIVING](benmor.md) | [`dayforce`](ats-dayforce.md) | 4 | 25 % | 100 % | ✅ |
673 673 | [Fortigo Freight Services Inc.](fortigofreightservicesinc.md) | [`jazzhr`](ats-jazzhr.md) | 4 | 25 % | 50 % | ✅ |
674 674 | [GAME DESIGN AND VIDEO GAME LEVEL](lci.md) | [`dayforce`](ats-dayforce.md) | 4 | 0 % | 100 % | ✅ |
675 675 | [Gategroup](gategroup.md) | [`workday`](ats-workday.md) | 4 | 50 % | 75 % | ✅ |
@@ -693,6 +693,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
693 693 | [Nmédia](nmdia.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 4 | 0 % | 100 % | ✅ |
694 694 | [Norbert Health](norbert_health.md) | [`breezy`](ats-breezy.md) | 4 | 0 % | 100 % | ✅ |
695 695 | [Nssl](nssl.md) | [`dayforce`](ats-dayforce.md) | 4 | 0 % | 100 % | ✅ |
696 +| [O-I](o_i.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 4 | 50 % | 100 % | ✅ |
696 697 | [OTIP Group of Companies (OGC)](otipgroupofcompaniesogc.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 4 | 0 % | 100 % | ✅ |
697 698 | [Outpost VFX](outpostvfx.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 4 | 0 % | 100 % | ✅ |
698 699 | [Pivot + Edge](pivotandedge.md) | [`recruitee`](ats-recruitee.md) | 4 | 0 % | 100 % | ✅ |
@@ -721,6 +722,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
721 722 | [AON3D](aon3d_fr.md) | [`greenhouse`](ats-greenhouse.md) | 3 | 0 % | 100 % | ✅ |
722 723 | [AstenJohnson](ajholdingsltd.md) | [`dayforce`](ats-dayforce.md) | 3 | 100 % | 100 % | ✅ |
723 724 | [Autorité des marchés financiers (AMF)](lautorite.md) | [`workday`](ats-workday.md) | 3 | 100 % | 100 % | ✅ |
725 +| [Bath Fitter Corporate](bathfitterdistributinginc.md) | [`greenhouse`](ats-greenhouse.md) | 3 | 67 % | 100 % | ✅ |
724 726 | [BDC](bdc.md) | [`workday`](ats-workday.md) | 3 | 0 % | 100 % | ✅ |
725 727 | [BETA Technologies](betatechnologiesinc.md) | [`greenhouse`](ats-greenhouse.md) | 3 | 67 % | 100 % | ✅ |
726 728 | [Bilingual Fire Protection Sales Representative](victaulic.md) | [`workday`](ats-workday.md) | 3 | 100 % | 100 % | ✅ |
@@ -767,7 +769,6 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
767 769 | [Modern Menopause](modernmenopause.md) | [`greenhouse`](ats-greenhouse.md) | 3 | 0 % | 100 % | ✅ |
768 770 | [MXO](mxo.md) | [`bamboohr`](ats-bamboohr.md) | 3 | 67 % | 100 % | ✅ |
769 771 | [Naisense Solutions Inc](naisensesolutionsinc.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 3 | 0 % | 100 % | ✅ |
770 −| [O-I](o_i.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 3 | 33 % | 100 % | ✅ |
771 772 | [Oboxmedia](oboxmedia1.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 3 | 0 % | 100 % | ✅ |
772 773 | [Opportunities with AppDirect's Advisor Partners (Recruitment as a Service)](appdirectraas.md) | [`greenhouse`](ats-greenhouse.md) | 3 | 0 % | 100 % | ✅ |
773 774 | [Paradox](paradox.md) | [`ashby`](ats-ashby.md) | 3 | 0 % | 0 % | ✅ |
@@ -836,6 +837,7 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
836 837 | [Granit Design](granit_design.md) | [`dayforce`](ats-dayforce.md) | 2 | 0 % | 100 % | ✅ |
837 838 | [Groupe BC2](bc2.md) | [`bamboohr`](ats-bamboohr.md) | 2 | 0 % | 100 % | ✅ |
838 839 | [HP](hp.md) | [`workday`](ats-workday.md) | 2 | 100 % | 100 % | ✅ |
840 +| [Ingeniu inc.](ingeniuinc.md) | [`odoo`](ats-odoo.md) | 2 | 0 % | 0 % | ✅ |
839 841 | [Jj](jj.md) | [`workday`](ats-workday.md) | 2 | 100 % | 50 % | ✅ |
840 842 | [Kiongroup](kiongroup.md) | [`workday`](ats-workday.md) | 2 | 50 % | 50 % | ✅ |
841 843 | [Kodify Media Group](kodify.md) | [`recruitee`](ats-recruitee.md) | 2 | 0 % | 100 % | ✅ |
@@ -1092,7 +1094,6 @@ Conformité : voir [`docs/CONFORMITE.md`](../CONFORMITE.md). Chaque offre conser
1092 1094 | [Imerys](imerys.md) | [`workday`](ats-workday.md) | 0 | — | — | ✅ |
1093 1095 | [Industrial Electric Manufacturing](industrialelectricmanufacturing.md) | [`greenhouse`](ats-greenhouse.md) | 0 | — | — | ✅ |
1094 1096 | [Industrious](industrious.md) | [`ashby`](ats-ashby.md) | 0 | — | — | ✅ |
1095 −| [Ingeniu inc.](ingeniuinc.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 0 | — | — | ✅ |
1096 1097 | [Insite Property Solutions](insite_property_solutions.md) | [`breezy`](ats-breezy.md) | 0 | — | — | ✅ |
1097 1098 | [Insomnia Cookies](insomniacookies.md) | [`lever`](ats-lever.md) | 0 | — | — | ✅ |
1098 1099 | [IT-ED](ited_solutions.md) | [`greenhouse`](ats-greenhouse.md) | 0 | — | — | ✅ |
added docs/connecteurs/ats-odoo.md +76 −0
@@ -0,0 +1,76 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/ats-odoo.md
7 +Rôle : Fiche plateforme ATS odoo — mécanique partagée + tableau des 1 tenants
8 +Généré : 2026-10-27 13:42 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Plateforme ATS `odoo`
14 +
15 +**1 employeurs connectés** via cette plateforme — **2 offres actives**. Module partagé : `jobka/connectors/odoo.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 +
17 +## Description & mécanique
18 +
19 +> Plateforme Odoo (module « website_hr_recruitment ») — page carrières
20 +> ``/jobs`` hébergée sur le SITE de l'employeur (pas un domaine ATS partagé).
21 +>
22 +> - liste : GET <SITE>/jobs -> HTML rendu serveur (pas de SPA) : cartes dans
23 +> le conteneur ``id="jobs_grid"``, chacune avec une ancre
24 +> « /jobs/<slug>-<id numérique> », le titre dans le <h3> de la
25 +> carte et un libellé de lieu libre dans le bloc <address>
26 +> (« Remote », « Hybride (Bureau/Remote) », parfois une vraie
27 +> adresse). Pagination Odoo « /jobs/page/N » suivie si présente.
28 +> - détail : GET <SITE>/jobs/<slug>-<id> -> MICRODONNÉES schema.org (pas de
29 +> JSON-LD) dans le bloc ``itemscope itemtype=…/JobPosting`` :
30 +> meta datePosted/employmentType/title, div itemprop="description".
31 +> ⚠️ La div description ne porte souvent que l'INTRO : le corps de
32 +> l'offre (responsabilités, compétences, avantages) vit dans les
33 +> blocs « website builder » qui la suivent — la description capturée
34 +> court de la div jusqu'au footer. Cache BD + budget de re-visites
35 +> (JOBKA_ODOO_DETAIL_LIMIT).
36 +> - garde-fou : une vraie page liste porte toujours le conteneur
37 +> ``jobs_grid`` (même board vide) — son absence = challenge/erreur, pas une
38 +> liste vide : retry avec backoff puis erreur explicite plutôt qu'un faux
39 +> « 0 offre » (même doctrine que glow/JazzHR).
40 +> - lieux : Odoo publie rarement une addressLocality structurée — le bloc
41 +> <address> est souvent un libellé libre (« Remote »). Le pied de page du
42 +> site porte l'adresse du siège, identique partout : tout ce qui suit
43 +> ``<footer`` est IGNORÉ. Cascade de décision Québec (doctrine bento_sushi,
44 +> rien d'inventé) : addressLocality des microdonnées si présente, sinon
45 +> libellé <address> s'il porte ville/province QC, sinon ville citée dans le
46 +> bloc JobPosting (« à notre bureau de Montréal », « Située à Montréal »,
47 +> « région de Montréal ») validée contre le référentiel des municipalités
48 +> QC — une offre sans aucun marqueur québécois est écartée.
49 +
50 +## Accès
51 +
52 +- **Pagination** : par numéro de page
53 +- **Backend** : GET/POST direct `requests` (throttlé, User-Agent `JobKaBot/1.0` identifié)
54 +- **Auth** : aucune — API/pages publiques du site carrières.
55 +- **Throttle** : 1.0 s entre requêtes.
56 +- **Budgets (env)** : `JOBKA_ODOO_DETAIL_LIMIT` (défaut `60`)
57 +
58 +## Tenants connectés
59 +
60 +| Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
61 +|---|---|---|---|---|---|---|
62 +| [Ingeniu inc.](ingeniuinc.md) | 2 | 0 % | 0 % | 100 % | 2026-10-27 13:42 | ✅ |
63 +
64 +## Licence / conformité
65 +
66 +**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 l'employeur » 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.
67 +
68 +## Historique
69 +
70 +**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 :
71 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
72 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
73 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
74 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
75 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
76 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/ats-smartrecruiters.md +174 −175
@@ -4,15 +4,15 @@ Job·Ka — Groupe KA
4 4 Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-smartrecruiters.md
7 −Rôle : Fiche plateforme ATS smartrecruiters — mécanique partagée + tableau des 172 tenants
8 −Généré : 2026-10-26 18:17 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
7 +Rôle : Fiche plateforme ATS smartrecruiters — mécanique partagée + tableau des 171 tenants
8 +Généré : 2026-10-27 13:42 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
12 12
13 13 # Plateforme ATS `smartrecruiters`
14 14
15 −**172 employeurs connectés** via cette plateforme — **2912 offres actives**. Module partagé : `jobka/connectors/smartrecruiters.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**171 employeurs connectés** via cette plateforme — **2865 offres actives**. Module partagé : `jobka/connectors/smartrecruiters.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -41,178 +41,177 @@ Généré : 2026-10-26 18:17 EDT par scripts/gen_connector_docs.py — NE PAS
41 41
42 42 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
43 43 |---|---|---|---|---|---|---|
44 −| [CIMA+](cima2.md) | 260 | 1 % | 100 % | 90 % | 2026-10-26 18:05 | ✅ |
45 −| [Reitmans](reitmanscanadalteltd.md) | 213 | 17 % | 100 % | 31 % | 2026-10-26 15:33 | ✅ |
46 −| [American Iron and Metal](americanironandmetal.md) | 203 | 22 % | 100 % | 0 % | 2026-10-26 17:52 | ✅ |
47 −| [Sodexo Canada](sodexocanadaltd.md) | 146 | 83 % | 99 % | 6 % | 2026-10-26 15:38 | ✅ |
48 −| [Ubisoft](ubisoft.md) | 139 | 0 % | 100 % | 1 % | 2026-10-26 15:44 | ✅ |
49 −| [Vidéotron](videotron.md) | 108 | 6 % | 100 % | 42 % | 2026-10-26 15:46 | ✅ |
50 −| [Artelia Canada](artelia.md) | 106 | 0 % | 100 % | 24 % | 2026-10-26 17:52 | ✅ |
51 −| [Groupe Helios](groupehelios.md) | 104 | 2 % | 100 % | 2 % | 2026-10-26 17:28 | ✅ |
52 −| [UAP Inc.](uapinc.md) | 88 | 43 % | 98 % | 32 % | 2026-10-26 15:44 | ✅ |
53 −| [Linen Chest](linenchest.md) | 84 | 8 % | 100 % | 6 % | 2026-10-26 15:15 | ✅ |
54 −| [Renaud-Bray](renaud_bray.md) | 82 | 1 % | 100 % | 1 % | 2026-10-26 15:33 | ✅ |
55 −| [EMCO](emcocorporation.md) | 64 | 39 % | 100 % | 6 % | 2026-10-26 18:13 | ✅ |
56 −| [Dexterra](dexterra.md) | 62 | 0 % | 100 % | 11 % | 2026-10-26 18:10 | ✅ |
57 −| [Groupe Canam](groupecanam.md) | 53 | 72 % | 98 % | 28 % | 2026-10-26 17:28 | ✅ |
58 −| [Techo-Bloc](techo_bloc.md) | 46 | 39 % | 100 % | 30 % | 2026-10-26 15:41 | ✅ |
59 −| [Info-Ways](info_ways.md) | 39 | 0 % | 100 % | 8 % | 2026-10-26 17:40 | ✅ |
60 −| [Sopra Steria](soprasteria1.md) | 38 | 0 % | 100 % | 84 % | 2026-10-26 15:39 | ✅ |
61 −| [system canada technologies](systemcanadatechnologies.md) | 38 | 0 % | 100 % | 0 % | 2026-10-26 15:40 | ✅ |
62 −| [KABS](kabs.md) | 36 | 0 % | 100 % | 3 % | 2026-10-26 15:12 | ✅ |
63 −| [QSL](qsl.md) | 35 | 29 % | 100 % | 6 % | 2026-10-26 15:32 | ✅ |
64 −| [Rodeo FX](rodeofx.md) | 31 | 0 % | 94 % | 10 % | 2026-10-26 15:34 | ✅ |
65 −| [LGI Healthcare Solutions Santé Inc.](lgihealthcaresolutionssanteinc.md) | 29 | 0 % | 100 % | 76 % | 2026-10-26 15:15 | ✅ |
66 −| [AccorHotel](accorhotel.md) | 28 | 61 % | 100 % | 0 % | 2026-10-26 17:49 | ✅ |
67 −| [Structube](structube1.md) | 27 | 0 % | 100 % | 0 % | 2026-10-26 15:39 | ✅ |
68 −| [AbbVie](abbvie.md) | 26 | 0 % | 100 % | 92 % | 2026-10-26 17:48 | ✅ |
69 −| [Transat A.T.](transatat1.md) | 25 | 8 % | 100 % | 36 % | 2026-10-26 15:43 | ✅ |
70 −| [Wabtec](wabtec.md) | 25 | 16 % | 100 % | 36 % | 2026-10-26 15:46 | ✅ |
71 −| [MEDFAR Solutions Cliniques](medfar.md) | 24 | 0 % | 100 % | 92 % | 2026-10-26 15:18 | ✅ |
72 −| [Spectrum Health Care](spectrumhealthcare.md) | 22 | 95 % | 100 % | 0 % | 2026-10-26 15:39 | ✅ |
73 −| [ATIA Ltd](atialtd.md) | 21 | 38 % | 100 % | 0 % | 2026-10-26 17:53 | ✅ |
74 −| [Distribution stox](distributionstox2.md) | 20 | 25 % | 100 % | 50 % | 2026-10-26 18:10 | ✅ |
75 −| [NBCUniversal](nbcuniversal3.md) | 20 | 0 % | 100 % | 85 % | 2026-10-26 15:26 | ✅ |
76 −| [Sia](sia.md) | 20 | 0 % | 100 % | 30 % | 2026-10-26 15:37 | ✅ |
77 −| [Vosker](vosker.md) | 19 | 0 % | 100 % | 89 % | 2026-10-26 15:46 | ✅ |
78 −| [Sika Canada](sikaag.md) | 19 | 5 % | 100 % | 16 % | 2026-10-26 15:37 | ✅ |
79 −| [Scalian](scalian.md) | 19 | 16 % | 100 % | 100 % | 2026-10-26 15:36 | ✅ |
80 −| [H&M](hmgroup.md) | 18 | 0 % | 100 % | 0 % | 2026-10-26 17:38 | ✅ |
81 −| [REXEL](rexel1.md) | 18 | 0 % | 100 % | 0 % | 2026-10-26 15:33 | ✅ |
82 −| [Egis Group](egisgroup.md) | 16 | 0 % | 100 % | 25 % | 2026-10-26 18:13 | ✅ |
83 −| [AECOM](aecom2.md) | 15 | 0 % | 100 % | 80 % | 2026-10-26 17:50 | ✅ |
84 −| [Frima Studio](frimastudio.md) | 15 | 0 % | 100 % | 93 % | 2026-10-26 17:24 | ✅ |
85 −| [Renovco](renovco.md) | 14 | 0 % | 100 % | 0 % | 2026-10-26 15:33 | ✅ |
86 −| [Gameloft](gameloft.md) | 13 | 0 % | 100 % | 69 % | 2026-10-26 17:24 | ✅ |
87 −| [Lemay](lemay.md) | 13 | 8 % | 100 % | 69 % | 2026-10-26 15:15 | ✅ |
88 −| [Groupe Montoni](groupemontoni.md) | 13 | 0 % | 100 % | 15 % | 2026-10-26 17:28 | ✅ |
89 −| [Relais & Châteaux](relaischateaux.md) | 13 | 0 % | 100 % | 0 % | 2026-10-26 15:33 | ✅ |
90 −| [Talan](talan.md) | 12 | 0 % | 100 % | 83 % | 2026-10-26 15:40 | ✅ |
91 −| [McWane Canada](mcwanecanada.md) | 12 | 58 % | 100 % | 0 % | 2026-10-26 15:18 | ✅ |
92 −| [Indigo Books & Music](indigobooksmusic.md) | 11 | 0 % | 100 % | 0 % | 2026-10-26 17:40 | ✅ |
93 −| [Oliver & Bonacini](oliverbonacini.md) | 11 | 27 % | 100 % | 0 % | 2026-10-26 15:27 | ✅ |
94 −| [Mattel (Mega Bloks)](mattelinc.md) | 10 | 0 % | 100 % | 0 % | 2026-10-26 15:16 | ✅ |
95 −| [Airlab Inc.](airlabinc.md) | 10 | 0 % | 100 % | 0 % | 2026-10-26 17:50 | ✅ |
96 −| [R&D Partners](rdpartners1.md) | 10 | 0 % | 100 % | 80 % | 2026-10-26 15:32 | ✅ |
97 −| [J'Excelle](jexcelleinc.md) | 9 | 0 % | 100 % | 11 % | 2026-10-26 17:42 | ✅ |
98 −| [act digital](altersolutions.md) | 9 | 0 % | 100 % | 0 % | 2026-10-26 17:52 | ✅ |
99 −| [LGT](lgt1.md) | 9 | 0 % | 100 % | 0 % | 2026-10-26 15:15 | ✅ |
100 −| [Manitoulin Group of Companies](manitoulingroupofcompanies.md) | 9 | 56 % | 100 % | 0 % | 2026-10-26 15:16 | ✅ |
101 −| [Utask](utask.md) | 9 | 0 % | 100 % | 0 % | 2026-10-26 15:45 | ✅ |
102 −| [CF Montréal](cfmontreal.md) | 8 | 0 % | 75 % | 0 % | 2026-10-26 18:03 | ✅ |
103 −| [People Can Fly](peoplecanfly.md) | 8 | 0 % | 100 % | 100 % | 2026-10-26 15:28 | ✅ |
104 −| [Canadian Helicopters](canadianhelicopters.md) | 8 | 0 % | 100 % | 0 % | 2026-10-26 17:57 | ✅ |
105 −| [Expresco Foods](exprescofoods.md) | 8 | 12 % | 100 % | 0 % | 2026-10-26 18:16 | ✅ |
106 −| [JYSK Canada](jyskcanada.md) | 8 | 0 % | 100 % | 0 % | 2026-10-26 15:12 | ✅ |
107 −| [Turner & Townsend](turnertownsend.md) | 8 | 25 % | 100 % | 75 % | 2026-10-26 15:44 | ✅ |
108 −| [MalOPlus Group Inc.](maloplusteleservices1.md) | 8 | 0 % | 100 % | 88 % | 2026-10-26 15:16 | ✅ |
109 −| [ISAAC Instruments](isaacinstruments.md) | 8 | 0 % | 100 % | 75 % | 2026-10-26 17:42 | ✅ |
110 −| [MalOPlus Group](maloplusteleservices.md) | 8 | 0 % | 0 % | 100 % | 2026-10-26 15:16 | ✅ |
111 −| [1perTInent inc](x1pertinentinc.md) | 7 | 0 % | 100 % | 71 % | 2026-10-26 15:49 | ✅ |
112 −| [Chagall Design](chagalldesign.md) | 7 | 0 % | 100 % | 0 % | 2026-10-26 18:04 | ✅ |
113 −| [Hydrogen Research Institute](hydrogenresearchinstitute.md) | 7 | 14 % | 100 % | 0 % | 2026-10-26 17:39 | ✅ |
114 −| [Trigyn Technologies](trigyntechnologies1.md) | 7 | 0 % | 100 % | 0 % | 2026-10-26 15:43 | ✅ |
115 −| [Innovation RH inc.](innovationrh.md) | 7 | 14 % | 100 % | 29 % | 2026-10-26 17:41 | ✅ |
116 −| [ServiceNow](servicenow.md) | 6 | 0 % | 100 % | 83 % | 2026-10-26 15:36 | ✅ |
117 −| [Accedian Networks](accediannetworks.md) | 6 | 0 % | 100 % | 0 % | 2026-10-26 17:48 | ✅ |
118 −| [Léger](leger2.md) | 6 | 33 % | 100 % | 100 % | 2026-10-26 15:15 | ✅ |
119 −| [Right Talent Right Now](righttalentrightnow.md) | 6 | 0 % | 100 % | 0 % | 2026-10-26 15:33 | ✅ |
120 −| [Yaksa](yaksa.md) | 6 | 0 % | 100 % | 0 % | 2026-10-26 15:50 | ✅ |
121 −| [Astucemedia](astucemedia.md) | 5 | 0 % | 100 % | 60 % | 2026-10-26 17:52 | ✅ |
122 −| [Cornerstone Building Brands](cornerstonebuildingbrandscareers.md) | 5 | 40 % | 100 % | 20 % | 2026-10-26 18:09 | ✅ |
123 −| [MVV](mvv1.md) | 5 | 0 % | 100 % | 60 % | 2026-10-26 15:25 | ✅ |
124 −| [HoYoverse](hoyoverse.md) | 4 | 0 % | 100 % | 100 % | 2026-10-26 17:38 | ✅ |
125 −| [GURU Boisson Énergisante](guruorganicenergydrink.md) | 4 | 0 % | 100 % | 75 % | 2026-10-26 17:35 | ✅ |
126 −| [Acumatica](acumatica.md) | 4 | 25 % | 100 % | 100 % | 2026-10-26 17:49 | ✅ |
127 −| [Boreala Management](borealamanagement.md) | 4 | 0 % | 100 % | 50 % | 2026-10-26 17:56 | ✅ |
128 −| [Chewi Creative](chewicreative.md) | 4 | 0 % | 100 % | 100 % | 2026-10-26 18:05 | ✅ |
129 −| [Continental Group Sector ContiTech](continentalgroupsectorcontitech.md) | 4 | 25 % | 100 % | 25 % | 2026-10-26 18:08 | ✅ |
130 −| [Ensiti](ensiti.md) | 4 | 0 % | 100 % | 75 % | 2026-10-26 18:13 | ✅ |
131 −| [Groupe Beaudry](groupebeaudry.md) | 4 | 25 % | 100 % | 0 % | 2026-10-26 17:28 | ✅ |
132 −| [Luckyhammers](luckyhammers.md) | 4 | 0 % | 100 % | 0 % | 2026-10-26 15:16 | ✅ |
133 −| [META4](meta4.md) | 4 | 0 % | 100 % | 100 % | 2026-10-26 15:20 | ✅ |
134 −| [Nmédia](nmdia.md) | 4 | 0 % | 100 % | 100 % | 2026-10-26 15:26 | ✅ |
135 −| [O-I](o_i.md) | 4 | 25 % | 100 % | 0 % | 2026-10-26 15:27 | ✅ |
136 −| [OTIP Group of Companies (OGC)](otipgroupofcompaniesogc.md) | 4 | 0 % | 100 % | 100 % | 2026-10-26 15:28 | ✅ |
137 −| [Outpost VFX](outpostvfx.md) | 4 | 0 % | 100 % | 25 % | 2026-10-26 15:28 | ✅ |
138 −| [Prelib](prelib.md) | 4 | 75 % | 100 % | 50 % | 2026-10-26 15:28 | ✅ |
139 −| [Pyrotek](pyrotek3.md) | 4 | 75 % | 100 % | 0 % | 2026-10-26 15:32 | ✅ |
140 −| [Trigone](trigone.md) | 4 | 0 % | 100 % | 0 % | 2026-10-26 15:43 | ✅ |
141 −| [Agence Maplr Inc.](agencemaplrinc.md) | 3 | 0 % | 100 % | 0 % | 2026-10-26 17:50 | ✅ |
142 −| [Continental Technology Solutions](continentaltechnologysolutions.md) | 3 | 0 % | 100 % | 0 % | 2026-10-26 18:08 | ✅ |
143 −| [Cygnus Professionals Inc](cygnusprofessionalsinc2.md) | 3 | 0 % | 100 % | 0 % | 2026-10-26 18:09 | ✅ |
144 −| [Dev](dev2.md) | 3 | 100 % | 100 % | 33 % | 2026-10-26 18:10 | ✅ |
145 −| [Gentek Building Products Ltd Partnership](gentekbuildingproductsltdpartner.md) | 3 | 0 % | 100 % | 0 % | 2026-10-26 17:25 | ✅ |
146 −| [Intersand](intersand.md) | 3 | 0 % | 100 % | 33 % | 2026-10-26 17:41 | ✅ |
147 −| [Keyrus](keyrus2.md) | 3 | 0 % | 100 % | 0 % | 2026-10-26 15:13 | ✅ |
148 −| [Mannarino Systems & Software Inc.](mannarinosystemssoftwareinc.md) | 3 | 0 % | 100 % | 33 % | 2026-10-26 15:16 | ✅ |
149 −| [Mecar Métal](mecarmtal.md) | 3 | 0 % | 100 % | 0 % | 2026-10-26 15:18 | ✅ |
150 −| [Naisense Solutions Inc](naisensesolutionsinc.md) | 3 | 0 % | 100 % | 100 % | 2026-10-26 15:26 | ✅ |
151 −| [Oboxmedia](oboxmedia1.md) | 3 | 0 % | 100 % | 0 % | 2026-10-26 15:27 | ✅ |
152 −| [A2 Design](a2design.md) | 3 | 0 % | 100 % | 100 % | 2026-10-26 17:48 | ✅ |
153 −| [LE CAFÉ DES ARTISTES](lecafdesartistes.md) | 3 | 0 % | 100 % | 0 % | 2026-10-26 15:15 | ✅ |
154 −| [Playmind](playmind.md) | 2 | 0 % | 100 % | 0 % | 2026-10-26 15:28 | ✅ |
155 −| [ADVENS](advens.md) | 2 | 0 % | 100 % | 0 % | 2026-10-26 17:49 | ✅ |
156 −| [Catalyst Canada](catalystcanada.md) | 2 | 0 % | 100 % | 0 % | 2026-10-26 18:02 | ✅ |
157 −| [Conseil régional de l'environnement - Région de la Capitale Nationale](conseilrgionaldelenvironnement_rgiondelacapitalenationale.md) | 2 | 0 % | 100 % | 0 % | 2026-10-26 18:08 | ✅ |
158 −| [DONTNOD](dontnod.md) | 2 | 0 % | 100 % | 100 % | 2026-10-26 18:11 | ✅ |
159 −| [FZ Engineering](fzengineering.md) | 2 | 0 % | 100 % | 0 % | 2026-10-26 17:24 | ✅ |
160 −| [Loiselle inc.](loiselleinc.md) | 2 | 0 % | 100 % | 50 % | 2026-10-26 15:16 | ✅ |
161 −| [MSX International](msxinternational.md) | 2 | 0 % | 100 % | 100 % | 2026-10-26 15:25 | ✅ |
162 −| [McDonald's Restaurants](mcdonaldscanada.md) | 2 | 0 % | 100 % | 0 % | 2026-10-26 15:16 | ✅ |
163 −| [Santropol Roulant](santropolroulant.md) | 2 | 50 % | 100 % | 0 % | 2026-10-26 15:35 | ✅ |
164 −| [The Climate Reality Project Canada](theclimaterealityprojectcanada.md) | 2 | 0 % | 100 % | 100 % | 2026-10-26 15:43 | ✅ |
165 −| [Waterwell Irrigation](waterwellirrigation.md) | 2 | 50 % | 100 % | 0 % | 2026-10-26 15:49 | ✅ |
166 −| [Lactanet](lactanet.md) | 2 | 0 % | 50 % | 0 % | 2026-10-26 15:14 | ✅ |
167 −| [GoLogic](gologic.md) | 1 | 0 % | 100 % | 0 % | 2026-10-26 17:27 | ✅ |
168 −| [Sparkgrid](sparkgrid.md) | 1 | 0 % | 100 % | 0 % | 2026-10-26 15:39 | ✅ |
169 −| [Stelpro](stelpro.md) | 1 | 0 % | 100 % | 0 % | 2026-10-26 15:39 | ✅ |
170 −| [Talsom](talsom.md) | 1 | 0 % | 100 % | 0 % | 2026-10-26 15:40 | ✅ |
171 −| [Xplornet](xplornet.md) | 1 | 0 % | 100 % | 0 % | 2026-10-26 15:50 | ✅ |
172 −| [Centre multiethnique de Québec](centremultiethniquedequbec.md) | 1 | 100 % | 100 % | 100 % | 2026-10-26 18:03 | ✅ |
173 −| [École des entrepreneurs du Québec](coledesentrepreneursduqubec.md) | 1 | 0 % | 100 % | 100 % | 2026-10-26 18:08 | ✅ |
174 −| [ADGA Group Consultants Inc](adgagroupconsultantsinc1.md) | 1 | 0 % | 100 % | 0 % | 2026-10-26 17:49 | ✅ |
175 −| [AG Globe Services](agglobeservices.md) | 1 | 0 % | 100 % | 0 % | 2026-10-26 17:50 | ✅ |
176 −| [AVEQ](aveq.md) | 1 | 0 % | 100 % | 100 % | 2026-10-26 17:54 | ✅ |
177 −| [Ariolix](ariolix.md) | 1 | 0 % | 100 % | 0 % | 2026-10-26 17:52 | ✅ |
178 −| [Averna](averna1.md) | 1 | 0 % | 100 % | 100 % | 2026-10-26 17:54 | ✅ |
179 −| [C2 Montréal](c2montral.md) | 1 | 0 % | 100 % | 100 % | 2026-10-26 17:57 | ✅ |
180 −| [CM Labs](cmlabs.md) | 1 | 0 % | 100 % | 100 % | 2026-10-26 18:08 | ✅ |
181 −| [Club Assurance](clubassurance.md) | 1 | 100 % | 100 % | 0 % | 2026-10-26 18:08 | ✅ |
182 −| [DLC Teams](dlcteams.md) | 1 | 100 % | 100 % | 0 % | 2026-10-26 18:10 | ✅ |
183 −| [E*Pro Inc](eproinc.md) | 1 | 0 % | 100 % | 0 % | 2026-10-26 18:13 | ✅ |
184 −| [Fenêtres Concept inc.](fentresconceptinc.md) | 1 | 100 % | 100 % | 0 % | 2026-10-26 18:17 | ✅ |
185 −| [Infrastructel Inc.](infrastructelinc.md) | 1 | 0 % | 100 % | 0 % | 2026-10-26 17:41 | ✅ |
186 −| [Ingeniu inc.](ingeniuinc.md) | 1 | 0 % | 100 % | 100 % | 2026-10-26 17:41 | ✅ |
187 −| [Mobz](jobmobz1.md) | 1 | 0 % | 100 % | 100 % | 2026-10-26 15:12 | ✅ |
188 −| [LVMH Perfumes & Cosmetics](lvmhperfumescosmetics.md) | 1 | 100 % | 100 % | 0 % | 2026-10-26 15:16 | ✅ |
189 −| [Logient](logient.md) | 1 | 0 % | 100 % | 0 % | 2026-10-26 15:15 | ✅ |
190 −| [Marquis Imprimeur Inc.](marquisimprimeurinc.md) | 1 | 100 % | 100 % | 100 % | 2026-10-26 15:16 | ✅ |
191 −| [Nexxus Foods](nexxusfoods.md) | 1 | 0 % | 100 % | 0 % | 2026-10-26 15:26 | ✅ |
192 −| [ON Animation Studio](onanimationstudio.md) | 1 | 0 % | 100 % | 0 % | 2026-10-26 15:27 | ✅ |
193 −| [Recruitment Solutions Integrators](recruitmentsolutionsintegrators.md) | 1 | 0 % | 100 % | 0 % | 2026-10-26 15:32 | ✅ |
194 −| [Segic](segic.md) | 1 | 0 % | 100 % | 100 % | 2026-10-26 15:36 | ✅ |
195 −| [spruceinfotech](spruceinfotech2.md) | 1 | 0 % | 100 % | 0 % | 2026-10-26 15:39 | ✅ |
196 −| [Star Marketing](starmarketing.md) | 1 | 0 % | 100 % | 0 % | 2026-10-26 15:39 | ✅ |
197 −| [Tyco](tyco.md) | 1 | 0 % | 100 % | 0 % | 2026-10-26 15:44 | ✅ |
198 −| [WCG International Consultants Ltd.](wcginternationalconsultantsltd.md) | 1 | 100 % | 100 % | 100 % | 2026-10-26 15:49 | ✅ |
199 −| [Westcliff](westcliff.md) | 1 | 0 % | 100 % | 100 % | 2026-10-26 15:49 | ✅ |
200 −| [ADF Diesel](adfdiesel.md) | 1 | 0 % | 100 % | 0 % | 2026-10-26 17:49 | ✅ |
201 −| [DIMENSION COMPOSITE INC](dimensioncompositeinc.md) | 1 | 0 % | 100 % | 0 % | 2026-10-26 18:10 | ✅ |
202 −| [Dimonoff](dimonoff.md) | 1 | 100 % | 100 % | 100 % | 2026-10-26 18:10 | ✅ |
203 −| [Ekosystem](ekosystem.md) | 1 | 0 % | 100 % | 0 % | 2026-10-26 18:13 | ✅ |
204 −| [Maison l'Échelon](maisonlchelon.md) | 1 | 0 % | 100 % | 0 % | 2026-10-26 15:16 | ✅ |
205 −| [Tonic DNA](tonicdna1.md) | 1 | 0 % | 100 % | 100 % | 2026-10-26 15:43 | ✅ |
206 −| [Venture Media](venturemedia.md) | 0 | — | — | — | 2026-10-26 15:45 | ✅ |
207 −| [California Closets](californiaclosets.md) | 0 | — | — | — | 2026-10-26 17:57 | ✅ |
208 −| [Trupanion](trupanion1.md) | 0 | — | — | — | 2026-10-26 15:44 | ✅ |
209 −| [Arago](arago.md) | 0 | — | — | — | 2026-10-26 17:52 | ✅ |
210 −| [CCA](cca1.md) | 0 | — | — | — | 2026-10-26 18:02 | ✅ |
211 −| [General Dynamics Missions System International](gdmsi.md) | 0 | — | — | — | 2026-10-26 17:25 | ✅ |
212 −| [J.S. Held LLC](jsheldllc.md) | 0 | — | — | — | 2026-10-26 15:12 | ✅ |
213 −| [NielsenIQ](nielseniq.md) | 0 | — | — | — | 2026-10-26 15:26 | ✅ |
214 −| [Software Mind](softwaremind.md) | 0 | — | — | — | 2026-10-26 15:38 | ✅ |
215 −| [Évolupharma Inc.](volupharmainc.md) | 0 | — | — | — | 2026-10-26 18:16 | ✅ |
44 +| [CIMA+](cima2.md) | 260 | 1 % | 100 % | 90 % | 2026-10-27 12:26 | ✅ |
45 +| [Reitmans](reitmanscanadalteltd.md) | 208 | 18 % | 100 % | 32 % | 2026-10-27 10:46 | ✅ |
46 +| [American Iron and Metal](americanironandmetal.md) | 201 | 20 % | 100 % | 0 % | 2026-10-27 13:30 | ✅ |
47 +| [Sodexo Canada](sodexocanadaltd.md) | 143 | 83 % | 99 % | 6 % | 2026-10-27 10:52 | ✅ |
48 +| [Ubisoft](ubisoft.md) | 137 | 0 % | 100 % | 1 % | 2026-10-27 10:59 | ✅ |
49 +| [Artelia Canada](artelia.md) | 106 | 0 % | 100 % | 23 % | 2026-10-27 13:31 | ✅ |
50 +| [Groupe Helios](groupehelios.md) | 105 | 2 % | 100 % | 2 % | 2026-10-27 12:45 | ✅ |
51 +| [Vidéotron](videotron.md) | 102 | 7 % | 100 % | 42 % | 2026-10-27 11:01 | ✅ |
52 +| [UAP Inc.](uapinc.md) | 85 | 44 % | 98 % | 31 % | 2026-10-27 10:59 | ✅ |
53 +| [Linen Chest](linenchest.md) | 84 | 8 % | 100 % | 6 % | 2026-10-27 13:18 | ✅ |
54 +| [Renaud-Bray](renaud_bray.md) | 82 | 1 % | 100 % | 1 % | 2026-10-27 10:46 | ✅ |
55 +| [EMCO](emcocorporation.md) | 64 | 39 % | 100 % | 6 % | 2026-10-27 12:36 | ✅ |
56 +| [Dexterra](dexterra.md) | 61 | 0 % | 100 % | 11 % | 2026-10-27 12:32 | ✅ |
57 +| [Groupe Canam](groupecanam.md) | 52 | 71 % | 98 % | 29 % | 2026-10-27 12:45 | ✅ |
58 +| [Info-Ways](info_ways.md) | 39 | 0 % | 100 % | 8 % | 2026-10-27 13:07 | ✅ |
59 +| [Techo-Bloc](techo_bloc.md) | 38 | 37 % | 100 % | 32 % | 2026-10-27 10:56 | ✅ |
60 +| [Sopra Steria](soprasteria1.md) | 38 | 0 % | 100 % | 84 % | 2026-10-27 10:52 | ✅ |
61 +| [system canada technologies](systemcanadatechnologies.md) | 38 | 0 % | 100 % | 0 % | 2026-10-27 10:55 | ✅ |
62 +| [QSL](qsl.md) | 34 | 29 % | 100 % | 6 % | 2026-10-27 10:45 | ✅ |
63 +| [KABS](kabs.md) | 34 | 0 % | 100 % | 3 % | 2026-10-27 13:15 | ✅ |
64 +| [LGI Healthcare Solutions Santé Inc.](lgihealthcaresolutionssanteinc.md) | 29 | 0 % | 100 % | 76 % | 2026-10-27 13:18 | ✅ |
65 +| [Rodeo FX](rodeofx.md) | 27 | 0 % | 93 % | 11 % | 2026-10-27 10:47 | ✅ |
66 +| [Structube](structube1.md) | 27 | 0 % | 100 % | 0 % | 2026-10-27 10:54 | ✅ |
67 +| [Wabtec](wabtec.md) | 25 | 16 % | 100 % | 36 % | 2026-10-27 11:02 | ✅ |
68 +| [AbbVie](abbvie.md) | 24 | 0 % | 100 % | 92 % | 2026-10-27 13:27 | ✅ |
69 +| [MEDFAR Solutions Cliniques](medfar.md) | 23 | 0 % | 100 % | 91 % | 2026-10-27 13:21 | ✅ |
70 +| [Transat A.T.](transatat1.md) | 23 | 0 % | 100 % | 30 % | 2026-10-27 10:58 | ✅ |
71 +| [AccorHotel](accorhotel.md) | 22 | 50 % | 100 % | 0 % | 2026-10-27 13:28 | ✅ |
72 +| [Spectrum Health Care](spectrumhealthcare.md) | 22 | 95 % | 100 % | 0 % | 2026-10-27 10:53 | ✅ |
73 +| [ATIA Ltd](atialtd.md) | 21 | 38 % | 100 % | 0 % | 2026-10-27 13:31 | ✅ |
74 +| [Distribution stox](distributionstox2.md) | 20 | 25 % | 100 % | 50 % | 2026-10-27 12:33 | ✅ |
75 +| [NBCUniversal](nbcuniversal3.md) | 20 | 0 % | 95 % | 85 % | 2026-10-27 13:24 | ✅ |
76 +| [Sia](sia.md) | 20 | 0 % | 100 % | 30 % | 2026-10-27 10:50 | ✅ |
77 +| [Vosker](vosker.md) | 19 | 0 % | 100 % | 89 % | 2026-10-27 11:01 | ✅ |
78 +| [Scalian](scalian.md) | 19 | 16 % | 100 % | 100 % | 2026-10-27 10:49 | ✅ |
79 +| [H&M](hmgroup.md) | 18 | 0 % | 100 % | 0 % | 2026-10-27 13:05 | ✅ |
80 +| [REXEL](rexel1.md) | 18 | 0 % | 100 % | 0 % | 2026-10-27 10:47 | ✅ |
81 +| [Sika Canada](sikaag.md) | 17 | 6 % | 100 % | 18 % | 2026-10-27 10:51 | ✅ |
82 +| [Frima Studio](frimastudio.md) | 17 | 0 % | 100 % | 94 % | 2026-10-27 12:41 | ✅ |
83 +| [Egis Group](egisgroup.md) | 16 | 0 % | 100 % | 25 % | 2026-10-27 12:36 | ✅ |
84 +| [AECOM](aecom2.md) | 15 | 0 % | 100 % | 80 % | 2026-10-27 13:28 | ✅ |
85 +| [Renovco](renovco.md) | 14 | 0 % | 100 % | 0 % | 2026-10-27 10:46 | ✅ |
86 +| [Gameloft](gameloft.md) | 13 | 0 % | 100 % | 69 % | 2026-10-27 12:41 | ✅ |
87 +| [Lemay](lemay.md) | 13 | 8 % | 100 % | 69 % | 2026-10-27 13:18 | ✅ |
88 +| [Groupe Montoni](groupemontoni.md) | 13 | 0 % | 100 % | 15 % | 2026-10-27 12:45 | ✅ |
89 +| [Talan](talan.md) | 12 | 0 % | 100 % | 83 % | 2026-10-27 10:55 | ✅ |
90 +| [McWane Canada](mcwanecanada.md) | 12 | 58 % | 100 % | 0 % | 2026-10-27 13:21 | ✅ |
91 +| [Relais & Châteaux](relaischateaux.md) | 12 | 0 % | 100 % | 0 % | 2026-10-27 10:46 | ✅ |
92 +| [Indigo Books & Music](indigobooksmusic.md) | 11 | 0 % | 100 % | 0 % | 2026-10-27 13:07 | ✅ |
93 +| [Oliver & Bonacini](oliverbonacini.md) | 11 | 27 % | 100 % | 0 % | 2026-10-27 10:40 | ✅ |
94 +| [Mattel (Mega Bloks)](mattelinc.md) | 10 | 0 % | 100 % | 0 % | 2026-10-27 13:19 | ✅ |
95 +| [Airlab Inc.](airlabinc.md) | 10 | 0 % | 100 % | 0 % | 2026-10-27 13:29 | ✅ |
96 +| [R&D Partners](rdpartners1.md) | 10 | 0 % | 100 % | 80 % | 2026-10-27 10:46 | ✅ |
97 +| [Turner & Townsend](turnertownsend.md) | 10 | 40 % | 100 % | 60 % | 2026-10-27 10:59 | ✅ |
98 +| [J'Excelle](jexcelleinc.md) | 9 | 0 % | 100 % | 11 % | 2026-10-27 13:09 | ✅ |
99 +| [act digital](altersolutions.md) | 9 | 0 % | 100 % | 0 % | 2026-10-27 13:30 | ✅ |
100 +| [JYSK Canada](jyskcanada.md) | 9 | 0 % | 100 % | 0 % | 2026-10-27 13:15 | ✅ |
101 +| [LGT](lgt1.md) | 9 | 0 % | 100 % | 0 % | 2026-10-27 13:18 | ✅ |
102 +| [Manitoulin Group of Companies](manitoulingroupofcompanies.md) | 9 | 56 % | 100 % | 0 % | 2026-10-27 13:19 | ✅ |
103 +| [Utask](utask.md) | 9 | 0 % | 100 % | 0 % | 2026-10-27 11:00 | ✅ |
104 +| [CF Montréal](cfmontreal.md) | 8 | 0 % | 75 % | 0 % | 2026-10-27 12:24 | ✅ |
105 +| [People Can Fly](peoplecanfly.md) | 8 | 0 % | 100 % | 100 % | 2026-10-27 10:41 | ✅ |
106 +| [Canadian Helicopters](canadianhelicopters.md) | 8 | 0 % | 100 % | 0 % | 2026-10-27 13:37 | ✅ |
107 +| [Expresco Foods](exprescofoods.md) | 8 | 12 % | 100 % | 0 % | 2026-10-27 12:39 | ✅ |
108 +| [MalOPlus Group Inc.](maloplusteleservices1.md) | 8 | 0 % | 100 % | 88 % | 2026-10-27 13:19 | ✅ |
109 +| [ISAAC Instruments](isaacinstruments.md) | 8 | 0 % | 100 % | 75 % | 2026-10-27 13:08 | ✅ |
110 +| [MalOPlus Group](maloplusteleservices.md) | 8 | 0 % | 0 % | 100 % | 2026-10-27 13:19 | ✅ |
111 +| [1perTInent inc](x1pertinentinc.md) | 7 | 0 % | 100 % | 71 % | 2026-10-27 11:08 | ✅ |
112 +| [Chagall Design](chagalldesign.md) | 7 | 0 % | 100 % | 0 % | 2026-10-27 12:25 | ✅ |
113 +| [Hydrogen Research Institute](hydrogenresearchinstitute.md) | 7 | 14 % | 100 % | 0 % | 2026-10-27 13:05 | ✅ |
114 +| [Trigyn Technologies](trigyntechnologies1.md) | 7 | 0 % | 100 % | 0 % | 2026-10-27 10:58 | ✅ |
115 +| [Innovation RH inc.](innovationrh.md) | 7 | 14 % | 100 % | 29 % | 2026-10-27 13:07 | ✅ |
116 +| [ServiceNow](servicenow.md) | 6 | 0 % | 100 % | 83 % | 2026-10-27 10:50 | ✅ |
117 +| [Accedian Networks](accediannetworks.md) | 6 | 0 % | 100 % | 0 % | 2026-10-27 13:27 | ✅ |
118 +| [Léger](leger2.md) | 6 | 33 % | 100 % | 100 % | 2026-10-27 13:18 | ✅ |
119 +| [Right Talent Right Now](righttalentrightnow.md) | 6 | 0 % | 100 % | 0 % | 2026-10-27 10:47 | ✅ |
120 +| [Yaksa](yaksa.md) | 6 | 0 % | 100 % | 0 % | 2026-10-27 11:08 | ✅ |
121 +| [Astucemedia](astucemedia.md) | 5 | 0 % | 100 % | 60 % | 2026-10-27 13:31 | ✅ |
122 +| [Cornerstone Building Brands](cornerstonebuildingbrandscareers.md) | 5 | 40 % | 100 % | 20 % | 2026-10-27 12:31 | ✅ |
123 +| [Groupe Beaudry](groupebeaudry.md) | 5 | 40 % | 100 % | 0 % | 2026-10-27 12:45 | ✅ |
124 +| [MVV](mvv1.md) | 5 | 0 % | 100 % | 60 % | 2026-10-27 13:24 | ✅ |
125 +| [HoYoverse](hoyoverse.md) | 4 | 0 % | 100 % | 100 % | 2026-10-27 13:05 | ✅ |
126 +| [GURU Boisson Énergisante](guruorganicenergydrink.md) | 4 | 0 % | 100 % | 75 % | 2026-10-27 13:01 | ✅ |
127 +| [Acumatica](acumatica.md) | 4 | 25 % | 100 % | 100 % | 2026-10-27 13:28 | ✅ |
128 +| [Boreala Management](borealamanagement.md) | 4 | 0 % | 100 % | 50 % | 2026-10-27 13:35 | ✅ |
129 +| [Chewi Creative](chewicreative.md) | 4 | 0 % | 100 % | 100 % | 2026-10-27 12:26 | ✅ |
130 +| [Continental Group Sector ContiTech](continentalgroupsectorcontitech.md) | 4 | 25 % | 100 % | 25 % | 2026-10-27 12:31 | ✅ |
131 +| [Ensiti](ensiti.md) | 4 | 0 % | 100 % | 75 % | 2026-10-27 12:36 | ✅ |
132 +| [Luckyhammers](luckyhammers.md) | 4 | 0 % | 100 % | 0 % | 2026-10-27 13:18 | ✅ |
133 +| [META4](meta4.md) | 4 | 0 % | 100 % | 100 % | 2026-10-27 13:23 | ✅ |
134 +| [Nmédia](nmdia.md) | 4 | 0 % | 100 % | 100 % | 2026-10-27 13:25 | ✅ |
135 +| [O-I](o_i.md) | 4 | 50 % | 100 % | 0 % | 2026-10-27 13:26 | ✅ |
136 +| [OTIP Group of Companies (OGC)](otipgroupofcompaniesogc.md) | 4 | 0 % | 100 % | 100 % | 2026-10-27 10:41 | ✅ |
137 +| [Outpost VFX](outpostvfx.md) | 4 | 0 % | 100 % | 25 % | 2026-10-27 10:41 | ✅ |
138 +| [Prelib](prelib.md) | 4 | 75 % | 100 % | 50 % | 2026-10-27 10:42 | ✅ |
139 +| [Pyrotek](pyrotek3.md) | 4 | 75 % | 100 % | 0 % | 2026-10-27 10:45 | ✅ |
140 +| [Trigone](trigone.md) | 4 | 0 % | 100 % | 0 % | 2026-10-27 10:58 | ✅ |
141 +| [Agence Maplr Inc.](agencemaplrinc.md) | 3 | 0 % | 100 % | 0 % | 2026-10-27 13:28 | ✅ |
142 +| [Continental Technology Solutions](continentaltechnologysolutions.md) | 3 | 0 % | 100 % | 0 % | 2026-10-27 12:31 | ✅ |
143 +| [Cygnus Professionals Inc](cygnusprofessionalsinc2.md) | 3 | 0 % | 100 % | 0 % | 2026-10-27 12:31 | ✅ |
144 +| [Dev](dev2.md) | 3 | 100 % | 100 % | 33 % | 2026-10-27 12:32 | ✅ |
145 +| [Gentek Building Products Ltd Partnership](gentekbuildingproductsltdpartner.md) | 3 | 0 % | 100 % | 0 % | 2026-10-27 12:41 | ✅ |
146 +| [Intersand](intersand.md) | 3 | 0 % | 100 % | 33 % | 2026-10-27 13:08 | ✅ |
147 +| [Keyrus](keyrus2.md) | 3 | 0 % | 100 % | 0 % | 2026-10-27 13:16 | ✅ |
148 +| [Mannarino Systems & Software Inc.](mannarinosystemssoftwareinc.md) | 3 | 0 % | 100 % | 33 % | 2026-10-27 13:19 | ✅ |
149 +| [Mecar Métal](mecarmtal.md) | 3 | 0 % | 100 % | 0 % | 2026-10-27 13:21 | ✅ |
150 +| [Naisense Solutions Inc](naisensesolutionsinc.md) | 3 | 0 % | 100 % | 100 % | 2026-10-27 13:24 | ✅ |
151 +| [Oboxmedia](oboxmedia1.md) | 3 | 0 % | 100 % | 0 % | 2026-10-27 13:26 | ✅ |
152 +| [A2 Design](a2design.md) | 3 | 0 % | 100 % | 100 % | 2026-10-27 13:26 | ✅ |
153 +| [LE CAFÉ DES ARTISTES](lecafdesartistes.md) | 3 | 0 % | 100 % | 0 % | 2026-10-27 13:18 | ✅ |
154 +| [Playmind](playmind.md) | 2 | 0 % | 100 % | 0 % | 2026-10-27 10:41 | ✅ |
155 +| [ADVENS](advens.md) | 2 | 0 % | 100 % | 0 % | 2026-10-27 13:28 | ✅ |
156 +| [Catalyst Canada](catalystcanada.md) | 2 | 0 % | 100 % | 0 % | 2026-10-27 13:41 | ✅ |
157 +| [Conseil régional de l'environnement - Région de la Capitale Nationale](conseilrgionaldelenvironnement_rgiondelacapitalenationale.md) | 2 | 0 % | 100 % | 0 % | 2026-10-27 12:30 | ✅ |
158 +| [DONTNOD](dontnod.md) | 2 | 0 % | 100 % | 100 % | 2026-10-27 12:33 | ✅ |
159 +| [FZ Engineering](fzengineering.md) | 2 | 0 % | 100 % | 0 % | 2026-10-27 12:41 | ✅ |
160 +| [Loiselle inc.](loiselleinc.md) | 2 | 0 % | 100 % | 50 % | 2026-10-27 13:18 | ✅ |
161 +| [MSX International](msxinternational.md) | 2 | 0 % | 100 % | 100 % | 2026-10-27 13:24 | ✅ |
162 +| [McDonald's Restaurants](mcdonaldscanada.md) | 2 | 0 % | 100 % | 0 % | 2026-10-27 13:19 | ✅ |
163 +| [Santropol Roulant](santropolroulant.md) | 2 | 50 % | 100 % | 0 % | 2026-10-27 10:49 | ✅ |
164 +| [The Climate Reality Project Canada](theclimaterealityprojectcanada.md) | 2 | 0 % | 100 % | 100 % | 2026-10-27 10:58 | ✅ |
165 +| [Waterwell Irrigation](waterwellirrigation.md) | 2 | 50 % | 100 % | 0 % | 2026-10-27 11:07 | ✅ |
166 +| [GoLogic](gologic.md) | 1 | 0 % | 100 % | 0 % | 2026-10-27 12:43 | ✅ |
167 +| [Sparkgrid](sparkgrid.md) | 1 | 0 % | 100 % | 0 % | 2026-10-27 10:53 | ✅ |
168 +| [Stelpro](stelpro.md) | 1 | 0 % | 100 % | 0 % | 2026-10-27 10:53 | ✅ |
169 +| [Talsom](talsom.md) | 1 | 0 % | 100 % | 0 % | 2026-10-27 10:55 | ✅ |
170 +| [Xplornet](xplornet.md) | 1 | 0 % | 100 % | 0 % | 2026-10-27 11:08 | ✅ |
171 +| [Centre multiethnique de Québec](centremultiethniquedequbec.md) | 1 | 100 % | 100 % | 100 % | 2026-10-27 12:24 | ✅ |
172 +| [École des entrepreneurs du Québec](coledesentrepreneursduqubec.md) | 1 | 0 % | 100 % | 100 % | 2026-10-27 12:30 | ✅ |
173 +| [ADGA Group Consultants Inc](adgagroupconsultantsinc1.md) | 1 | 0 % | 100 % | 0 % | 2026-10-27 13:28 | ✅ |
174 +| [AG Globe Services](agglobeservices.md) | 1 | 0 % | 100 % | 0 % | 2026-10-27 13:28 | ✅ |
175 +| [AVEQ](aveq.md) | 1 | 0 % | 100 % | 100 % | 2026-10-27 13:32 | ✅ |
176 +| [Ariolix](ariolix.md) | 1 | 0 % | 100 % | 0 % | 2026-10-27 13:30 | ✅ |
177 +| [Averna](averna1.md) | 1 | 0 % | 100 % | 100 % | 2026-10-27 13:32 | ✅ |
178 +| [C2 Montréal](c2montral.md) | 1 | 0 % | 100 % | 100 % | 2026-10-27 13:36 | ✅ |
179 +| [CM Labs](cmlabs.md) | 1 | 0 % | 100 % | 100 % | 2026-10-27 12:30 | ✅ |
180 +| [Club Assurance](clubassurance.md) | 1 | 100 % | 100 % | 0 % | 2026-10-27 12:30 | ✅ |
181 +| [DLC Teams](dlcteams.md) | 1 | 100 % | 100 % | 0 % | 2026-10-27 12:33 | ✅ |
182 +| [E*Pro Inc](eproinc.md) | 1 | 0 % | 100 % | 0 % | 2026-10-27 12:36 | ✅ |
183 +| [Fenêtres Concept inc.](fentresconceptinc.md) | 1 | 100 % | 100 % | 0 % | 2026-10-27 12:40 | ✅ |
184 +| [Infrastructel Inc.](infrastructelinc.md) | 1 | 0 % | 100 % | 0 % | 2026-10-27 13:07 | ✅ |
185 +| [Mobz](jobmobz1.md) | 1 | 0 % | 100 % | 100 % | 2026-10-27 13:15 | ✅ |
186 +| [LVMH Perfumes & Cosmetics](lvmhperfumescosmetics.md) | 1 | 100 % | 100 % | 0 % | 2026-10-27 13:19 | ✅ |
187 +| [Logient](logient.md) | 1 | 0 % | 100 % | 0 % | 2026-10-27 13:18 | ✅ |
188 +| [Marquis Imprimeur Inc.](marquisimprimeurinc.md) | 1 | 100 % | 100 % | 100 % | 2026-10-27 13:19 | ✅ |
189 +| [Nexxus Foods](nexxusfoods.md) | 1 | 0 % | 100 % | 0 % | 2026-10-27 13:25 | ✅ |
190 +| [ON Animation Studio](onanimationstudio.md) | 1 | 0 % | 100 % | 0 % | 2026-10-27 10:40 | ✅ |
191 +| [Recruitment Solutions Integrators](recruitmentsolutionsintegrators.md) | 1 | 0 % | 100 % | 0 % | 2026-10-27 10:46 | ✅ |
192 +| [Segic](segic.md) | 1 | 0 % | 100 % | 100 % | 2026-10-27 10:49 | ✅ |
193 +| [spruceinfotech](spruceinfotech2.md) | 1 | 0 % | 100 % | 0 % | 2026-10-27 10:53 | ✅ |
194 +| [Star Marketing](starmarketing.md) | 1 | 0 % | 100 % | 0 % | 2026-10-27 10:53 | ✅ |
195 +| [Tyco](tyco.md) | 1 | 0 % | 100 % | 0 % | 2026-10-27 10:59 | ✅ |
196 +| [WCG International Consultants Ltd.](wcginternationalconsultantsltd.md) | 1 | 100 % | 100 % | 100 % | 2026-10-27 11:07 | ✅ |
197 +| [Westcliff](westcliff.md) | 1 | 0 % | 100 % | 100 % | 2026-10-27 11:08 | ✅ |
198 +| [ADF Diesel](adfdiesel.md) | 1 | 0 % | 100 % | 0 % | 2026-10-27 13:28 | ✅ |
199 +| [DIMENSION COMPOSITE INC](dimensioncompositeinc.md) | 1 | 0 % | 100 % | 0 % | 2026-10-27 12:33 | ✅ |
200 +| [Dimonoff](dimonoff.md) | 1 | 100 % | 100 % | 100 % | 2026-10-27 12:33 | ✅ |
201 +| [Ekosystem](ekosystem.md) | 1 | 0 % | 100 % | 0 % | 2026-10-27 12:36 | ✅ |
202 +| [Lactanet](lactanet.md) | 1 | 0 % | 0 % | 0 % | 2026-10-27 13:17 | ✅ |
203 +| [Maison l'Échelon](maisonlchelon.md) | 1 | 0 % | 100 % | 0 % | 2026-10-27 13:19 | ✅ |
204 +| [Tonic DNA](tonicdna1.md) | 1 | 0 % | 100 % | 100 % | 2026-10-27 10:58 | ✅ |
205 +| [Venture Media](venturemedia.md) | 0 | — | — | — | 2026-10-27 11:01 | ✅ |
206 +| [California Closets](californiaclosets.md) | 0 | — | — | — | 2026-10-27 13:36 | ✅ |
207 +| [Trupanion](trupanion1.md) | 0 | — | — | — | 2026-10-27 10:59 | ✅ |
208 +| [Arago](arago.md) | 0 | — | — | — | 2026-10-27 13:30 | ✅ |
209 +| [CCA](cca1.md) | 0 | — | — | — | 2026-10-27 13:41 | ✅ |
210 +| [General Dynamics Missions System International](gdmsi.md) | 0 | — | — | — | 2026-10-27 12:41 | ✅ |
211 +| [J.S. Held LLC](jsheldllc.md) | 0 | — | — | — | 2026-10-27 13:15 | ✅ |
212 +| [NielsenIQ](nielseniq.md) | 0 | — | — | — | 2026-10-27 13:25 | ✅ |
213 +| [Software Mind](softwaremind.md) | 0 | — | — | — | 2026-10-27 10:52 | ✅ |
214 +| [Évolupharma Inc.](volupharmainc.md) | 0 | — | — | — | 2026-10-27 11:01 | ✅ |
216 215
217 216 ## Licence / conformité
218 217
modified docs/connecteurs/ingeniuinc.md +23 −22
@@ -4,39 +4,40 @@ Job·Ka — Groupe KA
4 4 Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ingeniuinc.md
7 −Rôle : Fiche connecteur — Ingeniu inc. (employeur direct, ATS smartrecruiters)
8 −Généré : 2026-10-14 18:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
7 +Rôle : Fiche connecteur — Ingeniu inc. (employeur direct, ATS odoo)
8 +Généré : 2026-10-27 13:42 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
12 12
13 13 # Ingeniu inc. (`ingeniuinc`)
14 14
15 −**Employeur direct** · Plateforme ATS : [`smartrecruiters`](ats-smartrecruiters.md) · Statut registre : actif · Connecteur : `jobka/connectors/ingeniuinc.py`
15 +**Employeur direct** · Plateforme ATS : [`odoo`](ats-odoo.md) · Statut registre : actif · Connecteur : `jobka/connectors/ingeniuinc.py`
16 16
17 17 ## Description
18 18
19 −- **Site** : [Ingeniu inc.]()
20 −- **Page carrières** : https://jobs.smartrecruiters.com/company/IngeniuInc
19 +- **Site** : [Ingeniu inc.](https://www.ingeniusolutions.com)
20 +- **Page carrières** : https://www.ingeniusolutions.com/jobs
21 21 - **Secteurs** : Ingénierie, Conseil
22 22 - **Région** : Montréal
23 23 - Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 24
25 25 ## Accès
26 26
27 −- **Mécanique** : voir la fiche plateforme [`ats-smartrecruiters.md`](ats-smartrecruiters.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
27 +- **Mécanique** : voir la fiche plateforme [`ats-odoo.md`](ats-odoo.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 28 - **Identifiants du tenant** (attributs du connecteur) :
29 29
30 30 | Attribut | Valeur |
31 31 |---|---|
32 −| `COMPANY` | `IngeniuInc` |
33 32 | `EMPLOYER` | `Ingeniu inc.` |
34 −- **Throttle** : 0.7 s entre requêtes.
33 +| `JOBS_PATH` | `/jobs` |
34 +| `SITE` | `https://www.ingeniusolutions.com` |
35 +- **Throttle** : 1.0 s entre requêtes.
35 36 - **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_location` côté client).
36 37
37 38 ## Champs → schéma
38 39
39 −Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-10-14 18:40 EDT).
40 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-10-27 13:42 EDT).
40 41
41 42 | Champ (`jobs.*`) | Rôle | Complétude |
42 43 |---|---|---|
@@ -52,7 +53,7 @@ Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-
52 53 | `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 54 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 55 | `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 −| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 50 % |
56 57 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 100 % |
57 58 | `date_posted` — Date de parution | ISO 8601 | 100 % |
58 59 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
@@ -60,32 +61,32 @@ Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-
60 61 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 62 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 63 | `apply_url` — Candidature | lien de candidature directe | 0 % |
63 −| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 +| `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
64 65
65 −Exemple réel : *DEVELOPPEUR / ARCHITECTE - .NET* — Montréal · ∅ · parue le 2021-08-02.
66 +Exemple réel : *Odoo Functional Analyst* — Montréal · ∅ · parue le 2026-01-29.
66 67
67 68 ## Fréquence & budgets
68 69
69 70 - **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
70 −- **Throttle** : 0.7 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- **Throttle** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 72 - **Budgets / plafonds (variables d'environnement)** :
72 73
73 74 | Variable | Défaut |
74 75 |---|---|
75 −| `JOBKA_SR_DETAIL_LIMIT` | `300` |
76 +| `JOBKA_ODOO_DETAIL_LIMIT` | `60` |
76 77 - 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.
77 78
78 79 ## Volumétrie & complétude live
79 80
80 −*(mesuré le 2026-10-14 18:40 EDT dans `data/jobka.db`)*
81 +*(mesuré le 2026-10-27 13:42 EDT dans `data/jobka.db`)*
81 82
82 −- **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
83 −- **Salaire** : 0/1 actives (0 %)
84 −- **GPS** : 1/1 actives (100 %)
85 −- **Mode** : 1/1 actives (100 %)
86 −- **Parution** : 1/1 actives (100 %)
87 −- **Dernier sync** : 2026-10-14 15:23 — trouvées 1, +0, ~0, -0
88 −- **Syncs enregistrés** (`sync_log`) : 486
83 +- **Offres en base** : 3 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
84 +- **Salaire** : 0/2 actives (0 %)
85 +- **GPS** : 0/2 actives (0 %)
86 +- **Mode** : 2/2 actives (100 %)
87 +- **Parution** : 2/2 actives (100 %)
88 +- **Dernier sync** : 2026-10-27 13:42 — trouvées 2, +2, ~0, -0
89 +- **Syncs enregistrés** (`sync_log`) : 603
89 90
90 91 ## Erreurs & dépannage
91 92
modified jobka/connectors/ingeniuinc.py +14 −6
@@ -3,14 +3,22 @@
3 3 # Auteur : Simon-Pierre Boucher
4 4 # Contact : contact@spboucher.ai
5 5 # Fichier : jobka/connectors/ingeniuinc.py
6 −# Rôle : Connecteur Ingeniu inc. — smartrecruiters (org « IngeniuInc »)
7 −# [généré par scripts/gen_connectors.py, flux vérifié le 2026-08-23]
8 −# Créé : 2026-08-23 Modifié : 2026-08-23
6 +# Rôle : Connecteur Ingeniu inc. — Odoo website_hr_recruitment sur
7 +# www.ingeniusolutions.com (ex-SmartRecruiters « IngeniuInc »)
8 +# Créé : 2026-08-23 Modifié : 2026-10-27
9 9 # =============================================================================
10 −from .smartrecruiters import SmartRecruitersConnector
10 +"""Migration d'ATS constatée le 2026-10-27 (mission ka6) : le tenant
11 +SmartRecruiters « IngeniuInc » a été VIDÉ (API postings 200 totalFound=0,
12 +page board 404) — son unique offre, un fantôme paru le 2021-08-02, a été
13 +dépubliée entre 07:32 et 10:23 EDT. L'entreprise s'est rebaptisée « Ingeniu
14 +Solutions » (ingeniu.ca redirige vers www.ingeniusolutions.com) et publie
15 +désormais ses offres sur son propre site Odoo (module recrutement, /jobs) :
16 +2 offres au 2026-10-27, toutes deux avec marqueur Montréal explicite
17 +(« à notre bureau de Montréal », « Située à Montréal »)."""
18 +from .odoo import OdooConnector
11 19
12 20
13 −class IngeniuincConnector(SmartRecruitersConnector):
21 +class IngeniuincConnector(OdooConnector):
14 22 source_id = 'ingeniuinc'
15 23 EMPLOYER = 'Ingeniu inc.'
16 − COMPANY = 'IngeniuInc'
24 + SITE = 'https://www.ingeniusolutions.com'
added jobka/connectors/odoo.py +217 −0
@@ -0,0 +1,217 @@
1 +# =============================================================================
2 +# Job·Ka — Groupe KA
3 +# Auteur : Simon-Pierre Boucher
4 +# Contact : contact@spboucher.ai
5 +# Fichier : jobka/connectors/odoo.py
6 +# Rôle : Classe de plateforme Odoo website_hr_recruitment — page /jobs
7 +# rendue serveur + microdonnées schema.org/JobPosting des pages détail
8 +# Créé : 2026-10-27 Modifié : 2026-10-27
9 +# =============================================================================
10 +"""Plateforme Odoo (module « website_hr_recruitment ») — page carrières
11 +``/jobs`` hébergée sur le SITE de l'employeur (pas un domaine ATS partagé).
12 +
13 +- liste : GET <SITE>/jobs -> HTML rendu serveur (pas de SPA) : cartes dans
14 + le conteneur ``id="jobs_grid"``, chacune avec une ancre
15 + « /jobs/<slug>-<id numérique> », le titre dans le <h3> de la
16 + carte et un libellé de lieu libre dans le bloc <address>
17 + (« Remote », « Hybride (Bureau/Remote) », parfois une vraie
18 + adresse). Pagination Odoo « /jobs/page/N » suivie si présente.
19 +- détail : GET <SITE>/jobs/<slug>-<id> -> MICRODONNÉES schema.org (pas de
20 + JSON-LD) dans le bloc ``itemscope itemtype=…/JobPosting`` :
21 + meta datePosted/employmentType/title, div itemprop="description".
22 + ⚠️ La div description ne porte souvent que l'INTRO : le corps de
23 + l'offre (responsabilités, compétences, avantages) vit dans les
24 + blocs « website builder » qui la suivent — la description capturée
25 + court de la div jusqu'au footer. Cache BD + budget de re-visites
26 + (JOBKA_ODOO_DETAIL_LIMIT).
27 +- garde-fou : une vraie page liste porte toujours le conteneur
28 + ``jobs_grid`` (même board vide) — son absence = challenge/erreur, pas une
29 + liste vide : retry avec backoff puis erreur explicite plutôt qu'un faux
30 + « 0 offre » (même doctrine que glow/JazzHR).
31 +- lieux : Odoo publie rarement une addressLocality structurée — le bloc
32 + <address> est souvent un libellé libre (« Remote »). Le pied de page du
33 + site porte l'adresse du siège, identique partout : tout ce qui suit
34 + ``<footer`` est IGNORÉ. Cascade de décision Québec (doctrine bento_sushi,
35 + rien d'inventé) : addressLocality des microdonnées si présente, sinon
36 + libellé <address> s'il porte ville/province QC, sinon ville citée dans le
37 + bloc JobPosting (« à notre bureau de Montréal », « Située à Montréal »,
38 + « région de Montréal ») validée contre le référentiel des municipalités
39 + QC — une offre sans aucun marqueur québécois est écartée.
40 +"""
41 +from __future__ import annotations
42 +
43 +import html as _html
44 +import os
45 +import re
46 +
47 +from ..normalize import clean_html, parse_employment_type, parse_work_mode
48 +from ..regions import region_for_city
49 +from ..schema import JobPosting, is_quebec_location
50 +from .base import BaseConnector
51 +
52 +MAX_DETAILS = int(os.environ.get("JOBKA_ODOO_DETAIL_LIMIT", "60"))
53 +MAX_PAGES = 20
54 +
55 +_LINK_RE = re.compile(r'href="(/jobs/[^"/?#]*-(\d+))"')
56 +_H3_RE = re.compile(r"<h3[^>]*>(.*?)</h3>", re.S)
57 +_ADDRESS_RE = re.compile(r"<address.*?</address>", re.S)
58 +_META_RE = r'itemprop="%s"[^>]*\bcontent="([^"]*)"'
59 +_LOCALITY_RE = re.compile(
60 + r'itemprop="addressLocality"[^>]*>([^<]+)<|' + _META_RE % "addressLocality")
61 +_JOBPOSTING_RE = re.compile(r'<[^>]*itemtype="https?://schema\.org/JobPosting"')
62 +_DESC_OPEN_RE = re.compile(r'<div[^>]*itemprop="description"[^>]*>')
63 +# Ville citée dans le bloc JobPosting : « à notre bureau de Montréal »,
64 +# « Située à Montréal », « région de Montréal ». Capture 1 à 3 mots
65 +# capitalisés (traits d'union/apostrophes inclus) — chaque candidat est
66 +# ensuite VALIDÉ contre le référentiel des municipalités QC
67 +# (region_for_city), donc aucun faux lieu possible.
68 +_CITY_RE = re.compile(
69 + r"(?:bureau(?:x)?\s+de|r[ée]gion\s+de|situ[ée]{1,2}\s+à|\bà)\s+"
70 + r"([A-ZÀ-ÿ][\w'’À-ÿ-]+(?:\s+[A-ZÀ-ÿ][\w'’À-ÿ-]+){0,2})")
71 +
72 +
73 +def _text(markup: str) -> str:
74 + """Texte brut d'un fragment HTML (balises retirées, entités décodées)."""
75 + return re.sub(r"\s+", " ", _html.unescape(re.sub(r"<[^>]+>", " ",
76 + markup or ""))).strip()
77 +
78 +
79 +def _city_from_text(text: str) -> str:
80 + """Première ville QC reconnue citée dans le texte, sinon ""."""
81 + for m in _CITY_RE.finditer(text or ""):
82 + words = m.group(1).split()
83 + # candidat le plus long d'abord (« Baie Comeau » avant « Baie »)
84 + for n in range(len(words), 0, -1):
85 + cand = " ".join(words[:n])
86 + if region_for_city(cand):
87 + return cand
88 + return ""
89 +
90 +
91 +class OdooConnector(BaseConnector):
92 + """Base Odoo website_hr_recruitment — sous-classes : définir source_id,
93 + EMPLOYER, SITE (racine https du site employeur, sans / final)."""
94 +
95 + ats = "odoo"
96 + request_delay = 1.0
97 +
98 + EMPLOYER = ""
99 + SITE = "" # ex. https://www.ingeniusolutions.com
100 + JOBS_PATH = "/jobs"
101 + quebec_only = True
102 +
103 + def _fetch_list_page(self, url: str) -> str:
104 + import time
105 + last = ""
106 + for attempt in range(3):
107 + resp = self.get(url)
108 + page = resp.text
109 + if "jobs_grid" in page:
110 + return page
111 + last = (f"HTTP {resp.status_code}, {len(page)} octets, "
112 + f"content-type {resp.headers.get('content-type')}")
113 + if attempt < 2:
114 + time.sleep(10 * (attempt + 1))
115 + raise RuntimeError(
116 + f"odoo {self.SITE}: page liste sans conteneur jobs_grid "
117 + f"après 3 essais ({last})")
118 +
119 + def _fetch_detail(self, path: str) -> dict:
120 + page = self.get(f"{self.SITE}{path}").text
121 + m = _JOBPOSTING_RE.search(page)
122 + zone = page[m.start():] if m else page
123 + foot = zone.find("<footer")
124 + if foot > 0:
125 + zone = zone[:foot] # siège social en pied de page : jamais lu
126 + out: dict = {}
127 + for prop in ("datePosted", "employmentType"):
128 + mm = re.search(_META_RE % prop, zone)
129 + if mm and mm.group(1):
130 + out["date_posted" if prop == "datePosted"
131 + else "employment_label"] = mm.group(1)
132 + mm = _LOCALITY_RE.search(zone)
133 + if mm:
134 + out["city"] = _html.unescape(mm.group(1) or mm.group(2) or "").strip()
135 + mm = _DESC_OPEN_RE.search(zone)
136 + if mm:
137 + # la div itemprop="description" ne porte souvent que l'intro —
138 + # le corps de l'offre (responsabilités, compétences, avantages)
139 + # vit dans les blocs « website builder » qui la SUIVENT, jusqu'au
140 + # footer (déjà coupé) : tout prendre, CTA de candidature retiré
141 + body = zone[mm.end():]
142 + body = re.sub(r"Postuler\s+maintenant\s*!?", " ", body)
143 + out["description_html"] = body
144 + # texte d'entête (hors description) : mode/type/ville y sont affichés
145 + head = zone[:mm.start()] if mm else zone
146 + out["header_text"] = _text(head)[:2000]
147 + return out
148 +
149 + def fetch(self) -> list[JobPosting]:
150 + url = f"{self.SITE}{self.JOBS_PATH}"
151 + pages, seen_pages = [self._fetch_list_page(url)], {url}
152 + for page in pages:
153 + if len(pages) >= MAX_PAGES:
154 + break
155 + for mm in re.finditer(r'href="(/jobs/page/\d+)"', page):
156 + nxt = f"{self.SITE}{mm.group(1)}"
157 + if nxt not in seen_pages:
158 + seen_pages.add(nxt)
159 + pages.append(self._fetch_list_page(nxt))
160 + out: list[JobPosting] = []
161 + details_used = 0
162 + seen: set[str] = set()
163 + for page in pages:
164 + matches = list(_LINK_RE.finditer(page))
165 + for i, m in enumerate(matches):
166 + path, jid = m.group(1), m.group(2)
167 + if jid in seen:
168 + continue
169 + seen.add(jid)
170 + # bloc de la carte = entre cette ancre et la suivante
171 + end = (matches[i + 1].start() if i + 1 < len(matches)
172 + else len(page))
173 + block = page[m.end():end]
174 + m_t = _H3_RE.search(block)
175 + title = _text(m_t.group(1)) if m_t else ""
176 + m_a = _ADDRESS_RE.search(block)
177 + label = _text(m_a.group(0)).strip("- ") if m_a else ""
178 + if details_used >= MAX_DETAILS:
179 + d = self.stale_detail(jid)
180 + if not d:
181 + continue # différée : ni détail frais ni cache
182 + else:
183 + fresh = [False]
184 +
185 + def _fn(p=path, fresh=fresh):
186 + fresh[0] = True
187 + return self._fetch_detail(p)
188 +
189 + d = self.detail(jid, f"{title}|{label}", _fn)
190 + if fresh[0]:
191 + details_used += 1
192 + head = d.get("header_text") or ""
193 + city = (d.get("city") or "").strip()
194 + if city and not region_for_city(city):
195 + city = "" # localité structurée hors référentiel QC
196 + if not city:
197 + city = _city_from_text(
198 + f"{head} {_text(d.get('description_html') or '')}")
199 + if self.quebec_only and not city and not (
200 + is_quebec_location(label)):
201 + continue # aucun marqueur québécois : écartée
202 + mode_src = f"{label} {head}"
203 + job = JobPosting(
204 + source=self.source_id, external_id=jid,
205 + url=f"{self.SITE}{path}",
206 + employer=self.EMPLOYER,
207 + title=title or _text(d.get("title") or ""),
208 + description=clean_html(d.get("description_html") or ""),
209 + city=city, location_label=label,
210 + work_mode=parse_work_mode(mode_src),
211 + employment_type=parse_employment_type(
212 + d.get("employment_label") or mode_src),
213 + date_posted=d.get("date_posted"),
214 + ats=self.ats,
215 + )
216 + out.append(job)
217 + return out
218
Menu

Theme