SPB Git forge

spb/job-ka

Public
226commits 1branches 0releases
37.5 MBsize
maindefault branch
9 h agolast push
HTML 82.1% Python 14.6% TypeScript 1.9% CSS 1% JavaScript 0.5%

Vague B — 110 nouvelles sources (26 Dayforce nouvelle famille + 84 sur familles existantes)

- Nouvelle famille Dayforce HCM (jobs.dayforcehcm.com, API JSON du frontal Next.js,
  csrf anonyme + recherche paginée, détail PayClass/PayType avec cache et budget) :
  26 employeurs dont Groupe Maurice, Groupe CH, La Vie en Rose, Eidos-Montréal,
  Air Canada Rouge, Port de Québec, Soprema, BPA…
- Ajouts sur familles existantes : Workday +17 (Simons, Cineplex, TJX, FedEx, Abbott…),
  Greenhouse +17 (Coveo, KRAFTON, Lyft, AutoTrader…), SmartRecruiters +13,
  Workable +11, Breezy +8, Recruitee +7, Lever +6, Ashby +5.
- sources.json : 244 → 354 sources ; docs/connecteurs régénérées (376 fiches).
- docs/CONFORMITE.md : bases d'accès vérifiées 2026-08-22, 20+ sources écartées
  avec raisons (agences, agrégateurs, babillards vides, faux positifs français).
- Sync validé : 110/110 sources OK, 2 102 offres ajoutées (total BD 25 280).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Simon-Pierre Boucher committed 1 mo ago (Aug 23, 2026) parent 6493794

160 changed files +12,293 −4,518

added data/feeds-vagueB.json +1382 −0
@@ -0,0 +1,1382 @@
1 +[
2 + {
3 + "ats": "ashby",
4 + "employer": "Alan Canada",
5 + "sectors": [
6 + "Assurance"
7 + ],
8 + "cities": [
9 + "Montréal"
10 + ],
11 + "url": "",
12 + "org": "alan"
13 + },
14 + {
15 + "ats": "ashby",
16 + "employer": "Billups",
17 + "sectors": [
18 + "Marketing"
19 + ],
20 + "cities": [
21 + "Montréal"
22 + ],
23 + "url": "",
24 + "org": "billups"
25 + },
26 + {
27 + "ats": "ashby",
28 + "employer": "Exegy",
29 + "sectors": [
30 + "TI"
31 + ],
32 + "cities": [
33 + "Montréal"
34 + ],
35 + "url": "",
36 + "org": "exegy"
37 + },
38 + {
39 + "ats": "ashby",
40 + "employer": "Lambda",
41 + "sectors": [
42 + "TI"
43 + ],
44 + "cities": [
45 + "Bécancour"
46 + ],
47 + "url": "",
48 + "org": "lambda"
49 + },
50 + {
51 + "ats": "ashby",
52 + "employer": "Neo Financial",
53 + "sectors": [
54 + "Finance"
55 + ],
56 + "cities": [
57 + "Laval"
58 + ],
59 + "url": "",
60 + "org": "neofinancial"
61 + },
62 + {
63 + "ats": "breezy",
64 + "employer": "BDL Énergie",
65 + "sectors": [
66 + "Énergie"
67 + ],
68 + "cities": [
69 + "Sherbrooke"
70 + ],
71 + "url": "",
72 + "org": "bdl-energie"
73 + },
74 + {
75 + "ats": "breezy",
76 + "employer": "Black & McDonald",
77 + "sectors": [
78 + "Construction"
79 + ],
80 + "cities": [
81 + "Montréal"
82 + ],
83 + "url": "",
84 + "org": "black-mcdonald-francais"
85 + },
86 + {
87 + "ats": "breezy",
88 + "employer": "Lindt & Sprüngli Canada",
89 + "sectors": [
90 + "Commerce de détail"
91 + ],
92 + "cities": [
93 + "Gatineau"
94 + ],
95 + "url": "",
96 + "org": "lindt-sprunglicanada"
97 + },
98 + {
99 + "ats": "breezy",
100 + "employer": "Panda7",
101 + "sectors": [
102 + "Assurance"
103 + ],
104 + "cities": [
105 + "Montréal"
106 + ],
107 + "url": "",
108 + "org": "panda7"
109 + },
110 + {
111 + "ats": "breezy",
112 + "employer": "Progesys",
113 + "sectors": [
114 + "Ingénierie"
115 + ],
116 + "cities": [
117 + "Contrecœur"
118 + ],
119 + "url": "",
120 + "org": "progesys-inc"
121 + },
122 + {
123 + "ats": "breezy",
124 + "employer": "Sense Ingénierie",
125 + "sectors": [
126 + "Ingénierie"
127 + ],
128 + "cities": [
129 + "Montréal"
130 + ],
131 + "url": "",
132 + "org": "sense-engineering"
133 + },
134 + {
135 + "ats": "breezy",
136 + "employer": "TELUS Santé — Cliniques",
137 + "sectors": [
138 + "Santé"
139 + ],
140 + "cities": [
141 + "Montréal"
142 + ],
143 + "url": "",
144 + "org": "telus-health-7fe6b0fe8614"
145 + },
146 + {
147 + "ats": "breezy",
148 + "employer": "Turbulent",
149 + "sectors": [
150 + "Jeu vidéo"
151 + ],
152 + "cities": [
153 + "Montréal"
154 + ],
155 + "url": "",
156 + "org": "turbulent"
157 + },
158 + {
159 + "ats": "greenhouse",
160 + "employer": "Alo Yoga",
161 + "sectors": [
162 + "Commerce de détail"
163 + ],
164 + "cities": [
165 + "Laval"
166 + ],
167 + "url": "",
168 + "org": "aloyoga"
169 + },
170 + {
171 + "ats": "greenhouse",
172 + "employer": "AutoTrader Canada",
173 + "sectors": [
174 + "Automobile"
175 + ],
176 + "cities": [
177 + "Longueuil"
178 + ],
179 + "url": "",
180 + "org": "autotradercanada"
181 + },
182 + {
183 + "ats": "greenhouse",
184 + "employer": "Cloud Chamber Montréal",
185 + "sectors": [
186 + "Jeu vidéo"
187 + ],
188 + "cities": [
189 + "Montréal"
190 + ],
191 + "url": "",
192 + "org": "cloudchamberfr"
193 + },
194 + {
195 + "ats": "greenhouse",
196 + "employer": "Club Monaco",
197 + "sectors": [
198 + "Commerce de détail"
199 + ],
200 + "cities": [
201 + "Montréal"
202 + ],
203 + "url": "",
204 + "org": "clubmonaco"
205 + },
206 + {
207 + "ats": "greenhouse",
208 + "employer": "Coveo",
209 + "sectors": [
210 + "TI"
211 + ],
212 + "cities": [
213 + "Québec"
214 + ],
215 + "url": "",
216 + "org": "coveofr"
217 + },
218 + {
219 + "ats": "greenhouse",
220 + "employer": "Keel Infrastructure",
221 + "sectors": [
222 + "Infrastructures"
223 + ],
224 + "cities": [
225 + "Montréal"
226 + ],
227 + "url": "",
228 + "org": "keelinfrastructure"
229 + },
230 + {
231 + "ats": "greenhouse",
232 + "employer": "Laporte Experts Conseils",
233 + "sectors": [
234 + "Ingénierie"
235 + ],
236 + "cities": [
237 + "Montréal"
238 + ],
239 + "url": "",
240 + "org": "laportefr"
241 + },
242 + {
243 + "ats": "greenhouse",
244 + "employer": "La Senza",
245 + "sectors": [
246 + "Commerce de détail"
247 + ],
248 + "cities": [
249 + "Québec"
250 + ],
251 + "url": "",
252 + "org": "lasenza"
253 + },
254 + {
255 + "ats": "greenhouse",
256 + "employer": "Latys Intelligence",
257 + "sectors": [
258 + "TI"
259 + ],
260 + "cities": [
261 + "Montréal"
262 + ],
263 + "url": "",
264 + "org": "latys"
265 + },
266 + {
267 + "ats": "greenhouse",
268 + "employer": "LoiZéro",
269 + "sectors": [
270 + "Services juridiques"
271 + ],
272 + "cities": [
273 + "Montréal"
274 + ],
275 + "url": "",
276 + "org": "loizero"
277 + },
278 + {
279 + "ats": "greenhouse",
280 + "employer": "Lyft",
281 + "sectors": [
282 + "Transport"
283 + ],
284 + "cities": [
285 + "Montréal"
286 + ],
287 + "url": "",
288 + "org": "lyft"
289 + },
290 + {
291 + "ats": "greenhouse",
292 + "employer": "Mejuri",
293 + "sectors": [
294 + "Commerce de détail"
295 + ],
296 + "cities": [
297 + "Montréal"
298 + ],
299 + "url": "",
300 + "org": "mejuri"
301 + },
302 + {
303 + "ats": "greenhouse",
304 + "employer": "Royal Vet",
305 + "sectors": [
306 + "Santé animale"
307 + ],
308 + "cities": [
309 + "Montréal"
310 + ],
311 + "url": "",
312 + "org": "royalvet"
313 + },
314 + {
315 + "ats": "greenhouse",
316 + "employer": "Sony Pictures Imageworks",
317 + "sectors": [
318 + "Effets visuels"
319 + ],
320 + "cities": [
321 + "Montréal"
322 + ],
323 + "url": "",
324 + "org": "sonypicturesimageworks"
325 + },
326 + {
327 + "ats": "greenhouse",
328 + "employer": "KRAFTON Montréal Studio",
329 + "sectors": [
330 + "Jeu vidéo"
331 + ],
332 + "cities": [
333 + "Montréal"
334 + ],
335 + "url": "",
336 + "org": "studiokraftonboard"
337 + },
338 + {
339 + "ats": "greenhouse",
340 + "employer": "Terrestar Solutions",
341 + "sectors": [
342 + "Télécommunications"
343 + ],
344 + "cities": [
345 + "Montréal"
346 + ],
347 + "url": "",
348 + "org": "terrestarsolutionsfr"
349 + },
350 + {
351 + "ats": "greenhouse",
352 + "employer": "Toboggan Labs",
353 + "sectors": [
354 + "Jeu vidéo"
355 + ],
356 + "cities": [
357 + "Montréal"
358 + ],
359 + "url": "",
360 + "org": "tobogganlabs"
361 + },
362 + {
363 + "ats": "lever",
364 + "employer": "Cologix",
365 + "sectors": [
366 + "TI"
367 + ],
368 + "cities": [
369 + "Montréal"
370 + ],
371 + "url": "",
372 + "org": "cologix"
373 + },
374 + {
375 + "ats": "lever",
376 + "employer": "Daniels Health Canada",
377 + "sectors": [
378 + "Santé"
379 + ],
380 + "cities": [
381 + "Montréal"
382 + ],
383 + "url": "",
384 + "org": "daniels-sharpsmart"
385 + },
386 + {
387 + "ats": "lever",
388 + "employer": "Ecosystem Énergie",
389 + "sectors": [
390 + "Énergie"
391 + ],
392 + "cities": [
393 + "Montréal"
394 + ],
395 + "url": "",
396 + "org": "ecosystem"
397 + },
398 + {
399 + "ats": "lever",
400 + "employer": "LRDG (Language Research Development Group)",
401 + "sectors": [
402 + "Éducation"
403 + ],
404 + "cities": [
405 + "Montréal"
406 + ],
407 + "url": "",
408 + "org": "lrdgonline"
409 + },
410 + {
411 + "ats": "lever",
412 + "employer": "Maquette Virtuelle",
413 + "sectors": [
414 + "Ingénierie"
415 + ],
416 + "cities": [
417 + "Montréal"
418 + ],
419 + "url": "",
420 + "org": "maquettevirtuelle"
421 + },
422 + {
423 + "ats": "lever",
424 + "employer": "Telesat",
425 + "sectors": [
426 + "Aérospatiale"
427 + ],
428 + "cities": [
429 + "Gatineau"
430 + ],
431 + "url": "",
432 + "org": "telesat"
433 + },
434 + {
435 + "ats": "recruitee",
436 + "employer": "Agile DSS",
437 + "sectors": [
438 + "TI"
439 + ],
440 + "cities": [
441 + "Montréal"
442 + ],
443 + "url": "",
444 + "org": "agiledss"
445 + },
446 + {
447 + "ats": "recruitee",
448 + "employer": "Avantage Plus",
449 + "sectors": [
450 + "Services"
451 + ],
452 + "cities": [
453 + "Québec"
454 + ],
455 + "url": "",
456 + "org": "avantageplus"
457 + },
458 + {
459 + "ats": "recruitee",
460 + "employer": "Eurofins EnvironeX",
461 + "sectors": [
462 + "Laboratoires"
463 + ],
464 + "cities": [
465 + "Longueuil"
466 + ],
467 + "url": "",
468 + "org": "eurofinsenvironex"
469 + },
470 + {
471 + "ats": "recruitee",
472 + "employer": "Pivot + Edge",
473 + "sectors": [
474 + "Services"
475 + ],
476 + "cities": [
477 + "Gatineau"
478 + ],
479 + "url": "",
480 + "org": "pivotandedge"
481 + },
482 + {
483 + "ats": "recruitee",
484 + "employer": "Projevia",
485 + "sectors": [
486 + "Ingénierie"
487 + ],
488 + "cities": [
489 + "Montréal"
490 + ],
491 + "url": "",
492 + "org": "projevia"
493 + },
494 + {
495 + "ats": "recruitee",
496 + "employer": "STAS",
497 + "sectors": [
498 + "Fabrication"
499 + ],
500 + "cities": [
501 + "Saguenay"
502 + ],
503 + "url": "",
504 + "org": "stasinc"
505 + },
506 + {
507 + "ats": "recruitee",
508 + "employer": "Teknion Roy & Breton",
509 + "sectors": [
510 + "Fabrication"
511 + ],
512 + "cities": [
513 + "Lévis"
514 + ],
515 + "url": "",
516 + "org": "teknionroybreton"
517 + },
518 + {
519 + "ats": "smartrecruiters",
520 + "employer": "Artelia Canada",
521 + "sectors": [
522 + "Ingénierie"
523 + ],
524 + "cities": [
525 + "Montréal"
526 + ],
527 + "url": "",
528 + "org": "artelia"
529 + },
530 + {
531 + "ats": "smartrecruiters",
532 + "employer": "California Closets",
533 + "sectors": [
534 + "Fabrication"
535 + ],
536 + "cities": [
537 + "Montréal"
538 + ],
539 + "url": "",
540 + "org": "californiaclosets"
541 + },
542 + {
543 + "ats": "smartrecruiters",
544 + "employer": "Centre multiethnique de Québec",
545 + "sectors": [
546 + "Services sociaux"
547 + ],
548 + "cities": [
549 + "Québec"
550 + ],
551 + "url": "",
552 + "org": "centremultiethniquedequbec"
553 + },
554 + {
555 + "ats": "smartrecruiters",
556 + "employer": "École des entrepreneurs du Québec",
557 + "sectors": [
558 + "Éducation"
559 + ],
560 + "cities": [
561 + "Montréal"
562 + ],
563 + "url": "",
564 + "org": "coledesentrepreneursduqubec"
565 + },
566 + {
567 + "ats": "smartrecruiters",
568 + "employer": "GURU Boisson Énergisante",
569 + "sectors": [
570 + "Agroalimentaire"
571 + ],
572 + "cities": [
573 + "Montréal"
574 + ],
575 + "url": "",
576 + "org": "guruorganicenergydrink"
577 + },
578 + {
579 + "ats": "smartrecruiters",
580 + "employer": "H&M",
581 + "sectors": [
582 + "Commerce de détail"
583 + ],
584 + "cities": [
585 + "Montréal"
586 + ],
587 + "url": "",
588 + "org": "hmgroup"
589 + },
590 + {
591 + "ats": "smartrecruiters",
592 + "employer": "Lemay",
593 + "sectors": [
594 + "Architecture"
595 + ],
596 + "cities": [
597 + "Montréal"
598 + ],
599 + "url": "",
600 + "org": "lemay"
601 + },
602 + {
603 + "ats": "smartrecruiters",
604 + "employer": "Linen Chest",
605 + "sectors": [
606 + "Commerce de détail"
607 + ],
608 + "cities": [
609 + "Laval"
610 + ],
611 + "url": "",
612 + "org": "linenchest"
613 + },
614 + {
615 + "ats": "smartrecruiters",
616 + "employer": "Renaud-Bray",
617 + "sectors": [
618 + "Commerce de détail"
619 + ],
620 + "cities": [
621 + "Montréal"
622 + ],
623 + "url": "",
624 + "org": "renaud-bray"
625 + },
626 + {
627 + "ats": "smartrecruiters",
628 + "employer": "Sika Canada",
629 + "sectors": [
630 + "Construction"
631 + ],
632 + "cities": [
633 + "Pointe-Claire"
634 + ],
635 + "url": "",
636 + "org": "sikaag"
637 + },
638 + {
639 + "ats": "smartrecruiters",
640 + "employer": "Sodexo Canada",
641 + "sectors": [
642 + "Services alimentaires"
643 + ],
644 + "cities": [
645 + "Montréal"
646 + ],
647 + "url": "",
648 + "org": "sodexocanadaltd"
649 + },
650 + {
651 + "ats": "smartrecruiters",
652 + "employer": "Structube",
653 + "sectors": [
654 + "Commerce de détail"
655 + ],
656 + "cities": [
657 + "Montréal"
658 + ],
659 + "url": "",
660 + "org": "structube1"
661 + },
662 + {
663 + "ats": "smartrecruiters",
664 + "employer": "Trupanion",
665 + "sectors": [
666 + "Assurance"
667 + ],
668 + "cities": [
669 + "Montréal"
670 + ],
671 + "url": "",
672 + "org": "trupanion1"
673 + },
674 + {
675 + "ats": "workable",
676 + "employer": "Charlotte Tilbury",
677 + "sectors": [
678 + "Commerce de détail"
679 + ],
680 + "cities": [
681 + "Montréal"
682 + ],
683 + "url": "",
684 + "org": "charlotte-tilbury"
685 + },
686 + {
687 + "ats": "workable",
688 + "employer": "CSN Collision",
689 + "sectors": [
690 + "Automobile"
691 + ],
692 + "cities": [
693 + "Montréal"
694 + ],
695 + "url": "",
696 + "org": "csncollision"
697 + },
698 + {
699 + "ats": "workable",
700 + "employer": "CTS Foods Brokers",
701 + "sectors": [
702 + "Agroalimentaire"
703 + ],
704 + "cities": [
705 + "Montréal"
706 + ],
707 + "url": "",
708 + "org": "cts-foods-brokers-inc"
709 + },
710 + {
711 + "ats": "workable",
712 + "employer": "Damotech",
713 + "sectors": [
714 + "Fabrication"
715 + ],
716 + "cities": [
717 + "Boucherville"
718 + ],
719 + "url": "",
720 + "org": "damotech"
721 + },
722 + {
723 + "ats": "workable",
724 + "employer": "Delmar International",
725 + "sectors": [
726 + "Logistique"
727 + ],
728 + "cities": [
729 + "Montréal"
730 + ],
731 + "url": "",
732 + "org": "delmar-international-inc"
733 + },
734 + {
735 + "ats": "workable",
736 + "employer": "Exportation et développement Canada (EDC)",
737 + "sectors": [
738 + "Finance"
739 + ],
740 + "cities": [
741 + "Montréal"
742 + ],
743 + "url": "",
744 + "org": "export-development-canada"
745 + },
746 + {
747 + "ats": "workable",
748 + "employer": "Financeit",
749 + "sectors": [
750 + "Finance"
751 + ],
752 + "cities": [
753 + "Montréal"
754 + ],
755 + "url": "",
756 + "org": "financeit"
757 + },
758 + {
759 + "ats": "workable",
760 + "employer": "FLO (AddÉnergie)",
761 + "sectors": [
762 + "Énergie"
763 + ],
764 + "cities": [
765 + "Québec"
766 + ],
767 + "url": "",
768 + "org": "flo-addenergie"
769 + },
770 + {
771 + "ats": "workable",
772 + "employer": "Keywords Studios",
773 + "sectors": [
774 + "Jeu vidéo"
775 + ],
776 + "cities": [
777 + "Montréal"
778 + ],
779 + "url": "",
780 + "org": "keywords-intl1"
781 + },
782 + {
783 + "ats": "workable",
784 + "employer": "Rentokil Initial",
785 + "sectors": [
786 + "Services"
787 + ],
788 + "cities": [
789 + "Montréal"
790 + ],
791 + "url": "",
792 + "org": "rentokil-initial"
793 + },
794 + {
795 + "ats": "workable",
796 + "employer": "Starlink Aviation",
797 + "sectors": [
798 + "Aérospatiale"
799 + ],
800 + "cities": [
801 + "Dorval"
802 + ],
803 + "url": "",
804 + "org": "starlink-aviation"
805 + },
806 + {
807 + "ats": "workday",
808 + "employer": "Abbott",
809 + "sectors": [
810 + "Santé"
811 + ],
812 + "cities": [
813 + "Montréal"
814 + ],
815 + "url": "",
816 + "tenant": "abbott",
817 + "host": "wd5",
818 + "site": "abbottcareers"
819 + },
820 + {
821 + "ats": "workday",
822 + "employer": "Allstate Canada",
823 + "sectors": [
824 + "Assurance"
825 + ],
826 + "cities": [
827 + "Québec"
828 + ],
829 + "url": "",
830 + "tenant": "allstate",
831 + "host": "wd5",
832 + "site": "allstate_careers"
833 + },
834 + {
835 + "ats": "workday",
836 + "employer": "Aritzia",
837 + "sectors": [
838 + "Commerce de détail"
839 + ],
840 + "cities": [
841 + "Laval"
842 + ],
843 + "url": "",
844 + "tenant": "aritzia",
845 + "host": "wd3",
846 + "site": "external"
847 + },
848 + {
849 + "ats": "workday",
850 + "employer": "Cineplex",
851 + "sectors": [
852 + "Divertissement"
853 + ],
854 + "cities": [
855 + "Gatineau"
856 + ],
857 + "url": "",
858 + "tenant": "cineplex",
859 + "host": "wd3",
860 + "site": "Cineplex"
861 + },
862 + {
863 + "ats": "workday",
864 + "employer": "Consignaction (AQRCB)",
865 + "sectors": [
866 + "Environnement"
867 + ],
868 + "cities": [
869 + "Montréal"
870 + ],
871 + "url": "",
872 + "tenant": "consignaction",
873 + "host": "wd10",
874 + "site": "Consignaction_carrieres"
875 + },
876 + {
877 + "ats": "workday",
878 + "employer": "Dentalcorp",
879 + "sectors": [
880 + "Santé"
881 + ],
882 + "cities": [
883 + "Montréal"
884 + ],
885 + "url": "",
886 + "tenant": "dentalcorp",
887 + "host": "wd3",
888 + "site": "dentalcorp"
889 + },
890 + {
891 + "ats": "workday",
892 + "employer": "FedEx Express Canada",
893 + "sectors": [
894 + "Logistique"
895 + ],
896 + "cities": [
897 + "Québec"
898 + ],
899 + "url": "",
900 + "tenant": "fedex",
901 + "host": "wd1",
902 + "site": "FXE-Canada_External_Career_Site"
903 + },
904 + {
905 + "ats": "workday",
906 + "employer": "Fiserv",
907 + "sectors": [
908 + "Finance"
909 + ],
910 + "cities": [
911 + "Laval"
912 + ],
913 + "url": "",
914 + "tenant": "fiserv",
915 + "host": "wd5",
916 + "site": "EXT"
917 + },
918 + {
919 + "ats": "workday",
920 + "employer": "Guillevin International",
921 + "sectors": [
922 + "Distribution"
923 + ],
924 + "cities": [
925 + "Montréal"
926 + ],
927 + "url": "",
928 + "tenant": "guillevin",
929 + "host": "wd3",
930 + "site": "GIC"
931 + },
932 + {
933 + "ats": "workday",
934 + "employer": "Intelcom (Dragonfly)",
935 + "sectors": [
936 + "Logistique"
937 + ],
938 + "cities": [
939 + "Montréal"
940 + ],
941 + "url": "",
942 + "tenant": "intelcomgroup",
943 + "host": "wd3",
944 + "site": "Intelcom"
945 + },
946 + {
947 + "ats": "workday",
948 + "employer": "JLL",
949 + "sectors": [
950 + "Immobilier"
951 + ],
952 + "cities": [
953 + "Montréal"
954 + ],
955 + "url": "",
956 + "tenant": "jll",
957 + "host": "wd1",
958 + "site": "jllcareers"
959 + },
960 + {
961 + "ats": "workday",
962 + "employer": "OPENLANE Canada",
963 + "sectors": [
964 + "Automobile"
965 + ],
966 + "cities": [
967 + "Montréal"
968 + ],
969 + "url": "",
970 + "tenant": "openlane",
971 + "host": "wd115",
972 + "site": "OPENLANE_Careers"
973 + },
974 + {
975 + "ats": "workday",
976 + "employer": "Shell Canada",
977 + "sectors": [
978 + "Énergie"
979 + ],
980 + "cities": [
981 + "Montréal-Est"
982 + ],
983 + "url": "",
984 + "tenant": "shell",
985 + "host": "wd3",
986 + "site": "ShellCareers"
987 + },
988 + {
989 + "ats": "workday",
990 + "employer": "La Maison Simons",
991 + "sectors": [
992 + "Commerce de détail"
993 + ],
994 + "cities": [
995 + "Québec"
996 + ],
997 + "url": "",
998 + "tenant": "simons",
999 + "host": "wd10",
1000 + "site": "Simons_Site"
1001 + },
1002 + {
1003 + "ats": "workday",
1004 + "employer": "TJX Canada (Winners, HomeSense, Marshalls)",
1005 + "sectors": [
1006 + "Commerce de détail"
1007 + ],
1008 + "cities": [
1009 + "Gatineau"
1010 + ],
1011 + "url": "",
1012 + "tenant": "tjx",
1013 + "host": "wd1",
1014 + "site": "TJX_EXTERNAL"
1015 + },
1016 + {
1017 + "ats": "workday",
1018 + "employer": "VF Corporation (The North Face, Vans)",
1019 + "sectors": [
1020 + "Commerce de détail"
1021 + ],
1022 + "cities": [
1023 + "Montréal"
1024 + ],
1025 + "url": "",
1026 + "tenant": "vfc",
1027 + "host": "wd5",
1028 + "site": "vfc_careers"
1029 + },
1030 + {
1031 + "ats": "workday",
1032 + "employer": "ZOLL Medical",
1033 + "sectors": [
1034 + "Santé"
1035 + ],
1036 + "cities": [
1037 + "Montréal"
1038 + ],
1039 + "url": "",
1040 + "tenant": "zoll",
1041 + "host": "wd5",
1042 + "site": "ZOLLMedicalCorp"
1043 + },
1044 + {
1045 + "ats": "dayforce",
1046 + "source_id": "acadierouge",
1047 + "ns": "acvrouge",
1048 + "board": "CANDIDATEPORTAL",
1049 + "employer": "Air Canada Rouge",
1050 + "sectors": [
1051 + "Aérospatiale"
1052 + ],
1053 + "cities": [
1054 + "Montréal"
1055 + ]
1056 + },
1057 + {
1058 + "ats": "dayforce",
1059 + "source_id": "groupeagf",
1060 + "ns": "agfgroup",
1061 + "board": "CANDIDATEPORTAL",
1062 + "employer": "Groupe AGF",
1063 + "sectors": [
1064 + "Construction"
1065 + ],
1066 + "cities": [
1067 + "Longueuil"
1068 + ]
1069 + },
1070 + {
1071 + "ats": "dayforce",
1072 + "source_id": "portquebec",
1073 + "ns": "apq",
1074 + "board": "CANDIDATEPORTAL",
1075 + "employer": "Administration portuaire de Québec",
1076 + "sectors": [
1077 + "Transport"
1078 + ],
1079 + "cities": [
1080 + "Québec"
1081 + ]
1082 + },
1083 + {
1084 + "ats": "dayforce",
1085 + "source_id": "bpa",
1086 + "ns": "bpapointca",
1087 + "board": "CANDIDATEPORTAL",
1088 + "employer": "BPA (Experts-conseils)",
1089 + "sectors": [
1090 + "Ingénierie"
1091 + ],
1092 + "cities": [
1093 + "Montréal"
1094 + ]
1095 + },
1096 + {
1097 + "ats": "dayforce",
1098 + "source_id": "excellencepeterbilt",
1099 + "ns": "camion",
1100 + "board": "CANDIDATEPORTAL",
1101 + "employer": "Camions Excellence Peterbilt",
1102 + "sectors": [
1103 + "Automobile"
1104 + ],
1105 + "cities": [
1106 + "Sainte-Julie"
1107 + ]
1108 + },
1109 + {
1110 + "ats": "dayforce",
1111 + "source_id": "darefoods",
1112 + "ns": "darefoods",
1113 + "board": "CANDIDATEPORTAL",
1114 + "employer": "Dare Foods",
1115 + "sectors": [
1116 + "Agroalimentaire"
1117 + ],
1118 + "cities": [
1119 + "Sainte-Marthe-sur-le-Lac"
1120 + ]
1121 + },
1122 + {
1123 + "ats": "dayforce",
1124 + "source_id": "eastpenn",
1125 + "ns": "eastpenn",
1126 + "board": "CANDIDATEPORTAL",
1127 + "employer": "East Penn Canada",
1128 + "sectors": [
1129 + "Distribution"
1130 + ],
1131 + "cities": [
1132 + "Laval"
1133 + ]
1134 + },
1135 + {
1136 + "ats": "dayforce",
1137 + "source_id": "eidosmontreal",
1138 + "ns": "eic",
1139 + "board": "CANDIDATEPORTAL",
1140 + "employer": "Eidos-Montréal",
1141 + "sectors": [
1142 + "Jeu vidéo"
1143 + ],
1144 + "cities": [
1145 + "Montréal"
1146 + ]
1147 + },
1148 + {
1149 + "ats": "dayforce",
1150 + "source_id": "fastcocanada",
1151 + "ns": "fastco",
1152 + "board": "CANDIDATEPORTAL",
1153 + "employer": "Fastco Canada",
1154 + "sectors": [
1155 + "Fabrication"
1156 + ],
1157 + "cities": [
1158 + "Pointe-Claire"
1159 + ]
1160 + },
1161 + {
1162 + "ats": "dayforce",
1163 + "source_id": "bleufeu",
1164 + "ns": "feiq",
1165 + "board": "CANDIDATEPORTAL",
1166 + "employer": "BLEUFEU (Festival d'été de Québec)",
1167 + "sectors": [
1168 + "Divertissement"
1169 + ],
1170 + "cities": [
1171 + "Québec"
1172 + ]
1173 + },
1174 + {
1175 + "ats": "dayforce",
1176 + "source_id": "groupemaurice",
1177 + "ns": "gm",
1178 + "board": "CANDIDATEPORTAL",
1179 + "employer": "Le Groupe Maurice",
1180 + "sectors": [
1181 + "Santé"
1182 + ],
1183 + "cities": [
1184 + "Montréal"
1185 + ]
1186 + },
1187 + {
1188 + "ats": "dayforce",
1189 + "source_id": "graycollection",
1190 + "ns": "graycorp",
1191 + "board": "CANDIDATEPORTAL",
1192 + "employer": "Gray Collection (Groupe Antonopoulos)",
1193 + "sectors": [
1194 + "Hôtellerie"
1195 + ],
1196 + "cities": [
1197 + "Montréal"
1198 + ]
1199 + },
1200 + {
1201 + "ats": "dayforce",
1202 + "source_id": "groupech",
1203 + "ns": "groupech",
1204 + "board": "CANDIDATEPORTAL",
1205 + "employer": "Groupe CH (Canadiens de Montréal, Centre Bell)",
1206 + "sectors": [
1207 + "Divertissement"
1208 + ],
1209 + "cities": [
1210 + "Montréal"
1211 + ]
1212 + },
1213 + {
1214 + "ats": "dayforce",
1215 + "source_id": "groupemach",
1216 + "ns": "groupemach",
1217 + "board": "CANDIDATEPORTAL",
1218 + "employer": "Groupe Mach",
1219 + "sectors": [
1220 + "Immobilier"
1221 + ],
1222 + "cities": [
1223 + "Montréal"
1224 + ]
1225 + },
1226 + {
1227 + "ats": "dayforce",
1228 + "source_id": "jdsports",
1229 + "ns": "jdsf",
1230 + "board": "CANDIDATEPORTAL",
1231 + "employer": "JD Sports Canada",
1232 + "sectors": [
1233 + "Commerce de détail"
1234 + ],
1235 + "cities": [
1236 + "Montréal"
1237 + ]
1238 + },
1239 + {
1240 + "ats": "dayforce",
1241 + "source_id": "lauracanada",
1242 + "ns": "laurashoppe",
1243 + "board": "CANDIDATEPORTAL",
1244 + "employer": "Laura Canada",
1245 + "sectors": [
1246 + "Commerce de détail"
1247 + ],
1248 + "cities": [
1249 + "Laval"
1250 + ]
1251 + },
1252 + {
1253 + "ats": "dayforce",
1254 + "source_id": "lavieenrose",
1255 + "ns": "lavieenrose",
1256 + "board": "CANDIDATEPORTAL",
1257 + "employer": "La Vie en Rose",
1258 + "sectors": [
1259 + "Commerce de détail"
1260 + ],
1261 + "cities": [
1262 + "Montréal"
1263 + ]
1264 + },
1265 + {
1266 + "ats": "dayforce",
1267 + "source_id": "nationex",
1268 + "ns": "nationex",
1269 + "board": "CANDIDATEPORTAL",
1270 + "employer": "Nationex",
1271 + "sectors": [
1272 + "Logistique"
1273 + ],
1274 + "cities": [
1275 + "Longueuil"
1276 + ]
1277 + },
1278 + {
1279 + "ats": "dayforce",
1280 + "source_id": "realstar",
1281 + "ns": "realstar",
1282 + "board": "CANDIDATEPORTAL",
1283 + "employer": "Realstar",
1284 + "sectors": [
1285 + "Immobilier"
1286 + ],
1287 + "cities": [
1288 + "Montréal"
1289 + ]
1290 + },
1291 + {
1292 + "ats": "dayforce",
1293 + "source_id": "reflector",
1294 + "ns": "ref",
1295 + "board": "CANDIDATEPORTAL",
1296 + "employer": "Reflector Entertainment",
1297 + "sectors": [
1298 + "Jeu vidéo"
1299 + ],
1300 + "cities": [
1301 + "Montréal"
1302 + ]
1303 + },
1304 + {
1305 + "ats": "dayforce",
1306 + "source_id": "runningroom",
1307 + "ns": "runningroom",
1308 + "board": "CANDIDATEPORTAL",
1309 + "employer": "Running Room Canada",
1310 + "sectors": [
1311 + "Commerce de détail"
1312 + ],
1313 + "cities": [
1314 + "Montréal"
1315 + ]
1316 + },
1317 + {
1318 + "ats": "dayforce",
1319 + "source_id": "soprema",
1320 + "ns": "soprema",
1321 + "board": "CANDIDATEPORTAL",
1322 + "employer": "Soprema",
1323 + "sectors": [
1324 + "Fabrication"
1325 + ],
1326 + "cities": [
1327 + "Drummondville"
1328 + ]
1329 + },
1330 + {
1331 + "ats": "dayforce",
1332 + "source_id": "spectrapremium",
1333 + "ns": "spectra",
1334 + "board": "CANDIDATEPORTAL",
1335 + "employer": "Spectra Premium",
1336 + "sectors": [
1337 + "Fabrication"
1338 + ],
1339 + "cities": [
1340 + "Boucherville"
1341 + ]
1342 + },
1343 + {
1344 + "ats": "dayforce",
1345 + "source_id": "storagemart",
1346 + "ns": "storagemart",
1347 + "board": "CANDIDATEPORTAL",
1348 + "employer": "StorageMart",
1349 + "sectors": [
1350 + "Services"
1351 + ],
1352 + "cities": [
1353 + "Québec"
1354 + ]
1355 + },
1356 + {
1357 + "ats": "dayforce",
1358 + "source_id": "unitedservices",
1359 + "ns": "unitedservicesgroup",
1360 + "board": "CANDIDATEPORTAL",
1361 + "employer": "United Services Group",
1362 + "sectors": [
1363 + "Services"
1364 + ],
1365 + "cities": [
1366 + "Montréal"
1367 + ]
1368 + },
1369 + {
1370 + "ats": "dayforce",
1371 + "source_id": "vinfastcanada",
1372 + "ns": "vinfast",
1373 + "board": "CANDIDATEPORTAL",
1374 + "employer": "VinFast Canada",
1375 + "sectors": [
1376 + "Automobile"
1377 + ],
1378 + "cities": [
1379 + "Laval"
1380 + ]
1381 + }
1382 +]
\ No newline at end of file
modified data/sources.json +4409 −3088
@@ -1,3090 +1,4411 @@
1 1 {
2 "_meta": {
3 "project": "Job·Ka — Groupe KA",
4 "author": "Simon-Pierre Boucher <contact@spboucher.ai>",
5 "role": "Registre descriptif des sources (alimente la page Sources)",
6 "updated": "2026-08-19",
7 "counts": {
8 "employeurs_directs": 240,
9 "plateformes_ats": 19,
10 "portails": 3,
11 "depot_direct": 1,
12 "reseaux_multi_employeurs": 1
13 },
14 "ats": [
15 "adp",
16 "ashby",
17 "bamboohr",
18 "breezy",
19 "digitalrecruiters",
20 "greenhouse",
21 "icims",
22 "lever",
23 "njoyn",
24 "recruitee",
25 "smartrecruiters",
26 "successfactors",
27 "taleo",
28 "taleo_tbe",
29 "ultipro",
30 "workable",
31 "workday",
32 "workland",
33 "wpjobmanager"
34 ],
35 "docs": "docs/connecteurs/INDEX.md (fiches générées par scripts/gen_connector_docs.py) ; conformité : docs/CONFORMITE.md"
36 },
37 "sources": [
38 {
39 "id": "adeleexpressfr",
40 "name": "Adèle Express",
41 "url": "",
42 "careers_url": "https://adeleexpressfr.recruitee.com",
43 "sectors": [
44 "Transport"
45 ],
46 "connector": "recruitee",
47 "status": "actif",
48 "region": "Montréal"
49 },
50 {
51 "id": "adi_albert_davidson_industries",
52 "name": "ADI - Albert Davidson Industries",
53 "url": "",
54 "careers_url": "https://adi-albert-davidson-industries.breezy.hr",
55 "sectors": [
56 "Manufacture"
57 ],
58 "connector": "breezy",
59 "status": "actif",
60 "region": "Pointe-Claire"
61 },
62 {
63 "id": "agnico_eagle",
64 "name": "Agnico Eagle Mines",
65 "url": "https://www.agnicoeagle.com",
66 "careers_url": "https://agnicoeagle.taleo.net/careersection/2/jobsearch.ftl?lang=fr",
67 "sectors": [
68 "Mines",
69 "Ingénierie",
70 "Métiers spécialisés"
71 ],
72 "connector": "taleo",
73 "status": "actif",
74 "region": "Abitibi-Témiscamingue, Malartic, Rouyn-Noranda"
75 },
76 {
77 "id": "agropur",
78 "name": "Agropur",
79 "url": "https://www.agropur.com",
80 "careers_url": "https://agropur.wd3.myworkdayjobs.com/Agropur_Careers",
81 "sectors": [
82 "Agroalimentaire",
83 "Production"
84 ],
85 "connector": "workday",
86 "status": "actif",
87 "region": "Longueuil / province"
88 },
89 {
90 "id": "airbus",
91 "name": "Airbus Canada",
92 "url": "https://airbus.com",
93 "careers_url": "https://ag.wd3.myworkdayjobs.com/Airbus",
94 "sectors": [],
95 "connector": "workday",
96 "status": "actif",
97 "region": "Mirabel"
98 },
99 {
100 "id": "ajwalter",
101 "name": "AJ Walter Aviation",
102 "url": "",
103 "careers_url": "https://ajwalter.recruitee.com",
104 "sectors": [
105 "Aéronautique"
106 ],
107 "connector": "recruitee",
108 "status": "actif",
109 "region": "Montréal"
110 },
111 {
112 "id": "alayacare",
113 "name": "AlayaCare",
114 "url": "https://www.alayacare.com",
115 "careers_url": "https://job-boards.greenhouse.io/alayacare",
116 "sectors": [
117 "TI",
118 "Santé"
119 ],
120 "connector": "greenhouse",
121 "status": "actif",
122 "region": "Montréal"
123 },
124 {
125 "id": "alcoa",
126 "name": "Alcoa Canada",
127 "url": "https://alcoa.com",
128 "careers_url": "https://alcoa.wd5.myworkdayjobs.com/Careers",
129 "sectors": [],
130 "connector": "workday",
131 "status": "actif",
132 "region": "Baie-Comeau"
133 },
134 {
135 "id": "alimentiv_2",
136 "name": "Alimentiv",
137 "url": "",
138 "careers_url": "https://jobs.lever.co/alimentiv-2",
139 "sectors": [
140 "Recherche clinique"
141 ],
142 "connector": "lever",
143 "status": "actif",
144 "region": "Montréal, Québec"
145 },
146 {
147 "id": "alphanumeric_systems",
148 "name": "Alphanumeric Systems",
149 "url": "",
150 "careers_url": "https://alphanumeric-systems.breezy.hr",
151 "sectors": [
152 "TI",
153 "Santé"
154 ],
155 "connector": "breezy",
156 "status": "actif",
157 "region": "Montréal, Sainte-Foy"
158 },
159 {
160 "id": "altasciences",
161 "name": "Altasciences",
162 "url": "",
163 "careers_url": "https://altasciences.wd1.myworkdayjobs.com/Careers",
164 "sectors": [
165 "Pharmaceutique"
166 ],
167 "connector": "workday",
168 "status": "actif",
169 "region": "Laval"
170 },
171 {
172 "id": "amilia",
173 "name": "Amilia",
174 "url": "",
175 "careers_url": "https://amilia.recruitee.com",
176 "sectors": [
177 "TI"
178 ],
179 "connector": "recruitee",
180 "status": "actif",
181 "region": "Montréal"
182 },
183 {
184 "id": "anciapersonnelinc",
185 "name": "ANCIA Personnel",
186 "url": "",
187 "careers_url": "https://anciapersonnelinc.recruitee.com",
188 "sectors": [
189 "Placement"
190 ],
191 "connector": "recruitee",
192 "status": "actif",
193 "region": "Lévis, Québec, Montréal"
194 },
195 {
196 "id": "appdirect",
197 "name": "AppDirect",
198 "url": "",
199 "careers_url": "https://job-boards.greenhouse.io/appdirect",
200 "sectors": [
201 "TI",
202 "SaaS"
203 ],
204 "connector": "greenhouse",
205 "status": "actif",
206 "region": "Montréal"
207 },
208 {
209 "id": "astucemedia",
210 "name": "Astucemedia",
211 "url": "",
212 "careers_url": "https://jobs.smartrecruiters.com/company/Astucemedia",
213 "sectors": [
214 "Médias",
215 "TI"
216 ],
217 "connector": "smartrecruiters",
218 "status": "actif",
219 "region": "Montréal"
220 },
221 {
222 "id": "atecna_montreal",
223 "name": "Atecna",
224 "url": "",
225 "careers_url": "https://apply.workable.com/atecna-montreal",
226 "sectors": [
227 "TI",
228 "Conseil"
229 ],
230 "connector": "workable",
231 "status": "actif",
232 "region": "Montréal"
233 },
234 {
235 "id": "atlas_workland",
236 "name": "Réseau Atlas Workland (~80 employeurs QC : CSS, cégeps, Santé Québec, STQ, UQTR…)",
237 "url": "https://www.workland.com",
238 "careers_url": "https://atlas.workland.com",
239 "connector": "workland",
240 "sectors": [
241 "Éducation",
242 "Santé",
243 "Secteur public",
244 "Multi-employeurs"
245 ],
246 "region": "Québec (province)",
247 "status": "actif"
248 },
249 {
250 "id": "autodesk",
251 "name": "Autodesk",
252 "url": "",
253 "careers_url": "https://autodesk.wd1.myworkdayjobs.com/Ext",
254 "sectors": [
255 "TI",
256 "Logiciel"
257 ],
258 "connector": "workday",
259 "status": "actif",
260 "region": "Montréal"
261 },
262 {
263 "id": "aviyatech",
264 "name": "Aviya Aerospace Systems",
265 "url": "",
266 "careers_url": "https://jobs.lever.co/aviyatech",
267 "sectors": [
268 "Aéronautique"
269 ],
270 "connector": "lever",
271 "status": "actif",
272 "region": "Longueuil"
273 },
274 {
275 "id": "bardel_entertainment",
276 "name": "Bardel Entertainment",
277 "url": "",
278 "careers_url": "https://apply.workable.com/bardel-entertainment",
279 "sectors": [
280 "Animation"
281 ],
282 "connector": "workable",
283 "status": "actif",
284 "region": "Montréal"
285 },
286 {
287 "id": "bayshore",
288 "name": "Bayshore HealthCare",
289 "url": "https://www.bayshore.ca",
290 "careers_url": "https://bayshore.taleo.net/careersection/bs_ex/jobsearch.ftl?lang=fr",
291 "sectors": [
292 "Santé",
293 "Soins à domicile"
294 ],
295 "connector": "taleo",
296 "status": "actif",
297 "region": "Montréal, Québec"
298 },
299 {
300 "id": "bc2",
301 "name": "Groupe BC2",
302 "url": "",
303 "careers_url": "https://bc2.bamboohr.com/careers",
304 "sectors": [
305 "Urbanisme",
306 "Conseil"
307 ],
308 "connector": "bamboohr",
309 "status": "actif",
310 "region": "Montréal"
311 },
312 {
313 "id": "bdc",
314 "name": "BDC",
315 "url": "",
316 "careers_url": "https://bdc.wd10.myworkdayjobs.com/bdc_careers",
317 "sectors": [
318 "Finance"
319 ],
320 "connector": "workday",
321 "status": "actif",
322 "region": "Montréal"
323 },
324 {
325 "id": "bell_textron",
326 "name": "Bell Textron Canada",
327 "url": "https://www.bellflight.com",
328 "careers_url": "https://textron.taleo.net/careersection/bell/jobsearch.ftl?lang=fr",
329 "sectors": [
330 "Aéronautique",
331 "Fabrication"
332 ],
333 "connector": "taleo",
334 "status": "actif",
335 "region": "Mirabel"
336 },
337 {
338 "id": "beneva",
339 "name": "Beneva",
340 "url": "https://beneva.ca",
341 "careers_url": "https://beneva.wd10.myworkdayjobs.com/BenevaSite_carriere",
342 "sectors": [],
343 "connector": "workday",
344 "status": "actif",
345 "region": "Québec"
346 },
347 {
348 "id": "bento_sushi",
349 "name": "Bento Sushi",
350 "url": "https://www.bentosushi.com",
351 "careers_url": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=d0dfb14c-f365-4599-b39b-0fdccb3d1160&ccId=19000101_000001&lang=fr_CA",
352 "connector": "adp",
353 "sectors": [
354 "Restauration"
355 ],
356 "region": "Québec (province)",
357 "status": "actif"
358 },
359 {
360 "id": "bhvr",
361 "name": "Behaviour Interactif",
362 "url": "",
363 "careers_url": "https://jobs.lever.co/bhvr",
364 "sectors": [
365 "Jeux vidéo"
366 ],
367 "connector": "lever",
368 "status": "actif",
369 "region": "Montréal"
370 },
371 {
372 "id": "bigbang",
373 "name": "Big Bang",
374 "url": "",
375 "careers_url": "https://bigbang.bamboohr.com/careers",
376 "sectors": [
377 "TI"
378 ],
379 "connector": "bamboohr",
380 "status": "actif",
381 "region": "Montréal"
382 },
383 {
384 "id": "biximontreal",
385 "name": "BIXI Montréal",
386 "url": "",
387 "careers_url": "https://biximontreal.recruitee.com",
388 "sectors": [
389 "Transport"
390 ],
391 "connector": "recruitee",
392 "status": "actif",
393 "region": "Montréal"
394 },
395 {
396 "id": "bmo",
397 "name": "BMO Groupe financier",
398 "url": "",
399 "careers_url": "https://bmo.wd3.myworkdayjobs.com/External",
400 "sectors": [
401 "Finance"
402 ],
403 "connector": "workday",
404 "status": "actif",
405 "region": "Montréal, Laval, Gatineau"
406 },
407 {
408 "id": "bombardier",
409 "name": "Bombardier",
410 "url": "https://bombardier.com",
411 "careers_url": "https://jobs.bombardier.com",
412 "sectors": [
413 "Aéronautique",
414 "Ingénierie",
415 "Fabrication"
416 ],
417 "connector": "successfactors",
418 "status": "actif",
419 "region": "Dorval, Mirabel, Montréal"
420 },
421 {
422 "id": "botpress",
423 "name": "Botpress",
424 "url": "",
425 "careers_url": "https://apply.workable.com/botpress",
426 "sectors": [
427 "TI",
428 "IA"
429 ],
430 "connector": "workable",
431 "status": "actif",
432 "region": "Montréal, Québec"
433 },
434 {
435 "id": "brandmomentum",
436 "name": "Brand Momentum",
437 "url": "",
438 "careers_url": "https://brandmomentum.breezy.hr",
439 "sectors": [
440 "Marketing",
441 "Ventes"
442 ],
443 "connector": "breezy",
444 "status": "actif",
445 "region": "Montréal, Laval, Québec"
446 },
447 {
448 "id": "broadsign",
449 "name": "Broadsign",
450 "url": "",
451 "careers_url": "https://job-boards.greenhouse.io/broadsign",
452 "sectors": [
453 "TI",
454 "Affichage"
455 ],
456 "connector": "greenhouse",
457 "status": "actif",
458 "region": "Montréal"
459 },
460 {
461 "id": "broccolini",
462 "name": "Broccolini",
463 "url": "",
464 "careers_url": "https://broccolini.bamboohr.com/careers",
465 "sectors": [
466 "Construction",
467 "Immobilier"
468 ],
469 "connector": "bamboohr",
470 "status": "actif",
471 "region": "Montréal"
472 },
473 {
474 "id": "caaquebec",
475 "name": "CAA-Québec",
476 "url": "https://caaquebec.com",
477 "careers_url": "https://caaquebec.wd3.myworkdayjobs.com/CarrieresCAA-Quebec",
478 "sectors": [],
479 "connector": "workday",
480 "status": "actif",
481 "region": "Québec"
482 },
483 {
484 "id": "cae",
485 "name": "CAE",
486 "url": "https://www.cae.com",
487 "careers_url": "https://cae.wd3.myworkdayjobs.com/career",
488 "sectors": [
489 "Aéronautique",
490 "Simulation",
491 "TI"
492 ],
493 "connector": "workday",
494 "status": "actif",
495 "region": "Montréal"
496 },
497 {
498 "id": "canada_global",
499 "name": "Canada Global Recruitment",
500 "url": "",
501 "careers_url": "https://canada-global.breezy.hr",
502 "sectors": [
503 "Placement"
504 ],
505 "connector": "breezy",
506 "status": "actif",
507 "region": "Montréal"
508 },
509 {
510 "id": "canadiantirecorporation",
511 "name": "Canadian Tire",
512 "url": "https://canadiantire.ca",
513 "careers_url": "https://canadiantirecorporation.wd3.myworkdayjobs.com/Enterprise_External_Careers_Site",
514 "sectors": [],
515 "connector": "workday",
516 "status": "actif",
517 "region": "Montréal"
518 },
519 {
520 "id": "capreit",
521 "name": "CAPREIT",
522 "url": "https://www.capreit.ca",
523 "careers_url": "https://careers-capreit.icims.com/jobs/search?ss=1",
524 "sectors": [
525 "Immobilier",
526 "Gestion immobilière"
527 ],
528 "connector": "icims",
529 "status": "actif",
530 "region": "Montréal"
531 },
532 {
533 "id": "cascades",
534 "name": "Cascades",
535 "url": "https://www.cascades.com",
536 "careers_url": "https://jobs.cascades.com",
537 "sectors": [
538 "Pâtes et papiers",
539 "Emballage",
540 "Fabrication"
541 ],
542 "connector": "successfactors",
543 "status": "actif",
544 "region": "Kingsey Falls, Drummondville, Candiac"
545 },
546 {
547 "id": "cdpq",
548 "name": "CDPQ — Caisse de dépôt et placement du Québec",
549 "url": "https://cdpq.com",
550 "careers_url": "https://cdpq.wd10.myworkdayjobs.com/CDPQ",
551 "sectors": [],
552 "connector": "workday",
553 "status": "actif",
554 "region": "Montréal"
555 },
556 {
557 "id": "cfmontreal",
558 "name": "CF Montréal",
559 "url": "",
560 "careers_url": "https://jobs.smartrecruiters.com/company/CFMontreal",
561 "sectors": [
562 "Sport"
563 ],
564 "connector": "smartrecruiters",
565 "status": "actif",
566 "region": "Montréal"
567 },
568 {
569 "id": "cgi",
570 "name": "CGI",
571 "url": "https://www.cgi.com",
572 "careers_url": "https://cgi.njoyn.com/CORP/xweb/xweb.asp?clid=21001&page=joblisting&lang=2",
573 "connector": "njoyn",
574 "sectors": [
575 "TI",
576 "Services-conseils"
577 ],
578 "region": "Montréal, Québec",
579 "status": "actif"
580 },
581 {
582 "id": "charger_logistics_inc",
583 "name": "Charger Logistics",
584 "url": "",
585 "careers_url": "https://apply.workable.com/charger-logistics-inc",
586 "sectors": [
587 "Transport",
588 "Logistique"
589 ],
590 "connector": "workable",
591 "status": "actif",
592 "region": "Dorval"
593 },
594 {
595 "id": "chu_quebec",
596 "name": "CHU de Québec — Université Laval",
597 "url": "https://www.chudequebec.ca",
598 "careers_url": "https://chudequebec.carrieresante.gouv.qc.ca",
599 "connector": "wpjobmanager",
600 "sectors": [
601 "Santé",
602 "Secteur public"
603 ],
604 "region": "Québec",
605 "status": "actif"
606 },
607 {
608 "id": "chum",
609 "name": "CHUM",
610 "url": "https://www.chumontreal.qc.ca",
611 "careers_url": "https://chum.carrieresante.gouv.qc.ca",
612 "connector": "wpjobmanager",
613 "sectors": [
614 "Santé",
615 "Secteur public"
616 ],
617 "region": "Montréal",
618 "status": "actif"
619 },
620 {
621 "id": "churchdwight",
622 "name": "Church & Dwight Canada",
623 "url": "https://churchdwight.ca",
624 "careers_url": "https://churchdwight.wd1.myworkdayjobs.com/chdcanadacareers",
625 "sectors": [
626 "Production"
627 ],
628 "connector": "workday",
629 "status": "actif",
630 "region": ""
631 },
632 {
633 "id": "cibc",
634 "name": "Banque CIBC",
635 "url": "",
636 "careers_url": "https://cibc.wd3.myworkdayjobs.com/search",
637 "sectors": [
638 "Finance"
639 ],
640 "connector": "workday",
641 "status": "actif",
642 "region": "Montréal, Québec"
643 },
644 {
645 "id": "cima2",
646 "name": "CIMA+",
647 "url": "",
648 "careers_url": "https://jobs.smartrecruiters.com/company/CIMA2",
649 "sectors": [
650 "Ingénierie"
651 ],
652 "connector": "smartrecruiters",
653 "status": "actif",
654 "region": "Montréal, Québec, Laval"
655 },
656 {
657 "id": "circlek",
658 "name": "Couche-Tard / Circle K",
659 "url": "",
660 "careers_url": "https://circlek.wd3.myworkdayjobs.com/CircleKStoreJobs",
661 "sectors": [
662 "Commerce de détail"
663 ],
664 "connector": "workday",
665 "status": "actif",
666 "region": "Québec, Montréal, Drummondville"
667 },
668 {
669 "id": "cirquedusoleil",
670 "name": "Cirque du Soleil",
671 "url": "https://www.cirquedusoleil.com",
672 "careers_url": "https://jobs.lever.co/cirquedusoleil",
673 "sectors": [
674 "Divertissement",
675 "Création"
676 ],
677 "connector": "lever",
678 "status": "actif",
679 "region": "Montréal"
680 },
681 {
682 "id": "cisss_abitibi",
683 "name": "CISSS de l'Abitibi-Témiscamingue",
684 "url": "https://www.cisss-at.gouv.qc.ca",
685 "careers_url": "https://cisssat.carrieresante.gouv.qc.ca",
686 "connector": "wpjobmanager",
687 "sectors": [
688 "Santé",
689 "Secteur public"
690 ],
691 "region": "Abitibi-Témiscamingue",
692 "status": "actif"
693 },
694 {
695 "id": "cisss_chaudiere_appalaches",
696 "name": "CISSS de Chaudière-Appalaches",
697 "url": "https://www.cisssca.com",
698 "careers_url": "https://cisssca.carrieresante.gouv.qc.ca",
699 "connector": "wpjobmanager",
700 "sectors": [
701 "Santé",
702 "Secteur public"
703 ],
704 "region": "Chaudière-Appalaches",
705 "status": "actif"
706 },
707 {
708 "id": "cisss_lanaudiere",
709 "name": "CISSS de Lanaudière",
710 "url": "https://www.cisss-lanaudiere.gouv.qc.ca",
711 "careers_url": "https://lanaudiere.carrieresante.gouv.qc.ca",
712 "connector": "wpjobmanager",
713 "sectors": [
714 "Santé",
715 "Secteur public"
716 ],
717 "region": "Lanaudière",
718 "status": "actif"
719 },
720 {
721 "id": "cisss_laurentides",
722 "name": "CISSS des Laurentides",
723 "url": "https://www.santelaurentides.gouv.qc.ca",
724 "careers_url": "https://laurentides.carrieresante.gouv.qc.ca",
725 "connector": "wpjobmanager",
726 "sectors": [
727 "Santé",
728 "Secteur public"
729 ],
730 "region": "Laurentides",
731 "status": "actif"
732 },
733 {
734 "id": "cisss_laval",
735 "name": "CISSS de Laval",
736 "url": "https://www.lavalensante.com",
737 "careers_url": "https://cissslaval.carrieresante.gouv.qc.ca",
738 "connector": "wpjobmanager",
739 "sectors": [
740 "Santé",
741 "Secteur public"
742 ],
743 "region": "Laval",
744 "status": "actif"
745 },
746 {
747 "id": "cisss_outaouais",
748 "name": "CISSS de l'Outaouais",
749 "url": "https://cisss-outaouais.gouv.qc.ca",
750 "careers_url": "https://viensvivretespassions.ca",
751 "connector": "wpjobmanager",
752 "sectors": [
753 "Santé",
754 "Secteur public"
755 ],
756 "region": "Outaouais",
757 "status": "actif"
758 },
759 {
760 "id": "ciusss_est_montreal",
761 "name": "CIUSSS de l'Est-de-l'Île-de-Montréal",
762 "url": "https://ciusss-estmtl.gouv.qc.ca",
763 "careers_url": "https://ciusssemtl.taleo.net/careersection/cemtl/jobsearch.ftl?lang=fr",
764 "sectors": [
765 "Santé",
766 "Services sociaux",
767 "Secteur public"
768 ],
769 "connector": "taleo",
770 "status": "actif",
771 "region": "Montréal"
772 },
773 {
774 "id": "cogeco",
775 "name": "Cogeco",
776 "url": "",
777 "careers_url": "https://cogeco.wd3.myworkdayjobs.com/Cogeco_Careers",
778 "sectors": [
779 "Télécoms"
780 ],
781 "connector": "workday",
782 "status": "actif",
783 "region": "Montréal, Trois-Rivières"
784 },
785 {
786 "id": "cohere",
787 "name": "Cohere",
788 "url": "",
789 "careers_url": "https://jobs.ashbyhq.com/cohere",
790 "sectors": [
791 "TI",
792 "IA"
793 ],
794 "connector": "ashby",
795 "status": "actif",
796 "region": "Montréal"
797 },
798 {
799 "id": "cordonbleu",
800 "name": "Aliments Ouimet-Cordon Bleu inc.",
801 "url": "https://clarkcordonbleu.ca",
802 "careers_url": "https://cordonbleu.bamboohr.com/careers",
803 "sectors": [
804 "Production"
805 ],
806 "connector": "bamboohr",
807 "status": "actif",
808 "region": ""
809 },
810 {
811 "id": "cssdd",
812 "name": "CSS des Découvreurs",
813 "url": "https://www.cssdd.gouv.qc.ca",
814 "careers_url": "https://emplois.cssdd.gouv.qc.ca",
815 "connector": "digitalrecruiters",
816 "sectors": [
817 "Éducation",
818 "Secteur public"
819 ],
820 "region": "Québec",
821 "status": "actif"
822 },
823 {
824 "id": "cultures_genv",
825 "name": "Cultures Gen V",
826 "url": "https://gen-v.com",
827 "careers_url": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=8b346731-d189-4cf2-a14c-9e48d38befde&ccId=36427051_2&lang=fr_CA",
828 "connector": "adp",
829 "sectors": [
830 "Agroalimentaire",
831 "Serriculture"
832 ],
833 "region": "Montérégie",
834 "status": "actif"
835 },
836 {
837 "id": "dcbel",
838 "name": "dcbel",
839 "url": "",
840 "careers_url": "https://dcbel.bamboohr.com/careers",
841 "sectors": [
842 "Énergie",
843 "TI"
844 ],
845 "connector": "bamboohr",
846 "status": "actif",
847 "region": "Montréal"
848 },
849 {
850 "id": "deloitte",
851 "name": "Deloitte Canada",
852 "url": "https://www.deloitte.com/ca",
853 "careers_url": "https://careers.deloitte.ca",
854 "connector": "successfactors",
855 "sectors": [
856 "Services-conseils",
857 "Comptabilité",
858 "TI"
859 ],
860 "region": "Montréal, Québec",
861 "status": "actif"
862 },
863 {
864 "id": "depot-direct",
865 "name": "Dépôt direct employeurs",
866 "url": "https://www.job-ka.com/employeurs",
867 "careers_url": "https://www.job-ka.com/employeurs",
868 "sectors": [
869 "Tous secteurs"
870 ],
871 "connector": "depot-direct",
872 "status": "modération",
873 "region": "Québec (province)"
874 },
875 {
876 "id": "desjardins",
877 "name": "Mouvement Desjardins",
878 "url": "https://www.desjardins.com",
879 "careers_url": "https://desjardins.wd10.myworkdayjobs.com/Desjardins",
880 "sectors": [
881 "Finance",
882 "Assurance",
883 "TI"
884 ],
885 "connector": "workday",
886 "status": "actif",
887 "region": "Lévis / province"
888 },
889 {
890 "id": "devimco",
891 "name": "Devimco Appartements",
892 "url": "https://devimco.com",
893 "careers_url": "https://devimco.bamboohr.com/careers",
894 "sectors": [
895 "Immobilier"
896 ],
897 "connector": "bamboohr",
898 "status": "actif",
899 "region": ""
900 },
901 {
902 "id": "dilitrust",
903 "name": "DiliTrust",
904 "url": "",
905 "careers_url": "https://jobs.lever.co/dilitrust",
906 "sectors": [
907 "TI",
908 "Juridique"
909 ],
910 "connector": "lever",
911 "status": "actif",
912 "region": "Montréal"
913 },
914 {
915 "id": "distro",
916 "name": "Distro",
917 "url": "",
918 "careers_url": "https://jobs.lever.co/distro",
919 "sectors": [
920 "Ventes",
921 "TI"
922 ],
923 "connector": "lever",
924 "status": "actif",
925 "region": "Montréal, Westmount"
926 },
927 {
928 "id": "domtar",
929 "name": "Domtar",
930 "url": "https://www.domtar.com",
931 "careers_url": "https://jobs.domtar.com",
932 "sectors": [
933 "Pâtes et papiers",
934 "Foresterie",
935 "Fabrication"
936 ],
937 "connector": "successfactors",
938 "status": "actif",
939 "region": "Montréal, Windsor, Lachine"
940 },
941 {
942 "id": "dulcedo",
943 "name": "Dulcedo Management",
944 "url": "",
945 "careers_url": "https://jobs.lever.co/dulcedo",
946 "sectors": [
947 "Mode",
948 "Gestion d'artistes"
949 ],
950 "connector": "lever",
951 "status": "actif",
952 "region": "Montréal"
953 },
954 {
955 "id": "edf_renouvelables",
956 "name": "EDF Renouvelables Canada",
957 "url": "https://www.edf-renouvelables.ca",
958 "careers_url": "https://cafrench-edf-re.icims.com/jobs/search?ss=1",
959 "sectors": [
960 "Énergie",
961 "Ingénierie"
962 ],
963 "connector": "icims",
964 "status": "actif",
965 "region": "Montréal"
966 },
967 {
968 "id": "emcocorporation",
969 "name": "EMCO",
970 "url": "",
971 "careers_url": "https://jobs.smartrecruiters.com/company/EMCOCorporation",
972 "sectors": [
973 "Distribution",
974 "Construction"
975 ],
976 "connector": "smartrecruiters",
977 "status": "actif",
978 "region": "Montréal, Québec, Laval"
979 },
980 {
981 "id": "eminent_valet",
982 "name": "Eminent Valet",
983 "url": "",
984 "careers_url": "https://apply.workable.com/eminent-valet",
985 "sectors": [
986 "Services"
987 ],
988 "connector": "workable",
989 "status": "actif",
990 "region": "Montréal"
991 },
992 {
993 "id": "eosaircraftinc",
994 "name": "EOS Aircraft",
995 "url": "",
996 "careers_url": "https://eosaircraftinc.bamboohr.com/careers",
997 "sectors": [
998 "Aéronautique"
999 ],
1000 "connector": "bamboohr",
1001 "status": "actif",
1002 "region": "Montréal"
1003 },
1004 {
1005 "id": "eq3_ltd",
1006 "name": "EQ3",
1007 "url": "",
1008 "careers_url": "https://eq3-ltd.breezy.hr",
1009 "sectors": [
1010 "Commerce de détail",
1011 "Meuble"
1012 ],
1013 "connector": "breezy",
1014 "status": "actif",
1015 "region": "Brossard, Laval, Montréal"
1016 },
1017 {
1018 "id": "eqbank",
1019 "name": "EQ Bank",
1020 "url": "",
1021 "careers_url": "https://jobs.lever.co/eqbank",
1022 "sectors": [
1023 "Finance"
1024 ],
1025 "connector": "lever",
1026 "status": "actif",
1027 "region": "Montréal"
1028 },
1029 {
1030 "id": "espresso_jobs",
1031 "name": "Espresso-Jobs",
1032 "url": "https://www.espresso-jobs.com",
1033 "careers_url": "https://www.espresso-jobs.com/emploi",
1034 "sectors": [
1035 "Portail",
1036 "TI",
1037 "Créatif"
1038 ],
1039 "connector": "portail",
1040 "status": "actif",
1041 "region": "Québec (province)",
1042 "aggregator": true
1043 },
1044 {
1045 "id": "evlo",
1046 "name": "EVLO (Hydro-Québec)",
1047 "url": "",
1048 "careers_url": "https://evlo.bamboohr.com/careers",
1049 "sectors": [
1050 "Énergie"
1051 ],
1052 "connector": "bamboohr",
1053 "status": "actif",
1054 "region": "Varennes"
1055 },
1056 {
1057 "id": "evolving_web",
1058 "name": "Evolving Web",
1059 "url": "",
1060 "careers_url": "https://apply.workable.com/evolving-web",
1061 "sectors": [
1062 "TI",
1063 "Web"
1064 ],
1065 "connector": "workable",
1066 "status": "actif",
1067 "region": "Montréal"
1068 },
1069 {
1070 "id": "exfo",
1071 "name": "EXFO",
1072 "url": "",
1073 "careers_url": "https://exfo.wd10.myworkdayjobs.com/exfo_careers",
1074 "sectors": [
1075 "TI",
1076 "Télécommunications"
1077 ],
1078 "connector": "workday",
1079 "status": "actif",
1080 "region": "Québec"
1081 },
1082 {
1083 "id": "exo",
1084 "name": "exo (transport métropolitain)",
1085 "url": "https://exo.quebec",
1086 "careers_url": "https://phh.tbe.taleo.net/phh04/ats/careers/v2/jobSearch?org=AMT&cws=39",
1087 "connector": "taleo_tbe",
1088 "sectors": [
1089 "Transport",
1090 "Secteur public"
1091 ],
1092 "region": "Montréal",
1093 "status": "actif"
1094 },
1095 {
1096 "id": "explorance",
1097 "name": "Explorance",
1098 "url": "",
1099 "careers_url": "https://explorance.bamboohr.com/careers",
1100 "sectors": [
1101 "TI",
1102 "SaaS"
1103 ],
1104 "connector": "bamboohr",
1105 "status": "actif",
1106 "region": "Montréal"
1107 },
1108 {
1109 "id": "fenetresconcept",
1110 "name": "Fenêtres Concept",
1111 "url": "https://fenetresconcept.com",
1112 "careers_url": "https://fenetresconcept.bamboohr.com/careers",
1113 "sectors": [
1114 "Production"
1115 ],
1116 "connector": "bamboohr",
1117 "status": "actif",
1118 "region": ""
1119 },
1120 {
1121 "id": "flare",
1122 "name": "Flare (cybersécurité)",
1123 "url": "",
1124 "careers_url": "https://flare.bamboohr.com/careers",
1125 "sectors": [
1126 "TI"
1127 ],
1128 "connector": "bamboohr",
1129 "status": "actif",
1130 "region": "Montréal"
1131 },
1132 {
1133 "id": "flinks",
1134 "name": "Flinks",
1135 "url": "",
1136 "careers_url": "https://apply.workable.com/flinks",
1137 "sectors": [
1138 "TI",
1139 "Fintech"
1140 ],
1141 "connector": "workable",
1142 "status": "actif",
1143 "region": "Montréal"
1144 },
1145 {
1146 "id": "fondsftq",
1147 "name": "Fonds de solidarité FTQ",
1148 "url": "https://fondsftq.com",
1149 "careers_url": "https://fondsftq.wd10.myworkdayjobs.com/sitecarriere_externe",
1150 "sectors": [],
1151 "connector": "workday",
1152 "status": "actif",
1153 "region": "Montréal"
1154 },
1155 {
1156 "id": "framestore",
1157 "name": "Framestore",
1158 "url": "",
1159 "careers_url": "https://framestore.recruitee.com",
1160 "sectors": [
1161 "Effets visuels",
1162 "Création"
1163 ],
1164 "connector": "recruitee",
1165 "status": "actif",
1166 "region": "Montréal"
1167 },
1168 {
1169 "id": "fruitdor",
1170 "name": "Fruit d'Or",
1171 "url": "https://fruitdor.ca",
1172 "careers_url": "https://recruiting.ultipro.ca/FRU5100FRUIT/JobBoard/91103632-8052-480e-a5b0-a6028d640577/",
1173 "connector": "ultipro",
1174 "sectors": [
1175 "Agroalimentaire",
1176 "Manufacturier"
1177 ],
1178 "region": "Centre-du-Québec",
1179 "status": "actif"
1180 },
1181 {
1182 "id": "fuse",
1183 "name": "Fuse Energy",
1184 "url": "",
1185 "careers_url": "https://jobs.ashbyhq.com/Fuse",
1186 "sectors": [
1187 "Énergie",
1188 "TI"
1189 ],
1190 "connector": "ashby",
1191 "status": "actif",
1192 "region": "Montréal"
1193 },
1194 {
1195 "id": "gameloft",
1196 "name": "Gameloft",
1197 "url": "https://www.gameloft.com",
1198 "careers_url": "https://jobs.smartrecruiters.com/company/gameloft",
1199 "sectors": [
1200 "Jeux vidéo"
1201 ],
1202 "connector": "smartrecruiters",
1203 "status": "actif",
1204 "region": "Montréal"
1205 },
1206 {
1207 "id": "gearboxquebec",
1208 "name": "Gearbox Studio Québec",
1209 "url": "",
1210 "careers_url": "https://job-boards.greenhouse.io/gearboxquebec",
1211 "sectors": [
1212 "Jeux vidéo"
1213 ],
1214 "connector": "greenhouse",
1215 "status": "actif",
1216 "region": "Montréal, Québec"
1217 },
1218 {
1219 "id": "genetec_inc",
1220 "name": "Genetec",
1221 "url": "https://genetec.com",
1222 "careers_url": "https://apply.workable.com/genetec-inc",
1223 "sectors": [],
1224 "connector": "workable",
1225 "status": "actif",
1226 "region": "Montréal"
1227 },
1228 {
1229 "id": "gfs",
1230 "name": "Service alimentaire Gordon",
1231 "url": "https://gfs.ca",
1232 "careers_url": "https://gfs.wd5.myworkdayjobs.com/usjobs-french",
1233 "sectors": [
1234 "manufacturier/commerce"
1235 ],
1236 "connector": "workday",
1237 "status": "actif",
1238 "region": ""
1239 },
1240 {
1241 "id": "gologic",
1242 "name": "GoLogic",
1243 "url": "",
1244 "careers_url": "https://jobs.smartrecruiters.com/company/gologic",
1245 "sectors": [
1246 "TI"
1247 ],
1248 "connector": "smartrecruiters",
1249 "status": "actif",
1250 "region": "Montréal"
1251 },
1252 {
1253 "id": "gorh",
1254 "name": "Go RH",
1255 "url": "",
1256 "careers_url": "https://jobs.lever.co/gorh",
1257 "sectors": [
1258 "Placement",
1259 "RH"
1260 ],
1261 "connector": "lever",
1262 "status": "actif",
1263 "region": "Montréal, Québec"
1264 },
1265 {
1266 "id": "groupecanam",
1267 "name": "Groupe Canam",
1268 "url": "",
1269 "careers_url": "https://jobs.smartrecruiters.com/company/groupecanam",
1270 "sectors": [
1271 "Production",
1272 "Construction"
1273 ],
1274 "connector": "smartrecruiters",
1275 "status": "actif",
1276 "region": "Saint-Georges"
1277 },
1278 {
1279 "id": "gsk",
1280 "name": "GSK",
1281 "url": "",
1282 "careers_url": "https://gsk.wd5.myworkdayjobs.com/GSKCareers",
1283 "sectors": [
1284 "Pharmaceutique"
1285 ],
1286 "connector": "workday",
1287 "status": "actif",
1288 "region": "Laval, Québec"
1289 },
1290 {
1291 "id": "guichet_emplois",
1292 "name": "Guichet-Emplois (Canada)",
1293 "url": "https://www.guichetemplois.gc.ca",
1294 "careers_url": "https://www.guichetemplois.gc.ca/jobsearch/rechercheemplois?fprov=QC",
1295 "sectors": [
1296 "Portail",
1297 "Tous secteurs"
1298 ],
1299 "connector": "portail",
1300 "status": "actif",
1301 "region": "Québec (province)",
1302 "aggregator": true
1303 },
1304 {
1305 "id": "gurussolutions",
1306 "name": "GURUS Solutions",
1307 "url": "",
1308 "careers_url": "https://job-boards.greenhouse.io/gurussolutions",
1309 "sectors": [
1310 "TI"
1311 ],
1312 "connector": "greenhouse",
1313 "status": "actif",
1314 "region": "Montréal"
1315 },
1316 {
1317 "id": "hec_montreal",
1318 "name": "HEC Montréal",
1319 "url": "https://www.hec.ca",
1320 "careers_url": "https://tre.tbe.taleo.net/tre01/ats/careers/v2/jobSearch?org=NYQEDG&cws=40",
1321 "connector": "taleo_tbe",
1322 "sectors": [
1323 "Éducation",
1324 "Administration"
1325 ],
1326 "region": "Montréal",
1327 "status": "actif"
1328 },
1329 {
1330 "id": "hec_montreal_profs",
1331 "name": "HEC Montréal — corps professoral",
1332 "url": "https://www.hec.ca",
1333 "careers_url": "https://tre.tbe.taleo.net/tre01/ats/careers/v2/jobSearch?org=NYQEDG&cws=41",
1334 "connector": "taleo_tbe",
1335 "sectors": [
1336 "Éducation",
1337 "Recherche"
1338 ],
1339 "region": "Montréal",
1340 "status": "actif"
1341 },
1342 {
1343 "id": "hopper",
1344 "name": "Hopper",
1345 "url": "",
1346 "careers_url": "https://jobs.ashbyhq.com/hopper",
1347 "sectors": [
1348 "TI",
1349 "Voyage"
1350 ],
1351 "connector": "ashby",
1352 "status": "actif",
1353 "region": "Montréal"
1354 },
1355 {
1356 "id": "hoyoverse",
1357 "name": "HoYoverse",
1358 "url": "",
1359 "careers_url": "https://jobs.smartrecruiters.com/company/hoyoverse",
1360 "sectors": [
1361 "Jeux vidéo"
1362 ],
1363 "connector": "smartrecruiters",
1364 "status": "actif",
1365 "region": "Montréal"
1366 },
1367 {
1368 "id": "huaweicanada",
1369 "name": "Huawei Canada",
1370 "url": "",
1371 "careers_url": "https://huaweicanada.recruitee.com",
1372 "sectors": [
1373 "TI",
1374 "Recherche"
1375 ],
1376 "connector": "recruitee",
1377 "status": "actif",
1378 "region": "Montréal"
1379 },
1380 {
1381 "id": "hydroquebec",
1382 "name": "Hydro-Québec",
1383 "url": "https://www.hydroquebec.com",
1384 "careers_url": "https://emploi.hydroquebec.com",
1385 "connector": "successfactors",
1386 "sectors": [
1387 "Énergie",
1388 "Génie",
1389 "TI",
1390 "Secteur public"
1391 ],
1392 "region": "Montréal, Québec (province)",
1393 "status": "actif"
1394 },
1395 {
1396 "id": "ia_groupe",
1397 "name": "iA Groupe financier",
1398 "url": "https://ia.ca",
1399 "careers_url": "https://ia.wd3.myworkdayjobs.com/Professional",
1400 "sectors": [
1401 "Assurance",
1402 "Finance",
1403 "TI"
1404 ],
1405 "connector": "workday",
1406 "status": "actif",
1407 "region": "Québec"
1408 },
1409 {
1410 "id": "industrious",
1411 "name": "Industrious",
1412 "url": "",
1413 "careers_url": "https://jobs.ashbyhq.com/industrious",
1414 "sectors": [
1415 "Immobilier",
1416 "Services"
1417 ],
1418 "connector": "ashby",
1419 "status": "actif",
1420 "region": "Montréal"
1421 },
1422 {
1423 "id": "ino_ca",
1424 "name": "Luqia (INO)",
1425 "url": "",
1426 "careers_url": "https://ino-ca.breezy.hr",
1427 "sectors": [
1428 "Optique-photonique",
1429 "Recherche"
1430 ],
1431 "connector": "breezy",
1432 "status": "actif",
1433 "region": "Québec"
1434 },
1435 {
1436 "id": "intactfc",
1437 "name": "Intact Corporation financière",
1438 "url": "",
1439 "careers_url": "https://intactfc.wd3.myworkdayjobs.com/Intactfc",
1440 "sectors": [
1441 "Assurance"
1442 ],
1443 "connector": "workday",
1444 "status": "actif",
1445 "region": "Montréal"
1446 },
1447 {
1448 "id": "investpsp",
1449 "name": "Investissements PSP",
1450 "url": "https://investpsp.com",
1451 "careers_url": "https://investpsp.wd3.myworkdayjobs.com/psp_careers",
1452 "sectors": [],
1453 "connector": "workday",
1454 "status": "actif",
1455 "region": "Montréal"
1456 },
1457 {
1458 "id": "investquebec",
1459 "name": "Investissement Québec",
1460 "url": "https://investquebec.com",
1461 "careers_url": "https://investquebec.wd10.myworkdayjobs.com/Ext",
1462 "sectors": [],
1463 "connector": "workday",
1464 "status": "actif",
1465 "region": "Québec"
1466 },
1467 {
1468 "id": "jexcelleinc",
1469 "name": "J'Excelle",
1470 "url": "",
1471 "careers_url": "https://jobs.smartrecruiters.com/company/JExcelleInc",
1472 "sectors": [
1473 "Placement"
1474 ],
1475 "connector": "smartrecruiters",
1476 "status": "actif",
1477 "region": "Montréal, Laval, Gatineau"
1478 },
1479 {
1480 "id": "jgrivesud",
1481 "name": "JG Rive-Sud (GFS)",
1482 "url": "https://jgfruitsetlegumes.com",
1483 "careers_url": "https://gfs.wd5.myworkdayjobs.com/jgrive-sud",
1484 "sectors": [
1485 "manufacturier/commerce"
1486 ],
1487 "connector": "workday",
1488 "status": "actif",
1489 "region": ""
1490 },
1491 {
1492 "id": "jobillico",
1493 "name": "Jobillico",
1494 "url": "https://www.jobillico.com",
1495 "careers_url": "https://www.jobillico.com/recherche-emploi",
1496 "sectors": [
1497 "Portail",
1498 "Tous secteurs"
1499 ],
1500 "connector": "portail",
1501 "status": "actif",
1502 "region": "Québec (province)",
1503 "aggregator": true
1504 },
1505 {
1506 "id": "korem",
1507 "name": "Korem",
1508 "url": "",
1509 "careers_url": "https://korem.bamboohr.com/careers",
1510 "sectors": [
1511 "TI"
1512 ],
1513 "connector": "bamboohr",
1514 "status": "actif",
1515 "region": "Québec"
1516 },
1517 {
1518 "id": "kpidigital",
1519 "name": "KPI Digital",
1520 "url": "",
1521 "careers_url": "https://kpidigital.bamboohr.com/careers",
1522 "sectors": [
1523 "TI",
1524 "Données"
1525 ],
1526 "connector": "bamboohr",
1527 "status": "actif",
1528 "region": "Montréal"
1529 },
1530 {
1531 "id": "kruger",
1532 "name": "Kruger",
1533 "url": "https://www.kruger.com",
1534 "careers_url": "https://tre.tbe.taleo.net/tre01/ats/careers/v2/jobSearch?org=KRUGER2&cws=76",
1535 "connector": "taleo_tbe",
1536 "sectors": [
1537 "Pâtes et papiers",
1538 "Manufacturier"
1539 ],
1540 "region": "Montréal, Trois-Rivières",
1541 "status": "actif"
1542 },
1543 {
1544 "id": "labelink",
1545 "name": "Produits Labelink",
1546 "url": "",
1547 "careers_url": "https://labelink.bamboohr.com/careers",
1548 "sectors": [
1549 "Impression",
1550 "Manufacture"
1551 ],
1552 "connector": "bamboohr",
1553 "status": "actif",
1554 "region": "Montréal, Laval, Granby"
1555 },
1556 {
1557 "id": "lamour",
1558 "name": "Lamour",
1559 "url": "",
1560 "careers_url": "https://apply.workable.com/lamour",
1561 "sectors": [
1562 "Textile",
1563 "Manufacture"
1564 ],
1565 "connector": "workable",
1566 "status": "actif",
1567 "region": "Montréal"
1568 },
1569 {
1570 "id": "lassonde",
1571 "name": "Industries Lassonde",
1572 "url": "https://www.lassonde.com",
1573 "careers_url": "https://www.lassonde.com/fr/emplois/",
1574 "sectors": [
1575 "Agroalimentaire",
1576 "Fabrication"
1577 ],
1578 "connector": "custom",
1579 "status": "actif",
1580 "region": "Rougemont, Montréal"
1581 },
1582 {
1583 "id": "levio",
1584 "name": "Levio",
1585 "url": "",
1586 "careers_url": "https://job-boards.greenhouse.io/levio",
1587 "sectors": [
1588 "TI"
1589 ],
1590 "connector": "greenhouse",
1591 "status": "actif",
1592 "region": "Québec, Montréal"
1593 },
1594 {
1595 "id": "lg2",
1596 "name": "LG2",
1597 "url": "",
1598 "careers_url": "https://lg2.recruitee.com",
1599 "sectors": [
1600 "Publicité",
1601 "Création"
1602 ],
1603 "connector": "recruitee",
1604 "status": "actif",
1605 "region": "Montréal, Québec"
1606 },
1607 {
1608 "id": "lidd",
1609 "name": "LIDD Consultants",
1610 "url": "",
1611 "careers_url": "https://apply.workable.com/lidd",
1612 "sectors": [
1613 "Conseil",
1614 "Logistique"
1615 ],
1616 "connector": "workable",
1617 "status": "actif",
1618 "region": "Montréal"
1619 },
1620 {
1621 "id": "lightspeedhq",
1622 "name": "Lightspeed Commerce",
1623 "url": "",
1624 "careers_url": "https://jobs.ashbyhq.com/lightspeedhq",
1625 "sectors": [
1626 "TI"
1627 ],
1628 "connector": "ashby",
1629 "status": "actif",
1630 "region": "Montréal"
1631 },
1632 {
1633 "id": "logisco",
1634 "name": "Logisco",
1635 "url": "https://logisco.com",
1636 "careers_url": "https://logisco.bamboohr.com/careers",
1637 "sectors": [
1638 "Immobilier"
1639 ],
1640 "connector": "bamboohr",
1641 "status": "actif",
1642 "region": ""
1643 },
1644 {
1645 "id": "lush",
1646 "name": "Lush Cosmétiques",
1647 "url": "",
1648 "careers_url": "https://job-boards.greenhouse.io/lush",
1649 "sectors": [
1650 "Commerce de détail"
1651 ],
1652 "connector": "greenhouse",
1653 "status": "actif",
1654 "region": "Montréal, Québec"
1655 },
1656 {
1657 "id": "mackenzie",
1658 "name": "Placements Mackenzie (Power/IGM)",
1659 "url": "https://www.placementsmackenzie.com",
1660 "careers_url": "https://careersfr-mackenzieinvestments.icims.com/jobs/search?ss=1",
1661 "connector": "icims",
1662 "sectors": [
1663 "Finance"
1664 ],
1665 "region": "Montréal",
1666 "status": "actif"
1667 },
1668 {
1669 "id": "maintainx",
1670 "name": "MaintainX",
1671 "url": "",
1672 "careers_url": "https://jobs.ashbyhq.com/maintainx",
1673 "sectors": [
1674 "TI",
1675 "SaaS"
1676 ],
1677 "connector": "ashby",
1678 "status": "actif",
1679 "region": "Montréal"
1680 },
1681 {
1682 "id": "manulife",
1683 "name": "Manuvie",
1684 "url": "",
1685 "careers_url": "https://manulife.wd3.myworkdayjobs.com/MFCJH_Jobs",
1686 "sectors": [
1687 "Assurance",
1688 "Finance"
1689 ],
1690 "connector": "workday",
1691 "status": "actif",
1692 "region": "Montréal"
1693 },
1694 {
1695 "id": "mattelinc",
1696 "name": "Mattel (Mega Bloks)",
1697 "url": "",
1698 "careers_url": "https://jobs.smartrecruiters.com/company/MattelInc",
1699 "sectors": [
1700 "Jouets",
1701 "Manufacture"
1702 ],
1703 "connector": "smartrecruiters",
1704 "status": "actif",
1705 "region": "Montréal"
1706 },
1707 {
1708 "id": "mccarthy_tetrault",
1709 "name": "McCarthy Tétrault",
1710 "url": "https://www.mccarthy.ca",
1711 "careers_url": "https://careers-mccarthyca.icims.com/jobs/search?ss=1",
1712 "sectors": [
1713 "Juridique",
1714 "Services professionnels"
1715 ],
1716 "connector": "icims",
1717 "status": "actif",
1718 "region": "Montréal, Québec"
1719 },
1720 {
1721 "id": "mcgill",
1722 "name": "Université McGill",
1723 "url": "https://www.mcgill.ca",
1724 "careers_url": "https://mcgill.wd3.myworkdayjobs.com/McGill_Careers",
1725 "sectors": [
1726 "Éducation",
1727 "Recherche",
1728 "Administration"
1729 ],
1730 "connector": "workday",
1731 "status": "actif",
1732 "region": "Montréal"
1733 },
1734 {
1735 "id": "mckesson",
1736 "name": "McKesson Canada",
1737 "url": "",
1738 "careers_url": "https://mckesson.wd3.myworkdayjobs.com/External_Careers",
1739 "sectors": [
1740 "Pharmaceutique",
1741 "Distribution"
1742 ],
1743 "connector": "workday",
1744 "status": "actif",
1745 "region": "Montréal"
1746 },
1747 {
1748 "id": "medfar",
1749 "name": "MEDFAR Solutions Cliniques",
1750 "url": "",
1751 "careers_url": "https://jobs.smartrecruiters.com/company/Medfar",
1752 "sectors": [
1753 "TI",
1754 "Santé"
1755 ],
1756 "connector": "smartrecruiters",
1757 "status": "actif",
1758 "region": "Montréal"
1759 },
1760 {
1761 "id": "medialo",
1762 "name": "Médialo",
1763 "url": "",
1764 "careers_url": "https://medialo.recruitee.com",
1765 "sectors": [
1766 "Médias"
1767 ],
1768 "connector": "recruitee",
1769 "status": "actif",
1770 "region": "Mont-Laurier, Terrebonne"
1771 },
1772 {
1773 "id": "messer_canada",
1774 "name": "Messer Canada",
1775 "url": "https://www.messer-ca.com",
1776 "careers_url": "https://recruiting.ultipro.com/MES1005MESR/JobBoard/dbd63926-d756-486f-a254-b2a6ede1d26e",
1777 "sectors": [
1778 "Gaz industriels",
1779 "Industrie"
1780 ],
1781 "connector": "ultipro",
1782 "status": "actif",
1783 "region": "Montréal, Québec, Saint-Georges"
1784 },
1785 {
1786 "id": "microhabitat",
1787 "name": "MicroHabitat",
1788 "url": "",
1789 "careers_url": "https://microhabitat.breezy.hr",
1790 "sectors": [
1791 "Agriculture urbaine"
1792 ],
1793 "connector": "breezy",
1794 "status": "actif",
1795 "region": "Montréal, Québec"
1796 },
1797 {
1798 "id": "mila_2",
1799 "name": "Mila — Institut québécois d'IA",
1800 "url": "https://mila.quebec",
1801 "careers_url": "https://apply.workable.com/mila-2",
1802 "sectors": [],
1803 "connector": "workable",
1804 "status": "actif",
1805 "region": "Montréal"
1806 },
1807 {
1808 "id": "mirego",
1809 "name": "Mirego",
1810 "url": "",
1811 "careers_url": "https://jobs.lever.co/mirego",
1812 "sectors": [
1813 "TI"
1814 ],
1815 "connector": "lever",
1816 "status": "actif",
1817 "region": "Québec, Montréal"
1818 },
1819 {
1820 "id": "mistplay",
1821 "name": "Mistplay",
1822 "url": "https://www.mistplay.com",
1823 "careers_url": "https://jobs.lever.co/mistplay",
1824 "sectors": [
1825 "TI",
1826 "Jeu mobile"
1827 ],
1828 "connector": "lever",
1829 "status": "actif",
1830 "region": "Montréal"
1831 },
1832 {
1833 "id": "mistral_ai",
1834 "name": "Mistral AI",
1835 "url": "",
1836 "careers_url": "https://jobs.ashbyhq.com/mistral.ai",
1837 "sectors": [
1838 "TI",
1839 "IA"
1840 ],
1841 "connector": "ashby",
1842 "status": "actif",
1843 "region": "Montréal"
1844 },
1845 {
1846 "id": "mitacs",
1847 "name": "Mitacs",
1848 "url": "",
1849 "careers_url": "https://mitacs.bamboohr.com/careers",
1850 "sectors": [
1851 "Recherche",
1852 "OBNL"
1853 ],
1854 "connector": "bamboohr",
1855 "status": "actif",
1856 "region": "Montréal"
1857 },
1858 {
1859 "id": "mitsubishi_hc_capital",
1860 "name": "Mitsubishi HC Capital Canada",
1861 "url": "https://www.mhccna.com",
1862 "careers_url": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=b3ef4f03-f8ff-4ded-80c8-6dd5c5a224f7&ccId=9200144510729_2&lang=fr_CA",
1863 "sectors": [
1864 "Finance",
1865 "Financement commercial"
1866 ],
1867 "connector": "adp",
1868 "status": "actif",
1869 "region": "Laval, Trois-Rivières"
1870 },
1871 {
1872 "id": "msi_gestion",
1873 "name": "MSI Gestion immobilière",
1874 "url": "https://www.msimmobiliers.com",
1875 "careers_url": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=47d4e792-26e5-471c-92ac-73c60131bab8&ccId=19000101_000001&lang=fr_CA",
1876 "sectors": [
1877 "Immobilier",
1878 "Gestion immobilière"
1879 ],
1880 "connector": "adp",
1881 "status": "actif",
1882 "region": "Montréal"
1883 },
1884 {
1885 "id": "mthreerecruitingportal",
1886 "name": "mthree",
1887 "url": "",
1888 "careers_url": "https://job-boards.greenhouse.io/mthreerecruitingportal",
1889 "sectors": [
1890 "TI",
1891 "Placement"
1892 ],
1893 "connector": "greenhouse",
1894 "status": "actif",
1895 "region": "Montréal"
1896 },
1897 {
1898 "id": "mxo",
1899 "name": "MXO",
1900 "url": "https://mxoconseil.com",
1901 "careers_url": "https://mxo.bamboohr.com/careers",
1902 "sectors": [
1903 "manufacturier/commerce"
1904 ],
1905 "connector": "bamboohr",
1906 "status": "actif",
1907 "region": ""
1908 },
1909 {
1910 "id": "national",
1911 "name": "NATIONAL",
1912 "url": "",
1913 "careers_url": "https://job-boards.greenhouse.io/national",
1914 "sectors": [
1915 "Relations publiques"
1916 ],
1917 "connector": "greenhouse",
1918 "status": "actif",
1919 "region": "Montréal"
1920 },
1921 {
1922 "id": "nexapp",
1923 "name": "Nexapp",
1924 "url": "",
1925 "careers_url": "https://nexapp.bamboohr.com/careers",
1926 "sectors": [
1927 "TI",
1928 "Web"
1929 ],
1930 "connector": "bamboohr",
1931 "status": "actif",
1932 "region": "Québec"
1933 },
1934 {
1935 "id": "no_saint",
1936 "name": "No Saint",
1937 "url": "",
1938 "careers_url": "https://jobs.ashbyhq.com/no-saint",
1939 "sectors": [
1940 "Création"
1941 ],
1942 "connector": "ashby",
1943 "status": "actif",
1944 "region": "Montréal"
1945 },
1946 {
1947 "id": "nomic",
1948 "name": "Nomic Bio",
1949 "url": "",
1950 "careers_url": "https://jobs.ashbyhq.com/nomic",
1951 "sectors": [
1952 "Biotechnologie"
1953 ],
1954 "connector": "ashby",
1955 "status": "actif",
1956 "region": "Montréal"
1957 },
1958 {
1959 "id": "nora_pharma",
1960 "name": "Nora Pharma",
1961 "url": "",
1962 "careers_url": "https://nora-pharma.breezy.hr",
1963 "sectors": [
1964 "Pharmaceutique"
1965 ],
1966 "connector": "breezy",
1967 "status": "actif",
1968 "region": "Laval, Montréal, Granby"
1969 },
1970 {
1971 "id": "nortera",
1972 "name": "Nortera",
1973 "url": "https://norterafoods.com",
1974 "careers_url": "https://recruiting.ultipro.ca/NOR5100NOFD/JobBoard/e3ce2e8a-b8fc-42c9-97cf-ea17f4d5dd1d/",
1975 "connector": "ultipro",
1976 "sectors": [
1977 "Agroalimentaire",
1978 "Manufacturier"
1979 ],
1980 "region": "Montérégie, Brossard",
1981 "status": "actif"
1982 },
1983 {
1984 "id": "northwestrubber",
1985 "name": "North West Rubber",
1986 "url": "",
1987 "careers_url": "https://northwestrubber.bamboohr.com/careers",
1988 "sectors": [
1989 "Manufacture"
1990 ],
1991 "connector": "bamboohr",
1992 "status": "actif",
1993 "region": "Sherbrooke"
1994 },
1995 {
1996 "id": "novipro",
1997 "name": "NOVIPRO",
1998 "url": "",
1999 "careers_url": "https://novipro.breezy.hr",
2000 "sectors": [
2001 "TI"
2002 ],
2003 "connector": "breezy",
2004 "status": "actif",
2005 "region": "Montréal, Longueuil"
2006 },
2007 {
2008 "id": "nuovophotography",
2009 "name": "Nuovo Photography",
2010 "url": "",
2011 "careers_url": "https://apply.workable.com/nuovophotography",
2012 "sectors": [
2013 "Photographie"
2014 ],
2015 "connector": "workable",
2016 "status": "actif",
2017 "region": "Montréal"
2018 },
2019 {
2020 "id": "omni_hotels_gestion",
2021 "name": "Omni Hôtel Mont-Royal",
2022 "url": "https://www.omnihotels.com/fr/hotels/montreal-mont-royal",
2023 "careers_url": "https://externalmanager-omnihotels.icims.com/jobs/search?ss=1",
2024 "sectors": [
2025 "Hôtellerie",
2026 "Gestion"
2027 ],
2028 "connector": "icims",
2029 "status": "actif",
2030 "region": "Montréal"
2031 },
2032 {
2033 "id": "omni_hotels_horaire",
2034 "name": "Omni Hôtel Mont-Royal",
2035 "url": "https://www.omnihotels.com/fr/hotels/montreal-mont-royal",
2036 "careers_url": "https://externalhourly-omnihotels.icims.com/jobs/search?ss=1",
2037 "sectors": [
2038 "Hôtellerie",
2039 "Restauration"
2040 ],
2041 "connector": "icims",
2042 "status": "actif",
2043 "region": "Montréal"
2044 },
2045 {
2046 "id": "onrunning",
2047 "name": "On Running",
2048 "url": "",
2049 "careers_url": "https://job-boards.greenhouse.io/onrunning",
2050 "sectors": [
2051 "Commerce de détail",
2052 "Sport"
2053 ],
2054 "connector": "greenhouse",
2055 "status": "actif",
2056 "region": "Montréal"
2057 },
2058 {
2059 "id": "opalrt",
2060 "name": "OPAL-RT Technologies",
2061 "url": "",
2062 "careers_url": "https://opalrt.bamboohr.com/careers",
2063 "sectors": [
2064 "TI",
2065 "Ingénierie"
2066 ],
2067 "connector": "bamboohr",
2068 "status": "actif",
2069 "region": "Montréal"
2070 },
2071 {
2072 "id": "osedea",
2073 "name": "OSEDEA",
2074 "url": "",
2075 "careers_url": "https://jobs.lever.co/osedea",
2076 "sectors": [
2077 "TI",
2078 "Web"
2079 ],
2080 "connector": "lever",
2081 "status": "actif",
2082 "region": "Montréal"
2083 },
2084 {
2085 "id": "osgoode_properties",
2086 "name": "Osgoode Properties",
2087 "url": "https://www.osgoodeproperties.com",
2088 "careers_url": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=c6a2e782-c971-4a6d-9a63-1365f5ce7d21&ccId=19000101_000001&lang=fr_CA",
2089 "connector": "adp",
2090 "sectors": [
2091 "Immobilier"
2092 ],
2093 "region": "Gatineau",
2094 "status": "actif"
2095 },
2096 {
2097 "id": "ott",
2098 "name": "OTT Financial",
2099 "url": "",
2100 "careers_url": "https://ott.bamboohr.com/careers",
2101 "sectors": [
2102 "Finance"
2103 ],
2104 "connector": "bamboohr",
2105 "status": "actif",
2106 "region": "Montréal"
2107 },
2108 {
2109 "id": "peoplecanfly",
2110 "name": "People Can Fly",
2111 "url": "",
2112 "careers_url": "https://jobs.smartrecruiters.com/company/PeopleCanFly",
2113 "sectors": [
2114 "Jeux vidéo"
2115 ],
2116 "connector": "smartrecruiters",
2117 "status": "actif",
2118 "region": "Montréal"
2119 },
2120 {
2121 "id": "petalmd",
2122 "name": "Petal",
2123 "url": "",
2124 "careers_url": "https://petalmd.recruitee.com",
2125 "sectors": [
2126 "TI",
2127 "Santé"
2128 ],
2129 "connector": "recruitee",
2130 "status": "actif",
2131 "region": "Montréal, Québec"
2132 },
2133 {
2134 "id": "pfizer",
2135 "name": "Pfizer Canada",
2136 "url": "",
2137 "careers_url": "https://pfizer.wd1.myworkdayjobs.com/PfizerCareers",
2138 "sectors": [
2139 "Pharmaceutique"
2140 ],
2141 "connector": "workday",
2142 "status": "actif",
2143 "region": "Kirkland"
2144 },
2145 {
2146 "id": "playmind",
2147 "name": "Playmind",
2148 "url": "",
2149 "careers_url": "https://jobs.smartrecruiters.com/company/playmind",
2150 "sectors": [
2151 "Jeux vidéo"
2152 ],
2153 "connector": "smartrecruiters",
2154 "status": "actif",
2155 "region": "Montréal"
2156 },
2157 {
2158 "id": "plusgrade",
2159 "name": "Plusgrade",
2160 "url": "https://plusgrade.com",
2161 "careers_url": "https://plusgrade.wd10.myworkdayjobs.com/Plusgrade_External_Site",
2162 "sectors": [],
2163 "connector": "workday",
2164 "status": "actif",
2165 "region": "Montréal"
2166 },
2167 {
2168 "id": "poka",
2169 "name": "Poka",
2170 "url": "https://www.poka.io",
2171 "careers_url": "https://job-boards.greenhouse.io/poka",
2172 "sectors": [
2173 "TI",
2174 "SaaS manufacturier"
2175 ],
2176 "connector": "greenhouse",
2177 "status": "actif",
2178 "region": "Québec"
2179 },
2180 {
2181 "id": "portagecybertech",
2182 "name": "Portage CyberTech",
2183 "url": "",
2184 "careers_url": "https://portagecybertech.bamboohr.com/careers",
2185 "sectors": [
2186 "TI",
2187 "Cybersécurité"
2188 ],
2189 "connector": "bamboohr",
2190 "status": "actif",
2191 "region": "Gatineau, Montréal"
2192 },
2193 {
2194 "id": "potloc",
2195 "name": "Potloc",
2196 "url": "https://www.potloc.com",
2197 "careers_url": "https://jobs.lever.co/Potloc",
2198 "sectors": [
2199 "TI",
2200 "Études de marché"
2201 ],
2202 "connector": "lever",
2203 "status": "actif",
2204 "region": "Montréal"
2205 },
2206 {
2207 "id": "pouletrouge",
2208 "name": "Poulet Rouge",
2209 "url": "https://poulet-rouge.ca",
2210 "careers_url": "https://pouletrouge.bamboohr.com/careers",
2211 "sectors": [
2212 "restauration"
2213 ],
2214 "connector": "bamboohr",
2215 "status": "actif",
2216 "region": "Montréal"
2217 },
2218 {
2219 "id": "produits_kruger",
2220 "name": "Produits Kruger",
2221 "url": "https://www.produitskruger.ca",
2222 "careers_url": "https://tre.tbe.taleo.net/tre01/ats/careers/v2/jobSearch?org=KRUGER2&cws=78",
2223 "connector": "taleo_tbe",
2224 "sectors": [
2225 "Manufacturier",
2226 "Biens de consommation"
2227 ],
2228 "region": "Gatineau, Crabtree",
2229 "status": "actif"
2230 },
2231 {
2232 "id": "promutuel",
2233 "name": "Promutuel Assurance",
2234 "url": "https://promutuelassurance.ca",
2235 "careers_url": "https://promutuel.wd3.myworkdayjobs.com/promutuel_carrieres",
2236 "sectors": [],
2237 "connector": "workday",
2238 "status": "actif",
2239 "region": "Québec"
2240 },
2241 {
2242 "id": "qsl",
2243 "name": "QSL",
2244 "url": "https://qsl.com",
2245 "careers_url": "https://jobs.smartrecruiters.com/company/qsl",
2246 "sectors": [],
2247 "connector": "smartrecruiters",
2248 "status": "actif",
2249 "region": "Québec"
2250 },
2251 {
2252 "id": "rcgt",
2253 "name": "Raymond Chabot Grant Thornton",
2254 "url": "https://rcgt.com",
2255 "careers_url": "https://rcgt.wd3.myworkdayjobs.com/External",
2256 "sectors": [],
2257 "connector": "workday",
2258 "status": "actif",
2259 "region": "Montréal"
2260 },
2261 {
2262 "id": "reitmanscanadalteltd",
2263 "name": "Reitmans",
2264 "url": "",
2265 "careers_url": "https://jobs.smartrecruiters.com/company/ReitmansCanadaLteLtd",
2266 "sectors": [
2267 "Commerce de détail",
2268 "Mode"
2269 ],
2270 "connector": "smartrecruiters",
2271 "status": "actif",
2272 "region": "Montréal, Québec, Laval"
2273 },
2274 {
2275 "id": "reseau_mieux_etre",
2276 "name": "Réseau Mieux-Être",
2277 "url": "",
2278 "careers_url": "https://reseau-mieux-etre.breezy.hr",
2279 "sectors": [
2280 "Santé"
2281 ],
2282 "connector": "breezy",
2283 "status": "actif",
2284 "region": "Montréal"
2285 },
2286 {
2287 "id": "rethinkcanada",
2288 "name": "Rethink",
2289 "url": "",
2290 "careers_url": "https://rethinkcanada.bamboohr.com/careers",
2291 "sectors": [
2292 "Publicité"
2293 ],
2294 "connector": "bamboohr",
2295 "status": "actif",
2296 "region": "Montréal"
2297 },
2298 {
2299 "id": "riotinto",
2300 "name": "Rio Tinto",
2301 "url": "",
2302 "careers_url": "https://riotinto.wd3.myworkdayjobs.com/riotinto_careers",
2303 "sectors": [
2304 "Mines"
2305 ],
2306 "connector": "workday",
2307 "status": "actif",
2308 "region": "Saguenay, Montréal"
2309 },
2310 {
2311 "id": "robotiq",
2312 "name": "Robotiq",
2313 "url": "",
2314 "careers_url": "https://robotiq.bamboohr.com/careers",
2315 "sectors": [
2316 "Robotique",
2317 "Manufacture"
2318 ],
2319 "connector": "bamboohr",
2320 "status": "actif",
2321 "region": "Lévis"
2322 },
2323 {
2324 "id": "rodeofx",
2325 "name": "Rodeo FX",
2326 "url": "",
2327 "careers_url": "https://jobs.smartrecruiters.com/company/RodeoFX",
2328 "sectors": [
2329 "Effets visuels",
2330 "Création"
2331 ],
2332 "connector": "smartrecruiters",
2333 "status": "actif",
2334 "region": "Montréal, Québec"
2335 },
2336 {
2337 "id": "rtc_quebec",
2338 "name": "Réseau de transport de la Capitale",
2339 "url": "https://www.rtcquebec.ca",
2340 "careers_url": "https://rtc.njoyn.com/CGI/xweb/xweb.asp?clid=23009&page=joblisting&lang=2",
2341 "sectors": [
2342 "Transport collectif",
2343 "Secteur public"
2344 ],
2345 "connector": "njoyn",
2346 "status": "actif",
2347 "region": "Québec"
2348 },
2349 {
2350 "id": "samsara",
2351 "name": "Samsara",
2352 "url": "",
2353 "careers_url": "https://job-boards.greenhouse.io/samsara",
2354 "sectors": [
2355 "TI",
2356 "IoT"
2357 ],
2358 "connector": "greenhouse",
2359 "status": "actif",
2360 "region": "Montréal"
2361 },
2362 {
2363 "id": "sante_montreal",
2364 "name": "Santé Québec — Montréal",
2365 "url": "https://santemontreal.ca",
2366 "careers_url": "https://emplois.santemontreal.qc.ca/CL3/xweb/xweb.asp?clid=54327&page=joblisting&lang=2",
2367 "sectors": [
2368 "Santé",
2369 "Services sociaux",
2370 "Secteur public"
2371 ],
2372 "connector": "njoyn",
2373 "status": "actif",
2374 "region": "Montréal"
2375 },
2376 {
2377 "id": "sante_quebec",
2378 "name": "Santé Québec",
2379 "url": "https://sante.quebec",
2380 "careers_url": "https://emplois.sante.quebec",
2381 "sectors": [
2382 "Santé",
2383 "Secteur public",
2384 "Administration"
2385 ],
2386 "connector": "digitalrecruiters",
2387 "status": "actif",
2388 "region": "Montréal, Québec"
2389 },
2390 {
2391 "id": "saputo",
2392 "name": "Saputo",
2393 "url": "https://www.saputo.com",
2394 "careers_url": "https://saputo.wd5.myworkdayjobs.com/Saputo_External_Careers",
2395 "sectors": [
2396 "Agroalimentaire",
2397 "Production"
2398 ],
2399 "connector": "workday",
2400 "status": "actif",
2401 "region": "Montréal / province"
2402 },
2403 {
2404 "id": "scalia",
2405 "name": "Propriétés Scalia",
2406 "url": "",
2407 "careers_url": "https://scalia.bamboohr.com/careers",
2408 "sectors": [
2409 "Immobilier"
2410 ],
2411 "connector": "bamboohr",
2412 "status": "actif",
2413 "region": "Montréal, Anjou"
2414 },
2415 {
2416 "id": "scottsmiraclegro",
2417 "name": "Scotts Canada (Fafard)",
2418 "url": "https://scottsmiraclegro.com",
2419 "careers_url": "https://scottsmiraclegro.wd5.myworkdayjobs.com/SMGExternal",
2420 "sectors": [
2421 "manufacturier/commerce"
2422 ],
2423 "connector": "workday",
2424 "status": "actif",
2425 "region": ""
2426 },
2427 {
2428 "id": "sepaq",
2429 "name": "Sépaq",
2430 "url": "https://www.sepaq.com",
2431 "careers_url": "https://tre.tbe.taleo.net/tre01/ats/careers/v2/jobSearch?org=SEPAQ&cws=37",
2432 "connector": "taleo_tbe",
2433 "sectors": [
2434 "Tourisme",
2435 "Plein air",
2436 "Secteur public"
2437 ],
2438 "region": "Québec (province)",
2439 "status": "actif"
2440 },
2441 {
2442 "id": "servicenow",
2443 "name": "ServiceNow",
2444 "url": "",
2445 "careers_url": "https://jobs.smartrecruiters.com/company/ServiceNow",
2446 "sectors": [
2447 "TI",
2448 "SaaS"
2449 ],
2450 "connector": "smartrecruiters",
2451 "status": "actif",
2452 "region": "Montréal"
2453 },
2454 {
2455 "id": "siainnovationsinc",
2456 "name": "SIA Innovations",
2457 "url": "",
2458 "careers_url": "https://job-boards.greenhouse.io/siainnovationsinc",
2459 "sectors": [
2460 "TI"
2461 ],
2462 "connector": "greenhouse",
2463 "status": "actif",
2464 "region": "Montréal"
2465 },
2466 {
2467 "id": "sideinc",
2468 "name": "Side (PTW)",
2469 "url": "",
2470 "careers_url": "https://apply.workable.com/sideinc",
2471 "sectors": [
2472 "Jeux vidéo"
2473 ],
2474 "connector": "workable",
2475 "status": "actif",
2476 "region": "Montréal, Québec"
2477 },
2478 {
2479 "id": "sidlee",
2480 "name": "Sid Lee",
2481 "url": "",
2482 "careers_url": "https://job-boards.greenhouse.io/sidlee",
2483 "sectors": [
2484 "Marketing",
2485 "Création"
2486 ],
2487 "connector": "greenhouse",
2488 "status": "actif",
2489 "region": "Montréal"
2490 },
2491 {
2492 "id": "sleeman",
2493 "name": "Brasseries Sleeman (Unibroue)",
2494 "url": "https://unibroue.com",
2495 "careers_url": "https://sleeman.wd3.myworkdayjobs.com/SBL",
2496 "sectors": [
2497 "manufacturier/commerce"
2498 ],
2499 "connector": "workday",
2500 "status": "actif",
2501 "region": ""
2502 },
2503 {
2504 "id": "sogeclair",
2505 "name": "SOGECLAIR",
2506 "url": "",
2507 "careers_url": "https://apply.workable.com/sogeclair",
2508 "sectors": [
2509 "Aéronautique",
2510 "Ingénierie"
2511 ],
2512 "connector": "workable",
2513 "status": "actif",
2514 "region": "Montréal, Mirabel, Laval"
2515 },
2516 {
2517 "id": "sparkgrid",
2518 "name": "Sparkgrid",
2519 "url": "",
2520 "careers_url": "https://jobs.smartrecruiters.com/company/Sparkgrid",
2521 "sectors": [
2522 "TI"
2523 ],
2524 "connector": "smartrecruiters",
2525 "status": "actif",
2526 "region": "Montréal"
2527 },
2528 {
2529 "id": "spiria",
2530 "name": "Spiria",
2531 "url": "",
2532 "careers_url": "https://jobs.lever.co/spiria",
2533 "sectors": [
2534 "TI"
2535 ],
2536 "connector": "lever",
2537 "status": "actif",
2538 "region": "Montréal, Gatineau"
2539 },
2540 {
2541 "id": "spreedly",
2542 "name": "Spreedly",
2543 "url": "",
2544 "careers_url": "https://jobs.lever.co/spreedly",
2545 "sectors": [
2546 "TI",
2547 "Fintech"
2548 ],
2549 "connector": "lever",
2550 "status": "actif",
2551 "region": "Montréal"
2552 },
2553 {
2554 "id": "squeezestudio",
2555 "name": "Squeeze Studio Animation",
2556 "url": "",
2557 "careers_url": "https://squeezestudio.recruitee.com",
2558 "sectors": [
2559 "Animation",
2560 "Création"
2561 ],
2562 "connector": "recruitee",
2563 "status": "actif",
2564 "region": "Montréal, Québec"
2565 },
2566 {
2567 "id": "stelpro",
2568 "name": "Stelpro",
2569 "url": "",
2570 "careers_url": "https://jobs.smartrecruiters.com/company/stelpro",
2571 "sectors": [
2572 "Production"
2573 ],
2574 "connector": "smartrecruiters",
2575 "status": "actif",
2576 "region": "Saint-Bruno-de-Montarville"
2577 },
2578 {
2579 "id": "stl_laval",
2580 "name": "Société de transport de Laval",
2581 "url": "https://www.stlaval.ca",
2582 "careers_url": "https://lavaltransit.njoyn.com/CL2/xweb/xweb.asp?clid=60406&page=joblisting&lang=2",
2583 "sectors": [
2584 "Transport collectif",
2585 "Secteur public"
2586 ],
2587 "connector": "njoyn",
2588 "status": "actif",
2589 "region": "Laval"
2590 },
2591 {
2592 "id": "suncor",
2593 "name": "Suncor Énergie",
2594 "url": "https://suncor.com",
2595 "careers_url": "https://suncor.wd1.myworkdayjobs.com/Suncor_External",
2596 "sectors": [],
2597 "connector": "workday",
2598 "status": "actif",
2599 "region": "Montréal"
2600 },
2601 {
2602 "id": "sunlife",
2603 "name": "Sun Life",
2604 "url": "",
2605 "careers_url": "https://sunlife.wd3.myworkdayjobs.com/Experienced-Jobs",
2606 "sectors": [
2607 "Assurance",
2608 "Finance"
2609 ],
2610 "connector": "workday",
2611 "status": "actif",
2612 "region": "Montréal, Québec"
2613 },
2614 {
2615 "id": "surmesur",
2616 "name": "Surmesur",
2617 "url": "",
2618 "careers_url": "https://surmesur.bamboohr.com/careers",
2619 "sectors": [
2620 "Mode",
2621 "Commerce de détail"
2622 ],
2623 "connector": "bamboohr",
2624 "status": "actif",
2625 "region": "Québec, Laval"
2626 },
2627 {
2628 "id": "sweat_pants_agency",
2629 "name": "Sweat Pants Agency",
2630 "url": "",
2631 "careers_url": "https://apply.workable.com/sweat-pants-agency",
2632 "sectors": [
2633 "Marketing"
2634 ],
2635 "connector": "workable",
2636 "status": "actif",
2637 "region": "Montréal, Laval, Québec"
2638 },
2639 {
2640 "id": "talan",
2641 "name": "Talan",
2642 "url": "",
2643 "careers_url": "https://jobs.smartrecruiters.com/company/Talan",
2644 "sectors": [
2645 "TI",
2646 "Conseil"
2647 ],
2648 "connector": "smartrecruiters",
2649 "status": "actif",
2650 "region": "Montréal"
2651 },
2652 {
2653 "id": "talsom",
2654 "name": "Talsom",
2655 "url": "",
2656 "careers_url": "https://jobs.smartrecruiters.com/company/talsom",
2657 "sectors": [
2658 "TI"
2659 ],
2660 "connector": "smartrecruiters",
2661 "status": "actif",
2662 "region": "Montréal"
2663 },
2664 {
2665 "id": "tandemlaunch",
2666 "name": "TandemLaunch",
2667 "url": "https://www.tandemlaunch.com",
2668 "careers_url": "https://boards.greenhouse.io/tandemlaunch",
2669 "sectors": [
2670 "TI",
2671 "Deep tech"
2672 ],
2673 "connector": "greenhouse",
2674 "status": "actif",
2675 "region": "Montréal"
2676 },
2677 {
2678 "id": "td",
2679 "name": "Groupe Banque TD",
2680 "url": "",
2681 "careers_url": "https://td.wd3.myworkdayjobs.com/TD_Bank_Careers",
2682 "sectors": [
2683 "Finance"
2684 ],
2685 "connector": "workday",
2686 "status": "actif",
2687 "region": "Montréal, Québec"
2688 },
2689 {
2690 "id": "techo_bloc",
2691 "name": "Techo-Bloc",
2692 "url": "",
2693 "careers_url": "https://jobs.smartrecruiters.com/company/techo-bloc",
2694 "sectors": [
2695 "Manufacture",
2696 "Aménagement"
2697 ],
2698 "connector": "smartrecruiters",
2699 "status": "actif",
2700 "region": "Chambly, Saint-Hubert"
2701 },
2702 {
2703 "id": "tecsys",
2704 "name": "Tecsys",
2705 "url": "",
2706 "careers_url": "https://apply.workable.com/tecsys",
2707 "sectors": [
2708 "TI",
2709 "Logistique"
2710 ],
2711 "connector": "workable",
2712 "status": "actif",
2713 "region": "Montréal"
2714 },
2715 {
2716 "id": "tehora",
2717 "name": "TEHORA",
2718 "url": "",
2719 "careers_url": "https://apply.workable.com/tehora",
2720 "sectors": [
2721 "Ingénierie",
2722 "TI",
2723 "Conseil"
2724 ],
2725 "connector": "workable",
2726 "status": "actif",
2727 "region": "Montréal, Québec, Gatineau"
2728 },
2729 {
2730 "id": "tetrix",
2731 "name": "Tetrix",
2732 "url": "",
2733 "careers_url": "https://jobs.ashbyhq.com/tetrix",
2734 "sectors": [
2735 "TI"
2736 ],
2737 "connector": "ashby",
2738 "status": "actif",
2739 "region": "Montréal"
2740 },
2741 {
2742 "id": "toonboom",
2743 "name": "Toon Boom Animation",
2744 "url": "",
2745 "careers_url": "https://toonboom.bamboohr.com/careers",
2746 "sectors": [
2747 "Animation",
2748 "TI"
2749 ],
2750 "connector": "bamboohr",
2751 "status": "actif",
2752 "region": "Montréal"
2753 },
2754 {
2755 "id": "transatat1",
2756 "name": "Transat A.T.",
2757 "url": "",
2758 "careers_url": "https://jobs.smartrecruiters.com/company/TransatAT1",
2759 "sectors": [
2760 "Voyage",
2761 "Aérien"
2762 ],
2763 "connector": "smartrecruiters",
2764 "status": "actif",
2765 "region": "Montréal"
2766 },
2767 {
2768 "id": "triotech",
2769 "name": "Triotech",
2770 "url": "",
2771 "careers_url": "https://triotech.bamboohr.com/careers",
2772 "sectors": [
2773 "Divertissement",
2774 "Manufacture"
2775 ],
2776 "connector": "bamboohr",
2777 "status": "actif",
2778 "region": "Joliette, Montréal"
2779 },
2780 {
2781 "id": "trois_brasseurs",
2782 "name": "3 Brasseurs Canada",
2783 "url": "",
2784 "careers_url": "https://3brasseurs.breezy.hr",
2785 "sectors": [
2786 "Restauration"
2787 ],
2788 "connector": "breezy",
2789 "status": "actif",
2790 "region": "Montréal, Laval, Brossard"
2791 },
2792 {
2793 "id": "tsmg",
2794 "name": "TSMG",
2795 "url": "",
2796 "careers_url": "https://jobs.lever.co/tsmg",
2797 "sectors": [
2798 "Placement",
2799 "Télécoms"
2800 ],
2801 "connector": "lever",
2802 "status": "actif",
2803 "region": "Montréal, Québec"
2804 },
2805 {
2806 "id": "ubisoft",
2807 "name": "Ubisoft",
2808 "url": "https://www.ubisoft.com",
2809 "careers_url": "https://jobs.smartrecruiters.com/company/Ubisoft2",
2810 "sectors": [
2811 "Jeux vidéo",
2812 "TI",
2813 "Création"
2814 ],
2815 "connector": "smartrecruiters",
2816 "status": "actif",
2817 "region": "Montréal / Québec / Sherbrooke"
2818 },
2819 {
2820 "id": "unit8",
2821 "name": "Unit8",
2822 "url": "",
2823 "careers_url": "https://apply.workable.com/unit8",
2824 "sectors": [
2825 "TI",
2826 "Données"
2827 ],
2828 "connector": "workable",
2829 "status": "actif",
2830 "region": "Montréal"
2831 },
2832 {
2833 "id": "usmobile",
2834 "name": "US Mobile",
2835 "url": "",
2836 "careers_url": "https://jobs.lever.co/USMobile",
2837 "sectors": [
2838 "Télécoms"
2839 ],
2840 "connector": "lever",
2841 "status": "actif",
2842 "region": "Montréal"
2843 },
2844 {
2845 "id": "vaco",
2846 "name": "Vaco",
2847 "url": "",
2848 "careers_url": "https://job-boards.greenhouse.io/vaco",
2849 "sectors": [
2850 "Placement",
2851 "Conseil"
2852 ],
2853 "connector": "greenhouse",
2854 "status": "actif",
2855 "region": "Montréal"
2856 },
2857 {
2858 "id": "valsoft_corp",
2859 "name": "Valsoft",
2860 "url": "",
2861 "careers_url": "https://apply.workable.com/valsoft-corp",
2862 "sectors": [
2863 "TI",
2864 "Logiciel"
2865 ],
2866 "connector": "workable",
2867 "status": "actif",
2868 "region": "Montréal"
2869 },
2870 {
2871 "id": "valtech",
2872 "name": "Valtech",
2873 "url": "",
2874 "careers_url": "https://job-boards.greenhouse.io/valtech",
2875 "sectors": [
2876 "TI"
2877 ],
2878 "connector": "greenhouse",
2879 "status": "actif",
2880 "region": "Montréal"
2881 },
2882 {
2883 "id": "vaporus_inc",
2884 "name": "Vaporus",
2885 "url": "",
2886 "careers_url": "https://vaporus-inc.breezy.hr",
2887 "sectors": [
2888 "Commerce de détail"
2889 ],
2890 "connector": "breezy",
2891 "status": "actif",
2892 "region": "Montréal"
2893 },
2894 {
2895 "id": "vasco",
2896 "name": "Vasco",
2897 "url": "",
2898 "careers_url": "https://jobs.ashbyhq.com/vasco",
2899 "sectors": [
2900 "TI"
2901 ],
2902 "connector": "ashby",
2903 "status": "actif",
2904 "region": "Montréal"
2905 },
2906 {
2907 "id": "venturemedia",
2908 "name": "Venture Media",
2909 "url": "",
2910 "careers_url": "https://jobs.smartrecruiters.com/company/VentureMedia",
2911 "sectors": [
2912 "Médias"
2913 ],
2914 "connector": "smartrecruiters",
2915 "status": "actif",
2916 "region": "Montréal"
2917 },
2918 {
2919 "id": "vicpark",
2920 "name": "Victoria Park Medispa",
2921 "url": "",
2922 "careers_url": "https://vicpark.bamboohr.com/careers",
2923 "sectors": [
2924 "Santé",
2925 "Esthétique"
2926 ],
2927 "connector": "bamboohr",
2928 "status": "actif",
2929 "region": "Montréal, Gatineau, Granby"
2930 },
2931 {
2932 "id": "videotron",
2933 "name": "Vidéotron",
2934 "url": "https://videotron.com",
2935 "careers_url": "https://jobs.smartrecruiters.com/company/videotron",
2936 "sectors": [],
2937 "connector": "smartrecruiters",
2938 "status": "actif",
2939 "region": "Montréal"
2940 },
2941 {
2942 "id": "ville_gatineau",
2943 "name": "Ville de Gatineau",
2944 "url": "https://www.gatineau.ca",
2945 "careers_url": "https://gatineau.njoyn.com/CL2/xweb/xweb.asp?clid=27082&page=joblisting&lang=2",
2946 "sectors": [
2947 "Municipal",
2948 "Secteur public"
2949 ],
2950 "connector": "njoyn",
2951 "status": "actif",
2952 "region": "Gatineau"
2953 },
2954 {
2955 "id": "ville_terrebonne",
2956 "name": "Ville de Terrebonne",
2957 "url": "https://www.ville.terrebonne.qc.ca",
2958 "careers_url": "https://clients.njoyn.com/cl4/xweb/xweb.asp?clid=71764&page=joblisting&lang=2",
2959 "sectors": [
2960 "Municipal",
2961 "Secteur public"
2962 ],
2963 "connector": "njoyn",
2964 "status": "actif",
2965 "region": "Terrebonne"
2966 },
2967 {
2968 "id": "vmlcanadaen",
2969 "name": "VML Canada",
2970 "url": "",
2971 "careers_url": "https://job-boards.greenhouse.io/vmlcanadaen",
2972 "sectors": [
2973 "Publicité"
2974 ],
2975 "connector": "greenhouse",
2976 "status": "actif",
2977 "region": "Montréal"
2978 },
2979 {
2980 "id": "vo2_group",
2981 "name": "VO2 Group",
2982 "url": "",
2983 "careers_url": "https://jobs.lever.co/vo2-group",
2984 "sectors": [
2985 "TI",
2986 "Conseil"
2987 ],
2988 "connector": "lever",
2989 "status": "actif",
2990 "region": "Montréal"
2991 },
2992 {
2993 "id": "vooban",
2994 "name": "Vooban",
2995 "url": "",
2996 "careers_url": "https://job-boards.greenhouse.io/vooban",
2997 "sectors": [
2998 "TI"
2999 ],
3000 "connector": "greenhouse",
3001 "status": "actif",
3002 "region": "Québec"
3003 },
3004 {
3005 "id": "vosker",
3006 "name": "Vosker",
3007 "url": "",
3008 "careers_url": "https://jobs.smartrecruiters.com/company/vosker",
3009 "sectors": [
3010 "TI",
3011 "Production"
3012 ],
3013 "connector": "smartrecruiters",
3014 "status": "actif",
3015 "region": "Victoriaville"
3016 },
3017 {
3018 "id": "voxdata",
3019 "name": "VOXDATA",
3020 "url": "",
3021 "careers_url": "https://voxdata.breezy.hr",
3022 "sectors": [
3023 "Centre d'appels"
3024 ],
3025 "connector": "breezy",
3026 "status": "actif",
3027 "region": "Montréal"
3028 },
3029 {
3030 "id": "walmart",
3031 "name": "Walmart Canada",
3032 "url": "https://walmart.ca",
3033 "careers_url": "https://walmart.wd504.myworkdayjobs.com/WalmartExternal",
3034 "sectors": [],
3035 "connector": "workday",
3036 "status": "actif",
3037 "region": "Montréal"
3038 },
3039 {
3040 "id": "xplornet",
3041 "name": "Xplornet",
3042 "url": "",
3043 "careers_url": "https://jobs.smartrecruiters.com/company/XPLORNET",
3044 "sectors": [
3045 "Télécoms"
3046 ],
3047 "connector": "smartrecruiters",
3048 "status": "actif",
3049 "region": "Montréal"
3050 },
3051 {
3052 "id": "xsolla",
3053 "name": "Xsolla",
3054 "url": "",
3055 "careers_url": "https://jobs.lever.co/xsolla",
3056 "sectors": [
3057 "TI",
3058 "Jeux vidéo"
3059 ],
3060 "connector": "lever",
3061 "status": "actif",
3062 "region": "Montréal"
3063 },
3064 {
3065 "id": "youset",
3066 "name": "YouSet",
3067 "url": "",
3068 "careers_url": "https://youset.breezy.hr",
3069 "sectors": [
3070 "Assurance",
3071 "TI"
3072 ],
3073 "connector": "breezy",
3074 "status": "actif",
3075 "region": "Montréal"
3076 },
3077 {
3078 "id": "ziptrekeco",
3079 "name": "Ziptrek Tremblant",
3080 "url": "https://tremblant.ziptrek.com",
3081 "careers_url": "https://ziptrekeco.bamboohr.com/careers",
3082 "sectors": [
3083 "manufacturier/commerce"
3084 ],
3085 "connector": "bamboohr",
3086 "status": "actif",
3087 "region": ""
3088 }
3089 ]
2 + "_meta": {
3 + "project": "Job·Ka — Groupe KA",
4 + "author": "Simon-Pierre Boucher <contact@spboucher.ai>",
5 + "role": "Registre descriptif des sources (alimente la page Sources)",
6 + "updated": "2026-08-22",
7 + "counts": {
8 + "employeurs_directs": 350,
9 + "plateformes_ats": 20,
10 + "portails": 3,
11 + "depot_direct": 1,
12 + "reseaux_multi_employeurs": 1
13 + },
14 + "ats": [
15 + "adp",
16 + "ashby",
17 + "bamboohr",
18 + "breezy",
19 + "dayforce",
20 + "digitalrecruiters",
21 + "greenhouse",
22 + "icims",
23 + "lever",
24 + "njoyn",
25 + "recruitee",
26 + "smartrecruiters",
27 + "successfactors",
28 + "taleo",
29 + "taleo_tbe",
30 + "ultipro",
31 + "workable",
32 + "workday",
33 + "workland",
34 + "wpjobmanager"
35 + ],
36 + "docs": "docs/connecteurs/INDEX.md (fiches générées par scripts/gen_connector_docs.py) ; conformité : docs/CONFORMITE.md"
37 + },
38 + "sources": [
39 + {
40 + "id": "adeleexpressfr",
41 + "name": "Adèle Express",
42 + "url": "",
43 + "careers_url": "https://adeleexpressfr.recruitee.com",
44 + "sectors": [
45 + "Transport"
46 + ],
47 + "connector": "recruitee",
48 + "status": "actif",
49 + "region": "Montréal"
50 + },
51 + {
52 + "id": "adi_albert_davidson_industries",
53 + "name": "ADI - Albert Davidson Industries",
54 + "url": "",
55 + "careers_url": "https://adi-albert-davidson-industries.breezy.hr",
56 + "sectors": [
57 + "Manufacture"
58 + ],
59 + "connector": "breezy",
60 + "status": "actif",
61 + "region": "Pointe-Claire"
62 + },
63 + {
64 + "id": "agnico_eagle",
65 + "name": "Agnico Eagle Mines",
66 + "url": "https://www.agnicoeagle.com",
67 + "careers_url": "https://agnicoeagle.taleo.net/careersection/2/jobsearch.ftl?lang=fr",
68 + "sectors": [
69 + "Mines",
70 + "Ingénierie",
71 + "Métiers spécialisés"
72 + ],
73 + "connector": "taleo",
74 + "status": "actif",
75 + "region": "Abitibi-Témiscamingue, Malartic, Rouyn-Noranda"
76 + },
77 + {
78 + "id": "agropur",
79 + "name": "Agropur",
80 + "url": "https://www.agropur.com",
81 + "careers_url": "https://agropur.wd3.myworkdayjobs.com/Agropur_Careers",
82 + "sectors": [
83 + "Agroalimentaire",
84 + "Production"
85 + ],
86 + "connector": "workday",
87 + "status": "actif",
88 + "region": "Longueuil / province"
89 + },
90 + {
91 + "id": "airbus",
92 + "name": "Airbus Canada",
93 + "url": "https://airbus.com",
94 + "careers_url": "https://ag.wd3.myworkdayjobs.com/Airbus",
95 + "sectors": [],
96 + "connector": "workday",
97 + "status": "actif",
98 + "region": "Mirabel"
99 + },
100 + {
101 + "id": "ajwalter",
102 + "name": "AJ Walter Aviation",
103 + "url": "",
104 + "careers_url": "https://ajwalter.recruitee.com",
105 + "sectors": [
106 + "Aéronautique"
107 + ],
108 + "connector": "recruitee",
109 + "status": "actif",
110 + "region": "Montréal"
111 + },
112 + {
113 + "id": "alayacare",
114 + "name": "AlayaCare",
115 + "url": "https://www.alayacare.com",
116 + "careers_url": "https://job-boards.greenhouse.io/alayacare",
117 + "sectors": [
118 + "TI",
119 + "Santé"
120 + ],
121 + "connector": "greenhouse",
122 + "status": "actif",
123 + "region": "Montréal"
124 + },
125 + {
126 + "id": "alcoa",
127 + "name": "Alcoa Canada",
128 + "url": "https://alcoa.com",
129 + "careers_url": "https://alcoa.wd5.myworkdayjobs.com/Careers",
130 + "sectors": [],
131 + "connector": "workday",
132 + "status": "actif",
133 + "region": "Baie-Comeau"
134 + },
135 + {
136 + "id": "alimentiv_2",
137 + "name": "Alimentiv",
138 + "url": "",
139 + "careers_url": "https://jobs.lever.co/alimentiv-2",
140 + "sectors": [
141 + "Recherche clinique"
142 + ],
143 + "connector": "lever",
144 + "status": "actif",
145 + "region": "Montréal, Québec"
146 + },
147 + {
148 + "id": "alphanumeric_systems",
149 + "name": "Alphanumeric Systems",
150 + "url": "",
151 + "careers_url": "https://alphanumeric-systems.breezy.hr",
152 + "sectors": [
153 + "TI",
154 + "Santé"
155 + ],
156 + "connector": "breezy",
157 + "status": "actif",
158 + "region": "Montréal, Sainte-Foy"
159 + },
160 + {
161 + "id": "altasciences",
162 + "name": "Altasciences",
163 + "url": "",
164 + "careers_url": "https://altasciences.wd1.myworkdayjobs.com/Careers",
165 + "sectors": [
166 + "Pharmaceutique"
167 + ],
168 + "connector": "workday",
169 + "status": "actif",
170 + "region": "Laval"
171 + },
172 + {
173 + "id": "amilia",
174 + "name": "Amilia",
175 + "url": "",
176 + "careers_url": "https://amilia.recruitee.com",
177 + "sectors": [
178 + "TI"
179 + ],
180 + "connector": "recruitee",
181 + "status": "actif",
182 + "region": "Montréal"
183 + },
184 + {
185 + "id": "anciapersonnelinc",
186 + "name": "ANCIA Personnel",
187 + "url": "",
188 + "careers_url": "https://anciapersonnelinc.recruitee.com",
189 + "sectors": [
190 + "Placement"
191 + ],
192 + "connector": "recruitee",
193 + "status": "actif",
194 + "region": "Lévis, Québec, Montréal"
195 + },
196 + {
197 + "id": "appdirect",
198 + "name": "AppDirect",
199 + "url": "",
200 + "careers_url": "https://job-boards.greenhouse.io/appdirect",
201 + "sectors": [
202 + "TI",
203 + "SaaS"
204 + ],
205 + "connector": "greenhouse",
206 + "status": "actif",
207 + "region": "Montréal"
208 + },
209 + {
210 + "id": "astucemedia",
211 + "name": "Astucemedia",
212 + "url": "",
213 + "careers_url": "https://jobs.smartrecruiters.com/company/Astucemedia",
214 + "sectors": [
215 + "Médias",
216 + "TI"
217 + ],
218 + "connector": "smartrecruiters",
219 + "status": "actif",
220 + "region": "Montréal"
221 + },
222 + {
223 + "id": "atecna_montreal",
224 + "name": "Atecna",
225 + "url": "",
226 + "careers_url": "https://apply.workable.com/atecna-montreal",
227 + "sectors": [
228 + "TI",
229 + "Conseil"
230 + ],
231 + "connector": "workable",
232 + "status": "actif",
233 + "region": "Montréal"
234 + },
235 + {
236 + "id": "atlas_workland",
237 + "name": "Réseau Atlas Workland (~80 employeurs QC : CSS, cégeps, Santé Québec, STQ, UQTR…)",
238 + "url": "https://www.workland.com",
239 + "careers_url": "https://atlas.workland.com",
240 + "connector": "workland",
241 + "sectors": [
242 + "Éducation",
243 + "Santé",
244 + "Secteur public",
245 + "Multi-employeurs"
246 + ],
247 + "region": "Québec (province)",
248 + "status": "actif"
249 + },
250 + {
251 + "id": "autodesk",
252 + "name": "Autodesk",
253 + "url": "",
254 + "careers_url": "https://autodesk.wd1.myworkdayjobs.com/Ext",
255 + "sectors": [
256 + "TI",
257 + "Logiciel"
258 + ],
259 + "connector": "workday",
260 + "status": "actif",
261 + "region": "Montréal"
262 + },
263 + {
264 + "id": "aviyatech",
265 + "name": "Aviya Aerospace Systems",
266 + "url": "",
267 + "careers_url": "https://jobs.lever.co/aviyatech",
268 + "sectors": [
269 + "Aéronautique"
270 + ],
271 + "connector": "lever",
272 + "status": "actif",
273 + "region": "Longueuil"
274 + },
275 + {
276 + "id": "bardel_entertainment",
277 + "name": "Bardel Entertainment",
278 + "url": "",
279 + "careers_url": "https://apply.workable.com/bardel-entertainment",
280 + "sectors": [
281 + "Animation"
282 + ],
283 + "connector": "workable",
284 + "status": "actif",
285 + "region": "Montréal"
286 + },
287 + {
288 + "id": "bayshore",
289 + "name": "Bayshore HealthCare",
290 + "url": "https://www.bayshore.ca",
291 + "careers_url": "https://bayshore.taleo.net/careersection/bs_ex/jobsearch.ftl?lang=fr",
292 + "sectors": [
293 + "Santé",
294 + "Soins à domicile"
295 + ],
296 + "connector": "taleo",
297 + "status": "actif",
298 + "region": "Montréal, Québec"
299 + },
300 + {
301 + "id": "bc2",
302 + "name": "Groupe BC2",
303 + "url": "",
304 + "careers_url": "https://bc2.bamboohr.com/careers",
305 + "sectors": [
306 + "Urbanisme",
307 + "Conseil"
308 + ],
309 + "connector": "bamboohr",
310 + "status": "actif",
311 + "region": "Montréal"
312 + },
313 + {
314 + "id": "bdc",
315 + "name": "BDC",
316 + "url": "",
317 + "careers_url": "https://bdc.wd10.myworkdayjobs.com/bdc_careers",
318 + "sectors": [
319 + "Finance"
320 + ],
321 + "connector": "workday",
322 + "status": "actif",
323 + "region": "Montréal"
324 + },
325 + {
326 + "id": "bell_textron",
327 + "name": "Bell Textron Canada",
328 + "url": "https://www.bellflight.com",
329 + "careers_url": "https://textron.taleo.net/careersection/bell/jobsearch.ftl?lang=fr",
330 + "sectors": [
331 + "Aéronautique",
332 + "Fabrication"
333 + ],
334 + "connector": "taleo",
335 + "status": "actif",
336 + "region": "Mirabel"
337 + },
338 + {
339 + "id": "beneva",
340 + "name": "Beneva",
341 + "url": "https://beneva.ca",
342 + "careers_url": "https://beneva.wd10.myworkdayjobs.com/BenevaSite_carriere",
343 + "sectors": [],
344 + "connector": "workday",
345 + "status": "actif",
346 + "region": "Québec"
347 + },
348 + {
349 + "id": "bento_sushi",
350 + "name": "Bento Sushi",
351 + "url": "https://www.bentosushi.com",
352 + "careers_url": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=d0dfb14c-f365-4599-b39b-0fdccb3d1160&ccId=19000101_000001&lang=fr_CA",
353 + "connector": "adp",
354 + "sectors": [
355 + "Restauration"
356 + ],
357 + "region": "Québec (province)",
358 + "status": "actif"
359 + },
360 + {
361 + "id": "bhvr",
362 + "name": "Behaviour Interactif",
363 + "url": "",
364 + "careers_url": "https://jobs.lever.co/bhvr",
365 + "sectors": [
366 + "Jeux vidéo"
367 + ],
368 + "connector": "lever",
369 + "status": "actif",
370 + "region": "Montréal"
371 + },
372 + {
373 + "id": "bigbang",
374 + "name": "Big Bang",
375 + "url": "",
376 + "careers_url": "https://bigbang.bamboohr.com/careers",
377 + "sectors": [
378 + "TI"
379 + ],
380 + "connector": "bamboohr",
381 + "status": "actif",
382 + "region": "Montréal"
383 + },
384 + {
385 + "id": "biximontreal",
386 + "name": "BIXI Montréal",
387 + "url": "",
388 + "careers_url": "https://biximontreal.recruitee.com",
389 + "sectors": [
390 + "Transport"
391 + ],
392 + "connector": "recruitee",
393 + "status": "actif",
394 + "region": "Montréal"
395 + },
396 + {
397 + "id": "bmo",
398 + "name": "BMO Groupe financier",
399 + "url": "",
400 + "careers_url": "https://bmo.wd3.myworkdayjobs.com/External",
401 + "sectors": [
402 + "Finance"
403 + ],
404 + "connector": "workday",
405 + "status": "actif",
406 + "region": "Montréal, Laval, Gatineau"
407 + },
408 + {
409 + "id": "bombardier",
410 + "name": "Bombardier",
411 + "url": "https://bombardier.com",
412 + "careers_url": "https://jobs.bombardier.com",
413 + "sectors": [
414 + "Aéronautique",
415 + "Ingénierie",
416 + "Fabrication"
417 + ],
418 + "connector": "successfactors",
419 + "status": "actif",
420 + "region": "Dorval, Mirabel, Montréal"
421 + },
422 + {
423 + "id": "botpress",
424 + "name": "Botpress",
425 + "url": "",
426 + "careers_url": "https://apply.workable.com/botpress",
427 + "sectors": [
428 + "TI",
429 + "IA"
430 + ],
431 + "connector": "workable",
432 + "status": "actif",
433 + "region": "Montréal, Québec"
434 + },
435 + {
436 + "id": "brandmomentum",
437 + "name": "Brand Momentum",
438 + "url": "",
439 + "careers_url": "https://brandmomentum.breezy.hr",
440 + "sectors": [
441 + "Marketing",
442 + "Ventes"
443 + ],
444 + "connector": "breezy",
445 + "status": "actif",
446 + "region": "Montréal, Laval, Québec"
447 + },
448 + {
449 + "id": "broadsign",
450 + "name": "Broadsign",
451 + "url": "",
452 + "careers_url": "https://job-boards.greenhouse.io/broadsign",
453 + "sectors": [
454 + "TI",
455 + "Affichage"
456 + ],
457 + "connector": "greenhouse",
458 + "status": "actif",
459 + "region": "Montréal"
460 + },
461 + {
462 + "id": "broccolini",
463 + "name": "Broccolini",
464 + "url": "",
465 + "careers_url": "https://broccolini.bamboohr.com/careers",
466 + "sectors": [
467 + "Construction",
468 + "Immobilier"
469 + ],
470 + "connector": "bamboohr",
471 + "status": "actif",
472 + "region": "Montréal"
473 + },
474 + {
475 + "id": "caaquebec",
476 + "name": "CAA-Québec",
477 + "url": "https://caaquebec.com",
478 + "careers_url": "https://caaquebec.wd3.myworkdayjobs.com/CarrieresCAA-Quebec",
479 + "sectors": [],
480 + "connector": "workday",
481 + "status": "actif",
482 + "region": "Québec"
483 + },
484 + {
485 + "id": "cae",
486 + "name": "CAE",
487 + "url": "https://www.cae.com",
488 + "careers_url": "https://cae.wd3.myworkdayjobs.com/career",
489 + "sectors": [
490 + "Aéronautique",
491 + "Simulation",
492 + "TI"
493 + ],
494 + "connector": "workday",
495 + "status": "actif",
496 + "region": "Montréal"
497 + },
498 + {
499 + "id": "canada_global",
500 + "name": "Canada Global Recruitment",
501 + "url": "",
502 + "careers_url": "https://canada-global.breezy.hr",
503 + "sectors": [
504 + "Placement"
505 + ],
506 + "connector": "breezy",
507 + "status": "actif",
508 + "region": "Montréal"
509 + },
510 + {
511 + "id": "canadiantirecorporation",
512 + "name": "Canadian Tire",
513 + "url": "https://canadiantire.ca",
514 + "careers_url": "https://canadiantirecorporation.wd3.myworkdayjobs.com/Enterprise_External_Careers_Site",
515 + "sectors": [],
516 + "connector": "workday",
517 + "status": "actif",
518 + "region": "Montréal"
519 + },
520 + {
521 + "id": "capreit",
522 + "name": "CAPREIT",
523 + "url": "https://www.capreit.ca",
524 + "careers_url": "https://careers-capreit.icims.com/jobs/search?ss=1",
525 + "sectors": [
526 + "Immobilier",
527 + "Gestion immobilière"
528 + ],
529 + "connector": "icims",
530 + "status": "actif",
531 + "region": "Montréal"
532 + },
533 + {
534 + "id": "cascades",
535 + "name": "Cascades",
536 + "url": "https://www.cascades.com",
537 + "careers_url": "https://jobs.cascades.com",
538 + "sectors": [
539 + "Pâtes et papiers",
540 + "Emballage",
541 + "Fabrication"
542 + ],
543 + "connector": "successfactors",
544 + "status": "actif",
545 + "region": "Kingsey Falls, Drummondville, Candiac"
546 + },
547 + {
548 + "id": "cdpq",
549 + "name": "CDPQ — Caisse de dépôt et placement du Québec",
550 + "url": "https://cdpq.com",
551 + "careers_url": "https://cdpq.wd10.myworkdayjobs.com/CDPQ",
552 + "sectors": [],
553 + "connector": "workday",
554 + "status": "actif",
555 + "region": "Montréal"
556 + },
557 + {
558 + "id": "cfmontreal",
559 + "name": "CF Montréal",
560 + "url": "",
561 + "careers_url": "https://jobs.smartrecruiters.com/company/CFMontreal",
562 + "sectors": [
563 + "Sport"
564 + ],
565 + "connector": "smartrecruiters",
566 + "status": "actif",
567 + "region": "Montréal"
568 + },
569 + {
570 + "id": "cgi",
571 + "name": "CGI",
572 + "url": "https://www.cgi.com",
573 + "careers_url": "https://cgi.njoyn.com/CORP/xweb/xweb.asp?clid=21001&page=joblisting&lang=2",
574 + "connector": "njoyn",
575 + "sectors": [
576 + "TI",
577 + "Services-conseils"
578 + ],
579 + "region": "Montréal, Québec",
580 + "status": "actif"
581 + },
582 + {
583 + "id": "charger_logistics_inc",
584 + "name": "Charger Logistics",
585 + "url": "",
586 + "careers_url": "https://apply.workable.com/charger-logistics-inc",
587 + "sectors": [
588 + "Transport",
589 + "Logistique"
590 + ],
591 + "connector": "workable",
592 + "status": "actif",
593 + "region": "Dorval"
594 + },
595 + {
596 + "id": "chu_quebec",
597 + "name": "CHU de Québec — Université Laval",
598 + "url": "https://www.chudequebec.ca",
599 + "careers_url": "https://chudequebec.carrieresante.gouv.qc.ca",
600 + "connector": "wpjobmanager",
601 + "sectors": [
602 + "Santé",
603 + "Secteur public"
604 + ],
605 + "region": "Québec",
606 + "status": "actif"
607 + },
608 + {
609 + "id": "chum",
610 + "name": "CHUM",
611 + "url": "https://www.chumontreal.qc.ca",
612 + "careers_url": "https://chum.carrieresante.gouv.qc.ca",
613 + "connector": "wpjobmanager",
614 + "sectors": [
615 + "Santé",
616 + "Secteur public"
617 + ],
618 + "region": "Montréal",
619 + "status": "actif"
620 + },
621 + {
622 + "id": "churchdwight",
623 + "name": "Church & Dwight Canada",
624 + "url": "https://churchdwight.ca",
625 + "careers_url": "https://churchdwight.wd1.myworkdayjobs.com/chdcanadacareers",
626 + "sectors": [
627 + "Production"
628 + ],
629 + "connector": "workday",
630 + "status": "actif",
631 + "region": ""
632 + },
633 + {
634 + "id": "cibc",
635 + "name": "Banque CIBC",
636 + "url": "",
637 + "careers_url": "https://cibc.wd3.myworkdayjobs.com/search",
638 + "sectors": [
639 + "Finance"
640 + ],
641 + "connector": "workday",
642 + "status": "actif",
643 + "region": "Montréal, Québec"
644 + },
645 + {
646 + "id": "cima2",
647 + "name": "CIMA+",
648 + "url": "",
649 + "careers_url": "https://jobs.smartrecruiters.com/company/CIMA2",
650 + "sectors": [
651 + "Ingénierie"
652 + ],
653 + "connector": "smartrecruiters",
654 + "status": "actif",
655 + "region": "Montréal, Québec, Laval"
656 + },
657 + {
658 + "id": "circlek",
659 + "name": "Couche-Tard / Circle K",
660 + "url": "",
661 + "careers_url": "https://circlek.wd3.myworkdayjobs.com/CircleKStoreJobs",
662 + "sectors": [
663 + "Commerce de détail"
664 + ],
665 + "connector": "workday",
666 + "status": "actif",
667 + "region": "Québec, Montréal, Drummondville"
668 + },
669 + {
670 + "id": "cirquedusoleil",
671 + "name": "Cirque du Soleil",
672 + "url": "https://www.cirquedusoleil.com",
673 + "careers_url": "https://jobs.lever.co/cirquedusoleil",
674 + "sectors": [
675 + "Divertissement",
676 + "Création"
677 + ],
678 + "connector": "lever",
679 + "status": "actif",
680 + "region": "Montréal"
681 + },
682 + {
683 + "id": "cisss_abitibi",
684 + "name": "CISSS de l'Abitibi-Témiscamingue",
685 + "url": "https://www.cisss-at.gouv.qc.ca",
686 + "careers_url": "https://cisssat.carrieresante.gouv.qc.ca",
687 + "connector": "wpjobmanager",
688 + "sectors": [
689 + "Santé",
690 + "Secteur public"
691 + ],
692 + "region": "Abitibi-Témiscamingue",
693 + "status": "actif"
694 + },
695 + {
696 + "id": "cisss_chaudiere_appalaches",
697 + "name": "CISSS de Chaudière-Appalaches",
698 + "url": "https://www.cisssca.com",
699 + "careers_url": "https://cisssca.carrieresante.gouv.qc.ca",
700 + "connector": "wpjobmanager",
701 + "sectors": [
702 + "Santé",
703 + "Secteur public"
704 + ],
705 + "region": "Chaudière-Appalaches",
706 + "status": "actif"
707 + },
708 + {
709 + "id": "cisss_lanaudiere",
710 + "name": "CISSS de Lanaudière",
711 + "url": "https://www.cisss-lanaudiere.gouv.qc.ca",
712 + "careers_url": "https://lanaudiere.carrieresante.gouv.qc.ca",
713 + "connector": "wpjobmanager",
714 + "sectors": [
715 + "Santé",
716 + "Secteur public"
717 + ],
718 + "region": "Lanaudière",
719 + "status": "actif"
720 + },
721 + {
722 + "id": "cisss_laurentides",
723 + "name": "CISSS des Laurentides",
724 + "url": "https://www.santelaurentides.gouv.qc.ca",
725 + "careers_url": "https://laurentides.carrieresante.gouv.qc.ca",
726 + "connector": "wpjobmanager",
727 + "sectors": [
728 + "Santé",
729 + "Secteur public"
730 + ],
731 + "region": "Laurentides",
732 + "status": "actif"
733 + },
734 + {
735 + "id": "cisss_laval",
736 + "name": "CISSS de Laval",
737 + "url": "https://www.lavalensante.com",
738 + "careers_url": "https://cissslaval.carrieresante.gouv.qc.ca",
739 + "connector": "wpjobmanager",
740 + "sectors": [
741 + "Santé",
742 + "Secteur public"
743 + ],
744 + "region": "Laval",
745 + "status": "actif"
746 + },
747 + {
748 + "id": "cisss_outaouais",
749 + "name": "CISSS de l'Outaouais",
750 + "url": "https://cisss-outaouais.gouv.qc.ca",
751 + "careers_url": "https://viensvivretespassions.ca",
752 + "connector": "wpjobmanager",
753 + "sectors": [
754 + "Santé",
755 + "Secteur public"
756 + ],
757 + "region": "Outaouais",
758 + "status": "actif"
759 + },
760 + {
761 + "id": "ciusss_est_montreal",
762 + "name": "CIUSSS de l'Est-de-l'Île-de-Montréal",
763 + "url": "https://ciusss-estmtl.gouv.qc.ca",
764 + "careers_url": "https://ciusssemtl.taleo.net/careersection/cemtl/jobsearch.ftl?lang=fr",
765 + "sectors": [
766 + "Santé",
767 + "Services sociaux",
768 + "Secteur public"
769 + ],
770 + "connector": "taleo",
771 + "status": "actif",
772 + "region": "Montréal"
773 + },
774 + {
775 + "id": "cogeco",
776 + "name": "Cogeco",
777 + "url": "",
778 + "careers_url": "https://cogeco.wd3.myworkdayjobs.com/Cogeco_Careers",
779 + "sectors": [
780 + "Télécoms"
781 + ],
782 + "connector": "workday",
783 + "status": "actif",
784 + "region": "Montréal, Trois-Rivières"
785 + },
786 + {
787 + "id": "cohere",
788 + "name": "Cohere",
789 + "url": "",
790 + "careers_url": "https://jobs.ashbyhq.com/cohere",
791 + "sectors": [
792 + "TI",
793 + "IA"
794 + ],
795 + "connector": "ashby",
796 + "status": "actif",
797 + "region": "Montréal"
798 + },
799 + {
800 + "id": "cordonbleu",
801 + "name": "Aliments Ouimet-Cordon Bleu inc.",
802 + "url": "https://clarkcordonbleu.ca",
803 + "careers_url": "https://cordonbleu.bamboohr.com/careers",
804 + "sectors": [
805 + "Production"
806 + ],
807 + "connector": "bamboohr",
808 + "status": "actif",
809 + "region": ""
810 + },
811 + {
812 + "id": "cssdd",
813 + "name": "CSS des Découvreurs",
814 + "url": "https://www.cssdd.gouv.qc.ca",
815 + "careers_url": "https://emplois.cssdd.gouv.qc.ca",
816 + "connector": "digitalrecruiters",
817 + "sectors": [
818 + "Éducation",
819 + "Secteur public"
820 + ],
821 + "region": "Québec",
822 + "status": "actif"
823 + },
824 + {
825 + "id": "cultures_genv",
826 + "name": "Cultures Gen V",
827 + "url": "https://gen-v.com",
828 + "careers_url": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=8b346731-d189-4cf2-a14c-9e48d38befde&ccId=36427051_2&lang=fr_CA",
829 + "connector": "adp",
830 + "sectors": [
831 + "Agroalimentaire",
832 + "Serriculture"
833 + ],
834 + "region": "Montérégie",
835 + "status": "actif"
836 + },
837 + {
838 + "id": "dcbel",
839 + "name": "dcbel",
840 + "url": "",
841 + "careers_url": "https://dcbel.bamboohr.com/careers",
842 + "sectors": [
843 + "Énergie",
844 + "TI"
845 + ],
846 + "connector": "bamboohr",
847 + "status": "actif",
848 + "region": "Montréal"
849 + },
850 + {
851 + "id": "deloitte",
852 + "name": "Deloitte Canada",
853 + "url": "https://www.deloitte.com/ca",
854 + "careers_url": "https://careers.deloitte.ca",
855 + "connector": "successfactors",
856 + "sectors": [
857 + "Services-conseils",
858 + "Comptabilité",
859 + "TI"
860 + ],
861 + "region": "Montréal, Québec",
862 + "status": "actif"
863 + },
864 + {
865 + "id": "depot-direct",
866 + "name": "Dépôt direct employeurs",
867 + "url": "https://www.job-ka.com/employeurs",
868 + "careers_url": "https://www.job-ka.com/employeurs",
869 + "sectors": [
870 + "Tous secteurs"
871 + ],
872 + "connector": "depot-direct",
873 + "status": "modération",
874 + "region": "Québec (province)"
875 + },
876 + {
877 + "id": "desjardins",
878 + "name": "Mouvement Desjardins",
879 + "url": "https://www.desjardins.com",
880 + "careers_url": "https://desjardins.wd10.myworkdayjobs.com/Desjardins",
881 + "sectors": [
882 + "Finance",
883 + "Assurance",
884 + "TI"
885 + ],
886 + "connector": "workday",
887 + "status": "actif",
888 + "region": "Lévis / province"
889 + },
890 + {
891 + "id": "devimco",
892 + "name": "Devimco Appartements",
893 + "url": "https://devimco.com",
894 + "careers_url": "https://devimco.bamboohr.com/careers",
895 + "sectors": [
896 + "Immobilier"
897 + ],
898 + "connector": "bamboohr",
899 + "status": "actif",
900 + "region": ""
901 + },
902 + {
903 + "id": "dilitrust",
904 + "name": "DiliTrust",
905 + "url": "",
906 + "careers_url": "https://jobs.lever.co/dilitrust",
907 + "sectors": [
908 + "TI",
909 + "Juridique"
910 + ],
911 + "connector": "lever",
912 + "status": "actif",
913 + "region": "Montréal"
914 + },
915 + {
916 + "id": "distro",
917 + "name": "Distro",
918 + "url": "",
919 + "careers_url": "https://jobs.lever.co/distro",
920 + "sectors": [
921 + "Ventes",
922 + "TI"
923 + ],
924 + "connector": "lever",
925 + "status": "actif",
926 + "region": "Montréal, Westmount"
927 + },
928 + {
929 + "id": "domtar",
930 + "name": "Domtar",
931 + "url": "https://www.domtar.com",
932 + "careers_url": "https://jobs.domtar.com",
933 + "sectors": [
934 + "Pâtes et papiers",
935 + "Foresterie",
936 + "Fabrication"
937 + ],
938 + "connector": "successfactors",
939 + "status": "actif",
940 + "region": "Montréal, Windsor, Lachine"
941 + },
942 + {
943 + "id": "dulcedo",
944 + "name": "Dulcedo Management",
945 + "url": "",
946 + "careers_url": "https://jobs.lever.co/dulcedo",
947 + "sectors": [
948 + "Mode",
949 + "Gestion d'artistes"
950 + ],
951 + "connector": "lever",
952 + "status": "actif",
953 + "region": "Montréal"
954 + },
955 + {
956 + "id": "edf_renouvelables",
957 + "name": "EDF Renouvelables Canada",
958 + "url": "https://www.edf-renouvelables.ca",
959 + "careers_url": "https://cafrench-edf-re.icims.com/jobs/search?ss=1",
960 + "sectors": [
961 + "Énergie",
962 + "Ingénierie"
963 + ],
964 + "connector": "icims",
965 + "status": "actif",
966 + "region": "Montréal"
967 + },
968 + {
969 + "id": "emcocorporation",
970 + "name": "EMCO",
971 + "url": "",
972 + "careers_url": "https://jobs.smartrecruiters.com/company/EMCOCorporation",
973 + "sectors": [
974 + "Distribution",
975 + "Construction"
976 + ],
977 + "connector": "smartrecruiters",
978 + "status": "actif",
979 + "region": "Montréal, Québec, Laval"
980 + },
981 + {
982 + "id": "eminent_valet",
983 + "name": "Eminent Valet",
984 + "url": "",
985 + "careers_url": "https://apply.workable.com/eminent-valet",
986 + "sectors": [
987 + "Services"
988 + ],
989 + "connector": "workable",
990 + "status": "actif",
991 + "region": "Montréal"
992 + },
993 + {
994 + "id": "eosaircraftinc",
995 + "name": "EOS Aircraft",
996 + "url": "",
997 + "careers_url": "https://eosaircraftinc.bamboohr.com/careers",
998 + "sectors": [
999 + "Aéronautique"
1000 + ],
1001 + "connector": "bamboohr",
1002 + "status": "actif",
1003 + "region": "Montréal"
1004 + },
1005 + {
1006 + "id": "eq3_ltd",
1007 + "name": "EQ3",
1008 + "url": "",
1009 + "careers_url": "https://eq3-ltd.breezy.hr",
1010 + "sectors": [
1011 + "Commerce de détail",
1012 + "Meuble"
1013 + ],
1014 + "connector": "breezy",
1015 + "status": "actif",
1016 + "region": "Brossard, Laval, Montréal"
1017 + },
1018 + {
1019 + "id": "eqbank",
1020 + "name": "EQ Bank",
1021 + "url": "",
1022 + "careers_url": "https://jobs.lever.co/eqbank",
1023 + "sectors": [
1024 + "Finance"
1025 + ],
1026 + "connector": "lever",
1027 + "status": "actif",
1028 + "region": "Montréal"
1029 + },
1030 + {
1031 + "id": "espresso_jobs",
1032 + "name": "Espresso-Jobs",
1033 + "url": "https://www.espresso-jobs.com",
1034 + "careers_url": "https://www.espresso-jobs.com/emploi",
1035 + "sectors": [
1036 + "Portail",
1037 + "TI",
1038 + "Créatif"
1039 + ],
1040 + "connector": "portail",
1041 + "status": "actif",
1042 + "region": "Québec (province)",
1043 + "aggregator": true
1044 + },
1045 + {
1046 + "id": "evlo",
1047 + "name": "EVLO (Hydro-Québec)",
1048 + "url": "",
1049 + "careers_url": "https://evlo.bamboohr.com/careers",
1050 + "sectors": [
1051 + "Énergie"
1052 + ],
1053 + "connector": "bamboohr",
1054 + "status": "actif",
1055 + "region": "Varennes"
1056 + },
1057 + {
1058 + "id": "evolving_web",
1059 + "name": "Evolving Web",
1060 + "url": "",
1061 + "careers_url": "https://apply.workable.com/evolving-web",
1062 + "sectors": [
1063 + "TI",
1064 + "Web"
1065 + ],
1066 + "connector": "workable",
1067 + "status": "actif",
1068 + "region": "Montréal"
1069 + },
1070 + {
1071 + "id": "exfo",
1072 + "name": "EXFO",
1073 + "url": "",
1074 + "careers_url": "https://exfo.wd10.myworkdayjobs.com/exfo_careers",
1075 + "sectors": [
1076 + "TI",
1077 + "Télécommunications"
1078 + ],
1079 + "connector": "workday",
1080 + "status": "actif",
1081 + "region": "Québec"
1082 + },
1083 + {
1084 + "id": "exo",
1085 + "name": "exo (transport métropolitain)",
1086 + "url": "https://exo.quebec",
1087 + "careers_url": "https://phh.tbe.taleo.net/phh04/ats/careers/v2/jobSearch?org=AMT&cws=39",
1088 + "connector": "taleo_tbe",
1089 + "sectors": [
1090 + "Transport",
1091 + "Secteur public"
1092 + ],
1093 + "region": "Montréal",
1094 + "status": "actif"
1095 + },
1096 + {
1097 + "id": "explorance",
1098 + "name": "Explorance",
1099 + "url": "",
1100 + "careers_url": "https://explorance.bamboohr.com/careers",
1101 + "sectors": [
1102 + "TI",
1103 + "SaaS"
1104 + ],
1105 + "connector": "bamboohr",
1106 + "status": "actif",
1107 + "region": "Montréal"
1108 + },
1109 + {
1110 + "id": "fenetresconcept",
1111 + "name": "Fenêtres Concept",
1112 + "url": "https://fenetresconcept.com",
1113 + "careers_url": "https://fenetresconcept.bamboohr.com/careers",
1114 + "sectors": [
1115 + "Production"
1116 + ],
1117 + "connector": "bamboohr",
1118 + "status": "actif",
1119 + "region": ""
1120 + },
1121 + {
1122 + "id": "flare",
1123 + "name": "Flare (cybersécurité)",
1124 + "url": "",
1125 + "careers_url": "https://flare.bamboohr.com/careers",
1126 + "sectors": [
1127 + "TI"
1128 + ],
1129 + "connector": "bamboohr",
1130 + "status": "actif",
1131 + "region": "Montréal"
1132 + },
1133 + {
1134 + "id": "flinks",
1135 + "name": "Flinks",
1136 + "url": "",
1137 + "careers_url": "https://apply.workable.com/flinks",
1138 + "sectors": [
1139 + "TI",
1140 + "Fintech"
1141 + ],
1142 + "connector": "workable",
1143 + "status": "actif",
1144 + "region": "Montréal"
1145 + },
1146 + {
1147 + "id": "fondsftq",
1148 + "name": "Fonds de solidarité FTQ",
1149 + "url": "https://fondsftq.com",
1150 + "careers_url": "https://fondsftq.wd10.myworkdayjobs.com/sitecarriere_externe",
1151 + "sectors": [],
1152 + "connector": "workday",
1153 + "status": "actif",
1154 + "region": "Montréal"
1155 + },
1156 + {
1157 + "id": "framestore",
1158 + "name": "Framestore",
1159 + "url": "",
1160 + "careers_url": "https://framestore.recruitee.com",
1161 + "sectors": [
1162 + "Effets visuels",
1163 + "Création"
1164 + ],
1165 + "connector": "recruitee",
1166 + "status": "actif",
1167 + "region": "Montréal"
1168 + },
1169 + {
1170 + "id": "fruitdor",
1171 + "name": "Fruit d'Or",
1172 + "url": "https://fruitdor.ca",
1173 + "careers_url": "https://recruiting.ultipro.ca/FRU5100FRUIT/JobBoard/91103632-8052-480e-a5b0-a6028d640577/",
1174 + "connector": "ultipro",
1175 + "sectors": [
1176 + "Agroalimentaire",
1177 + "Manufacturier"
1178 + ],
1179 + "region": "Centre-du-Québec",
1180 + "status": "actif"
1181 + },
1182 + {
1183 + "id": "fuse",
1184 + "name": "Fuse Energy",
1185 + "url": "",
1186 + "careers_url": "https://jobs.ashbyhq.com/Fuse",
1187 + "sectors": [
1188 + "Énergie",
1189 + "TI"
1190 + ],
1191 + "connector": "ashby",
1192 + "status": "actif",
1193 + "region": "Montréal"
1194 + },
1195 + {
1196 + "id": "gameloft",
1197 + "name": "Gameloft",
1198 + "url": "https://www.gameloft.com",
1199 + "careers_url": "https://jobs.smartrecruiters.com/company/gameloft",
1200 + "sectors": [
1201 + "Jeux vidéo"
1202 + ],
1203 + "connector": "smartrecruiters",
1204 + "status": "actif",
1205 + "region": "Montréal"
1206 + },
1207 + {
1208 + "id": "gearboxquebec",
1209 + "name": "Gearbox Studio Québec",
1210 + "url": "",
1211 + "careers_url": "https://job-boards.greenhouse.io/gearboxquebec",
1212 + "sectors": [
1213 + "Jeux vidéo"
1214 + ],
1215 + "connector": "greenhouse",
1216 + "status": "actif",
1217 + "region": "Montréal, Québec"
1218 + },
1219 + {
1220 + "id": "genetec_inc",
1221 + "name": "Genetec",
1222 + "url": "https://genetec.com",
1223 + "careers_url": "https://apply.workable.com/genetec-inc",
1224 + "sectors": [],
1225 + "connector": "workable",
1226 + "status": "actif",
1227 + "region": "Montréal"
1228 + },
1229 + {
1230 + "id": "gfs",
1231 + "name": "Service alimentaire Gordon",
1232 + "url": "https://gfs.ca",
1233 + "careers_url": "https://gfs.wd5.myworkdayjobs.com/usjobs-french",
1234 + "sectors": [
1235 + "manufacturier/commerce"
1236 + ],
1237 + "connector": "workday",
1238 + "status": "actif",
1239 + "region": ""
1240 + },
1241 + {
1242 + "id": "gologic",
1243 + "name": "GoLogic",
1244 + "url": "",
1245 + "careers_url": "https://jobs.smartrecruiters.com/company/gologic",
1246 + "sectors": [
1247 + "TI"
1248 + ],
1249 + "connector": "smartrecruiters",
1250 + "status": "actif",
1251 + "region": "Montréal"
1252 + },
1253 + {
1254 + "id": "gorh",
1255 + "name": "Go RH",
1256 + "url": "",
1257 + "careers_url": "https://jobs.lever.co/gorh",
1258 + "sectors": [
1259 + "Placement",
1260 + "RH"
1261 + ],
1262 + "connector": "lever",
1263 + "status": "actif",
1264 + "region": "Montréal, Québec"
1265 + },
1266 + {
1267 + "id": "groupecanam",
1268 + "name": "Groupe Canam",
1269 + "url": "",
1270 + "careers_url": "https://jobs.smartrecruiters.com/company/groupecanam",
1271 + "sectors": [
1272 + "Production",
1273 + "Construction"
1274 + ],
1275 + "connector": "smartrecruiters",
1276 + "status": "actif",
1277 + "region": "Saint-Georges"
1278 + },
1279 + {
1280 + "id": "gsk",
1281 + "name": "GSK",
1282 + "url": "",
1283 + "careers_url": "https://gsk.wd5.myworkdayjobs.com/GSKCareers",
1284 + "sectors": [
1285 + "Pharmaceutique"
1286 + ],
1287 + "connector": "workday",
1288 + "status": "actif",
1289 + "region": "Laval, Québec"
1290 + },
1291 + {
1292 + "id": "guichet_emplois",
1293 + "name": "Guichet-Emplois (Canada)",
1294 + "url": "https://www.guichetemplois.gc.ca",
1295 + "careers_url": "https://www.guichetemplois.gc.ca/jobsearch/rechercheemplois?fprov=QC",
1296 + "sectors": [
1297 + "Portail",
1298 + "Tous secteurs"
1299 + ],
1300 + "connector": "portail",
1301 + "status": "actif",
1302 + "region": "Québec (province)",
1303 + "aggregator": true
1304 + },
1305 + {
1306 + "id": "gurussolutions",
1307 + "name": "GURUS Solutions",
1308 + "url": "",
1309 + "careers_url": "https://job-boards.greenhouse.io/gurussolutions",
1310 + "sectors": [
1311 + "TI"
1312 + ],
1313 + "connector": "greenhouse",
1314 + "status": "actif",
1315 + "region": "Montréal"
1316 + },
1317 + {
1318 + "id": "hec_montreal",
1319 + "name": "HEC Montréal",
1320 + "url": "https://www.hec.ca",
1321 + "careers_url": "https://tre.tbe.taleo.net/tre01/ats/careers/v2/jobSearch?org=NYQEDG&cws=40",
1322 + "connector": "taleo_tbe",
1323 + "sectors": [
1324 + "Éducation",
1325 + "Administration"
1326 + ],
1327 + "region": "Montréal",
1328 + "status": "actif"
1329 + },
1330 + {
1331 + "id": "hec_montreal_profs",
1332 + "name": "HEC Montréal — corps professoral",
1333 + "url": "https://www.hec.ca",
1334 + "careers_url": "https://tre.tbe.taleo.net/tre01/ats/careers/v2/jobSearch?org=NYQEDG&cws=41",
1335 + "connector": "taleo_tbe",
1336 + "sectors": [
1337 + "Éducation",
1338 + "Recherche"
1339 + ],
1340 + "region": "Montréal",
1341 + "status": "actif"
1342 + },
1343 + {
1344 + "id": "hopper",
1345 + "name": "Hopper",
1346 + "url": "",
1347 + "careers_url": "https://jobs.ashbyhq.com/hopper",
1348 + "sectors": [
1349 + "TI",
1350 + "Voyage"
1351 + ],
1352 + "connector": "ashby",
1353 + "status": "actif",
1354 + "region": "Montréal"
1355 + },
1356 + {
1357 + "id": "hoyoverse",
1358 + "name": "HoYoverse",
1359 + "url": "",
1360 + "careers_url": "https://jobs.smartrecruiters.com/company/hoyoverse",
1361 + "sectors": [
1362 + "Jeux vidéo"
1363 + ],
1364 + "connector": "smartrecruiters",
1365 + "status": "actif",
1366 + "region": "Montréal"
1367 + },
1368 + {
1369 + "id": "huaweicanada",
1370 + "name": "Huawei Canada",
1371 + "url": "",
1372 + "careers_url": "https://huaweicanada.recruitee.com",
1373 + "sectors": [
1374 + "TI",
1375 + "Recherche"
1376 + ],
1377 + "connector": "recruitee",
1378 + "status": "actif",
1379 + "region": "Montréal"
1380 + },
1381 + {
1382 + "id": "hydroquebec",
1383 + "name": "Hydro-Québec",
1384 + "url": "https://www.hydroquebec.com",
1385 + "careers_url": "https://emploi.hydroquebec.com",
1386 + "connector": "successfactors",
1387 + "sectors": [
1388 + "Énergie",
1389 + "Génie",
1390 + "TI",
1391 + "Secteur public"
1392 + ],
1393 + "region": "Montréal, Québec (province)",
1394 + "status": "actif"
1395 + },
1396 + {
1397 + "id": "ia_groupe",
1398 + "name": "iA Groupe financier",
1399 + "url": "https://ia.ca",
1400 + "careers_url": "https://ia.wd3.myworkdayjobs.com/Professional",
1401 + "sectors": [
1402 + "Assurance",
1403 + "Finance",
1404 + "TI"
1405 + ],
1406 + "connector": "workday",
1407 + "status": "actif",
1408 + "region": "Québec"
1409 + },
1410 + {
1411 + "id": "industrious",
1412 + "name": "Industrious",
1413 + "url": "",
1414 + "careers_url": "https://jobs.ashbyhq.com/industrious",
1415 + "sectors": [
1416 + "Immobilier",
1417 + "Services"
1418 + ],
1419 + "connector": "ashby",
1420 + "status": "actif",
1421 + "region": "Montréal"
1422 + },
1423 + {
1424 + "id": "ino_ca",
1425 + "name": "Luqia (INO)",
1426 + "url": "",
1427 + "careers_url": "https://ino-ca.breezy.hr",
1428 + "sectors": [
1429 + "Optique-photonique",
1430 + "Recherche"
1431 + ],
1432 + "connector": "breezy",
1433 + "status": "actif",
1434 + "region": "Québec"
1435 + },
1436 + {
1437 + "id": "intactfc",
1438 + "name": "Intact Corporation financière",
1439 + "url": "",
1440 + "careers_url": "https://intactfc.wd3.myworkdayjobs.com/Intactfc",
1441 + "sectors": [
1442 + "Assurance"
1443 + ],
1444 + "connector": "workday",
1445 + "status": "actif",
1446 + "region": "Montréal"
1447 + },
1448 + {
1449 + "id": "investpsp",
1450 + "name": "Investissements PSP",
1451 + "url": "https://investpsp.com",
1452 + "careers_url": "https://investpsp.wd3.myworkdayjobs.com/psp_careers",
1453 + "sectors": [],
1454 + "connector": "workday",
1455 + "status": "actif",
1456 + "region": "Montréal"
1457 + },
1458 + {
1459 + "id": "investquebec",
1460 + "name": "Investissement Québec",
1461 + "url": "https://investquebec.com",
1462 + "careers_url": "https://investquebec.wd10.myworkdayjobs.com/Ext",
1463 + "sectors": [],
1464 + "connector": "workday",
1465 + "status": "actif",
1466 + "region": "Québec"
1467 + },
1468 + {
1469 + "id": "jexcelleinc",
1470 + "name": "J'Excelle",
1471 + "url": "",
1472 + "careers_url": "https://jobs.smartrecruiters.com/company/JExcelleInc",
1473 + "sectors": [
1474 + "Placement"
1475 + ],
1476 + "connector": "smartrecruiters",
1477 + "status": "actif",
1478 + "region": "Montréal, Laval, Gatineau"
1479 + },
1480 + {
1481 + "id": "jgrivesud",
1482 + "name": "JG Rive-Sud (GFS)",
1483 + "url": "https://jgfruitsetlegumes.com",
1484 + "careers_url": "https://gfs.wd5.myworkdayjobs.com/jgrive-sud",
1485 + "sectors": [
1486 + "manufacturier/commerce"
1487 + ],
1488 + "connector": "workday",
1489 + "status": "actif",
1490 + "region": ""
1491 + },
1492 + {
1493 + "id": "jobillico",
1494 + "name": "Jobillico",
1495 + "url": "https://www.jobillico.com",
1496 + "careers_url": "https://www.jobillico.com/recherche-emploi",
1497 + "sectors": [
1498 + "Portail",
1499 + "Tous secteurs"
1500 + ],
1501 + "connector": "portail",
1502 + "status": "actif",
1503 + "region": "Québec (province)",
1504 + "aggregator": true
1505 + },
1506 + {
1507 + "id": "korem",
1508 + "name": "Korem",
1509 + "url": "",
1510 + "careers_url": "https://korem.bamboohr.com/careers",
1511 + "sectors": [
1512 + "TI"
1513 + ],
1514 + "connector": "bamboohr",
1515 + "status": "actif",
1516 + "region": "Québec"
1517 + },
1518 + {
1519 + "id": "kpidigital",
1520 + "name": "KPI Digital",
1521 + "url": "",
1522 + "careers_url": "https://kpidigital.bamboohr.com/careers",
1523 + "sectors": [
1524 + "TI",
1525 + "Données"
1526 + ],
1527 + "connector": "bamboohr",
1528 + "status": "actif",
1529 + "region": "Montréal"
1530 + },
1531 + {
1532 + "id": "kruger",
1533 + "name": "Kruger",
1534 + "url": "https://www.kruger.com",
1535 + "careers_url": "https://tre.tbe.taleo.net/tre01/ats/careers/v2/jobSearch?org=KRUGER2&cws=76",
1536 + "connector": "taleo_tbe",
1537 + "sectors": [
1538 + "Pâtes et papiers",
1539 + "Manufacturier"
1540 + ],
1541 + "region": "Montréal, Trois-Rivières",
1542 + "status": "actif"
1543 + },
1544 + {
1545 + "id": "labelink",
1546 + "name": "Produits Labelink",
1547 + "url": "",
1548 + "careers_url": "https://labelink.bamboohr.com/careers",
1549 + "sectors": [
1550 + "Impression",
1551 + "Manufacture"
1552 + ],
1553 + "connector": "bamboohr",
1554 + "status": "actif",
1555 + "region": "Montréal, Laval, Granby"
1556 + },
1557 + {
1558 + "id": "lamour",
1559 + "name": "Lamour",
1560 + "url": "",
1561 + "careers_url": "https://apply.workable.com/lamour",
1562 + "sectors": [
1563 + "Textile",
1564 + "Manufacture"
1565 + ],
1566 + "connector": "workable",
1567 + "status": "actif",
1568 + "region": "Montréal"
1569 + },
1570 + {
1571 + "id": "lassonde",
1572 + "name": "Industries Lassonde",
1573 + "url": "https://www.lassonde.com",
1574 + "careers_url": "https://www.lassonde.com/fr/emplois/",
1575 + "sectors": [
1576 + "Agroalimentaire",
1577 + "Fabrication"
1578 + ],
1579 + "connector": "custom",
1580 + "status": "actif",
1581 + "region": "Rougemont, Montréal"
1582 + },
1583 + {
1584 + "id": "levio",
1585 + "name": "Levio",
1586 + "url": "",
1587 + "careers_url": "https://job-boards.greenhouse.io/levio",
1588 + "sectors": [
1589 + "TI"
1590 + ],
1591 + "connector": "greenhouse",
1592 + "status": "actif",
1593 + "region": "Québec, Montréal"
1594 + },
1595 + {
1596 + "id": "lg2",
1597 + "name": "LG2",
1598 + "url": "",
1599 + "careers_url": "https://lg2.recruitee.com",
1600 + "sectors": [
1601 + "Publicité",
1602 + "Création"
1603 + ],
1604 + "connector": "recruitee",
1605 + "status": "actif",
1606 + "region": "Montréal, Québec"
1607 + },
1608 + {
1609 + "id": "lidd",
1610 + "name": "LIDD Consultants",
1611 + "url": "",
1612 + "careers_url": "https://apply.workable.com/lidd",
1613 + "sectors": [
1614 + "Conseil",
1615 + "Logistique"
1616 + ],
1617 + "connector": "workable",
1618 + "status": "actif",
1619 + "region": "Montréal"
1620 + },
1621 + {
1622 + "id": "lightspeedhq",
1623 + "name": "Lightspeed Commerce",
1624 + "url": "",
1625 + "careers_url": "https://jobs.ashbyhq.com/lightspeedhq",
1626 + "sectors": [
1627 + "TI"
1628 + ],
1629 + "connector": "ashby",
1630 + "status": "actif",
1631 + "region": "Montréal"
1632 + },
1633 + {
1634 + "id": "logisco",
1635 + "name": "Logisco",
1636 + "url": "https://logisco.com",
1637 + "careers_url": "https://logisco.bamboohr.com/careers",
1638 + "sectors": [
1639 + "Immobilier"
1640 + ],
1641 + "connector": "bamboohr",
1642 + "status": "actif",
1643 + "region": ""
1644 + },
1645 + {
1646 + "id": "lush",
1647 + "name": "Lush Cosmétiques",
1648 + "url": "",
1649 + "careers_url": "https://job-boards.greenhouse.io/lush",
1650 + "sectors": [
1651 + "Commerce de détail"
1652 + ],
1653 + "connector": "greenhouse",
1654 + "status": "actif",
1655 + "region": "Montréal, Québec"
1656 + },
1657 + {
1658 + "id": "mackenzie",
1659 + "name": "Placements Mackenzie (Power/IGM)",
1660 + "url": "https://www.placementsmackenzie.com",
1661 + "careers_url": "https://careersfr-mackenzieinvestments.icims.com/jobs/search?ss=1",
1662 + "connector": "icims",
1663 + "sectors": [
1664 + "Finance"
1665 + ],
1666 + "region": "Montréal",
1667 + "status": "actif"
1668 + },
1669 + {
1670 + "id": "maintainx",
1671 + "name": "MaintainX",
1672 + "url": "",
1673 + "careers_url": "https://jobs.ashbyhq.com/maintainx",
1674 + "sectors": [
1675 + "TI",
1676 + "SaaS"
1677 + ],
1678 + "connector": "ashby",
1679 + "status": "actif",
1680 + "region": "Montréal"
1681 + },
1682 + {
1683 + "id": "manulife",
1684 + "name": "Manuvie",
1685 + "url": "",
1686 + "careers_url": "https://manulife.wd3.myworkdayjobs.com/MFCJH_Jobs",
1687 + "sectors": [
1688 + "Assurance",
1689 + "Finance"
1690 + ],
1691 + "connector": "workday",
1692 + "status": "actif",
1693 + "region": "Montréal"
1694 + },
1695 + {
1696 + "id": "mattelinc",
1697 + "name": "Mattel (Mega Bloks)",
1698 + "url": "",
1699 + "careers_url": "https://jobs.smartrecruiters.com/company/MattelInc",
1700 + "sectors": [
1701 + "Jouets",
1702 + "Manufacture"
1703 + ],
1704 + "connector": "smartrecruiters",
1705 + "status": "actif",
1706 + "region": "Montréal"
1707 + },
1708 + {
1709 + "id": "mccarthy_tetrault",
1710 + "name": "McCarthy Tétrault",
1711 + "url": "https://www.mccarthy.ca",
1712 + "careers_url": "https://careers-mccarthyca.icims.com/jobs/search?ss=1",
1713 + "sectors": [
1714 + "Juridique",
1715 + "Services professionnels"
1716 + ],
1717 + "connector": "icims",
1718 + "status": "actif",
1719 + "region": "Montréal, Québec"
1720 + },
1721 + {
1722 + "id": "mcgill",
1723 + "name": "Université McGill",
1724 + "url": "https://www.mcgill.ca",
1725 + "careers_url": "https://mcgill.wd3.myworkdayjobs.com/McGill_Careers",
1726 + "sectors": [
1727 + "Éducation",
1728 + "Recherche",
1729 + "Administration"
1730 + ],
1731 + "connector": "workday",
1732 + "status": "actif",
1733 + "region": "Montréal"
1734 + },
1735 + {
1736 + "id": "mckesson",
1737 + "name": "McKesson Canada",
1738 + "url": "",
1739 + "careers_url": "https://mckesson.wd3.myworkdayjobs.com/External_Careers",
1740 + "sectors": [
1741 + "Pharmaceutique",
1742 + "Distribution"
1743 + ],
1744 + "connector": "workday",
1745 + "status": "actif",
1746 + "region": "Montréal"
1747 + },
1748 + {
1749 + "id": "medfar",
1750 + "name": "MEDFAR Solutions Cliniques",
1751 + "url": "",
1752 + "careers_url": "https://jobs.smartrecruiters.com/company/Medfar",
1753 + "sectors": [
1754 + "TI",
1755 + "Santé"
1756 + ],
1757 + "connector": "smartrecruiters",
1758 + "status": "actif",
1759 + "region": "Montréal"
1760 + },
1761 + {
1762 + "id": "medialo",
1763 + "name": "Médialo",
1764 + "url": "",
1765 + "careers_url": "https://medialo.recruitee.com",
1766 + "sectors": [
1767 + "Médias"
1768 + ],
1769 + "connector": "recruitee",
1770 + "status": "actif",
1771 + "region": "Mont-Laurier, Terrebonne"
1772 + },
1773 + {
1774 + "id": "messer_canada",
1775 + "name": "Messer Canada",
1776 + "url": "https://www.messer-ca.com",
1777 + "careers_url": "https://recruiting.ultipro.com/MES1005MESR/JobBoard/dbd63926-d756-486f-a254-b2a6ede1d26e",
1778 + "sectors": [
1779 + "Gaz industriels",
1780 + "Industrie"
1781 + ],
1782 + "connector": "ultipro",
1783 + "status": "actif",
1784 + "region": "Montréal, Québec, Saint-Georges"
1785 + },
1786 + {
1787 + "id": "microhabitat",
1788 + "name": "MicroHabitat",
1789 + "url": "",
1790 + "careers_url": "https://microhabitat.breezy.hr",
1791 + "sectors": [
1792 + "Agriculture urbaine"
1793 + ],
1794 + "connector": "breezy",
1795 + "status": "actif",
1796 + "region": "Montréal, Québec"
1797 + },
1798 + {
1799 + "id": "mila_2",
1800 + "name": "Mila — Institut québécois d'IA",
1801 + "url": "https://mila.quebec",
1802 + "careers_url": "https://apply.workable.com/mila-2",
1803 + "sectors": [],
1804 + "connector": "workable",
1805 + "status": "actif",
1806 + "region": "Montréal"
1807 + },
1808 + {
1809 + "id": "mirego",
1810 + "name": "Mirego",
1811 + "url": "",
1812 + "careers_url": "https://jobs.lever.co/mirego",
1813 + "sectors": [
1814 + "TI"
1815 + ],
1816 + "connector": "lever",
1817 + "status": "actif",
1818 + "region": "Québec, Montréal"
1819 + },
1820 + {
1821 + "id": "mistplay",
1822 + "name": "Mistplay",
1823 + "url": "https://www.mistplay.com",
1824 + "careers_url": "https://jobs.lever.co/mistplay",
1825 + "sectors": [
1826 + "TI",
1827 + "Jeu mobile"
1828 + ],
1829 + "connector": "lever",
1830 + "status": "actif",
1831 + "region": "Montréal"
1832 + },
1833 + {
1834 + "id": "mistral_ai",
1835 + "name": "Mistral AI",
1836 + "url": "",
1837 + "careers_url": "https://jobs.ashbyhq.com/mistral.ai",
1838 + "sectors": [
1839 + "TI",
1840 + "IA"
1841 + ],
1842 + "connector": "ashby",
1843 + "status": "actif",
1844 + "region": "Montréal"
1845 + },
1846 + {
1847 + "id": "mitacs",
1848 + "name": "Mitacs",
1849 + "url": "",
1850 + "careers_url": "https://mitacs.bamboohr.com/careers",
1851 + "sectors": [
1852 + "Recherche",
1853 + "OBNL"
1854 + ],
1855 + "connector": "bamboohr",
1856 + "status": "actif",
1857 + "region": "Montréal"
1858 + },
1859 + {
1860 + "id": "mitsubishi_hc_capital",
1861 + "name": "Mitsubishi HC Capital Canada",
1862 + "url": "https://www.mhccna.com",
1863 + "careers_url": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=b3ef4f03-f8ff-4ded-80c8-6dd5c5a224f7&ccId=9200144510729_2&lang=fr_CA",
1864 + "sectors": [
1865 + "Finance",
1866 + "Financement commercial"
1867 + ],
1868 + "connector": "adp",
1869 + "status": "actif",
1870 + "region": "Laval, Trois-Rivières"
1871 + },
1872 + {
1873 + "id": "msi_gestion",
1874 + "name": "MSI Gestion immobilière",
1875 + "url": "https://www.msimmobiliers.com",
1876 + "careers_url": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=47d4e792-26e5-471c-92ac-73c60131bab8&ccId=19000101_000001&lang=fr_CA",
1877 + "sectors": [
1878 + "Immobilier",
1879 + "Gestion immobilière"
1880 + ],
1881 + "connector": "adp",
1882 + "status": "actif",
1883 + "region": "Montréal"
1884 + },
1885 + {
1886 + "id": "mthreerecruitingportal",
1887 + "name": "mthree",
1888 + "url": "",
1889 + "careers_url": "https://job-boards.greenhouse.io/mthreerecruitingportal",
1890 + "sectors": [
1891 + "TI",
1892 + "Placement"
1893 + ],
1894 + "connector": "greenhouse",
1895 + "status": "actif",
1896 + "region": "Montréal"
1897 + },
1898 + {
1899 + "id": "mxo",
1900 + "name": "MXO",
1901 + "url": "https://mxoconseil.com",
1902 + "careers_url": "https://mxo.bamboohr.com/careers",
1903 + "sectors": [
1904 + "manufacturier/commerce"
1905 + ],
1906 + "connector": "bamboohr",
1907 + "status": "actif",
1908 + "region": ""
1909 + },
1910 + {
1911 + "id": "national",
1912 + "name": "NATIONAL",
1913 + "url": "",
1914 + "careers_url": "https://job-boards.greenhouse.io/national",
1915 + "sectors": [
1916 + "Relations publiques"
1917 + ],
1918 + "connector": "greenhouse",
1919 + "status": "actif",
1920 + "region": "Montréal"
1921 + },
1922 + {
1923 + "id": "nexapp",
1924 + "name": "Nexapp",
1925 + "url": "",
1926 + "careers_url": "https://nexapp.bamboohr.com/careers",
1927 + "sectors": [
1928 + "TI",
1929 + "Web"
1930 + ],
1931 + "connector": "bamboohr",
1932 + "status": "actif",
1933 + "region": "Québec"
1934 + },
1935 + {
1936 + "id": "no_saint",
1937 + "name": "No Saint",
1938 + "url": "",
1939 + "careers_url": "https://jobs.ashbyhq.com/no-saint",
1940 + "sectors": [
1941 + "Création"
1942 + ],
1943 + "connector": "ashby",
1944 + "status": "actif",
1945 + "region": "Montréal"
1946 + },
1947 + {
1948 + "id": "nomic",
1949 + "name": "Nomic Bio",
1950 + "url": "",
1951 + "careers_url": "https://jobs.ashbyhq.com/nomic",
1952 + "sectors": [
1953 + "Biotechnologie"
1954 + ],
1955 + "connector": "ashby",
1956 + "status": "actif",
1957 + "region": "Montréal"
1958 + },
1959 + {
1960 + "id": "nora_pharma",
1961 + "name": "Nora Pharma",
1962 + "url": "",
1963 + "careers_url": "https://nora-pharma.breezy.hr",
1964 + "sectors": [
1965 + "Pharmaceutique"
1966 + ],
1967 + "connector": "breezy",
1968 + "status": "actif",
1969 + "region": "Laval, Montréal, Granby"
1970 + },
1971 + {
1972 + "id": "nortera",
1973 + "name": "Nortera",
1974 + "url": "https://norterafoods.com",
1975 + "careers_url": "https://recruiting.ultipro.ca/NOR5100NOFD/JobBoard/e3ce2e8a-b8fc-42c9-97cf-ea17f4d5dd1d/",
1976 + "connector": "ultipro",
1977 + "sectors": [
1978 + "Agroalimentaire",
1979 + "Manufacturier"
1980 + ],
1981 + "region": "Montérégie, Brossard",
1982 + "status": "actif"
1983 + },
1984 + {
1985 + "id": "northwestrubber",
1986 + "name": "North West Rubber",
1987 + "url": "",
1988 + "careers_url": "https://northwestrubber.bamboohr.com/careers",
1989 + "sectors": [
1990 + "Manufacture"
1991 + ],
1992 + "connector": "bamboohr",
1993 + "status": "actif",
1994 + "region": "Sherbrooke"
1995 + },
1996 + {
1997 + "id": "novipro",
1998 + "name": "NOVIPRO",
1999 + "url": "",
2000 + "careers_url": "https://novipro.breezy.hr",
2001 + "sectors": [
2002 + "TI"
2003 + ],
2004 + "connector": "breezy",
2005 + "status": "actif",
2006 + "region": "Montréal, Longueuil"
2007 + },
2008 + {
2009 + "id": "nuovophotography",
2010 + "name": "Nuovo Photography",
2011 + "url": "",
2012 + "careers_url": "https://apply.workable.com/nuovophotography",
2013 + "sectors": [
2014 + "Photographie"
2015 + ],
2016 + "connector": "workable",
2017 + "status": "actif",
2018 + "region": "Montréal"
2019 + },
2020 + {
2021 + "id": "omni_hotels_gestion",
2022 + "name": "Omni Hôtel Mont-Royal",
2023 + "url": "https://www.omnihotels.com/fr/hotels/montreal-mont-royal",
2024 + "careers_url": "https://externalmanager-omnihotels.icims.com/jobs/search?ss=1",
2025 + "sectors": [
2026 + "Hôtellerie",
2027 + "Gestion"
2028 + ],
2029 + "connector": "icims",
2030 + "status": "actif",
2031 + "region": "Montréal"
2032 + },
2033 + {
2034 + "id": "omni_hotels_horaire",
2035 + "name": "Omni Hôtel Mont-Royal",
2036 + "url": "https://www.omnihotels.com/fr/hotels/montreal-mont-royal",
2037 + "careers_url": "https://externalhourly-omnihotels.icims.com/jobs/search?ss=1",
2038 + "sectors": [
2039 + "Hôtellerie",
2040 + "Restauration"
2041 + ],
2042 + "connector": "icims",
2043 + "status": "actif",
2044 + "region": "Montréal"
2045 + },
2046 + {
2047 + "id": "onrunning",
2048 + "name": "On Running",
2049 + "url": "",
2050 + "careers_url": "https://job-boards.greenhouse.io/onrunning",
2051 + "sectors": [
2052 + "Commerce de détail",
2053 + "Sport"
2054 + ],
2055 + "connector": "greenhouse",
2056 + "status": "actif",
2057 + "region": "Montréal"
2058 + },
2059 + {
2060 + "id": "opalrt",
2061 + "name": "OPAL-RT Technologies",
2062 + "url": "",
2063 + "careers_url": "https://opalrt.bamboohr.com/careers",
2064 + "sectors": [
2065 + "TI",
2066 + "Ingénierie"
2067 + ],
2068 + "connector": "bamboohr",
2069 + "status": "actif",
2070 + "region": "Montréal"
2071 + },
2072 + {
2073 + "id": "osedea",
2074 + "name": "OSEDEA",
2075 + "url": "",
2076 + "careers_url": "https://jobs.lever.co/osedea",
2077 + "sectors": [
2078 + "TI",
2079 + "Web"
2080 + ],
2081 + "connector": "lever",
2082 + "status": "actif",
2083 + "region": "Montréal"
2084 + },
2085 + {
2086 + "id": "osgoode_properties",
2087 + "name": "Osgoode Properties",
2088 + "url": "https://www.osgoodeproperties.com",
2089 + "careers_url": "https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=c6a2e782-c971-4a6d-9a63-1365f5ce7d21&ccId=19000101_000001&lang=fr_CA",
2090 + "connector": "adp",
2091 + "sectors": [
2092 + "Immobilier"
2093 + ],
2094 + "region": "Gatineau",
2095 + "status": "actif"
2096 + },
2097 + {
2098 + "id": "ott",
2099 + "name": "OTT Financial",
2100 + "url": "",
2101 + "careers_url": "https://ott.bamboohr.com/careers",
2102 + "sectors": [
2103 + "Finance"
2104 + ],
2105 + "connector": "bamboohr",
2106 + "status": "actif",
2107 + "region": "Montréal"
2108 + },
2109 + {
2110 + "id": "peoplecanfly",
2111 + "name": "People Can Fly",
2112 + "url": "",
2113 + "careers_url": "https://jobs.smartrecruiters.com/company/PeopleCanFly",
2114 + "sectors": [
2115 + "Jeux vidéo"
2116 + ],
2117 + "connector": "smartrecruiters",
2118 + "status": "actif",
2119 + "region": "Montréal"
2120 + },
2121 + {
2122 + "id": "petalmd",
2123 + "name": "Petal",
2124 + "url": "",
2125 + "careers_url": "https://petalmd.recruitee.com",
2126 + "sectors": [
2127 + "TI",
2128 + "Santé"
2129 + ],
2130 + "connector": "recruitee",
2131 + "status": "actif",
2132 + "region": "Montréal, Québec"
2133 + },
2134 + {
2135 + "id": "pfizer",
2136 + "name": "Pfizer Canada",
2137 + "url": "",
2138 + "careers_url": "https://pfizer.wd1.myworkdayjobs.com/PfizerCareers",
2139 + "sectors": [
2140 + "Pharmaceutique"
2141 + ],
2142 + "connector": "workday",
2143 + "status": "actif",
2144 + "region": "Kirkland"
2145 + },
2146 + {
2147 + "id": "playmind",
2148 + "name": "Playmind",
2149 + "url": "",
2150 + "careers_url": "https://jobs.smartrecruiters.com/company/playmind",
2151 + "sectors": [
2152 + "Jeux vidéo"
2153 + ],
2154 + "connector": "smartrecruiters",
2155 + "status": "actif",
2156 + "region": "Montréal"
2157 + },
2158 + {
2159 + "id": "plusgrade",
2160 + "name": "Plusgrade",
2161 + "url": "https://plusgrade.com",
2162 + "careers_url": "https://plusgrade.wd10.myworkdayjobs.com/Plusgrade_External_Site",
2163 + "sectors": [],
2164 + "connector": "workday",
2165 + "status": "actif",
2166 + "region": "Montréal"
2167 + },
2168 + {
2169 + "id": "poka",
2170 + "name": "Poka",
2171 + "url": "https://www.poka.io",
2172 + "careers_url": "https://job-boards.greenhouse.io/poka",
2173 + "sectors": [
2174 + "TI",
2175 + "SaaS manufacturier"
2176 + ],
2177 + "connector": "greenhouse",
2178 + "status": "actif",
2179 + "region": "Québec"
2180 + },
2181 + {
2182 + "id": "portagecybertech",
2183 + "name": "Portage CyberTech",
2184 + "url": "",
2185 + "careers_url": "https://portagecybertech.bamboohr.com/careers",
2186 + "sectors": [
2187 + "TI",
2188 + "Cybersécurité"
2189 + ],
2190 + "connector": "bamboohr",
2191 + "status": "actif",
2192 + "region": "Gatineau, Montréal"
2193 + },
2194 + {
2195 + "id": "potloc",
2196 + "name": "Potloc",
2197 + "url": "https://www.potloc.com",
2198 + "careers_url": "https://jobs.lever.co/Potloc",
2199 + "sectors": [
2200 + "TI",
2201 + "Études de marché"
2202 + ],
2203 + "connector": "lever",
2204 + "status": "actif",
2205 + "region": "Montréal"
2206 + },
2207 + {
2208 + "id": "pouletrouge",
2209 + "name": "Poulet Rouge",
2210 + "url": "https://poulet-rouge.ca",
2211 + "careers_url": "https://pouletrouge.bamboohr.com/careers",
2212 + "sectors": [
2213 + "restauration"
2214 + ],
2215 + "connector": "bamboohr",
2216 + "status": "actif",
2217 + "region": "Montréal"
2218 + },
2219 + {
2220 + "id": "produits_kruger",
2221 + "name": "Produits Kruger",
2222 + "url": "https://www.produitskruger.ca",
2223 + "careers_url": "https://tre.tbe.taleo.net/tre01/ats/careers/v2/jobSearch?org=KRUGER2&cws=78",
2224 + "connector": "taleo_tbe",
2225 + "sectors": [
2226 + "Manufacturier",
2227 + "Biens de consommation"
2228 + ],
2229 + "region": "Gatineau, Crabtree",
2230 + "status": "actif"
2231 + },
2232 + {
2233 + "id": "promutuel",
2234 + "name": "Promutuel Assurance",
2235 + "url": "https://promutuelassurance.ca",
2236 + "careers_url": "https://promutuel.wd3.myworkdayjobs.com/promutuel_carrieres",
2237 + "sectors": [],
2238 + "connector": "workday",
2239 + "status": "actif",
2240 + "region": "Québec"
2241 + },
2242 + {
2243 + "id": "qsl",
2244 + "name": "QSL",
2245 + "url": "https://qsl.com",
2246 + "careers_url": "https://jobs.smartrecruiters.com/company/qsl",
2247 + "sectors": [],
2248 + "connector": "smartrecruiters",
2249 + "status": "actif",
2250 + "region": "Québec"
2251 + },
2252 + {
2253 + "id": "rcgt",
2254 + "name": "Raymond Chabot Grant Thornton",
2255 + "url": "https://rcgt.com",
2256 + "careers_url": "https://rcgt.wd3.myworkdayjobs.com/External",
2257 + "sectors": [],
2258 + "connector": "workday",
2259 + "status": "actif",
2260 + "region": "Montréal"
2261 + },
2262 + {
2263 + "id": "reitmanscanadalteltd",
2264 + "name": "Reitmans",
2265 + "url": "",
2266 + "careers_url": "https://jobs.smartrecruiters.com/company/ReitmansCanadaLteLtd",
2267 + "sectors": [
2268 + "Commerce de détail",
2269 + "Mode"
2270 + ],
2271 + "connector": "smartrecruiters",
2272 + "status": "actif",
2273 + "region": "Montréal, Québec, Laval"
2274 + },
2275 + {
2276 + "id": "reseau_mieux_etre",
2277 + "name": "Réseau Mieux-Être",
2278 + "url": "",
2279 + "careers_url": "https://reseau-mieux-etre.breezy.hr",
2280 + "sectors": [
2281 + "Santé"
2282 + ],
2283 + "connector": "breezy",
2284 + "status": "actif",
2285 + "region": "Montréal"
2286 + },
2287 + {
2288 + "id": "rethinkcanada",
2289 + "name": "Rethink",
2290 + "url": "",
2291 + "careers_url": "https://rethinkcanada.bamboohr.com/careers",
2292 + "sectors": [
2293 + "Publicité"
2294 + ],
2295 + "connector": "bamboohr",
2296 + "status": "actif",
2297 + "region": "Montréal"
2298 + },
2299 + {
2300 + "id": "riotinto",
2301 + "name": "Rio Tinto",
2302 + "url": "",
2303 + "careers_url": "https://riotinto.wd3.myworkdayjobs.com/riotinto_careers",
2304 + "sectors": [
2305 + "Mines"
2306 + ],
2307 + "connector": "workday",
2308 + "status": "actif",
2309 + "region": "Saguenay, Montréal"
2310 + },
2311 + {
2312 + "id": "robotiq",
2313 + "name": "Robotiq",
2314 + "url": "",
2315 + "careers_url": "https://robotiq.bamboohr.com/careers",
2316 + "sectors": [
2317 + "Robotique",
2318 + "Manufacture"
2319 + ],
2320 + "connector": "bamboohr",
2321 + "status": "actif",
2322 + "region": "Lévis"
2323 + },
2324 + {
2325 + "id": "rodeofx",
2326 + "name": "Rodeo FX",
2327 + "url": "",
2328 + "careers_url": "https://jobs.smartrecruiters.com/company/RodeoFX",
2329 + "sectors": [
2330 + "Effets visuels",
2331 + "Création"
2332 + ],
2333 + "connector": "smartrecruiters",
2334 + "status": "actif",
2335 + "region": "Montréal, Québec"
2336 + },
2337 + {
2338 + "id": "rtc_quebec",
2339 + "name": "Réseau de transport de la Capitale",
2340 + "url": "https://www.rtcquebec.ca",
2341 + "careers_url": "https://rtc.njoyn.com/CGI/xweb/xweb.asp?clid=23009&page=joblisting&lang=2",
2342 + "sectors": [
2343 + "Transport collectif",
2344 + "Secteur public"
2345 + ],
2346 + "connector": "njoyn",
2347 + "status": "actif",
2348 + "region": "Québec"
2349 + },
2350 + {
2351 + "id": "samsara",
2352 + "name": "Samsara",
2353 + "url": "",
2354 + "careers_url": "https://job-boards.greenhouse.io/samsara",
2355 + "sectors": [
2356 + "TI",
2357 + "IoT"
2358 + ],
2359 + "connector": "greenhouse",
2360 + "status": "actif",
2361 + "region": "Montréal"
2362 + },
2363 + {
2364 + "id": "sante_montreal",
2365 + "name": "Santé Québec — Montréal",
2366 + "url": "https://santemontreal.ca",
2367 + "careers_url": "https://emplois.santemontreal.qc.ca/CL3/xweb/xweb.asp?clid=54327&page=joblisting&lang=2",
2368 + "sectors": [
2369 + "Santé",
2370 + "Services sociaux",
2371 + "Secteur public"
2372 + ],
2373 + "connector": "njoyn",
2374 + "status": "actif",
2375 + "region": "Montréal"
2376 + },
2377 + {
2378 + "id": "sante_quebec",
2379 + "name": "Santé Québec",
2380 + "url": "https://sante.quebec",
2381 + "careers_url": "https://emplois.sante.quebec",
2382 + "sectors": [
2383 + "Santé",
2384 + "Secteur public",
2385 + "Administration"
2386 + ],
2387 + "connector": "digitalrecruiters",
2388 + "status": "actif",
2389 + "region": "Montréal, Québec"
2390 + },
2391 + {
2392 + "id": "saputo",
2393 + "name": "Saputo",
2394 + "url": "https://www.saputo.com",
2395 + "careers_url": "https://saputo.wd5.myworkdayjobs.com/Saputo_External_Careers",
2396 + "sectors": [
2397 + "Agroalimentaire",
2398 + "Production"
2399 + ],
2400 + "connector": "workday",
2401 + "status": "actif",
2402 + "region": "Montréal / province"
2403 + },
2404 + {
2405 + "id": "scalia",
2406 + "name": "Propriétés Scalia",
2407 + "url": "",
2408 + "careers_url": "https://scalia.bamboohr.com/careers",
2409 + "sectors": [
2410 + "Immobilier"
2411 + ],
2412 + "connector": "bamboohr",
2413 + "status": "actif",
2414 + "region": "Montréal, Anjou"
2415 + },
2416 + {
2417 + "id": "scottsmiraclegro",
2418 + "name": "Scotts Canada (Fafard)",
2419 + "url": "https://scottsmiraclegro.com",
2420 + "careers_url": "https://scottsmiraclegro.wd5.myworkdayjobs.com/SMGExternal",
2421 + "sectors": [
2422 + "manufacturier/commerce"
2423 + ],
2424 + "connector": "workday",
2425 + "status": "actif",
2426 + "region": ""
2427 + },
2428 + {
2429 + "id": "sepaq",
2430 + "name": "Sépaq",
2431 + "url": "https://www.sepaq.com",
2432 + "careers_url": "https://tre.tbe.taleo.net/tre01/ats/careers/v2/jobSearch?org=SEPAQ&cws=37",
2433 + "connector": "taleo_tbe",
2434 + "sectors": [
2435 + "Tourisme",
2436 + "Plein air",
2437 + "Secteur public"
2438 + ],
2439 + "region": "Québec (province)",
2440 + "status": "actif"
2441 + },
2442 + {
2443 + "id": "servicenow",
2444 + "name": "ServiceNow",
2445 + "url": "",
2446 + "careers_url": "https://jobs.smartrecruiters.com/company/ServiceNow",
2447 + "sectors": [
2448 + "TI",
2449 + "SaaS"
2450 + ],
2451 + "connector": "smartrecruiters",
2452 + "status": "actif",
2453 + "region": "Montréal"
2454 + },
2455 + {
2456 + "id": "siainnovationsinc",
2457 + "name": "SIA Innovations",
2458 + "url": "",
2459 + "careers_url": "https://job-boards.greenhouse.io/siainnovationsinc",
2460 + "sectors": [
2461 + "TI"
2462 + ],
2463 + "connector": "greenhouse",
2464 + "status": "actif",
2465 + "region": "Montréal"
2466 + },
2467 + {
2468 + "id": "sideinc",
2469 + "name": "Side (PTW)",
2470 + "url": "",
2471 + "careers_url": "https://apply.workable.com/sideinc",
2472 + "sectors": [
2473 + "Jeux vidéo"
2474 + ],
2475 + "connector": "workable",
2476 + "status": "actif",
2477 + "region": "Montréal, Québec"
2478 + },
2479 + {
2480 + "id": "sidlee",
2481 + "name": "Sid Lee",
2482 + "url": "",
2483 + "careers_url": "https://job-boards.greenhouse.io/sidlee",
2484 + "sectors": [
2485 + "Marketing",
2486 + "Création"
2487 + ],
2488 + "connector": "greenhouse",
2489 + "status": "actif",
2490 + "region": "Montréal"
2491 + },
2492 + {
2493 + "id": "sleeman",
2494 + "name": "Brasseries Sleeman (Unibroue)",
2495 + "url": "https://unibroue.com",
2496 + "careers_url": "https://sleeman.wd3.myworkdayjobs.com/SBL",
2497 + "sectors": [
2498 + "manufacturier/commerce"
2499 + ],
2500 + "connector": "workday",
2501 + "status": "actif",
2502 + "region": ""
2503 + },
2504 + {
2505 + "id": "sogeclair",
2506 + "name": "SOGECLAIR",
2507 + "url": "",
2508 + "careers_url": "https://apply.workable.com/sogeclair",
2509 + "sectors": [
2510 + "Aéronautique",
2511 + "Ingénierie"
2512 + ],
2513 + "connector": "workable",
2514 + "status": "actif",
2515 + "region": "Montréal, Mirabel, Laval"
2516 + },
2517 + {
2518 + "id": "sparkgrid",
2519 + "name": "Sparkgrid",
2520 + "url": "",
2521 + "careers_url": "https://jobs.smartrecruiters.com/company/Sparkgrid",
2522 + "sectors": [
2523 + "TI"
2524 + ],
2525 + "connector": "smartrecruiters",
2526 + "status": "actif",
2527 + "region": "Montréal"
2528 + },
2529 + {
2530 + "id": "spiria",
2531 + "name": "Spiria",
2532 + "url": "",
2533 + "careers_url": "https://jobs.lever.co/spiria",
2534 + "sectors": [
2535 + "TI"
2536 + ],
2537 + "connector": "lever",
2538 + "status": "actif",
2539 + "region": "Montréal, Gatineau"
2540 + },
2541 + {
2542 + "id": "spreedly",
2543 + "name": "Spreedly",
2544 + "url": "",
2545 + "careers_url": "https://jobs.lever.co/spreedly",
2546 + "sectors": [
2547 + "TI",
2548 + "Fintech"
2549 + ],
2550 + "connector": "lever",
2551 + "status": "actif",
2552 + "region": "Montréal"
2553 + },
2554 + {
2555 + "id": "squeezestudio",
2556 + "name": "Squeeze Studio Animation",
2557 + "url": "",
2558 + "careers_url": "https://squeezestudio.recruitee.com",
2559 + "sectors": [
2560 + "Animation",
2561 + "Création"
2562 + ],
2563 + "connector": "recruitee",
2564 + "status": "actif",
2565 + "region": "Montréal, Québec"
2566 + },
2567 + {
2568 + "id": "stelpro",
2569 + "name": "Stelpro",
2570 + "url": "",
2571 + "careers_url": "https://jobs.smartrecruiters.com/company/stelpro",
2572 + "sectors": [
2573 + "Production"
2574 + ],
2575 + "connector": "smartrecruiters",
2576 + "status": "actif",
2577 + "region": "Saint-Bruno-de-Montarville"
2578 + },
2579 + {
2580 + "id": "stl_laval",
2581 + "name": "Société de transport de Laval",
2582 + "url": "https://www.stlaval.ca",
2583 + "careers_url": "https://lavaltransit.njoyn.com/CL2/xweb/xweb.asp?clid=60406&page=joblisting&lang=2",
2584 + "sectors": [
2585 + "Transport collectif",
2586 + "Secteur public"
2587 + ],
2588 + "connector": "njoyn",
2589 + "status": "actif",
2590 + "region": "Laval"
2591 + },
2592 + {
2593 + "id": "suncor",
2594 + "name": "Suncor Énergie",
2595 + "url": "https://suncor.com",
2596 + "careers_url": "https://suncor.wd1.myworkdayjobs.com/Suncor_External",
2597 + "sectors": [],
2598 + "connector": "workday",
2599 + "status": "actif",
2600 + "region": "Montréal"
2601 + },
2602 + {
2603 + "id": "sunlife",
2604 + "name": "Sun Life",
2605 + "url": "",
2606 + "careers_url": "https://sunlife.wd3.myworkdayjobs.com/Experienced-Jobs",
2607 + "sectors": [
2608 + "Assurance",
2609 + "Finance"
2610 + ],
2611 + "connector": "workday",
2612 + "status": "actif",
2613 + "region": "Montréal, Québec"
2614 + },
2615 + {
2616 + "id": "surmesur",
2617 + "name": "Surmesur",
2618 + "url": "",
2619 + "careers_url": "https://surmesur.bamboohr.com/careers",
2620 + "sectors": [
2621 + "Mode",
2622 + "Commerce de détail"
2623 + ],
2624 + "connector": "bamboohr",
2625 + "status": "actif",
2626 + "region": "Québec, Laval"
2627 + },
2628 + {
2629 + "id": "sweat_pants_agency",
2630 + "name": "Sweat Pants Agency",
2631 + "url": "",
2632 + "careers_url": "https://apply.workable.com/sweat-pants-agency",
2633 + "sectors": [
2634 + "Marketing"
2635 + ],
2636 + "connector": "workable",
2637 + "status": "actif",
2638 + "region": "Montréal, Laval, Québec"
2639 + },
2640 + {
2641 + "id": "talan",
2642 + "name": "Talan",
2643 + "url": "",
2644 + "careers_url": "https://jobs.smartrecruiters.com/company/Talan",
2645 + "sectors": [
2646 + "TI",
2647 + "Conseil"
2648 + ],
2649 + "connector": "smartrecruiters",
2650 + "status": "actif",
2651 + "region": "Montréal"
2652 + },
2653 + {
2654 + "id": "talsom",
2655 + "name": "Talsom",
2656 + "url": "",
2657 + "careers_url": "https://jobs.smartrecruiters.com/company/talsom",
2658 + "sectors": [
2659 + "TI"
2660 + ],
2661 + "connector": "smartrecruiters",
2662 + "status": "actif",
2663 + "region": "Montréal"
2664 + },
2665 + {
2666 + "id": "tandemlaunch",
2667 + "name": "TandemLaunch",
2668 + "url": "https://www.tandemlaunch.com",
2669 + "careers_url": "https://boards.greenhouse.io/tandemlaunch",
2670 + "sectors": [
2671 + "TI",
2672 + "Deep tech"
2673 + ],
2674 + "connector": "greenhouse",
2675 + "status": "actif",
2676 + "region": "Montréal"
2677 + },
2678 + {
2679 + "id": "td",
2680 + "name": "Groupe Banque TD",
2681 + "url": "",
2682 + "careers_url": "https://td.wd3.myworkdayjobs.com/TD_Bank_Careers",
2683 + "sectors": [
2684 + "Finance"
2685 + ],
2686 + "connector": "workday",
2687 + "status": "actif",
2688 + "region": "Montréal, Québec"
2689 + },
2690 + {
2691 + "id": "techo_bloc",
2692 + "name": "Techo-Bloc",
2693 + "url": "",
2694 + "careers_url": "https://jobs.smartrecruiters.com/company/techo-bloc",
2695 + "sectors": [
2696 + "Manufacture",
2697 + "Aménagement"
2698 + ],
2699 + "connector": "smartrecruiters",
2700 + "status": "actif",
2701 + "region": "Chambly, Saint-Hubert"
2702 + },
2703 + {
2704 + "id": "tecsys",
2705 + "name": "Tecsys",
2706 + "url": "",
2707 + "careers_url": "https://apply.workable.com/tecsys",
2708 + "sectors": [
2709 + "TI",
2710 + "Logistique"
2711 + ],
2712 + "connector": "workable",
2713 + "status": "actif",
2714 + "region": "Montréal"
2715 + },
2716 + {
2717 + "id": "tehora",
2718 + "name": "TEHORA",
2719 + "url": "",
2720 + "careers_url": "https://apply.workable.com/tehora",
2721 + "sectors": [
2722 + "Ingénierie",
2723 + "TI",
2724 + "Conseil"
2725 + ],
2726 + "connector": "workable",
2727 + "status": "actif",
2728 + "region": "Montréal, Québec, Gatineau"
2729 + },
2730 + {
2731 + "id": "tetrix",
2732 + "name": "Tetrix",
2733 + "url": "",
2734 + "careers_url": "https://jobs.ashbyhq.com/tetrix",
2735 + "sectors": [
2736 + "TI"
2737 + ],
2738 + "connector": "ashby",
2739 + "status": "actif",
2740 + "region": "Montréal"
2741 + },
2742 + {
2743 + "id": "toonboom",
2744 + "name": "Toon Boom Animation",
2745 + "url": "",
2746 + "careers_url": "https://toonboom.bamboohr.com/careers",
2747 + "sectors": [
2748 + "Animation",
2749 + "TI"
2750 + ],
2751 + "connector": "bamboohr",
2752 + "status": "actif",
2753 + "region": "Montréal"
2754 + },
2755 + {
2756 + "id": "transatat1",
2757 + "name": "Transat A.T.",
2758 + "url": "",
2759 + "careers_url": "https://jobs.smartrecruiters.com/company/TransatAT1",
2760 + "sectors": [
2761 + "Voyage",
2762 + "Aérien"
2763 + ],
2764 + "connector": "smartrecruiters",
2765 + "status": "actif",
2766 + "region": "Montréal"
2767 + },
2768 + {
2769 + "id": "triotech",
2770 + "name": "Triotech",
2771 + "url": "",
2772 + "careers_url": "https://triotech.bamboohr.com/careers",
2773 + "sectors": [
2774 + "Divertissement",
2775 + "Manufacture"
2776 + ],
2777 + "connector": "bamboohr",
2778 + "status": "actif",
2779 + "region": "Joliette, Montréal"
2780 + },
2781 + {
2782 + "id": "trois_brasseurs",
2783 + "name": "3 Brasseurs Canada",
2784 + "url": "",
2785 + "careers_url": "https://3brasseurs.breezy.hr",
2786 + "sectors": [
2787 + "Restauration"
2788 + ],
2789 + "connector": "breezy",
2790 + "status": "actif",
2791 + "region": "Montréal, Laval, Brossard"
2792 + },
2793 + {
2794 + "id": "tsmg",
2795 + "name": "TSMG",
2796 + "url": "",
2797 + "careers_url": "https://jobs.lever.co/tsmg",
2798 + "sectors": [
2799 + "Placement",
2800 + "Télécoms"
2801 + ],
2802 + "connector": "lever",
2803 + "status": "actif",
2804 + "region": "Montréal, Québec"
2805 + },
2806 + {
2807 + "id": "ubisoft",
2808 + "name": "Ubisoft",
2809 + "url": "https://www.ubisoft.com",
2810 + "careers_url": "https://jobs.smartrecruiters.com/company/Ubisoft2",
2811 + "sectors": [
2812 + "Jeux vidéo",
2813 + "TI",
2814 + "Création"
2815 + ],
2816 + "connector": "smartrecruiters",
2817 + "status": "actif",
2818 + "region": "Montréal / Québec / Sherbrooke"
2819 + },
2820 + {
2821 + "id": "unit8",
2822 + "name": "Unit8",
2823 + "url": "",
2824 + "careers_url": "https://apply.workable.com/unit8",
2825 + "sectors": [
2826 + "TI",
2827 + "Données"
2828 + ],
2829 + "connector": "workable",
2830 + "status": "actif",
2831 + "region": "Montréal"
2832 + },
2833 + {
2834 + "id": "usmobile",
2835 + "name": "US Mobile",
2836 + "url": "",
2837 + "careers_url": "https://jobs.lever.co/USMobile",
2838 + "sectors": [
2839 + "Télécoms"
2840 + ],
2841 + "connector": "lever",
2842 + "status": "actif",
2843 + "region": "Montréal"
2844 + },
2845 + {
2846 + "id": "vaco",
2847 + "name": "Vaco",
2848 + "url": "",
2849 + "careers_url": "https://job-boards.greenhouse.io/vaco",
2850 + "sectors": [
2851 + "Placement",
2852 + "Conseil"
2853 + ],
2854 + "connector": "greenhouse",
2855 + "status": "actif",
2856 + "region": "Montréal"
2857 + },
2858 + {
2859 + "id": "valsoft_corp",
2860 + "name": "Valsoft",
2861 + "url": "",
2862 + "careers_url": "https://apply.workable.com/valsoft-corp",
2863 + "sectors": [
2864 + "TI",
2865 + "Logiciel"
2866 + ],
2867 + "connector": "workable",
2868 + "status": "actif",
2869 + "region": "Montréal"
2870 + },
2871 + {
2872 + "id": "valtech",
2873 + "name": "Valtech",
2874 + "url": "",
2875 + "careers_url": "https://job-boards.greenhouse.io/valtech",
2876 + "sectors": [
2877 + "TI"
2878 + ],
2879 + "connector": "greenhouse",
2880 + "status": "actif",
2881 + "region": "Montréal"
2882 + },
2883 + {
2884 + "id": "vaporus_inc",
2885 + "name": "Vaporus",
2886 + "url": "",
2887 + "careers_url": "https://vaporus-inc.breezy.hr",
2888 + "sectors": [
2889 + "Commerce de détail"
2890 + ],
2891 + "connector": "breezy",
2892 + "status": "actif",
2893 + "region": "Montréal"
2894 + },
2895 + {
2896 + "id": "vasco",
2897 + "name": "Vasco",
2898 + "url": "",
2899 + "careers_url": "https://jobs.ashbyhq.com/vasco",
2900 + "sectors": [
2901 + "TI"
2902 + ],
2903 + "connector": "ashby",
2904 + "status": "actif",
2905 + "region": "Montréal"
2906 + },
2907 + {
2908 + "id": "venturemedia",
2909 + "name": "Venture Media",
2910 + "url": "",
2911 + "careers_url": "https://jobs.smartrecruiters.com/company/VentureMedia",
2912 + "sectors": [
2913 + "Médias"
2914 + ],
2915 + "connector": "smartrecruiters",
2916 + "status": "actif",
2917 + "region": "Montréal"
2918 + },
2919 + {
2920 + "id": "vicpark",
2921 + "name": "Victoria Park Medispa",
2922 + "url": "",
2923 + "careers_url": "https://vicpark.bamboohr.com/careers",
2924 + "sectors": [
2925 + "Santé",
2926 + "Esthétique"
2927 + ],
2928 + "connector": "bamboohr",
2929 + "status": "actif",
2930 + "region": "Montréal, Gatineau, Granby"
2931 + },
2932 + {
2933 + "id": "videotron",
2934 + "name": "Vidéotron",
2935 + "url": "https://videotron.com",
2936 + "careers_url": "https://jobs.smartrecruiters.com/company/videotron",
2937 + "sectors": [],
2938 + "connector": "smartrecruiters",
2939 + "status": "actif",
2940 + "region": "Montréal"
2941 + },
2942 + {
2943 + "id": "ville_gatineau",
2944 + "name": "Ville de Gatineau",
2945 + "url": "https://www.gatineau.ca",
2946 + "careers_url": "https://gatineau.njoyn.com/CL2/xweb/xweb.asp?clid=27082&page=joblisting&lang=2",
2947 + "sectors": [
2948 + "Municipal",
2949 + "Secteur public"
2950 + ],
2951 + "connector": "njoyn",
2952 + "status": "actif",
2953 + "region": "Gatineau"
2954 + },
2955 + {
2956 + "id": "ville_terrebonne",
2957 + "name": "Ville de Terrebonne",
2958 + "url": "https://www.ville.terrebonne.qc.ca",
2959 + "careers_url": "https://clients.njoyn.com/cl4/xweb/xweb.asp?clid=71764&page=joblisting&lang=2",
2960 + "sectors": [
2961 + "Municipal",
2962 + "Secteur public"
2963 + ],
2964 + "connector": "njoyn",
2965 + "status": "actif",
2966 + "region": "Terrebonne"
2967 + },
2968 + {
2969 + "id": "vmlcanadaen",
2970 + "name": "VML Canada",
2971 + "url": "",
2972 + "careers_url": "https://job-boards.greenhouse.io/vmlcanadaen",
2973 + "sectors": [
2974 + "Publicité"
2975 + ],
2976 + "connector": "greenhouse",
2977 + "status": "actif",
2978 + "region": "Montréal"
2979 + },
2980 + {
2981 + "id": "vo2_group",
2982 + "name": "VO2 Group",
2983 + "url": "",
2984 + "careers_url": "https://jobs.lever.co/vo2-group",
2985 + "sectors": [
2986 + "TI",
2987 + "Conseil"
2988 + ],
2989 + "connector": "lever",
2990 + "status": "actif",
2991 + "region": "Montréal"
2992 + },
2993 + {
2994 + "id": "vooban",
2995 + "name": "Vooban",
2996 + "url": "",
2997 + "careers_url": "https://job-boards.greenhouse.io/vooban",
2998 + "sectors": [
2999 + "TI"
3000 + ],
3001 + "connector": "greenhouse",
3002 + "status": "actif",
3003 + "region": "Québec"
3004 + },
3005 + {
3006 + "id": "vosker",
3007 + "name": "Vosker",
3008 + "url": "",
3009 + "careers_url": "https://jobs.smartrecruiters.com/company/vosker",
3010 + "sectors": [
3011 + "TI",
3012 + "Production"
3013 + ],
3014 + "connector": "smartrecruiters",
3015 + "status": "actif",
3016 + "region": "Victoriaville"
3017 + },
3018 + {
3019 + "id": "voxdata",
3020 + "name": "VOXDATA",
3021 + "url": "",
3022 + "careers_url": "https://voxdata.breezy.hr",
3023 + "sectors": [
3024 + "Centre d'appels"
3025 + ],
3026 + "connector": "breezy",
3027 + "status": "actif",
3028 + "region": "Montréal"
3029 + },
3030 + {
3031 + "id": "walmart",
3032 + "name": "Walmart Canada",
3033 + "url": "https://walmart.ca",
3034 + "careers_url": "https://walmart.wd504.myworkdayjobs.com/WalmartExternal",
3035 + "sectors": [],
3036 + "connector": "workday",
3037 + "status": "actif",
3038 + "region": "Montréal"
3039 + },
3040 + {
3041 + "id": "xplornet",
3042 + "name": "Xplornet",
3043 + "url": "",
3044 + "careers_url": "https://jobs.smartrecruiters.com/company/XPLORNET",
3045 + "sectors": [
3046 + "Télécoms"
3047 + ],
3048 + "connector": "smartrecruiters",
3049 + "status": "actif",
3050 + "region": "Montréal"
3051 + },
3052 + {
3053 + "id": "xsolla",
3054 + "name": "Xsolla",
3055 + "url": "",
3056 + "careers_url": "https://jobs.lever.co/xsolla",
3057 + "sectors": [
3058 + "TI",
3059 + "Jeux vidéo"
3060 + ],
3061 + "connector": "lever",
3062 + "status": "actif",
3063 + "region": "Montréal"
3064 + },
3065 + {
3066 + "id": "youset",
3067 + "name": "YouSet",
3068 + "url": "",
3069 + "careers_url": "https://youset.breezy.hr",
3070 + "sectors": [
3071 + "Assurance",
3072 + "TI"
3073 + ],
3074 + "connector": "breezy",
3075 + "status": "actif",
3076 + "region": "Montréal"
3077 + },
3078 + {
3079 + "id": "ziptrekeco",
3080 + "name": "Ziptrek Tremblant",
3081 + "url": "https://tremblant.ziptrek.com",
3082 + "careers_url": "https://ziptrekeco.bamboohr.com/careers",
3083 + "sectors": [
3084 + "manufacturier/commerce"
3085 + ],
3086 + "connector": "bamboohr",
3087 + "status": "actif",
3088 + "region": ""
3089 + },
3090 + {
3091 + "id": "alan",
3092 + "name": "Alan Canada",
3093 + "url": "",
3094 + "careers_url": "https://jobs.ashbyhq.com/alan",
3095 + "sectors": [
3096 + "Assurance"
3097 + ],
3098 + "connector": "ashby",
3099 + "status": "actif",
3100 + "region": "Montréal"
3101 + },
3102 + {
3103 + "id": "billups",
3104 + "name": "Billups",
3105 + "url": "",
3106 + "careers_url": "https://jobs.ashbyhq.com/billups",
3107 + "sectors": [
3108 + "Marketing"
3109 + ],
3110 + "connector": "ashby",
3111 + "status": "actif",
3112 + "region": "Montréal"
3113 + },
3114 + {
3115 + "id": "exegy",
3116 + "name": "Exegy",
3117 + "url": "",
3118 + "careers_url": "https://jobs.ashbyhq.com/exegy",
3119 + "sectors": [
3120 + "TI"
3121 + ],
3122 + "connector": "ashby",
3123 + "status": "actif",
3124 + "region": "Montréal"
3125 + },
3126 + {
3127 + "id": "lambda",
3128 + "name": "Lambda",
3129 + "url": "",
3130 + "careers_url": "https://jobs.ashbyhq.com/lambda",
3131 + "sectors": [
3132 + "TI"
3133 + ],
3134 + "connector": "ashby",
3135 + "status": "actif",
3136 + "region": "Bécancour"
3137 + },
3138 + {
3139 + "id": "neofinancial",
3140 + "name": "Neo Financial",
3141 + "url": "",
3142 + "careers_url": "https://jobs.ashbyhq.com/neofinancial",
3143 + "sectors": [
3144 + "Finance"
3145 + ],
3146 + "connector": "ashby",
3147 + "status": "actif",
3148 + "region": "Laval"
3149 + },
3150 + {
3151 + "id": "bdl_energie",
3152 + "name": "BDL Énergie",
3153 + "url": "",
3154 + "careers_url": "https://bdl-energie.breezy.hr",
3155 + "sectors": [
3156 + "Énergie"
3157 + ],
3158 + "connector": "breezy",
3159 + "status": "actif",
3160 + "region": "Sherbrooke"
3161 + },
3162 + {
3163 + "id": "black_mcdonald_francais",
3164 + "name": "Black & McDonald",
3165 + "url": "",
3166 + "careers_url": "https://black-mcdonald-francais.breezy.hr",
3167 + "sectors": [
3168 + "Construction"
3169 + ],
3170 + "connector": "breezy",
3171 + "status": "actif",
3172 + "region": "Montréal"
3173 + },
3174 + {
3175 + "id": "lindt_sprunglicanada",
3176 + "name": "Lindt & Sprüngli Canada",
3177 + "url": "",
3178 + "careers_url": "https://lindt-sprunglicanada.breezy.hr",
3179 + "sectors": [
3180 + "Commerce de détail"
3181 + ],
3182 + "connector": "breezy",
3183 + "status": "actif",
3184 + "region": "Gatineau"
3185 + },
3186 + {
3187 + "id": "panda7",
3188 + "name": "Panda7",
3189 + "url": "",
3190 + "careers_url": "https://panda7.breezy.hr",
3191 + "sectors": [
3192 + "Assurance"
3193 + ],
3194 + "connector": "breezy",
3195 + "status": "actif",
3196 + "region": "Montréal"
3197 + },
3198 + {
3199 + "id": "progesys_inc",
3200 + "name": "Progesys",
3201 + "url": "",
3202 + "careers_url": "https://progesys-inc.breezy.hr",
3203 + "sectors": [
3204 + "Ingénierie"
3205 + ],
3206 + "connector": "breezy",
3207 + "status": "actif",
3208 + "region": "Contrecœur"
3209 + },
3210 + {
3211 + "id": "sense_engineering",
3212 + "name": "Sense Ingénierie",
3213 + "url": "",
3214 + "careers_url": "https://sense-engineering.breezy.hr",
3215 + "sectors": [
3216 + "Ingénierie"
3217 + ],
3218 + "connector": "breezy",
3219 + "status": "actif",
3220 + "region": "Montréal"
3221 + },
3222 + {
3223 + "id": "telus_health_7fe6b0fe8614",
3224 + "name": "TELUS Santé — Cliniques",
3225 + "url": "",
3226 + "careers_url": "https://telus-health-7fe6b0fe8614.breezy.hr",
3227 + "sectors": [
3228 + "Santé"
3229 + ],
3230 + "connector": "breezy",
3231 + "status": "actif",
3232 + "region": "Montréal"
3233 + },
3234 + {
3235 + "id": "turbulent",
3236 + "name": "Turbulent",
3237 + "url": "",
3238 + "careers_url": "https://turbulent.breezy.hr",
3239 + "sectors": [
3240 + "Jeu vidéo"
3241 + ],
3242 + "connector": "breezy",
3243 + "status": "actif",
3244 + "region": "Montréal"
3245 + },
3246 + {
3247 + "id": "aloyoga",
3248 + "name": "Alo Yoga",
3249 + "url": "",
3250 + "careers_url": "https://job-boards.greenhouse.io/aloyoga",
3251 + "sectors": [
3252 + "Commerce de détail"
3253 + ],
3254 + "connector": "greenhouse",
3255 + "status": "actif",
3256 + "region": "Laval"
3257 + },
3258 + {
3259 + "id": "autotradercanada",
3260 + "name": "AutoTrader Canada",
3261 + "url": "",
3262 + "careers_url": "https://job-boards.greenhouse.io/autotradercanada",
3263 + "sectors": [
3264 + "Automobile"
3265 + ],
3266 + "connector": "greenhouse",
3267 + "status": "actif",
3268 + "region": "Longueuil"
3269 + },
3270 + {
3271 + "id": "cloudchamberfr",
3272 + "name": "Cloud Chamber Montréal",
3273 + "url": "",
3274 + "careers_url": "https://job-boards.greenhouse.io/cloudchamberfr",
3275 + "sectors": [
3276 + "Jeu vidéo"
3277 + ],
3278 + "connector": "greenhouse",
3279 + "status": "actif",
3280 + "region": "Montréal"
3281 + },
3282 + {
3283 + "id": "clubmonaco",
3284 + "name": "Club Monaco",
3285 + "url": "",
3286 + "careers_url": "https://job-boards.greenhouse.io/clubmonaco",
3287 + "sectors": [
3288 + "Commerce de détail"
3289 + ],
3290 + "connector": "greenhouse",
3291 + "status": "actif",
3292 + "region": "Montréal"
3293 + },
3294 + {
3295 + "id": "coveofr",
3296 + "name": "Coveo",
3297 + "url": "",
3298 + "careers_url": "https://job-boards.greenhouse.io/coveofr",
3299 + "sectors": [
3300 + "TI"
3301 + ],
3302 + "connector": "greenhouse",
3303 + "status": "actif",
3304 + "region": "Québec"
3305 + },
3306 + {
3307 + "id": "keelinfrastructure",
3308 + "name": "Keel Infrastructure",
3309 + "url": "",
3310 + "careers_url": "https://job-boards.greenhouse.io/keelinfrastructure",
3311 + "sectors": [
3312 + "Infrastructures"
3313 + ],
3314 + "connector": "greenhouse",
3315 + "status": "actif",
3316 + "region": "Montréal"
3317 + },
3318 + {
3319 + "id": "laportefr",
3320 + "name": "Laporte Experts Conseils",
3321 + "url": "",
3322 + "careers_url": "https://job-boards.greenhouse.io/laportefr",
3323 + "sectors": [
3324 + "Ingénierie"
3325 + ],
3326 + "connector": "greenhouse",
3327 + "status": "actif",
3328 + "region": "Montréal"
3329 + },
3330 + {
3331 + "id": "lasenza",
3332 + "name": "La Senza",
3333 + "url": "",
3334 + "careers_url": "https://job-boards.greenhouse.io/lasenza",
3335 + "sectors": [
3336 + "Commerce de détail"
3337 + ],
3338 + "connector": "greenhouse",
3339 + "status": "actif",
3340 + "region": "Québec"
3341 + },
3342 + {
3343 + "id": "latys",
3344 + "name": "Latys Intelligence",
3345 + "url": "",
3346 + "careers_url": "https://job-boards.greenhouse.io/latys",
3347 + "sectors": [
3348 + "TI"
3349 + ],
3350 + "connector": "greenhouse",
3351 + "status": "actif",
3352 + "region": "Montréal"
3353 + },
3354 + {
3355 + "id": "loizero",
3356 + "name": "LoiZéro",
3357 + "url": "",
3358 + "careers_url": "https://job-boards.greenhouse.io/loizero",
3359 + "sectors": [
3360 + "Services juridiques"
3361 + ],
3362 + "connector": "greenhouse",
3363 + "status": "actif",
3364 + "region": "Montréal"
3365 + },
3366 + {
3367 + "id": "lyft",
3368 + "name": "Lyft",
3369 + "url": "",
3370 + "careers_url": "https://job-boards.greenhouse.io/lyft",
3371 + "sectors": [
3372 + "Transport"
3373 + ],
3374 + "connector": "greenhouse",
3375 + "status": "actif",
3376 + "region": "Montréal"
3377 + },
3378 + {
3379 + "id": "mejuri",
3380 + "name": "Mejuri",
3381 + "url": "",
3382 + "careers_url": "https://job-boards.greenhouse.io/mejuri",
3383 + "sectors": [
3384 + "Commerce de détail"
3385 + ],
3386 + "connector": "greenhouse",
3387 + "status": "actif",
3388 + "region": "Montréal"
3389 + },
3390 + {
3391 + "id": "royalvet",
3392 + "name": "Royal Vet",
3393 + "url": "",
3394 + "careers_url": "https://job-boards.greenhouse.io/royalvet",
3395 + "sectors": [
3396 + "Santé animale"
3397 + ],
3398 + "connector": "greenhouse",
3399 + "status": "actif",
3400 + "region": "Montréal"
3401 + },
3402 + {
3403 + "id": "sonypicturesimageworks",
3404 + "name": "Sony Pictures Imageworks",
3405 + "url": "",
3406 + "careers_url": "https://job-boards.greenhouse.io/sonypicturesimageworks",
3407 + "sectors": [
3408 + "Effets visuels"
3409 + ],
3410 + "connector": "greenhouse",
3411 + "status": "actif",
3412 + "region": "Montréal"
3413 + },
3414 + {
3415 + "id": "studiokraftonboard",
3416 + "name": "KRAFTON Montréal Studio",
3417 + "url": "",
3418 + "careers_url": "https://job-boards.greenhouse.io/studiokraftonboard",
3419 + "sectors": [
3420 + "Jeu vidéo"
3421 + ],
3422 + "connector": "greenhouse",
3423 + "status": "actif",
3424 + "region": "Montréal"
3425 + },
3426 + {
3427 + "id": "terrestarsolutionsfr",
3428 + "name": "Terrestar Solutions",
3429 + "url": "",
3430 + "careers_url": "https://job-boards.greenhouse.io/terrestarsolutionsfr",
3431 + "sectors": [
3432 + "Télécommunications"
3433 + ],
3434 + "connector": "greenhouse",
3435 + "status": "actif",
3436 + "region": "Montréal"
3437 + },
3438 + {
3439 + "id": "tobogganlabs",
3440 + "name": "Toboggan Labs",
3441 + "url": "",
3442 + "careers_url": "https://job-boards.greenhouse.io/tobogganlabs",
3443 + "sectors": [
3444 + "Jeu vidéo"
3445 + ],
3446 + "connector": "greenhouse",
3447 + "status": "actif",
3448 + "region": "Montréal"
3449 + },
3450 + {
3451 + "id": "cologix",
3452 + "name": "Cologix",
3453 + "url": "",
3454 + "careers_url": "https://jobs.lever.co/cologix",
3455 + "sectors": [
3456 + "TI"
3457 + ],
3458 + "connector": "lever",
3459 + "status": "actif",
3460 + "region": "Montréal"
3461 + },
3462 + {
3463 + "id": "daniels_sharpsmart",
3464 + "name": "Daniels Health Canada",
3465 + "url": "",
3466 + "careers_url": "https://jobs.lever.co/daniels-sharpsmart",
3467 + "sectors": [
3468 + "Santé"
3469 + ],
3470 + "connector": "lever",
3471 + "status": "actif",
3472 + "region": "Montréal"
3473 + },
3474 + {
3475 + "id": "ecosystem",
3476 + "name": "Ecosystem Énergie",
3477 + "url": "",
3478 + "careers_url": "https://jobs.lever.co/ecosystem",
3479 + "sectors": [
3480 + "Énergie"
3481 + ],
3482 + "connector": "lever",
3483 + "status": "actif",
3484 + "region": "Montréal"
3485 + },
3486 + {
3487 + "id": "lrdgonline",
3488 + "name": "LRDG (Language Research Development Group)",
3489 + "url": "",
3490 + "careers_url": "https://jobs.lever.co/lrdgonline",
3491 + "sectors": [
3492 + "Éducation"
3493 + ],
3494 + "connector": "lever",
3495 + "status": "actif",
3496 + "region": "Montréal"
3497 + },
3498 + {
3499 + "id": "maquettevirtuelle",
3500 + "name": "Maquette Virtuelle",
3501 + "url": "",
3502 + "careers_url": "https://jobs.lever.co/maquettevirtuelle",
3503 + "sectors": [
3504 + "Ingénierie"
3505 + ],
3506 + "connector": "lever",
3507 + "status": "actif",
3508 + "region": "Montréal"
3509 + },
3510 + {
3511 + "id": "telesat",
3512 + "name": "Telesat",
3513 + "url": "",
3514 + "careers_url": "https://jobs.lever.co/telesat",
3515 + "sectors": [
3516 + "Aérospatiale"
3517 + ],
3518 + "connector": "lever",
3519 + "status": "actif",
3520 + "region": "Gatineau"
3521 + },
3522 + {
3523 + "id": "agiledss",
3524 + "name": "Agile DSS",
3525 + "url": "",
3526 + "careers_url": "https://agiledss.recruitee.com",
3527 + "sectors": [
3528 + "TI"
3529 + ],
3530 + "connector": "recruitee",
3531 + "status": "actif",
3532 + "region": "Montréal"
3533 + },
3534 + {
3535 + "id": "avantageplus",
3536 + "name": "Avantage Plus",
3537 + "url": "",
3538 + "careers_url": "https://avantageplus.recruitee.com",
3539 + "sectors": [
3540 + "Services"
3541 + ],
3542 + "connector": "recruitee",
3543 + "status": "actif",
3544 + "region": "Québec"
3545 + },
3546 + {
3547 + "id": "eurofinsenvironex",
3548 + "name": "Eurofins EnvironeX",
3549 + "url": "",
3550 + "careers_url": "https://eurofinsenvironex.recruitee.com",
3551 + "sectors": [
3552 + "Laboratoires"
3553 + ],
3554 + "connector": "recruitee",
3555 + "status": "actif",
3556 + "region": "Longueuil"
3557 + },
3558 + {
3559 + "id": "pivotandedge",
3560 + "name": "Pivot + Edge",
3561 + "url": "",
3562 + "careers_url": "https://pivotandedge.recruitee.com",
3563 + "sectors": [
3564 + "Services"
3565 + ],
3566 + "connector": "recruitee",
3567 + "status": "actif",
3568 + "region": "Gatineau"
3569 + },
3570 + {
3571 + "id": "projevia",
3572 + "name": "Projevia",
3573 + "url": "",
3574 + "careers_url": "https://projevia.recruitee.com",
3575 + "sectors": [
3576 + "Ingénierie"
3577 + ],
3578 + "connector": "recruitee",
3579 + "status": "actif",
3580 + "region": "Montréal"
3581 + },
3582 + {
3583 + "id": "stasinc",
3584 + "name": "STAS",
3585 + "url": "",
3586 + "careers_url": "https://stasinc.recruitee.com",
3587 + "sectors": [
3588 + "Fabrication"
3589 + ],
3590 + "connector": "recruitee",
3591 + "status": "actif",
3592 + "region": "Saguenay"
3593 + },
3594 + {
3595 + "id": "teknionroybreton",
3596 + "name": "Teknion Roy & Breton",
3597 + "url": "",
3598 + "careers_url": "https://teknionroybreton.recruitee.com",
3599 + "sectors": [
3600 + "Fabrication"
3601 + ],
3602 + "connector": "recruitee",
3603 + "status": "actif",
3604 + "region": "Lévis"
3605 + },
3606 + {
3607 + "id": "artelia",
3608 + "name": "Artelia Canada",
3609 + "url": "",
3610 + "careers_url": "https://jobs.smartrecruiters.com/company/artelia",
3611 + "sectors": [
3612 + "Ingénierie"
3613 + ],
3614 + "connector": "smartrecruiters",
3615 + "status": "actif",
3616 + "region": "Montréal"
3617 + },
3618 + {
3619 + "id": "californiaclosets",
3620 + "name": "California Closets",
3621 + "url": "",
3622 + "careers_url": "https://jobs.smartrecruiters.com/company/californiaclosets",
3623 + "sectors": [
3624 + "Fabrication"
3625 + ],
3626 + "connector": "smartrecruiters",
3627 + "status": "actif",
3628 + "region": "Montréal"
3629 + },
3630 + {
3631 + "id": "centremultiethniquedequbec",
3632 + "name": "Centre multiethnique de Québec",
3633 + "url": "",
3634 + "careers_url": "https://jobs.smartrecruiters.com/company/centremultiethniquedequbec",
3635 + "sectors": [
3636 + "Services sociaux"
3637 + ],
3638 + "connector": "smartrecruiters",
3639 + "status": "actif",
3640 + "region": "Québec"
3641 + },
3642 + {
3643 + "id": "coledesentrepreneursduqubec",
3644 + "name": "École des entrepreneurs du Québec",
3645 + "url": "",
3646 + "careers_url": "https://jobs.smartrecruiters.com/company/coledesentrepreneursduqubec",
3647 + "sectors": [
3648 + "Éducation"
3649 + ],
3650 + "connector": "smartrecruiters",
3651 + "status": "actif",
3652 + "region": "Montréal"
3653 + },
3654 + {
3655 + "id": "guruorganicenergydrink",
3656 + "name": "GURU Boisson Énergisante",
3657 + "url": "",
3658 + "careers_url": "https://jobs.smartrecruiters.com/company/guruorganicenergydrink",
3659 + "sectors": [
3660 + "Agroalimentaire"
3661 + ],
3662 + "connector": "smartrecruiters",
3663 + "status": "actif",
3664 + "region": "Montréal"
3665 + },
3666 + {
3667 + "id": "hmgroup",
3668 + "name": "H&M",
3669 + "url": "",
3670 + "careers_url": "https://jobs.smartrecruiters.com/company/hmgroup",
3671 + "sectors": [
3672 + "Commerce de détail"
3673 + ],
3674 + "connector": "smartrecruiters",
3675 + "status": "actif",
3676 + "region": "Montréal"
3677 + },
3678 + {
3679 + "id": "lemay",
3680 + "name": "Lemay",
3681 + "url": "",
3682 + "careers_url": "https://jobs.smartrecruiters.com/company/lemay",
3683 + "sectors": [
3684 + "Architecture"
3685 + ],
3686 + "connector": "smartrecruiters",
3687 + "status": "actif",
3688 + "region": "Montréal"
3689 + },
3690 + {
3691 + "id": "linenchest",
3692 + "name": "Linen Chest",
3693 + "url": "",
3694 + "careers_url": "https://jobs.smartrecruiters.com/company/linenchest",
3695 + "sectors": [
3696 + "Commerce de détail"
3697 + ],
3698 + "connector": "smartrecruiters",
3699 + "status": "actif",
3700 + "region": "Laval"
3701 + },
3702 + {
3703 + "id": "renaud_bray",
3704 + "name": "Renaud-Bray",
3705 + "url": "",
3706 + "careers_url": "https://jobs.smartrecruiters.com/company/renaud-bray",
3707 + "sectors": [
3708 + "Commerce de détail"
3709 + ],
3710 + "connector": "smartrecruiters",
3711 + "status": "actif",
3712 + "region": "Montréal"
3713 + },
3714 + {
3715 + "id": "sikaag",
3716 + "name": "Sika Canada",
3717 + "url": "",
3718 + "careers_url": "https://jobs.smartrecruiters.com/company/sikaag",
3719 + "sectors": [
3720 + "Construction"
3721 + ],
3722 + "connector": "smartrecruiters",
3723 + "status": "actif",
3724 + "region": "Pointe-Claire"
3725 + },
3726 + {
3727 + "id": "sodexocanadaltd",
3728 + "name": "Sodexo Canada",
3729 + "url": "",
3730 + "careers_url": "https://jobs.smartrecruiters.com/company/sodexocanadaltd",
3731 + "sectors": [
3732 + "Services alimentaires"
3733 + ],
3734 + "connector": "smartrecruiters",
3735 + "status": "actif",
3736 + "region": "Montréal"
3737 + },
3738 + {
3739 + "id": "structube1",
3740 + "name": "Structube",
3741 + "url": "",
3742 + "careers_url": "https://jobs.smartrecruiters.com/company/structube1",
3743 + "sectors": [
3744 + "Commerce de détail"
3745 + ],
3746 + "connector": "smartrecruiters",
3747 + "status": "actif",
3748 + "region": "Montréal"
3749 + },
3750 + {
3751 + "id": "trupanion1",
3752 + "name": "Trupanion",
3753 + "url": "",
3754 + "careers_url": "https://jobs.smartrecruiters.com/company/trupanion1",
3755 + "sectors": [
3756 + "Assurance"
3757 + ],
3758 + "connector": "smartrecruiters",
3759 + "status": "actif",
3760 + "region": "Montréal"
3761 + },
3762 + {
3763 + "id": "charlotte_tilbury",
3764 + "name": "Charlotte Tilbury",
3765 + "url": "",
3766 + "careers_url": "https://apply.workable.com/charlotte-tilbury",
3767 + "sectors": [
3768 + "Commerce de détail"
3769 + ],
3770 + "connector": "workable",
3771 + "status": "actif",
3772 + "region": "Montréal"
3773 + },
3774 + {
3775 + "id": "csncollision",
3776 + "name": "CSN Collision",
3777 + "url": "",
3778 + "careers_url": "https://apply.workable.com/csncollision",
3779 + "sectors": [
3780 + "Automobile"
3781 + ],
3782 + "connector": "workable",
3783 + "status": "actif",
3784 + "region": "Montréal"
3785 + },
3786 + {
3787 + "id": "cts_foods_brokers_inc",
3788 + "name": "CTS Foods Brokers",
3789 + "url": "",
3790 + "careers_url": "https://apply.workable.com/cts-foods-brokers-inc",
3791 + "sectors": [
3792 + "Agroalimentaire"
3793 + ],
3794 + "connector": "workable",
3795 + "status": "actif",
3796 + "region": "Montréal"
3797 + },
3798 + {
3799 + "id": "damotech",
3800 + "name": "Damotech",
3801 + "url": "",
3802 + "careers_url": "https://apply.workable.com/damotech",
3803 + "sectors": [
3804 + "Fabrication"
3805 + ],
3806 + "connector": "workable",
3807 + "status": "actif",
3808 + "region": "Boucherville"
3809 + },
3810 + {
3811 + "id": "delmar_international_inc",
3812 + "name": "Delmar International",
3813 + "url": "",
3814 + "careers_url": "https://apply.workable.com/delmar-international-inc",
3815 + "sectors": [
3816 + "Logistique"
3817 + ],
3818 + "connector": "workable",
3819 + "status": "actif",
3820 + "region": "Montréal"
3821 + },
3822 + {
3823 + "id": "export_development_canada",
3824 + "name": "Exportation et développement Canada (EDC)",
3825 + "url": "",
3826 + "careers_url": "https://apply.workable.com/export-development-canada",
3827 + "sectors": [
3828 + "Finance"
3829 + ],
3830 + "connector": "workable",
3831 + "status": "actif",
3832 + "region": "Montréal"
3833 + },
3834 + {
3835 + "id": "financeit",
3836 + "name": "Financeit",
3837 + "url": "",
3838 + "careers_url": "https://apply.workable.com/financeit",
3839 + "sectors": [
3840 + "Finance"
3841 + ],
3842 + "connector": "workable",
3843 + "status": "actif",
3844 + "region": "Montréal"
3845 + },
3846 + {
3847 + "id": "flo_addenergie",
3848 + "name": "FLO (AddÉnergie)",
3849 + "url": "",
3850 + "careers_url": "https://apply.workable.com/flo-addenergie",
3851 + "sectors": [
3852 + "Énergie"
3853 + ],
3854 + "connector": "workable",
3855 + "status": "actif",
3856 + "region": "Québec"
3857 + },
3858 + {
3859 + "id": "keywords_intl1",
3860 + "name": "Keywords Studios",
3861 + "url": "",
3862 + "careers_url": "https://apply.workable.com/keywords-intl1",
3863 + "sectors": [
3864 + "Jeu vidéo"
3865 + ],
3866 + "connector": "workable",
3867 + "status": "actif",
3868 + "region": "Montréal"
3869 + },
3870 + {
3871 + "id": "rentokil_initial",
3872 + "name": "Rentokil Initial",
3873 + "url": "",
3874 + "careers_url": "https://apply.workable.com/rentokil-initial",
3875 + "sectors": [
3876 + "Services"
3877 + ],
3878 + "connector": "workable",
3879 + "status": "actif",
3880 + "region": "Montréal"
3881 + },
3882 + {
3883 + "id": "starlink_aviation",
3884 + "name": "Starlink Aviation",
3885 + "url": "",
3886 + "careers_url": "https://apply.workable.com/starlink-aviation",
3887 + "sectors": [
3888 + "Aérospatiale"
3889 + ],
3890 + "connector": "workable",
3891 + "status": "actif",
3892 + "region": "Dorval"
3893 + },
3894 + {
3895 + "id": "abbott",
3896 + "name": "Abbott",
3897 + "url": "",
3898 + "careers_url": "https://abbott.wd5.myworkdayjobs.com/abbottcareers",
3899 + "sectors": [
3900 + "Santé"
3901 + ],
3902 + "connector": "workday",
3903 + "status": "actif",
3904 + "region": "Montréal"
3905 + },
3906 + {
3907 + "id": "allstate",
3908 + "name": "Allstate Canada",
3909 + "url": "",
3910 + "careers_url": "https://allstate.wd5.myworkdayjobs.com/allstate_careers",
3911 + "sectors": [
3912 + "Assurance"
3913 + ],
3914 + "connector": "workday",
3915 + "status": "actif",
3916 + "region": "Québec"
3917 + },
3918 + {
3919 + "id": "aritzia",
3920 + "name": "Aritzia",
3921 + "url": "",
3922 + "careers_url": "https://aritzia.wd3.myworkdayjobs.com/external",
3923 + "sectors": [
3924 + "Commerce de détail"
3925 + ],
3926 + "connector": "workday",
3927 + "status": "actif",
3928 + "region": "Laval"
3929 + },
3930 + {
3931 + "id": "cineplex",
3932 + "name": "Cineplex",
3933 + "url": "",
3934 + "careers_url": "https://cineplex.wd3.myworkdayjobs.com/Cineplex",
3935 + "sectors": [
3936 + "Divertissement"
3937 + ],
3938 + "connector": "workday",
3939 + "status": "actif",
3940 + "region": "Gatineau"
3941 + },
3942 + {
3943 + "id": "consignaction",
3944 + "name": "Consignaction (AQRCB)",
3945 + "url": "",
3946 + "careers_url": "https://consignaction.wd10.myworkdayjobs.com/Consignaction_carrieres",
3947 + "sectors": [
3948 + "Environnement"
3949 + ],
3950 + "connector": "workday",
3951 + "status": "actif",
3952 + "region": "Montréal"
3953 + },
3954 + {
3955 + "id": "dentalcorp",
3956 + "name": "Dentalcorp",
3957 + "url": "",
3958 + "careers_url": "https://dentalcorp.wd3.myworkdayjobs.com/dentalcorp",
3959 + "sectors": [
3960 + "Santé"
3961 + ],
3962 + "connector": "workday",
3963 + "status": "actif",
3964 + "region": "Montréal"
3965 + },
3966 + {
3967 + "id": "fedex",
3968 + "name": "FedEx Express Canada",
3969 + "url": "",
3970 + "careers_url": "https://fedex.wd1.myworkdayjobs.com/FXE-Canada_External_Career_Site",
3971 + "sectors": [
3972 + "Logistique"
3973 + ],
3974 + "connector": "workday",
3975 + "status": "actif",
3976 + "region": "Québec"
3977 + },
3978 + {
3979 + "id": "fiserv",
3980 + "name": "Fiserv",
3981 + "url": "",
3982 + "careers_url": "https://fiserv.wd5.myworkdayjobs.com/EXT",
3983 + "sectors": [
3984 + "Finance"
3985 + ],
3986 + "connector": "workday",
3987 + "status": "actif",
3988 + "region": "Laval"
3989 + },
3990 + {
3991 + "id": "guillevin",
3992 + "name": "Guillevin International",
3993 + "url": "",
3994 + "careers_url": "https://guillevin.wd3.myworkdayjobs.com/GIC",
3995 + "sectors": [
3996 + "Distribution"
3997 + ],
3998 + "connector": "workday",
3999 + "status": "actif",
4000 + "region": "Montréal"
4001 + },
4002 + {
4003 + "id": "intelcomgroup",
4004 + "name": "Intelcom (Dragonfly)",
4005 + "url": "",
4006 + "careers_url": "https://intelcomgroup.wd3.myworkdayjobs.com/Intelcom",
4007 + "sectors": [
4008 + "Logistique"
4009 + ],
4010 + "connector": "workday",
4011 + "status": "actif",
4012 + "region": "Montréal"
4013 + },
4014 + {
4015 + "id": "jll",
4016 + "name": "JLL",
4017 + "url": "",
4018 + "careers_url": "https://jll.wd1.myworkdayjobs.com/jllcareers",
4019 + "sectors": [
4020 + "Immobilier"
4021 + ],
4022 + "connector": "workday",
4023 + "status": "actif",
4024 + "region": "Montréal"
4025 + },
4026 + {
4027 + "id": "openlane",
4028 + "name": "OPENLANE Canada",
4029 + "url": "",
4030 + "careers_url": "https://openlane.wd115.myworkdayjobs.com/OPENLANE_Careers",
4031 + "sectors": [
4032 + "Automobile"
4033 + ],
4034 + "connector": "workday",
4035 + "status": "actif",
4036 + "region": "Montréal"
4037 + },
4038 + {
4039 + "id": "shell",
4040 + "name": "Shell Canada",
4041 + "url": "",
4042 + "careers_url": "https://shell.wd3.myworkdayjobs.com/ShellCareers",
4043 + "sectors": [
4044 + "Énergie"
4045 + ],
4046 + "connector": "workday",
4047 + "status": "actif",
4048 + "region": "Montréal-Est"
4049 + },
4050 + {
4051 + "id": "simons",
4052 + "name": "La Maison Simons",
4053 + "url": "",
4054 + "careers_url": "https://simons.wd10.myworkdayjobs.com/Simons_Site",
4055 + "sectors": [
4056 + "Commerce de détail"
4057 + ],
4058 + "connector": "workday",
4059 + "status": "actif",
4060 + "region": "Québec"
4061 + },
4062 + {
4063 + "id": "tjx",
4064 + "name": "TJX Canada (Winners, HomeSense, Marshalls)",
4065 + "url": "",
4066 + "careers_url": "https://tjx.wd1.myworkdayjobs.com/TJX_EXTERNAL",
4067 + "sectors": [
4068 + "Commerce de détail"
4069 + ],
4070 + "connector": "workday",
4071 + "status": "actif",
4072 + "region": "Gatineau"
4073 + },
4074 + {
4075 + "id": "vfc",
4076 + "name": "VF Corporation (The North Face, Vans)",
4077 + "url": "",
4078 + "careers_url": "https://vfc.wd5.myworkdayjobs.com/vfc_careers",
4079 + "sectors": [
4080 + "Commerce de détail"
4081 + ],
4082 + "connector": "workday",
4083 + "status": "actif",
4084 + "region": "Montréal"
4085 + },
4086 + {
4087 + "id": "zoll",
4088 + "name": "ZOLL Medical",
4089 + "url": "",
4090 + "careers_url": "https://zoll.wd5.myworkdayjobs.com/ZOLLMedicalCorp",
4091 + "sectors": [
4092 + "Santé"
4093 + ],
4094 + "connector": "workday",
4095 + "status": "actif",
4096 + "region": "Montréal"
4097 + },
4098 + {
4099 + "id": "acadierouge",
4100 + "name": "Air Canada Rouge",
4101 + "url": "",
4102 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/acvrouge/CANDIDATEPORTAL",
4103 + "sectors": [
4104 + "Aérospatiale"
4105 + ],
4106 + "connector": "dayforce",
4107 + "status": "actif",
4108 + "region": "Montréal"
4109 + },
4110 + {
4111 + "id": "groupeagf",
4112 + "name": "Groupe AGF",
4113 + "url": "",
4114 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/agfgroup/CANDIDATEPORTAL",
4115 + "sectors": [
4116 + "Construction"
4117 + ],
4118 + "connector": "dayforce",
4119 + "status": "actif",
4120 + "region": "Longueuil"
4121 + },
4122 + {
4123 + "id": "portquebec",
4124 + "name": "Administration portuaire de Québec",
4125 + "url": "",
4126 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/apq/CANDIDATEPORTAL",
4127 + "sectors": [
4128 + "Transport"
4129 + ],
4130 + "connector": "dayforce",
4131 + "status": "actif",
4132 + "region": "Québec"
4133 + },
4134 + {
4135 + "id": "bpa",
4136 + "name": "BPA (Experts-conseils)",
4137 + "url": "",
4138 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/bpapointca/CANDIDATEPORTAL",
4139 + "sectors": [
4140 + "Ingénierie"
4141 + ],
4142 + "connector": "dayforce",
4143 + "status": "actif",
4144 + "region": "Montréal"
4145 + },
4146 + {
4147 + "id": "excellencepeterbilt",
4148 + "name": "Camions Excellence Peterbilt",
4149 + "url": "",
4150 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/camion/CANDIDATEPORTAL",
4151 + "sectors": [
4152 + "Automobile"
4153 + ],
4154 + "connector": "dayforce",
4155 + "status": "actif",
4156 + "region": "Sainte-Julie"
4157 + },
4158 + {
4159 + "id": "darefoods",
4160 + "name": "Dare Foods",
4161 + "url": "",
4162 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/darefoods/CANDIDATEPORTAL",
4163 + "sectors": [
4164 + "Agroalimentaire"
4165 + ],
4166 + "connector": "dayforce",
4167 + "status": "actif",
4168 + "region": "Sainte-Marthe-sur-le-Lac"
4169 + },
4170 + {
4171 + "id": "eastpenn",
4172 + "name": "East Penn Canada",
4173 + "url": "",
4174 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/eastpenn/CANDIDATEPORTAL",
4175 + "sectors": [
4176 + "Distribution"
4177 + ],
4178 + "connector": "dayforce",
4179 + "status": "actif",
4180 + "region": "Laval"
4181 + },
4182 + {
4183 + "id": "eidosmontreal",
4184 + "name": "Eidos-Montréal",
4185 + "url": "",
4186 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/eic/CANDIDATEPORTAL",
4187 + "sectors": [
4188 + "Jeu vidéo"
4189 + ],
4190 + "connector": "dayforce",
4191 + "status": "actif",
4192 + "region": "Montréal"
4193 + },
4194 + {
4195 + "id": "fastcocanada",
4196 + "name": "Fastco Canada",
4197 + "url": "",
4198 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/fastco/CANDIDATEPORTAL",
4199 + "sectors": [
4200 + "Fabrication"
4201 + ],
4202 + "connector": "dayforce",
4203 + "status": "actif",
4204 + "region": "Pointe-Claire"
4205 + },
4206 + {
4207 + "id": "bleufeu",
4208 + "name": "BLEUFEU (Festival d'été de Québec)",
4209 + "url": "",
4210 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/feiq/CANDIDATEPORTAL",
4211 + "sectors": [
4212 + "Divertissement"
4213 + ],
4214 + "connector": "dayforce",
4215 + "status": "actif",
4216 + "region": "Québec"
4217 + },
4218 + {
4219 + "id": "groupemaurice",
4220 + "name": "Le Groupe Maurice",
4221 + "url": "",
4222 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/gm/CANDIDATEPORTAL",
4223 + "sectors": [
4224 + "Santé"
4225 + ],
4226 + "connector": "dayforce",
4227 + "status": "actif",
4228 + "region": "Montréal"
4229 + },
4230 + {
4231 + "id": "graycollection",
4232 + "name": "Gray Collection (Groupe Antonopoulos)",
4233 + "url": "",
4234 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/graycorp/CANDIDATEPORTAL",
4235 + "sectors": [
4236 + "Hôtellerie"
4237 + ],
4238 + "connector": "dayforce",
4239 + "status": "actif",
4240 + "region": "Montréal"
4241 + },
4242 + {
4243 + "id": "groupech",
4244 + "name": "Groupe CH (Canadiens de Montréal, Centre Bell)",
4245 + "url": "",
4246 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/groupech/CANDIDATEPORTAL",
4247 + "sectors": [
4248 + "Divertissement"
4249 + ],
4250 + "connector": "dayforce",
4251 + "status": "actif",
4252 + "region": "Montréal"
4253 + },
4254 + {
4255 + "id": "groupemach",
4256 + "name": "Groupe Mach",
4257 + "url": "",
4258 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/groupemach/CANDIDATEPORTAL",
4259 + "sectors": [
4260 + "Immobilier"
4261 + ],
4262 + "connector": "dayforce",
4263 + "status": "actif",
4264 + "region": "Montréal"
4265 + },
4266 + {
4267 + "id": "jdsports",
4268 + "name": "JD Sports Canada",
4269 + "url": "",
4270 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/jdsf/CANDIDATEPORTAL",
4271 + "sectors": [
4272 + "Commerce de détail"
4273 + ],
4274 + "connector": "dayforce",
4275 + "status": "actif",
4276 + "region": "Montréal"
4277 + },
4278 + {
4279 + "id": "lauracanada",
4280 + "name": "Laura Canada",
4281 + "url": "",
4282 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/laurashoppe/CANDIDATEPORTAL",
4283 + "sectors": [
4284 + "Commerce de détail"
4285 + ],
4286 + "connector": "dayforce",
4287 + "status": "actif",
4288 + "region": "Laval"
4289 + },
4290 + {
4291 + "id": "lavieenrose",
4292 + "name": "La Vie en Rose",
4293 + "url": "",
4294 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/lavieenrose/CANDIDATEPORTAL",
4295 + "sectors": [
4296 + "Commerce de détail"
4297 + ],
4298 + "connector": "dayforce",
4299 + "status": "actif",
4300 + "region": "Montréal"
4301 + },
4302 + {
4303 + "id": "nationex",
4304 + "name": "Nationex",
4305 + "url": "",
4306 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/nationex/CANDIDATEPORTAL",
4307 + "sectors": [
4308 + "Logistique"
4309 + ],
4310 + "connector": "dayforce",
4311 + "status": "actif",
4312 + "region": "Longueuil"
4313 + },
4314 + {
4315 + "id": "realstar",
4316 + "name": "Realstar",
4317 + "url": "",
4318 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/realstar/CANDIDATEPORTAL",
4319 + "sectors": [
4320 + "Immobilier"
4321 + ],
4322 + "connector": "dayforce",
4323 + "status": "actif",
4324 + "region": "Montréal"
4325 + },
4326 + {
4327 + "id": "reflector",
4328 + "name": "Reflector Entertainment",
4329 + "url": "",
4330 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/ref/CANDIDATEPORTAL",
4331 + "sectors": [
4332 + "Jeu vidéo"
4333 + ],
4334 + "connector": "dayforce",
4335 + "status": "actif",
4336 + "region": "Montréal"
4337 + },
4338 + {
4339 + "id": "runningroom",
4340 + "name": "Running Room Canada",
4341 + "url": "",
4342 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/runningroom/CANDIDATEPORTAL",
4343 + "sectors": [
4344 + "Commerce de détail"
4345 + ],
4346 + "connector": "dayforce",
4347 + "status": "actif",
4348 + "region": "Montréal"
4349 + },
4350 + {
4351 + "id": "soprema",
4352 + "name": "Soprema",
4353 + "url": "",
4354 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/soprema/CANDIDATEPORTAL",
4355 + "sectors": [
4356 + "Fabrication"
4357 + ],
4358 + "connector": "dayforce",
4359 + "status": "actif",
4360 + "region": "Drummondville"
4361 + },
4362 + {
4363 + "id": "spectrapremium",
4364 + "name": "Spectra Premium",
4365 + "url": "",
4366 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/spectra/CANDIDATEPORTAL",
4367 + "sectors": [
4368 + "Fabrication"
4369 + ],
4370 + "connector": "dayforce",
4371 + "status": "actif",
4372 + "region": "Boucherville"
4373 + },
4374 + {
4375 + "id": "storagemart",
4376 + "name": "StorageMart",
4377 + "url": "",
4378 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/storagemart/CANDIDATEPORTAL",
4379 + "sectors": [
4380 + "Services"
4381 + ],
4382 + "connector": "dayforce",
4383 + "status": "actif",
4384 + "region": "Québec"
4385 + },
4386 + {
4387 + "id": "unitedservices",
4388 + "name": "United Services Group",
4389 + "url": "",
4390 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/unitedservicesgroup/CANDIDATEPORTAL",
4391 + "sectors": [
4392 + "Services"
4393 + ],
4394 + "connector": "dayforce",
4395 + "status": "actif",
4396 + "region": "Montréal"
4397 + },
4398 + {
4399 + "id": "vinfastcanada",
4400 + "name": "VinFast Canada",
4401 + "url": "",
4402 + "careers_url": "https://jobs.dayforcehcm.com/fr-CA/vinfast/CANDIDATEPORTAL",
4403 + "sectors": [
4404 + "Automobile"
4405 + ],
4406 + "connector": "dayforce",
4407 + "status": "actif",
4408 + "region": "Laval"
4409 + }
4410 + ]
3090 4411 }
modified docs/CONFORMITE.md +28 −1
@@ -6,7 +6,7 @@ Contact : contact@spboucher.ai
6 6 Fichier : docs/CONFORMITE.md
7 7 Rôle : Registre de conformité des sources de données — base d'accès,
8 8 attribution, lien de candidature, données personnelles
9 Créé : 2026-08-18 Modifié : 2026-08-19
9 +Créé : 2026-08-18 Modifié : 2026-08-22
10 10 =============================================================================
11 11 -->
12 12
@@ -81,11 +81,38 @@ Créé : 2026-08-18 Modifié : 2026-08-19
81 81 - En attendant : **scraping poli maintenu** (Crawl-delay 5 s de robots.txt
82 82 respecté, fenêtre bornée, retries espacés 25 s) — inchangé.
83 83
84 +## Vague B — nouvelles sources (2026-08-22)
85 +
86 +Campagne de découverte Serper/Tavily (requêtes `site:` par famille ATS +
87 +termes de villes québécoises), sondage automatisé `scripts/probe_ats.py`
88 +(85 groupes confirmés) et sondage manuel de la **nouvelle famille Dayforce**.
89 +
90 +| Famille / source | Sources | Base d'accès (vérifiée 2026-08-22) | Fréquence & politesse | Décision |
91 +|---|---|---|---|---|
92 +| **Dayforce HCM** (`dayforce`, NOUVELLE famille — jobs.dayforcehcm.com) : Le Groupe Maurice, Groupe CH, La Vie en Rose, Laura Canada, BPA, Soprema, Gray Collection, JD Sports, Eidos-Montréal, Reflector, Groupe Mach, Air Canada Rouge, Camions Excellence Peterbilt, Nationex, Groupe AGF, Fastco, VinFast, United Services Group, Port de Québec, BLEUFEU, Dare Foods, East Penn, Realstar, Running Room, Spectra Premium, StorageMart | **26** | **API JSON publique du frontal Next.js** — exactement celle que le navigateur de tout visiteur appelle : `GET /api/auth/csrf` (jeton anti-CSRF anonyme, aucune authentification) puis `POST /api/geo/<ns>/jobposting/search` (pages de 25, `paginationStart`) ; descriptions HTML complètes dès la liste, lieux géocodés (`stateCode`, lat/lng). Détail (`GET …/jobposting/<ns>/<culture>/<board>/<id>`) seulement pour les attributs PayClass/PayType, avec **cache BD + budget 80/cycle**. `cultureCode fr-CA` : version française quand l'employeur la publie. | 0,8 req/s ; 1 à 6 requêtes liste/cycle par employeur | Connecté |
93 +| **Workday** — ajouts (Simons, Intelcom, Guillevin, Consignaction, Cineplex, TJX, FedEx Express, Abbott, Aritzia, Fiserv, JLL, Shell, Allstate, Dentalcorp, OPENLANE, VF, ZOLL) | +17 | API JSON publique `cxs` du tenant (famille existante) | inchangé | Connecté |
94 +| **SmartRecruiters** — ajouts (Renaud-Bray, Structube, Linen Chest, Lemay, Sodexo Canada, GURU, H&M, Sika, Artelia, Trupanion, California Closets, Centre multiethnique de Québec, École des entrepreneurs du Québec) | +13 | API publique `api.smartrecruiters.com` (famille existante) | inchangé | Connecté |
95 +| **Greenhouse** — ajouts (Coveo, Laporte, KRAFTON Montréal, Cloud Chamber, Sony Pictures Imageworks, Toboggan Labs, LoiZéro, Latys, Terrestar, Royal Vet, AutoTrader, La Senza, Alo Yoga, Mejuri, Club Monaco, Keel, Lyft) | +17 | API publique `boards-api.greenhouse.io` (famille existante) | inchangé | Connecté |
96 +| **Workable** — ajouts (Keywords Studios, FLO/AddÉnergie, EDC, Delmar, Damotech, Financeit, Starlink Aviation, Charlotte Tilbury, CSN Collision, Rentokil, CTS Foods) | +11 | API publique `apply.workable.com/api/v3` (famille existante) | inchangé | Connecté |
97 +| **Lever** — ajouts (Ecosystem, Telesat, Cologix, LRDG, Maquette Virtuelle, Daniels Health) | +6 | API publique `api.lever.co/v0/postings` (famille existante) | inchangé | Connecté |
98 +| **Breezy** — ajouts (Turbulent, Progesys, Panda7, BDL Énergie, Sense Ingénierie, Black & McDonald, TELUS Santé Cliniques, Lindt Canada) | +8 | API publique `<org>.breezy.hr/json` (famille existante) | inchangé | Connecté |
99 +| **Recruitee** — ajouts (STAS, Agile DSS, Eurofins EnvironeX, Teknion Roy & Breton, Avantage Plus, Projevia, Pivot + Edge) | +7 | API publique `<org>.recruitee.com/api/offers` (famille existante) | inchangé | Connecté |
100 +| **Ashby** — ajouts (Alan, Exegy, Billups, Lambda, Neo Financial) | +5 | API GraphQL publique du babillard (famille existante) | inchangé | Connecté |
101 +
84 102 ## Sources écartées
85 103
86 104 | Source | Raison |
87 105 |---|---|
88 106 | **Québec Emploi** (quebecemploi.gouv.qc.ca) | Accès derrière **authentification clicSÉQUR** — pas de flux public prévu pour la diffusion ; écarté (2026-08-18). |
107 +| **Solution SFT** (workable, 694 offres QC) | **Agence de placement** en santé : mandats démultipliés par région/quart qui noieraient les offres directes (694 fiches d'un coup) — écartée (2026-08-22). |
108 +| **Jobgether** (lever) | Agrégateur d'offres à distance, pas un employeur direct — contraire au principe « zéro boîte noire » (2026-08-22). |
109 +| **Aylo** (greenhouse, Montréal) | Employeur techno montréalais réel mais éditeur de contenu adulte — écarté par choix éditorial (plateforme grand public) (2026-08-22). |
110 +| **SGS, Red Bull, Rituals** (smartrecruiters) | Babillards mondiaux joignables mais **0 offre au Québec** au sondage du 2026-08-22. |
111 +| **Arc'teryx, Lime, World Gym Québec, Sherbrooke OEM, KATASA, Plant Products, Lovisa, ANINE BING, Pinax, CIMEQ** | API du slug candidat **introuvable** (portail fermé ou babillard HTML sans flux) — sondage 2026-08-22. |
112 +| **Inizio/Ashfield, Elanco, Parsons, Philips, Alfa Laval, GM Canada** (workday) | Tenant/site Workday détecté dans Google mais **API cxs muette** sous ce site (site carrières renommé) — à re-sonder plus tard (2026-08-22). |
113 +| **Sobeys, Vestis, VetStrategy, Lindt** (dayforce) | Namespace Dayforce joignable mais **babillard CANDIDATEPORTAL vide** (recrutement via un autre canal) (2026-08-22). |
114 +| **Eldorado Gold Lamaque** (dayforce) | 1 seule fiche « candidature spontanée stagiaire » — pas d'offres réelles pour l'instant ; à re-sonder (2026-08-22). |
115 +| **Joya, Cloval, Mondial Tissus, EKIP RH, Aftral** (découvertes Serper) | Employeurs **français** (Saint-Genis-Laval ≠ Laval QC) — faux positifs du terme « Laval » (2026-08-22). |
89 116 | **Canada Vie** (career5.successfactors.eu / careers.canadalife.com) | Portail SuccessFactors **héritage** (career5, session requise) + site AEM sans sitemap d'offres ; aucun flux public simple (2026-08-19). |
90 117 | **Groupe Dynamite** (careers.groupedynamite.com/gdi) | Portail iCIMS nouvelle génération rendu par JS ; le babillard iframe hérité (`frcareers-groupedynamite.icims.com`) est **vide** (2026-08-19). |
91 118 | **Jack Astor's / SIR Corp** (careersen-sircorp.icims.com) | Babillard fonctionnel mais **0 offre au Québec** (recherches lieu et mot-clé, 2026-08-19). |
modified docs/connecteurs/INDEX.md +271 −160
@@ -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-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 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-08-19 05:40 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-08-22 22:14 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 **240 employeurs directs** connectés via **20 plateformes ATS** + **3 portails agrégateurs** + le canal de **dépôt direct****14102 offres actives** (11238 directes, 2864 portails ; 91 masquées comme doublons inter-sources, soit 14011 visibles). 265 fiches.
17 +**350 employeurs directs** connectés via **21 plateformes ATS** + **3 portails agrégateurs** + le canal de **dépôt direct****15989 offres actives** (13695 directes, 2294 portails ; 107 masquées comme doublons inter-sources, soit 15882 visibles). 376 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,280 +22,391 @@ 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) | 41 | 3570 | 60 % | 84 % |
26 | [`workland`](ats-workland.md) | 1 | 1238 | 36 % | 100 % |
27 | [`successfactors`](ats-successfactors.md) | 5 | 1224 | 18 % | 86 % |
28 | [`njoyn`](ats-njoyn.md) | 6 | 956 | 81 % | 6 % |
29 | [`smartrecruiters`](ats-smartrecruiters.md) | 28 | 949 | 16 % | 100 % |
30 | [`wpjobmanager`](ats-wpjobmanager.md) | 8 | 842 | 8 % | 0 % |
31 | [`workable`](ats-workable.md) | 19 | 649 | 4 % | 100 % |
32 | [`lever`](ats-lever.md) | 19 | 454 | 21 % | 97 % |
33 | [`bamboohr`](ats-bamboohr.md) | 31 | 227 | 13 % | 100 % |
34 | [`ashby`](ats-ashby.md) | 11 | 213 | 12 % | 75 % |
35 | [`greenhouse`](ats-greenhouse.md) | 19 | 192 | 11 % | 100 % |
36 | [`taleo_tbe`](ats-taleo_tbe.md) | 6 | 143 | 38 % | 0 % |
37 | [`breezy`](ats-breezy.md) | 14 | 135 | 58 % | 98 % |
38 | [`recruitee`](ats-recruitee.md) | 11 | 130 | 9 % | 98 % |
39 | [`taleo`](ats-taleo.md) | 4 | 71 | 0 % | 100 % |
40 | [`digitalrecruiters`](ats-digitalrecruiters.md) | 2 | 68 | 90 % | 41 % |
41 | [`icims`](ats-icims.md) | 6 | 60 | 40 % | 90 % |
42 | [`ultipro`](ats-ultipro.md) | 3 | 58 | 60 % | 38 % |
43 | [`custom`](ats-custom.md) | 1 | 31 | 0 % | 0 % |
44 | [`adp`](ats-adp.md) | 5 | 28 | 71 % | 43 % |
25 +| [`workday`](ats-workday.md) | 58 | 4108 | 59 % | 85 % |
26 +| [`smartrecruiters`](ats-smartrecruiters.md) | 41 | 1456 | 19 % | 100 % |
27 +| [`workland`](ats-workland.md) | 1 | 1301 | 34 % | 100 % |
28 +| [`successfactors`](ats-successfactors.md) | 5 | 1186 | 18 % | 99 % |
29 +| [`njoyn`](ats-njoyn.md) | 6 | 1148 | 68 % | 91 % |
30 +| [`wpjobmanager`](ats-wpjobmanager.md) | 8 | 874 | 8 % | 100 % |
31 +| [`workable`](ats-workable.md) | 30 | 735 | 9 % | 100 % |
32 +| [`dayforce`](ats-dayforce.md) | 26 | 677 | 5 % | 100 % |
33 +| [`lever`](ats-lever.md) | 25 | 505 | 21 % | 96 % |
34 +| [`greenhouse`](ats-greenhouse.md) | 36 | 366 | 13 % | 99 % |
35 +| [`bamboohr`](ats-bamboohr.md) | 31 | 231 | 13 % | 100 % |
36 +| [`recruitee`](ats-recruitee.md) | 18 | 224 | 9 % | 98 % |
37 +| [`ashby`](ats-ashby.md) | 16 | 219 | 15 % | 77 % |
38 +| [`breezy`](ats-breezy.md) | 22 | 188 | 44 % | 94 % |
39 +| [`taleo_tbe`](ats-taleo_tbe.md) | 6 | 142 | 37 % | 36 % |
40 +| [`taleo`](ats-taleo.md) | 4 | 83 | 0 % | 100 % |
41 +| [`digitalrecruiters`](ats-digitalrecruiters.md) | 2 | 73 | 92 % | 77 % |
42 +| [`icims`](ats-icims.md) | 6 | 61 | 41 % | 93 % |
43 +| [`ultipro`](ats-ultipro.md) | 3 | 60 | 57 % | 100 % |
44 +| [`custom`](ats-custom.md) | 1 | 31 | 32 % | 87 % |
45 +| [`adp`](ats-adp.md) | 5 | 27 | 70 % | 100 % |
45 46
46 47 ## Portails agrégateurs & dépôt
47 48
48 49 | Source | Actives | Salaire | Dernier sync |
49 50 |---|---|---|---|
50 | [Espresso-Jobs](espresso_jobs.md) | 309 | 23 % | 2026-08-19 03:55 |
51 | [Guichet-Emplois (Canada)](guichet_emplois.md) | 502 | 99 % | 2026-08-19 04:02 |
52 | [Jobillico](jobillico.md) | 2053 | 37 % | 2026-08-19 04:10 |
51 +| [Espresso-Jobs](espresso_jobs.md) | 305 | 21 % | 2026-08-22 21:11 |
52 +| [Guichet-Emplois (Canada)](guichet_emplois.md) | 505 | 99 % | 2026-08-22 21:14 |
53 +| [Jobillico](jobillico.md) | 1484 | 17 % | 2026-08-22 21:21 |
53 54 | [Dépôt direct employeurs](depot-direct.md) | 0 (0 en modération) | — | au fil de l'eau |
54 55
55 56 ## Employeurs directs (par volume d'offres actives)
56 57
57 58 | Employeur | ATS | Actives | Salaire | GPS | Dernier sync OK |
58 59 |---|---|---|---|---|---|
59 | [Réseau Atlas Workland (~80 employeurs QC : CSS, cégeps, Santé Québec, STQ, UQTR…)](atlas_workland.md) | [`workland`](ats-workland.md) | 1238 | 36 % | 100 % | ✅ |
60 | [Couche-Tard / Circle K](circlek.md) | [`workday`](ats-workday.md) | 1012 | 61 % | 63 % | ✅ |
61 | [Walmart Canada](walmart.md) | [`workday`](ats-workday.md) | 979 | 93 % | 91 % | ✅ |
62 | [Bombardier](bombardier.md) | [`successfactors`](ats-successfactors.md) | 847 | 0 % | 100 % | ✅ |
63 | [Santé Québec — Montréal](sante_montreal.md) | [`njoyn`](ats-njoyn.md) | 762 | 97 % | 8 % | ✅ |
60 +| [Réseau Atlas Workland (~80 employeurs QC : CSS, cégeps, Santé Québec, STQ, UQTR…)](atlas_workland.md) | [`workland`](ats-workland.md) | 1301 | 34 % | 100 % | ✅ |
61 +| [Couche-Tard / Circle K](circlek.md) | [`workday`](ats-workday.md) | 1019 | 61 % | 63 % | ✅ |
62 +| [Walmart Canada](walmart.md) | [`workday`](ats-workday.md) | 1008 | 92 % | 92 % | ✅ |
63 +| [Bombardier](bombardier.md) | [`successfactors`](ats-successfactors.md) | 812 | 0 % | 100 % | ✅ |
64 +| [Santé Québec — Montréal](sante_montreal.md) | [`njoyn`](ats-njoyn.md) | 764 | 97 % | 98 % | ✅ |
64 65 | [TEHORA](tehora.md) | [`workable`](ats-workable.md) | 346 | 0 % | 100 % | ✅ |
65 | [Go RH](gorh.md) | [`lever`](ats-lever.md) | 266 | 18 % | 98 % | ✅ |
66 | [Mouvement Desjardins](desjardins.md) | [`workday`](ats-workday.md) | 241 | 2 % | 94 % | ✅ |
67 | [CIMA+](cima2.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 221 | 0 % | 100 % | ✅ |
68 | [Université McGill](mcgill.md) | [`workday`](ats-workday.md) | 193 | 70 % | 100 % | ✅ |
69 | [CISSS de Laval](cisss_laval.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 149 | 1 % | 0 % | ✅ |
70 | [CISSS de l'Abitibi-Témiscamingue](cisss_abitibi.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 141 | 0 % | 0 % | ✅ |
71 | [Reitmans](reitmanscanadalteltd.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 138 | 22 % | 100 % | ✅ |
72 | [CISSS des Laurentides](cisss_laurentides.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 130 | 12 % | 0 % | ✅ |
73 | [CGI](cgi.md) | [`njoyn`](ats-njoyn.md) | 127 | 0 % | 0 % | ✅ |
74 | [CISSS de Lanaudière](cisss_lanaudiere.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 124 | 4 % | 0 % | ✅ |
75 | [Ubisoft](ubisoft.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 123 | 0 % | 100 % | ✅ |
76 | [CISSS de Chaudière-Appalaches](cisss_chaudiere_appalaches.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 112 | 8 % | 0 % | ✅ |
77 | [BMO Groupe financier](bmo.md) | [`workday`](ats-workday.md) | 106 | 88 % | 79 % | ✅ |
78 | [Domtar](domtar.md) | [`successfactors`](ats-successfactors.md) | 106 | 0 % | 99 % | ✅ |
79 | [Deloitte Canada](deloitte.md) | [`successfactors`](ats-successfactors.md) | 105 | 96 % | 0 % | ✅ |
80 | [CISSS de l'Outaouais](cisss_outaouais.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 101 | 31 % | 0 % | ✅ |
81 | [Cascades](cascades.md) | [`successfactors`](ats-successfactors.md) | 100 | 77 % | 100 % | ✅ |
82 | [Sépaq](sepaq.md) | [`taleo_tbe`](ats-taleo_tbe.md) | 99 | 55 % | 0 % | ✅ |
66 +| [CGI](cgi.md) | [`njoyn`](ats-njoyn.md) | 316 | 0 % | 95 % | ✅ |
67 +| [Go RH](gorh.md) | [`lever`](ats-lever.md) | 271 | 18 % | 98 % | ✅ |
68 +| [Mouvement Desjardins](desjardins.md) | [`workday`](ats-workday.md) | 255 | 2 % | 93 % | ✅ |
69 +| [CIMA+](cima2.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 239 | 0 % | 100 % | ✅ |
70 +| [Université McGill](mcgill.md) | [`workday`](ats-workday.md) | 194 | 73 % | 100 % | ✅ |
71 +| [CISSS de Laval](cisss_laval.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 149 | 1 % | 100 % | ✅ |
72 +| [CISSS des Laurentides](cisss_laurentides.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 142 | 11 % | 100 % | ✅ |
73 +| [CISSS de l'Abitibi-Témiscamingue](cisss_abitibi.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 140 | 0 % | 100 % | ✅ |
74 +| [La Vie en Rose](lavieenrose.md) | [`dayforce`](ats-dayforce.md) | 138 | 4 % | 100 % | ✅ |
75 +| [Reitmans](reitmanscanadalteltd.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 137 | 23 % | 100 % | ✅ |
76 +| [Sodexo Canada](sodexocanadaltd.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 135 | 82 % | 100 % | ✅ |
77 +| [Consignaction (AQRCB)](consignaction.md) | [`workday`](ats-workday.md) | 134 | 90 % | 100 % | ✅ |
78 +| [CISSS de Lanaudière](cisss_lanaudiere.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 132 | 5 % | 100 % | ✅ |
79 +| [Ubisoft](ubisoft.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 127 | 0 % | 100 % | ✅ |
80 +| [BMO Groupe financier](bmo.md) | [`workday`](ats-workday.md) | 121 | 86 % | 82 % | ✅ |
81 +| [Artelia Canada](artelia.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 115 | 0 % | 98 % | ✅ |
82 +| [CISSS de Chaudière-Appalaches](cisss_chaudiere_appalaches.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 115 | 9 % | 100 % | ✅ |
83 +| [CISSS de l'Outaouais](cisss_outaouais.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 108 | 31 % | 100 % | ✅ |
84 +| [Deloitte Canada](deloitte.md) | [`successfactors`](ats-successfactors.md) | 105 | 96 % | 100 % | ✅ |
85 +| [Domtar](domtar.md) | [`successfactors`](ats-successfactors.md) | 102 | 0 % | 99 % | ✅ |
86 +| [Cascades](cascades.md) | [`successfactors`](ats-successfactors.md) | 100 | 75 % | 100 % | ✅ |
87 +| [Le Groupe Maurice](groupemaurice.md) | [`dayforce`](ats-dayforce.md) | 99 | 0 % | 100 % | ✅ |
88 +| [Sépaq](sepaq.md) | [`taleo_tbe`](ats-taleo_tbe.md) | 98 | 54 % | 8 % | ✅ |
89 +| [Dentalcorp](dentalcorp.md) | [`workday`](ats-workday.md) | 97 | 13 % | 99 % | ✅ |
90 +| [Airbus Canada](airbus.md) | [`workday`](ats-workday.md) | 83 | 1 % | 100 % | ✅ |
91 +| [Linen Chest](linenchest.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 82 | 9 % | 100 % | ✅ |
83 92 | [Genetec](genetec_inc.md) | [`workable`](ats-workable.md) | 80 | 0 % | 100 % | ✅ |
84 | [Vidéotron](videotron.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 80 | 14 % | 100 % | ✅ |
85 | [MaintainX](maintainx.md) | [`ashby`](ats-ashby.md) | 78 | 6 % | 83 % | ✅ |
86 | [Agropur](agropur.md) | [`workday`](ats-workday.md) | 75 | 93 % | 99 % | ✅ |
87 | [Airbus Canada](airbus.md) | [`workday`](ats-workday.md) | 75 | 1 % | 100 % | ✅ |
88 | [Groupe Banque TD](td.md) | [`workday`](ats-workday.md) | 69 | 99 % | 100 % | ✅ |
89 | [EMCO](emcocorporation.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 67 | 48 % | 100 % | ✅ |
90 | [Hydro-Québec](hydroquebec.md) | [`successfactors`](ats-successfactors.md) | 66 | 61 % | 0 % | ✅ |
91 | [Autodesk](autodesk.md) | [`workday`](ats-workday.md) | 65 | 91 % | 48 % | ✅ |
92 | [Banque CIBC](cibc.md) | [`workday`](ats-workday.md) | 65 | 0 % | 100 % | ✅ |
93 | [Groupe Canam](groupecanam.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 65 | 66 % | 98 % | ✅ |
94 | [CHU de Québec — Université Laval](chu_quebec.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 60 | 10 % | 0 % | ✅ |
95 | [ANCIA Personnel](anciapersonnelinc.md) | [`recruitee`](ats-recruitee.md) | 59 | 10 % | 100 % | ✅ |
96 | [Lightspeed Commerce](lightspeedhq.md) | [`ashby`](ats-ashby.md) | 56 | 7 % | 98 % | ✅ |
97 | [CAE](cae.md) | [`workday`](ats-workday.md) | 55 | 7 % | 93 % | ✅ |
98 | [Manuvie](manulife.md) | [`workday`](ats-workday.md) | 51 | 90 % | 75 % | ✅ |
99 | [Cogeco](cogeco.md) | [`workday`](ats-workday.md) | 50 | 18 % | 56 % | ✅ |
100 | [Beneva](beneva.md) | [`workday`](ats-workday.md) | 48 | 2 % | 100 % | ✅ |
101 | [Cohere](cohere.md) | [`ashby`](ats-ashby.md) | 46 | 17 % | 37 % | ✅ |
93 +| [Vidéotron](videotron.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 77 | 17 % | 100 % | ✅ |
94 +| [MaintainX](maintainx.md) | [`ashby`](ats-ashby.md) | 72 | 6 % | 86 % | ✅ |
95 +| [Agropur](agropur.md) | [`workday`](ats-workday.md) | 71 | 94 % | 99 % | ✅ |
96 +| [Gray Collection (Groupe Antonopoulos)](graycollection.md) | [`dayforce`](ats-dayforce.md) | 71 | 0 % | 100 % | ✅ |
97 +| [Groupe Banque TD](td.md) | [`workday`](ats-workday.md) | 71 | 97 % | 100 % | ✅ |
98 +| [Renaud-Bray](renaud_bray.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 71 | 1 % | 100 % | ✅ |
99 +| [Hydro-Québec](hydroquebec.md) | [`successfactors`](ats-successfactors.md) | 67 | 55 % | 81 % | ✅ |
100 +| [Autodesk](autodesk.md) | [`workday`](ats-workday.md) | 65 | 89 % | 46 % | ✅ |
101 +| [EMCO](emcocorporation.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 64 | 45 % | 100 % | ✅ |
102 +| [Groupe Canam](groupecanam.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 64 | 66 % | 98 % | ✅ |
103 +| [Lightspeed Commerce](lightspeedhq.md) | [`ashby`](ats-ashby.md) | 61 | 8 % | 98 % | ✅ |
104 +| [ANCIA Personnel](anciapersonnelinc.md) | [`recruitee`](ats-recruitee.md) | 60 | 10 % | 100 % | ✅ |
105 +| [CHU de Québec — Université Laval](chu_quebec.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 59 | 7 % | 100 % | ✅ |
106 +| [Banque CIBC](cibc.md) | [`workday`](ats-workday.md) | 56 | 0 % | 100 % | ✅ |
107 +| [CAE](cae.md) | [`workday`](ats-workday.md) | 56 | 7 % | 93 % | ✅ |
108 +| [Manuvie](manulife.md) | [`workday`](ats-workday.md) | 55 | 91 % | 69 % | ✅ |
109 +| [BPA (Experts-conseils)](bpa.md) | [`dayforce`](ats-dayforce.md) | 51 | 0 % | 100 % | ✅ |
110 +| [Laura Canada](lauracanada.md) | [`dayforce`](ats-dayforce.md) | 50 | 0 % | 100 % | ✅ |
111 +| [Eurofins EnvironeX](eurofinsenvironex.md) | [`recruitee`](ats-recruitee.md) | 47 | 0 % | 100 % | ✅ |
112 +| [JD Sports Canada](jdsports.md) | [`dayforce`](ats-dayforce.md) | 47 | 0 % | 100 % | ✅ |
113 +| [Santé Québec](sante_quebec.md) | [`digitalrecruiters`](ats-digitalrecruiters.md) | 46 | 98 % | 63 % | ✅ |
114 +| [Cogeco](cogeco.md) | [`workday`](ats-workday.md) | 45 | 18 % | 60 % | ✅ |
115 +| [Cohere](cohere.md) | [`ashby`](ats-ashby.md) | 44 | 16 % | 36 % | ✅ |
116 +| [McKesson Canada](mckesson.md) | [`workday`](ats-workday.md) | 44 | 80 % | 89 % | ✅ |
117 +| [Techo-Bloc](techo_bloc.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 44 | 59 % | 100 % | ✅ |
102 118 | [Investissements PSP](investpsp.md) | [`workday`](ats-workday.md) | 43 | 5 % | 100 % | ✅ |
103 | [McKesson Canada](mckesson.md) | [`workday`](ats-workday.md) | 43 | 84 % | 86 % | ✅ |
104 119 | [SOGECLAIR](sogeclair.md) | [`workable`](ats-workable.md) | 43 | 2 % | 100 % | ✅ |
120 +| [La Maison Simons](simons.md) | [`workday`](ats-workday.md) | 42 | 0 % | 93 % | ✅ |
105 121 | [Levio](levio.md) | [`greenhouse`](ats-greenhouse.md) | 42 | 0 % | 100 % | ✅ |
106 | [Santé Québec](sante_quebec.md) | [`digitalrecruiters`](ats-digitalrecruiters.md) | 41 | 98 % | 68 % | ✅ |
107 | [Techo-Bloc](techo_bloc.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 40 | 50 % | 100 % | ✅ |
108 | [Behaviour Interactif](bhvr.md) | [`lever`](ats-lever.md) | 39 | 0 % | 100 % | ✅ |
109 | [Promutuel Assurance](promutuel.md) | [`workday`](ats-workday.md) | 37 | 0 % | 100 % | ✅ |
110 | [QSL](qsl.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 37 | 38 % | 100 % | ✅ |
111 | [Valsoft](valsoft_corp.md) | [`workable`](ats-workable.md) | 37 | 11 % | 100 % | ✅ |
112 | [Transat A.T.](transatat1.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 36 | 6 % | 100 % | ✅ |
113 | [Side (PTW)](sideinc.md) | [`workable`](ats-workable.md) | 33 | 0 % | 100 % | ✅ |
114 | [Industries Lassonde](lassonde.md) | [`custom`](ats-custom.md) | 31 | 0 % | 0 % | ✅ |
115 | [Brand Momentum](brandmomentum.md) | [`breezy`](ats-breezy.md) | 30 | 70 % | 100 % | ✅ |
116 | [Service alimentaire Gordon](gfs.md) | [`workday`](ats-workday.md) | 30 | 73 % | 100 % | ✅ |
122 +| [Camions Excellence Peterbilt](excellencepeterbilt.md) | [`dayforce`](ats-dayforce.md) | 40 | 0 % | 100 % | ✅ |
123 +| [Transat A.T.](transatat1.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 40 | 5 % | 100 % | ✅ |
124 +| [Beneva](beneva.md) | [`workday`](ats-workday.md) | 39 | 3 % | 100 % | ✅ |
125 +| [Behaviour Interactif](bhvr.md) | [`lever`](ats-lever.md) | 38 | 0 % | 100 % | ✅ |
126 +| [TJX Canada (Winners, HomeSense, Marshalls)](tjx.md) | [`workday`](ats-workday.md) | 38 | 100 % | 100 % | ✅ |
127 +| [Valsoft](valsoft_corp.md) | [`workable`](ats-workable.md) | 36 | 11 % | 100 % | ✅ |
128 +| [Laporte Experts Conseils](laportefr.md) | [`greenhouse`](ats-greenhouse.md) | 34 | 0 % | 100 % | ✅ |
129 +| [Promutuel Assurance](promutuel.md) | [`workday`](ats-workday.md) | 34 | 0 % | 100 % | ✅ |
130 +| [Service alimentaire Gordon](gfs.md) | [`workday`](ats-workday.md) | 33 | 73 % | 100 % | ✅ |
131 +| [Brand Momentum](brandmomentum.md) | [`breezy`](ats-breezy.md) | 32 | 72 % | 100 % | ✅ |
132 +| [H&M](hmgroup.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 32 | 3 % | 100 % | ✅ |
133 +| [QSL](qsl.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 32 | 22 % | 100 % | ✅ |
134 +| [Industries Lassonde](lassonde.md) | [`custom`](ats-custom.md) | 31 | 32 % | 87 % | ✅ |
135 +| [Intelcom (Dragonfly)](intelcomgroup.md) | [`workday`](ats-workday.md) | 31 | 0 % | 100 % | ✅ |
136 +| [Side (PTW)](sideinc.md) | [`workable`](ats-workable.md) | 31 | 0 % | 100 % | ✅ |
137 +| [Groupe CH (Canadiens de Montréal, Centre Bell)](groupech.md) | [`dayforce`](ats-dayforce.md) | 30 | 0 % | 100 % | ✅ |
138 +| [Agnico Eagle Mines](agnico_eagle.md) | [`taleo`](ats-taleo.md) | 29 | 0 % | 100 % | ✅ |
117 139 | [Altasciences](altasciences.md) | [`workday`](ats-workday.md) | 29 | 0 % | 100 % | ✅ |
118 | [CDPQ — Caisse de dépôt et placement du Québec](cdpq.md) | [`workday`](ats-workday.md) | 28 | 0 % | 100 % | ✅ |
119 | [CSS des Découvreurs](cssdd.md) | [`digitalrecruiters`](ats-digitalrecruiters.md) | 27 | 78 % | 0 % | ✅ |
120 | [EXFO](exfo.md) | [`workday`](ats-workday.md) | 27 | 0 % | 100 % | ✅ |
140 +| [CHUM](chum.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 29 | 0 % | 100 % | ✅ |
141 +| [Coveo](coveofr.md) | [`greenhouse`](ats-greenhouse.md) | 29 | 0 % | 100 % | ✅ |
142 +| [Soprema](soprema.md) | [`dayforce`](ats-dayforce.md) | 28 | 39 % | 100 % | ✅ |
143 +| [CSS des Découvreurs](cssdd.md) | [`digitalrecruiters`](ats-digitalrecruiters.md) | 27 | 81 % | 100 % | ✅ |
144 +| [Keywords Studios](keywords_intl1.md) | [`workable`](ats-workable.md) | 27 | 89 % | 100 % | ✅ |
121 145 | [Scotts Canada (Fafard)](scottsmiraclegro.md) | [`workday`](ats-workday.md) | 27 | 4 % | 100 % | ✅ |
122 | [Tecsys](tecsys.md) | [`workable`](ats-workable.md) | 27 | 0 % | 100 % | ✅ |
123 | [CHUM](chum.md) | [`wpjobmanager`](ats-wpjobmanager.md) | 25 | 0 % | 0 % | ✅ |
124 | [exo (transport métropolitain)](exo.md) | [`taleo_tbe`](ats-taleo_tbe.md) | 25 | 0 % | 0 % | ✅ |
125 | [AppDirect](appdirect.md) | [`greenhouse`](ats-greenhouse.md) | 24 | 25 % | 100 % | ✅ |
126 | [Nortera](nortera.md) | [`ultipro`](ats-ultipro.md) | 24 | 62 % | 0 % | ✅ |
127 | [Saputo](saputo.md) | [`workday`](ats-workday.md) | 24 | 75 % | 100 % | ✅ |
128 | [Broccolini](broccolini.md) | [`bamboohr`](ats-bamboohr.md) | 23 | 0 % | 100 % | ✅ |
129 | [CIUSSS de l'Est-de-l'Île-de-Montréal](ciusss_est_montreal.md) | [`taleo`](ats-taleo.md) | 23 | 0 % | 100 % | ✅ |
146 +| [CDPQ — Caisse de dépôt et placement du Québec](cdpq.md) | [`workday`](ats-workday.md) | 25 | 0 % | 100 % | ✅ |
147 +| [exo (transport métropolitain)](exo.md) | [`taleo_tbe`](ats-taleo_tbe.md) | 25 | 0 % | 100 % | ✅ |
148 +| [Saputo](saputo.md) | [`workday`](ats-workday.md) | 25 | 76 % | 100 % | ✅ |
149 +| [Structube](structube1.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 25 | 0 % | 100 % | ✅ |
150 +| [Tecsys](tecsys.md) | [`workable`](ats-workable.md) | 25 | 0 % | 100 % | ✅ |
151 +| [AppDirect](appdirect.md) | [`greenhouse`](ats-greenhouse.md) | 24 | 42 % | 100 % | ✅ |
152 +| [Cineplex](cineplex.md) | [`workday`](ats-workday.md) | 24 | 4 % | 100 % | ✅ |
153 +| [Cirque du Soleil](cirquedusoleil.md) | [`lever`](ats-lever.md) | 24 | 0 % | 88 % | ✅ |
154 +| [CIUSSS de l'Est-de-l'Île-de-Montréal](ciusss_est_montreal.md) | [`taleo`](ats-taleo.md) | 24 | 0 % | 100 % | ✅ |
155 +| [EXFO](exfo.md) | [`workday`](ats-workday.md) | 24 | 0 % | 100 % | ✅ |
156 +| [FedEx Express Canada](fedex.md) | [`workday`](ats-workday.md) | 24 | 100 % | 88 % | ✅ |
157 +| [OPENLANE Canada](openlane.md) | [`workday`](ats-workday.md) | 24 | 29 % | 83 % | ✅ |
158 +| [OSEDEA](osedea.md) | [`lever`](ats-lever.md) | 24 | 0 % | 100 % | ✅ |
159 +| [Progesys](progesys_inc.md) | [`breezy`](ats-breezy.md) | 24 | 4 % | 96 % | ✅ |
160 +| [Huawei Canada](huaweicanada.md) | [`recruitee`](ats-recruitee.md) | 23 | 0 % | 100 % | ✅ |
130 161 | [Intact Corporation financière](intactfc.md) | [`workday`](ats-workday.md) | 23 | 0 % | 100 % | ✅ |
131 162 | [MEDFAR Solutions Cliniques](medfar.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 23 | 0 % | 100 % | ✅ |
163 +| [Messer Canada](messer_canada.md) | [`ultipro`](ats-ultipro.md) | 23 | 87 % | 100 % | ✅ |
164 +| [mthree](mthreerecruitingportal.md) | [`greenhouse`](ats-greenhouse.md) | 23 | 0 % | 100 % | ✅ |
165 +| [Nortera](nortera.md) | [`ultipro`](ats-ultipro.md) | 23 | 61 % | 100 % | ✅ |
132 166 | [Rio Tinto](riotinto.md) | [`workday`](ats-workday.md) | 23 | 0 % | 100 % | ✅ |
133 | [Cirque du Soleil](cirquedusoleil.md) | [`lever`](ats-lever.md) | 22 | 0 % | 86 % | ✅ |
167 +| [Broccolini](broccolini.md) | [`bamboohr`](ats-bamboohr.md) | 22 | 0 % | 100 % | ✅ |
168 +| [JLL](jll.md) | [`workday`](ats-workday.md) | 22 | 5 % | 91 % | ✅ |
134 169 | [McCarthy Tétrault](mccarthy_tetrault.md) | [`icims`](ats-icims.md) | 22 | 0 % | 100 % | ✅ |
135 | [Messer Canada](messer_canada.md) | [`ultipro`](ats-ultipro.md) | 22 | 91 % | 100 % | ✅ |
136 | [mthree](mthreerecruitingportal.md) | [`greenhouse`](ats-greenhouse.md) | 22 | 0 % | 100 % | ✅ |
170 +| [dcbel](dcbel.md) | [`bamboohr`](ats-bamboohr.md) | 21 | 0 % | 100 % | ✅ |
137 171 | [Xsolla](xsolla.md) | [`lever`](ats-lever.md) | 21 | 95 % | 95 % | ✅ |
138 | [Agnico Eagle Mines](agnico_eagle.md) | [`taleo`](ats-taleo.md) | 20 | 0 % | 100 % | ✅ |
139 | [dcbel](dcbel.md) | [`bamboohr`](ats-bamboohr.md) | 20 | 0 % | 100 % | ✅ |
140 172 | [Rodeo FX](rodeofx.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 20 | 0 % | 100 % | ✅ |
141 173 | [CAA-Québec](caaquebec.md) | [`workday`](ats-workday.md) | 19 | 21 % | 100 % | ✅ |
142 | [Vosker](vosker.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 19 | 0 % | 100 % | ✅ |
143 | [Explorance](explorance.md) | [`bamboohr`](ats-bamboohr.md) | 18 | 0 % | 100 % | ✅ |
144 | [Huawei Canada](huaweicanada.md) | [`recruitee`](ats-recruitee.md) | 18 | 0 % | 100 % | ✅ |
145 | [OSEDEA](osedea.md) | [`lever`](ats-lever.md) | 18 | 0 % | 100 % | ✅ |
174 +| [Explorance](explorance.md) | [`bamboohr`](ats-bamboohr.md) | 19 | 0 % | 100 % | ✅ |
175 +| [Vooban](vooban.md) | [`greenhouse`](ats-greenhouse.md) | 19 | 0 % | 100 % | ✅ |
176 +| [Produits Labelink](labelink.md) | [`bamboohr`](ats-bamboohr.md) | 18 | 0 % | 100 % | ✅ |
146 177 | [Réseau de transport de la Capitale](rtc_quebec.md) | [`njoyn`](ats-njoyn.md) | 18 | 0 % | 0 % | ✅ |
147 | [Vooban](vooban.md) | [`greenhouse`](ats-greenhouse.md) | 18 | 0 % | 100 % | ✅ |
148 | [iA Groupe financier](ia_groupe.md) | [`workday`](ats-workday.md) | 17 | 100 % | 100 % | ✅ |
178 +| [Ville de Gatineau](ville_gatineau.md) | [`njoyn`](ats-njoyn.md) | 18 | 94 % | 0 % | ✅ |
179 +| [Vosker](vosker.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 18 | 0 % | 100 % | ✅ |
180 +| [La Senza](lasenza.md) | [`greenhouse`](ats-greenhouse.md) | 17 | 12 % | 100 % | ✅ |
149 181 | [NOVIPRO](novipro.md) | [`breezy`](ats-breezy.md) | 17 | 0 % | 100 % | ✅ |
150 | [Produits Labelink](labelink.md) | [`bamboohr`](ats-bamboohr.md) | 17 | 0 % | 100 % | ✅ |
151 | [Ville de Gatineau](ville_gatineau.md) | [`njoyn`](ats-njoyn.md) | 17 | 94 % | 0 % | ✅ |
182 +| [Société de transport de Laval](stl_laval.md) | [`njoyn`](ats-njoyn.md) | 17 | 29 % | 0 % | ✅ |
152 183 | [VO2 Group](vo2_group.md) | [`lever`](ats-lever.md) | 17 | 6 % | 100 % | ✅ |
153 | [BDC](bdc.md) | [`workday`](ats-workday.md) | 16 | 0 % | 100 % | ✅ |
154 | [Société de transport de Laval](stl_laval.md) | [`njoyn`](ats-njoyn.md) | 16 | 31 % | 0 % | ✅ |
155 | [Ville de Terrebonne](ville_terrebonne.md) | [`njoyn`](ats-njoyn.md) | 16 | 94 % | 0 % | ✅ |
156 | [Alcoa Canada](alcoa.md) | [`workday`](ats-workday.md) | 15 | 13 % | 40 % | ✅ |
157 | [Bell Textron Canada](bell_textron.md) | [`taleo`](ats-taleo.md) | 15 | 0 % | 100 % | ✅ |
158 | [Réseau Mieux-Être](reseau_mieux_etre.md) | [`breezy`](ats-breezy.md) | 15 | 0 % | 100 % | ✅ |
159 | [Valtech](valtech.md) | [`greenhouse`](ats-greenhouse.md) | 15 | 13 % | 100 % | ✅ |
160 | [Evolving Web](evolving_web.md) | [`workable`](ats-workable.md) | 14 | 0 % | 100 % | ✅ |
161 | [Gameloft](gameloft.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 14 | 0 % | 100 % | ✅ |
162 | [LG2](lg2.md) | [`recruitee`](ats-recruitee.md) | 14 | 7 % | 100 % | ✅ |
163 | [Bayshore HealthCare](bayshore.md) | [`taleo`](ats-taleo.md) | 13 | 0 % | 100 % | ✅ |
184 +| [Alcoa Canada](alcoa.md) | [`workday`](ats-workday.md) | 16 | 12 % | 44 % | ✅ |
185 +| [Bell Textron Canada](bell_textron.md) | [`taleo`](ats-taleo.md) | 16 | 0 % | 100 % | ✅ |
186 +| [Sony Pictures Imageworks](sonypicturesimageworks.md) | [`greenhouse`](ats-greenhouse.md) | 16 | 31 % | 100 % | ✅ |
187 +| [BDC](bdc.md) | [`workday`](ats-workday.md) | 15 | 0 % | 100 % | ✅ |
188 +| [Groupe AGF](groupeagf.md) | [`dayforce`](ats-dayforce.md) | 15 | 53 % | 100 % | ✅ |
189 +| [LG2](lg2.md) | [`recruitee`](ats-recruitee.md) | 15 | 7 % | 100 % | ✅ |
190 +| [Teknion Roy & Breton](teknionroybreton.md) | [`recruitee`](ats-recruitee.md) | 15 | 53 % | 93 % | ✅ |
191 +| [Victoria Park Medispa](vicpark.md) | [`bamboohr`](ats-bamboohr.md) | 15 | 0 % | 100 % | ✅ |
192 +| [Ville de Terrebonne](ville_terrebonne.md) | [`njoyn`](ats-njoyn.md) | 15 | 93 % | 0 % | ✅ |
193 +| [VinFast Canada](vinfastcanada.md) | [`dayforce`](ats-dayforce.md) | 15 | 33 % | 100 % | ✅ |
194 +| [Bayshore HealthCare](bayshore.md) | [`taleo`](ats-taleo.md) | 14 | 0 % | 100 % | ✅ |
195 +| [Fastco Canada](fastcocanada.md) | [`dayforce`](ats-dayforce.md) | 14 | 0 % | 100 % | ✅ |
196 +| [Fruit d'Or](fruitdor.md) | [`ultipro`](ats-ultipro.md) | 14 | 0 % | 100 % | ✅ |
197 +| [Lamour](lamour.md) | [`workable`](ats-workable.md) | 14 | 0 % | 100 % | ✅ |
198 +| [Réseau Mieux-Être](reseau_mieux_etre.md) | [`breezy`](ats-breezy.md) | 14 | 0 % | 100 % | ✅ |
199 +| [Starlink Aviation](starlink_aviation.md) | [`workable`](ats-workable.md) | 14 | 0 % | 100 % | ✅ |
200 +| [United Services Group](unitedservices.md) | [`dayforce`](ats-dayforce.md) | 14 | 0 % | 100 % | ✅ |
201 +| [Allstate Canada](allstate.md) | [`workday`](ats-workday.md) | 13 | 23 % | 85 % | ✅ |
202 +| [Cloud Chamber Montréal](cloudchamberfr.md) | [`greenhouse`](ats-greenhouse.md) | 13 | 0 % | 100 % | ✅ |
203 +| [Gameloft](gameloft.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 13 | 0 % | 100 % | ✅ |
204 +| [iA Groupe financier](ia_groupe.md) | [`workday`](ats-workday.md) | 13 | 100 % | 100 % | ✅ |
205 +| [Investissement Québec](investquebec.md) | [`workday`](ats-workday.md) | 13 | 8 % | 100 % | ✅ |
164 206 | [MicroHabitat](microhabitat.md) | [`breezy`](ats-breezy.md) | 13 | 100 % | 100 % | ✅ |
165 207 | [OPAL-RT Technologies](opalrt.md) | [`bamboohr`](ats-bamboohr.md) | 13 | 0 % | 100 % | ✅ |
166 208 | [Sid Lee](sidlee.md) | [`greenhouse`](ats-greenhouse.md) | 13 | 0 % | 100 % | ✅ |
167 209 | [Talan](talan.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 13 | 0 % | 100 % | ✅ |
168 | [Victoria Park Medispa](vicpark.md) | [`bamboohr`](ats-bamboohr.md) | 13 | 0 % | 100 % | ✅ |
169 | [Fruit d'Or](fruitdor.md) | [`ultipro`](ats-ultipro.md) | 12 | 0 % | 0 % | ✅ |
210 +| [Evolving Web](evolving_web.md) | [`workable`](ats-workable.md) | 12 | 0 % | 100 % | ✅ |
170 211 | [GSK](gsk.md) | [`workday`](ats-workday.md) | 12 | 0 % | 83 % | ✅ |
171 | [Investissement Québec](investquebec.md) | [`workday`](ats-workday.md) | 12 | 8 % | 100 % | ✅ |
172 | [Logisco](logisco.md) | [`bamboohr`](ats-bamboohr.md) | 12 | 42 % | 100 % | ✅ |
212 +| [JG Rive-Sud (GFS)](jgrivesud.md) | [`workday`](ats-workday.md) | 12 | 75 % | 100 % | ✅ |
213 +| [Lemay](lemay.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 12 | 8 % | 100 % | ✅ |
214 +| [LoiZéro](loizero.md) | [`greenhouse`](ats-greenhouse.md) | 12 | 0 % | 100 % | ✅ |
215 +| [Running Room Canada](runningroom.md) | [`dayforce`](ats-dayforce.md) | 12 | 0 % | 100 % | ✅ |
173 216 | [Spiria](spiria.md) | [`lever`](ats-lever.md) | 12 | 58 % | 100 % | ✅ |
217 +| [Valtech](valtech.md) | [`greenhouse`](ats-greenhouse.md) | 12 | 17 % | 100 % | ✅ |
174 218 | [3 Brasseurs Canada](trois_brasseurs.md) | [`breezy`](ats-breezy.md) | 11 | 73 % | 100 % | ✅ |
219 +| [Aritzia](aritzia.md) | [`workday`](ats-workday.md) | 11 | 64 % | 100 % | ✅ |
220 +| [FLO (AddÉnergie)](flo_addenergie.md) | [`workable`](ats-workable.md) | 11 | 0 % | 100 % | ✅ |
175 221 | [KPI Digital](kpidigital.md) | [`bamboohr`](ats-bamboohr.md) | 11 | 0 % | 100 % | ✅ |
176 | [Lamour](lamour.md) | [`workable`](ats-workable.md) | 11 | 0 % | 100 % | ✅ |
177 | [Mirego](mirego.md) | [`lever`](ats-lever.md) | 11 | 0 % | 100 % | ✅ |
222 +| [LIDD Consultants](lidd.md) | [`workable`](ats-workable.md) | 11 | 0 % | 100 % | ✅ |
223 +| [Logisco](logisco.md) | [`bamboohr`](ats-bamboohr.md) | 11 | 36 % | 100 % | ✅ |
224 +| [People Can Fly](peoplecanfly.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 11 | 0 % | 100 % | ✅ |
225 +| [Sika Canada](sikaag.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 11 | 0 % | 100 % | ✅ |
178 226 | [TSMG](tsmg.md) | [`lever`](ats-lever.md) | 11 | 0 % | 100 % | ✅ |
227 +| [Abbott](abbott.md) | [`workday`](ats-workday.md) | 10 | 20 % | 90 % | ✅ |
228 +| [Avantage Plus](avantageplus.md) | [`recruitee`](ats-recruitee.md) | 10 | 10 % | 100 % | ✅ |
229 +| [BDL Énergie](bdl_energie.md) | [`breezy`](ats-breezy.md) | 10 | 0 % | 30 % | ✅ |
179 230 | [CAPREIT](capreit.md) | [`icims`](ats-icims.md) | 10 | 0 % | 100 % | ✅ |
231 +| [Eminent Valet](eminent_valet.md) | [`workable`](ats-workable.md) | 10 | 100 % | 100 % | ✅ |
180 232 | [EQ3](eq3_ltd.md) | [`breezy`](ats-breezy.md) | 10 | 60 % | 100 % | ✅ |
181 | [Fonds de solidarité FTQ](fondsftq.md) | [`workday`](ats-workday.md) | 10 | 0 % | 100 % | ✅ |
182 | [People Can Fly](peoplecanfly.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 10 | 0 % | 100 % | ✅ |
233 +| [Framestore](framestore.md) | [`recruitee`](ats-recruitee.md) | 10 | 0 % | 100 % | ✅ |
234 +| [Groupe Mach](groupemach.md) | [`dayforce`](ats-dayforce.md) | 10 | 0 % | 100 % | ✅ |
235 +| [Mirego](mirego.md) | [`lever`](ats-lever.md) | 10 | 0 % | 100 % | ✅ |
236 +| [Nationex](nationex.md) | [`dayforce`](ats-dayforce.md) | 10 | 0 % | 100 % | ✅ |
237 +| [Royal Vet](royalvet.md) | [`greenhouse`](ats-greenhouse.md) | 10 | 0 % | 100 % | ✅ |
238 +| [Sun Life](sunlife.md) | [`workday`](ats-workday.md) | 10 | 10 % | 100 % | ✅ |
239 +| [Telesat](telesat.md) | [`lever`](ats-lever.md) | 10 | 0 % | 100 % | ✅ |
240 +| [VF Corporation (The North Face, Vans)](vfc.md) | [`workday`](ats-workday.md) | 10 | 80 % | 100 % | ✅ |
183 241 | [ADI - Albert Davidson Industries](adi_albert_davidson_industries.md) | [`breezy`](ats-breezy.md) | 9 | 100 % | 100 % | ✅ |
184 242 | [AlayaCare](alayacare.md) | [`greenhouse`](ats-greenhouse.md) | 9 | 0 % | 100 % | ✅ |
185 | [Bento Sushi](bento_sushi.md) | [`adp`](ats-adp.md) | 9 | 89 % | 0 % | ✅ |
243 +| [Alo Yoga](aloyoga.md) | [`greenhouse`](ats-greenhouse.md) | 9 | 0 % | 78 % | ✅ |
244 +| [Bento Sushi](bento_sushi.md) | [`adp`](ats-adp.md) | 9 | 89 % | 100 % | ✅ |
245 +| [Botpress](botpress.md) | [`workable`](ats-workable.md) | 9 | 0 % | 100 % | ✅ |
186 246 | [Canadian Tire](canadiantirecorporation.md) | [`workday`](ats-workday.md) | 9 | 56 % | 100 % | ✅ |
187 247 | [EDF Renouvelables Canada](edf_renouvelables.md) | [`icims`](ats-icims.md) | 9 | 78 % | 67 % | ✅ |
188 | [Eminent Valet](eminent_valet.md) | [`workable`](ats-workable.md) | 9 | 100 % | 100 % | ✅ |
189 | [Framestore](framestore.md) | [`recruitee`](ats-recruitee.md) | 9 | 0 % | 100 % | ✅ |
190 | [HEC Montréal](hec_montreal.md) | [`taleo_tbe`](ats-taleo_tbe.md) | 9 | 0 % | 0 % | ✅ |
191 | [HEC Montréal — corps professoral](hec_montreal_profs.md) | [`taleo_tbe`](ats-taleo_tbe.md) | 9 | 0 % | 0 % | ✅ |
248 +| [HEC Montréal](hec_montreal.md) | [`taleo_tbe`](ats-taleo_tbe.md) | 9 | 0 % | 100 % | ✅ |
249 +| [HEC Montréal — corps professoral](hec_montreal_profs.md) | [`taleo_tbe`](ats-taleo_tbe.md) | 9 | 0 % | 100 % | ✅ |
192 250 | [J'Excelle](jexcelleinc.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 9 | 0 % | 100 % | ✅ |
193 | [JG Rive-Sud (GFS)](jgrivesud.md) | [`workday`](ats-workday.md) | 9 | 67 % | 100 % | ✅ |
251 +| [Lindt & Sprüngli Canada](lindt_sprunglicanada.md) | [`breezy`](ats-breezy.md) | 9 | 0 % | 100 % | ✅ |
194 252 | [Nora Pharma](nora_pharma.md) | [`breezy`](ats-breezy.md) | 9 | 100 % | 89 % | ✅ |
253 +| [Rentokil Initial](rentokil_initial.md) | [`workable`](ats-workable.md) | 9 | 89 % | 100 % | ✅ |
195 254 | [SIA Innovations](siainnovationsinc.md) | [`greenhouse`](ats-greenhouse.md) | 9 | 44 % | 100 % | ✅ |
196 255 | [Tetrix](tetrix.md) | [`ashby`](ats-ashby.md) | 9 | 100 % | 11 % | ✅ |
256 +| [AJ Walter Aviation](ajwalter.md) | [`recruitee`](ats-recruitee.md) | 8 | 0 % | 100 % | ✅ |
197 257 | [Big Bang](bigbang.md) | [`bamboohr`](ats-bamboohr.md) | 8 | 25 % | 100 % | ✅ |
198 | [Botpress](botpress.md) | [`workable`](ats-workable.md) | 8 | 0 % | 100 % | ✅ |
199 258 | [CF Montréal](cfmontreal.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 8 | 0 % | 100 % | ✅ |
200 259 | [Devimco Appartements](devimco.md) | [`bamboohr`](ats-bamboohr.md) | 8 | 12 % | 100 % | ✅ |
260 +| [Fonds de solidarité FTQ](fondsftq.md) | [`workday`](ats-workday.md) | 8 | 0 % | 100 % | ✅ |
201 261 | [GURUS Solutions](gurussolutions.md) | [`greenhouse`](ats-greenhouse.md) | 8 | 0 % | 100 % | ✅ |
202 | [LIDD Consultants](lidd.md) | [`workable`](ats-workable.md) | 8 | 0 % | 100 % | ✅ |
262 +| [Lyft](lyft.md) | [`greenhouse`](ats-greenhouse.md) | 8 | 100 % | 100 % | ✅ |
203 263 | [Mila — Institut québécois d'IA](mila_2.md) | [`workable`](ats-workable.md) | 8 | 0 % | 100 % | ✅ |
204 | [Nuovo Photography](nuovophotography.md) | [`workable`](ats-workable.md) | 8 | 25 % | 100 % | ✅ |
205 264 | [Omni Hôtel Mont-Royal](omni_hotels_gestion.md) | [`icims`](ats-icims.md) | 8 | 88 % | 100 % | ✅ |
206 265 | [Omni Hôtel Mont-Royal](omni_hotels_horaire.md) | [`icims`](ats-icims.md) | 8 | 88 % | 100 % | ✅ |
207 | [Sun Life](sunlife.md) | [`workday`](ats-workday.md) | 8 | 0 % | 100 % | ✅ |
208 | [AJ Walter Aviation](ajwalter.md) | [`recruitee`](ats-recruitee.md) | 7 | 0 % | 100 % | ✅ |
266 +| [Portage CyberTech](portagecybertech.md) | [`bamboohr`](ats-bamboohr.md) | 8 | 38 % | 100 % | ✅ |
267 +| [Toboggan Labs](tobogganlabs.md) | [`greenhouse`](ats-greenhouse.md) | 8 | 0 % | 100 % | ✅ |
268 +| [Distro](distro.md) | [`lever`](ats-lever.md) | 7 | 100 % | 100 % | ✅ |
209 269 | [Luqia (INO)](ino_ca.md) | [`breezy`](ats-breezy.md) | 7 | 0 % | 100 % | ✅ |
210 | [Petal](petalmd.md) | [`recruitee`](ats-recruitee.md) | 7 | 14 % | 100 % | ✅ |
270 +| [Mejuri](mejuri.md) | [`greenhouse`](ats-greenhouse.md) | 7 | 71 % | 100 % | ✅ |
271 +| [Nexapp](nexapp.md) | [`bamboohr`](ats-bamboohr.md) | 7 | 0 % | 100 % | ✅ |
272 +| [Nuovo Photography](nuovophotography.md) | [`workable`](ats-workable.md) | 7 | 29 % | 100 % | ✅ |
273 +| [Pfizer Canada](pfizer.md) | [`workday`](ats-workday.md) | 7 | 100 % | 29 % | ✅ |
211 274 | [Robotiq](robotiq.md) | [`bamboohr`](ats-bamboohr.md) | 7 | 0 % | 100 % | ✅ |
275 +| [Toon Boom Animation](toonboom.md) | [`bamboohr`](ats-bamboohr.md) | 7 | 0 % | 100 % | ✅ |
276 +| [US Mobile](usmobile.md) | [`lever`](ats-lever.md) | 7 | 100 % | 100 % | ✅ |
277 +| [Administration portuaire de Québec](portquebec.md) | [`dayforce`](ats-dayforce.md) | 6 | 0 % | 100 % | ✅ |
212 278 | [Church & Dwight Canada](churchdwight.md) | [`workday`](ats-workday.md) | 6 | 0 % | 100 % | ✅ |
213 | [Cultures Gen V](cultures_genv.md) | [`adp`](ats-adp.md) | 6 | 33 % | 0 % | ✅ |
279 +| [CTS Foods Brokers](cts_foods_brokers_inc.md) | [`workable`](ats-workable.md) | 6 | 33 % | 100 % | ✅ |
280 +| [Cultures Gen V](cultures_genv.md) | [`adp`](ats-adp.md) | 6 | 33 % | 100 % | ✅ |
281 +| [Daniels Health Canada](daniels_sharpsmart.md) | [`lever`](ats-lever.md) | 6 | 17 % | 33 % | ✅ |
214 282 | [EQ Bank](eqbank.md) | [`lever`](ats-lever.md) | 6 | 50 % | 50 % | ✅ |
215 | [Hopper](hopper.md) | [`ashby`](ats-ashby.md) | 6 | 0 % | 67 % | ✅ |
216 | [Mattel (Mega Bloks)](mattelinc.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 6 | 0 % | 100 % | ✅ |
283 +| [Exportation et développement Canada (EDC)](export_development_canada.md) | [`workable`](ats-workable.md) | 6 | 83 % | 100 % | ✅ |
284 +| [Keel Infrastructure](keelinfrastructure.md) | [`greenhouse`](ats-greenhouse.md) | 6 | 0 % | 100 % | ✅ |
285 +| [LRDG (Language Research Development Group)](lrdgonline.md) | [`lever`](ats-lever.md) | 6 | 100 % | 100 % | ✅ |
286 +| [Maquette Virtuelle](maquettevirtuelle.md) | [`lever`](ats-lever.md) | 6 | 0 % | 100 % | ✅ |
217 287 | [Mitsubishi HC Capital Canada](mitsubishi_hc_capital.md) | [`adp`](ats-adp.md) | 6 | 50 % | 100 % | ✅ |
218 | [MSI Gestion immobilière](msi_gestion.md) | [`adp`](ats-adp.md) | 6 | 100 % | 100 % | ✅ |
219 288 | [MXO](mxo.md) | [`bamboohr`](ats-bamboohr.md) | 6 | 83 % | 100 % | ✅ |
220 | [Nexapp](nexapp.md) | [`bamboohr`](ats-bamboohr.md) | 6 | 0 % | 100 % | ✅ |
221 289 | [North West Rubber](northwestrubber.md) | [`bamboohr`](ats-bamboohr.md) | 6 | 0 % | 100 % | ✅ |
222 | [Portage CyberTech](portagecybertech.md) | [`bamboohr`](ats-bamboohr.md) | 6 | 17 % | 100 % | ✅ |
290 +| [Petal](petalmd.md) | [`recruitee`](ats-recruitee.md) | 6 | 0 % | 100 % | ✅ |
291 +| [STAS](stasinc.md) | [`recruitee`](ats-recruitee.md) | 6 | 0 % | 100 % | ✅ |
223 292 | [Sweat Pants Agency](sweat_pants_agency.md) | [`workable`](ats-workable.md) | 6 | 50 % | 100 % | ✅ |
224 | [Toon Boom Animation](toonboom.md) | [`bamboohr`](ats-bamboohr.md) | 6 | 0 % | 100 % | ✅ |
225 | [Triotech](triotech.md) | [`bamboohr`](ats-bamboohr.md) | 6 | 17 % | 100 % | ✅ |
226 | [US Mobile](usmobile.md) | [`lever`](ats-lever.md) | 6 | 100 % | 100 % | ✅ |
227 293 | [Adèle Express](adeleexpressfr.md) | [`recruitee`](ats-recruitee.md) | 5 | 60 % | 100 % | ✅ |
294 +| [Air Canada Rouge](acadierouge.md) | [`dayforce`](ats-dayforce.md) | 5 | 20 % | 100 % | ✅ |
228 295 | [Alphanumeric Systems](alphanumeric_systems.md) | [`breezy`](ats-breezy.md) | 5 | 100 % | 100 % | ✅ |
229 296 | [Astucemedia](astucemedia.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 5 | 0 % | 100 % | ✅ |
230 297 | [Aviya Aerospace Systems](aviyatech.md) | [`lever`](ats-lever.md) | 5 | 0 % | 100 % | ✅ |
231 | [Distro](distro.md) | [`lever`](ats-lever.md) | 5 | 100 % | 100 % | ✅ |
298 +| [Hopper](hopper.md) | [`ashby`](ats-ashby.md) | 5 | 0 % | 60 % | ✅ |
232 299 | [Lush Cosmétiques](lush.md) | [`greenhouse`](ats-greenhouse.md) | 5 | 100 % | 100 % | ✅ |
233 300 | [Mistral AI](mistral_ai.md) | [`ashby`](ats-ashby.md) | 5 | 0 % | 100 % | ✅ |
301 +| [MSI Gestion immobilière](msi_gestion.md) | [`adp`](ats-adp.md) | 5 | 100 % | 100 % | ✅ |
234 302 | [Médialo](medialo.md) | [`recruitee`](ats-recruitee.md) | 5 | 0 % | 80 % | ✅ |
235 | [Poka](poka.md) | [`greenhouse`](ats-greenhouse.md) | 5 | 0 % | 100 % | ✅ |
303 +| [Nomic Bio](nomic.md) | [`ashby`](ats-ashby.md) | 5 | 0 % | 80 % | ✅ |
304 +| [Plusgrade](plusgrade.md) | [`workday`](ats-workday.md) | 5 | 0 % | 100 % | ✅ |
236 305 | [Propriétés Scalia](scalia.md) | [`bamboohr`](ats-bamboohr.md) | 5 | 20 % | 100 % | ✅ |
237 306 | [Raymond Chabot Grant Thornton](rcgt.md) | [`workday`](ats-workday.md) | 5 | 0 % | 100 % | ✅ |
307 +| [Realstar](realstar.md) | [`dayforce`](ats-dayforce.md) | 5 | 0 % | 100 % | ✅ |
238 308 | [Surmesur](surmesur.md) | [`bamboohr`](ats-bamboohr.md) | 5 | 80 % | 100 % | ✅ |
239 | [TandemLaunch](tandemlaunch.md) | [`greenhouse`](ats-greenhouse.md) | 5 | 0 % | 100 % | ✅ |
309 +| [Triotech](triotech.md) | [`bamboohr`](ats-bamboohr.md) | 5 | 0 % | 100 % | ✅ |
240 310 | [VOXDATA](voxdata.md) | [`breezy`](ats-breezy.md) | 5 | 100 % | 100 % | ✅ |
311 +| [Agile DSS](agiledss.md) | [`recruitee`](ats-recruitee.md) | 4 | 0 % | 100 % | ✅ |
312 +| [Alimentiv](alimentiv_2.md) | [`lever`](ats-lever.md) | 4 | 100 % | 25 % | ✅ |
313 +| [Bardel Entertainment](bardel_entertainment.md) | [`workable`](ats-workable.md) | 4 | 100 % | 100 % | ✅ |
241 314 | [Broadsign](broadsign.md) | [`greenhouse`](ats-greenhouse.md) | 4 | 0 % | 100 % | ✅ |
315 +| [Dare Foods](darefoods.md) | [`dayforce`](ats-dayforce.md) | 4 | 75 % | 100 % | ✅ |
316 +| [Delmar International](delmar_international_inc.md) | [`workable`](ats-workable.md) | 4 | 0 % | 100 % | ✅ |
317 +| [Ecosystem Énergie](ecosystem.md) | [`lever`](ats-lever.md) | 4 | 0 % | 100 % | ✅ |
242 318 | [EOS Aircraft](eosaircraftinc.md) | [`bamboohr`](ats-bamboohr.md) | 4 | 0 % | 100 % | ✅ |
243 319 | [HoYoverse](hoyoverse.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 4 | 0 % | 100 % | ✅ |
244 320 | [Korem](korem.md) | [`bamboohr`](ats-bamboohr.md) | 4 | 0 % | 100 % | ✅ |
321 +| [Mattel (Mega Bloks)](mattelinc.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 4 | 0 % | 100 % | ✅ |
245 322 | [Mitacs](mitacs.md) | [`bamboohr`](ats-bamboohr.md) | 4 | 100 % | 100 % | ✅ |
246 | [Nomic Bio](nomic.md) | [`ashby`](ats-ashby.md) | 4 | 0 % | 75 % | ✅ |
247 | [Pfizer Canada](pfizer.md) | [`workday`](ats-workday.md) | 4 | 100 % | 0 % | ✅ |
248 | [Plusgrade](plusgrade.md) | [`workday`](ats-workday.md) | 4 | 0 % | 100 % | ✅ |
323 +| [Neo Financial](neofinancial.md) | [`ashby`](ats-ashby.md) | 4 | 100 % | 100 % | ✅ |
324 +| [Pivot + Edge](pivotandedge.md) | [`recruitee`](ats-recruitee.md) | 4 | 0 % | 100 % | ✅ |
325 +| [Placements Mackenzie (Power/IGM)](mackenzie.md) | [`icims`](ats-icims.md) | 4 | 100 % | 75 % | ✅ |
326 +| [ServiceNow](servicenow.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 4 | 0 % | 100 % | ✅ |
327 +| [TandemLaunch](tandemlaunch.md) | [`greenhouse`](ats-greenhouse.md) | 4 | 0 % | 100 % | ✅ |
249 328 | [Vaco](vaco.md) | [`greenhouse`](ats-greenhouse.md) | 4 | 75 % | 100 % | ✅ |
250 | [Bardel Entertainment](bardel_entertainment.md) | [`workable`](ats-workable.md) | 3 | 100 % | 100 % | ✅ |
251 329 | [Brasseries Sleeman (Unibroue)](sleeman.md) | [`workday`](ats-workday.md) | 3 | 33 % | 100 % | ✅ |
330 +| [Cologix](cologix.md) | [`lever`](ats-lever.md) | 3 | 33 % | 100 % | ✅ |
331 +| [CSN Collision](csncollision.md) | [`workable`](ats-workable.md) | 3 | 0 % | 100 % | ✅ |
332 +| [Damotech](damotech.md) | [`workable`](ats-workable.md) | 3 | 33 % | 100 % | ✅ |
252 333 | [DiliTrust](dilitrust.md) | [`lever`](ats-lever.md) | 3 | 0 % | 100 % | ✅ |
253 334 | [Dulcedo Management](dulcedo.md) | [`lever`](ats-lever.md) | 3 | 33 % | 67 % | ✅ |
335 +| [East Penn Canada](eastpenn.md) | [`dayforce`](ats-dayforce.md) | 3 | 0 % | 100 % | ✅ |
254 336 | [EVLO (Hydro-Québec)](evlo.md) | [`bamboohr`](ats-bamboohr.md) | 3 | 0 % | 100 % | ✅ |
255 | [Flinks](flinks.md) | [`workable`](ats-workable.md) | 3 | 100 % | 100 % | ✅ |
256 337 | [Fuse Energy](fuse.md) | [`ashby`](ats-ashby.md) | 3 | 0 % | 100 % | ✅ |
257 338 | [Gearbox Studio Québec](gearboxquebec.md) | [`greenhouse`](ats-greenhouse.md) | 3 | 0 % | 100 % | ✅ |
339 +| [GURU Boisson Énergisante](guruorganicenergydrink.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 3 | 0 % | 100 % | ✅ |
258 340 | [Mistplay](mistplay.md) | [`lever`](ats-lever.md) | 3 | 33 % | 100 % | ✅ |
259 341 | [No Saint](no_saint.md) | [`ashby`](ats-ashby.md) | 3 | 0 % | 100 % | ✅ |
260 | [Placements Mackenzie (Power/IGM)](mackenzie.md) | [`icims`](ats-icims.md) | 3 | 100 % | 0 % | ✅ |
261 | [Rethink](rethinkcanada.md) | [`bamboohr`](ats-bamboohr.md) | 3 | 0 % | 100 % | ✅ |
342 +| [Poka](poka.md) | [`greenhouse`](ats-greenhouse.md) | 3 | 0 % | 100 % | ✅ |
343 +| [Reflector Entertainment](reflector.md) | [`dayforce`](ats-dayforce.md) | 3 | 0 % | 100 % | ✅ |
262 344 | [Squeeze Studio Animation](squeezestudio.md) | [`recruitee`](ats-recruitee.md) | 3 | 0 % | 67 % | ✅ |
263 | [Suncor Énergie](suncor.md) | [`workday`](ats-workday.md) | 3 | 0 % | 100 % | ✅ |
345 +| [Turbulent](turbulent.md) | [`breezy`](ats-breezy.md) | 3 | 0 % | 100 % | ✅ |
264 346 | [Unit8](unit8.md) | [`workable`](ats-workable.md) | 3 | 0 % | 100 % | ✅ |
265 | [Alimentiv](alimentiv_2.md) | [`lever`](ats-lever.md) | 2 | 100 % | 50 % | ✅ |
266 | [Aliments Ouimet-Cordon Bleu inc.](cordonbleu.md) | [`bamboohr`](ats-bamboohr.md) | 2 | 50 % | 100 % | ✅ |
347 +| [AutoTrader Canada](autotradercanada.md) | [`greenhouse`](ats-greenhouse.md) | 2 | 100 % | 100 % | ✅ |
267 348 | [BIXI Montréal](biximontreal.md) | [`recruitee`](ats-recruitee.md) | 2 | 50 % | 100 % | ✅ |
349 +| [Black & McDonald](black_mcdonald_francais.md) | [`breezy`](ats-breezy.md) | 2 | 0 % | 100 % | ✅ |
350 +| [Charger Logistics](charger_logistics_inc.md) | [`workable`](ats-workable.md) | 2 | 0 % | 100 % | ✅ |
351 +| [Charlotte Tilbury](charlotte_tilbury.md) | [`workable`](ats-workable.md) | 2 | 0 % | 100 % | ✅ |
352 +| [Eidos-Montréal](eidosmontreal.md) | [`dayforce`](ats-dayforce.md) | 2 | 0 % | 100 % | ✅ |
353 +| [Exegy](exegy.md) | [`ashby`](ats-ashby.md) | 2 | 0 % | 100 % | ✅ |
268 354 | [Fenêtres Concept](fenetresconcept.md) | [`bamboohr`](ats-bamboohr.md) | 2 | 100 % | 100 % | ✅ |
355 +| [Financeit](financeit.md) | [`workable`](ats-workable.md) | 2 | 100 % | 100 % | ✅ |
356 +| [Fiserv](fiserv.md) | [`workday`](ats-workday.md) | 2 | 50 % | 100 % | ✅ |
269 357 | [Flare (cybersécurité)](flare.md) | [`bamboohr`](ats-bamboohr.md) | 2 | 50 % | 100 % | ✅ |
270 358 | [Groupe BC2](bc2.md) | [`bamboohr`](ats-bamboohr.md) | 2 | 0 % | 100 % | ✅ |
359 +| [KRAFTON Montréal Studio](studiokraftonboard.md) | [`greenhouse`](ats-greenhouse.md) | 2 | 0 % | 100 % | ✅ |
360 +| [Lambda](lambda.md) | [`ashby`](ats-ashby.md) | 2 | 100 % | 100 % | ✅ |
361 +| [Latys Intelligence](latys.md) | [`greenhouse`](ats-greenhouse.md) | 2 | 0 % | 100 % | ✅ |
271 362 | [On Running](onrunning.md) | [`greenhouse`](ats-greenhouse.md) | 2 | 0 % | 100 % | ✅ |
272 363 | [OTT Financial](ott.md) | [`bamboohr`](ats-bamboohr.md) | 2 | 0 % | 100 % | ✅ |
273 364 | [Playmind](playmind.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 2 | 0 % | 100 % | ✅ |
274 365 | [Potloc](potloc.md) | [`lever`](ats-lever.md) | 2 | 0 % | 100 % | ✅ |
275 | [ServiceNow](servicenow.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 2 | 0 % | 100 % | ✅ |
366 +| [Rethink](rethinkcanada.md) | [`bamboohr`](ats-bamboohr.md) | 2 | 0 % | 100 % | ✅ |
367 +| [Sense Ingénierie](sense_engineering.md) | [`breezy`](ats-breezy.md) | 2 | 0 % | 100 % | ✅ |
368 +| [Spectra Premium](spectrapremium.md) | [`dayforce`](ats-dayforce.md) | 2 | 0 % | 100 % | ✅ |
276 369 | [Spreedly](spreedly.md) | [`lever`](ats-lever.md) | 2 | 0 % | 100 % | ✅ |
370 +| [StorageMart](storagemart.md) | [`dayforce`](ats-dayforce.md) | 2 | 100 % | 100 % | ✅ |
371 +| [Suncor Énergie](suncor.md) | [`workday`](ats-workday.md) | 2 | 0 % | 100 % | ✅ |
372 +| [Terrestar Solutions](terrestarsolutionsfr.md) | [`greenhouse`](ats-greenhouse.md) | 2 | 0 % | 100 % | ✅ |
373 +| [Trupanion](trupanion1.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 2 | 50 % | 100 % | ✅ |
277 374 | [Vaporus](vaporus_inc.md) | [`breezy`](ats-breezy.md) | 2 | 100 % | 50 % | ✅ |
278 | [Vasco](vasco.md) | [`ashby`](ats-ashby.md) | 2 | 0 % | 100 % | ✅ |
279 375 | [Venture Media](venturemedia.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 2 | 100 % | 100 % | ✅ |
280 376 | [VML Canada](vmlcanadaen.md) | [`greenhouse`](ats-greenhouse.md) | 2 | 50 % | 100 % | ✅ |
281 377 | [Ziptrek Tremblant](ziptrekeco.md) | [`bamboohr`](ats-bamboohr.md) | 2 | 100 % | 100 % | ✅ |
378 +| [Alan Canada](alan.md) | [`ashby`](ats-ashby.md) | 1 | 0 % | 100 % | ✅ |
379 +| [Aliments Ouimet-Cordon Bleu inc.](cordonbleu.md) | [`bamboohr`](ats-bamboohr.md) | 1 | 100 % | 100 % | ✅ |
282 380 | [Amilia](amilia.md) | [`recruitee`](ats-recruitee.md) | 1 | 0 % | 0 % | ✅ |
283 381 | [Atecna](atecna_montreal.md) | [`workable`](ats-workable.md) | 1 | 0 % | 100 % | ✅ |
382 +| [Billups](billups.md) | [`ashby`](ats-ashby.md) | 1 | 100 % | 100 % | ✅ |
383 +| [BLEUFEU (Festival d'été de Québec)](bleufeu.md) | [`dayforce`](ats-dayforce.md) | 1 | 0 % | 100 % | ✅ |
384 +| [California Closets](californiaclosets.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 1 | 0 % | 100 % | ✅ |
284 385 | [Canada Global Recruitment](canada_global.md) | [`breezy`](ats-breezy.md) | 1 | 0 % | 0 % | ✅ |
285 | [Charger Logistics](charger_logistics_inc.md) | [`workable`](ats-workable.md) | 1 | 0 % | 100 % | ✅ |
386 +| [Centre multiethnique de Québec](centremultiethniquedequbec.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 1 | 100 % | 100 % | ✅ |
387 +| [Club Monaco](clubmonaco.md) | [`greenhouse`](ats-greenhouse.md) | 1 | 0 % | 100 % | ✅ |
286 388 | [GoLogic](gologic.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 1 | 0 % | 100 % | ✅ |
389 +| [Guillevin International](guillevin.md) | [`workday`](ats-workday.md) | 1 | 0 % | 100 % | ✅ |
287 390 | [Industrious](industrious.md) | [`ashby`](ats-ashby.md) | 1 | 0 % | 100 % | ✅ |
288 391 | [NATIONAL](national.md) | [`greenhouse`](ats-greenhouse.md) | 1 | 0 % | 100 % | ✅ |
289 | [Osgoode Properties](osgoode_properties.md) | [`adp`](ats-adp.md) | 1 | 100 % | 0 % | ✅ |
392 +| [Osgoode Properties](osgoode_properties.md) | [`adp`](ats-adp.md) | 1 | 100 % | 100 % | ✅ |
393 +| [Panda7](panda7.md) | [`breezy`](ats-breezy.md) | 1 | 100 % | 100 % | ✅ |
290 394 | [Poulet Rouge](pouletrouge.md) | [`bamboohr`](ats-bamboohr.md) | 1 | 0 % | 100 % | ✅ |
291 395 | [Produits Kruger](produits_kruger.md) | [`taleo_tbe`](ats-taleo_tbe.md) | 1 | 0 % | 0 % | ✅ |
292 396 | [Samsara](samsara.md) | [`greenhouse`](ats-greenhouse.md) | 1 | 100 % | 100 % | ✅ |
397 +| [Shell Canada](shell.md) | [`workday`](ats-workday.md) | 1 | 0 % | 100 % | ✅ |
293 398 | [Sparkgrid](sparkgrid.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 1 | 0 % | 100 % | ✅ |
294 399 | [Stelpro](stelpro.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 1 | 0 % | 100 % | ✅ |
295 400 | [Talsom](talsom.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 1 | 0 % | 100 % | ✅ |
401 +| [TELUS Santé — Cliniques](telus_health_7fe6b0fe8614.md) | [`breezy`](ats-breezy.md) | 1 | 100 % | 0 % | ✅ |
402 +| [Vasco](vasco.md) | [`ashby`](ats-ashby.md) | 1 | 0 % | 100 % | ✅ |
296 403 | [Xplornet](xplornet.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 1 | 0 % | 100 % | ✅ |
297 404 | [YouSet](youset.md) | [`breezy`](ats-breezy.md) | 1 | 0 % | 100 % | ✅ |
405 +| [ZOLL Medical](zoll.md) | [`workday`](ats-workday.md) | 1 | 100 % | 100 % | ✅ |
406 +| [École des entrepreneurs du Québec](coledesentrepreneursduqubec.md) | [`smartrecruiters`](ats-smartrecruiters.md) | 1 | 0 % | 100 % | ✅ |
407 +| [Flinks](flinks.md) | [`workable`](ats-workable.md) | 0 | — | — | ✅ |
298 408 | [Kruger](kruger.md) | [`taleo_tbe`](ats-taleo_tbe.md) | 0 | — | — | ✅ |
409 +| [Projevia](projevia.md) | [`recruitee`](ats-recruitee.md) | 0 | — | — | ✅ |
299 410
300 411 ## Régénérer cette documentation
301 412
added docs/connecteurs/abbott.md +111 −0
@@ -0,0 +1,111 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/abbott.md
7 +Rôle : Fiche connecteur — Abbott (employeur direct, ATS workday)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Abbott (`abbott`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`workday`](ats-workday.md) · Statut registre : actif · Connecteur : `jobka/connectors/abbott.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Abbott]()
20 +- **Page carrières** : https://abbott.wd5.myworkdayjobs.com/abbottcareers
21 +- **Secteurs** : Santé
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-workday.md`](ats-workday.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Abbott` |
33 +| `HOST` | `wd5` |
34 +| `SITE` | `abbottcareers` |
35 +| `TENANT` | `abbott` |
36 +- **Throttle** : 0.7 s entre requêtes.
37 +- **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).
38 +
39 +## Champs → schéma
40 +
41 +Complétude mesurée sur les **10 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 +
43 +| Champ (`jobs.*`) | Rôle | Complétude |
44 +|---|---|---|
45 +| `title` — Titre | titre du poste | 100 % |
46 +| `employer` — Employeur | nom de l'entreprise | 100 % |
47 +| `url` — URL | lien direct vers l'offre originale | 100 % |
48 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
49 +| `city` — Ville | municipalité normalisée | 90 % |
50 +| `region` — Région | région administrative | 90 % |
51 +| `address` — Adresse | adresse du lieu de travail | 0 % |
52 +| `postal_code` — Code postal | code postal si publié | 0 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 40 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 20 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 20 % |
57 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
60 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 90 % |
66 +
67 +Exemple réel : *Responsable régional(e) des ventes - Abbott, soins au point d'intervention (Québec et côte…* — Québec · Le salaire annuel de base pour ce poste se situe entre 99 750.00 $ et $146,300.00​ $ CA · parue le 2026-08-19.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 0.7 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_WORKDAY_DETAIL_LIMIT` | `300` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 10 (dont **10 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 2/10 actives (20 %)
86 +- **GPS** : 9/10 actives (90 %)
87 +- **Mode** : 4/10 actives (40 %)
88 +- **Parution** : 10/10 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 20:56 — trouvées 10, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 5
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync abbott` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='abbott' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 Abbott » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
added docs/connecteurs/acadierouge.md +111 −0
@@ -0,0 +1,111 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/acadierouge.md
7 +Rôle : Fiche connecteur — Air Canada Rouge (employeur direct, ATS dayforce)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Air Canada Rouge (`acadierouge`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`dayforce`](ats-dayforce.md) · Statut registre : actif · Connecteur : `jobka/connectors/acadierouge.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Air Canada Rouge]()
20 +- **Page carrières** : https://jobs.dayforcehcm.com/fr-CA/acvrouge/CANDIDATEPORTAL
21 +- **Secteurs** : Aérospatiale
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-dayforce.md`](ats-dayforce.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `BOARD` | `CANDIDATEPORTAL` |
33 +| `CULTURE` | `fr-CA` |
34 +| `EMPLOYER` | `Air Canada Rouge` |
35 +| `NS` | `acvrouge` |
36 +- **Throttle** : 0.8 s entre requêtes.
37 +- **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).
38 +
39 +## Champs → schéma
40 +
41 +Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 +
43 +| Champ (`jobs.*`) | Rôle | Complétude |
44 +|---|---|---|
45 +| `title` — Titre | titre du poste | 100 % |
46 +| `employer` — Employeur | nom de l'entreprise | 100 % |
47 +| `url` — URL | lien direct vers l'offre originale | 100 % |
48 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
49 +| `city` — Ville | municipalité normalisée | 100 % |
50 +| `region` — Région | région administrative | 100 % |
51 +| `address` — Adresse | adresse du lieu de travail | 100 % |
52 +| `postal_code` — Code postal | code postal si publié | 60 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 80 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 20 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 20 % |
57 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
60 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 40 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 +
67 +Exemple réel : *Agent(e) de Centre d'Appels Bilingue* — Montréal · Primes de $1 pour les heures travaillées en semaine avant 8 h ou après 18 h, ainsi que tou… · parue le 2026-06-24.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 0.8 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_DAYFORCE_DETAIL_LIMIT` | `80` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 5 (dont **5 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 1/5 actives (20 %)
86 +- **GPS** : 5/5 actives (100 %)
87 +- **Mode** : 0/5 actives (0 %)
88 +- **Parution** : 5/5 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 20:56 — trouvées 5, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 5
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync acadierouge` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='acadierouge' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 Air Canada Rouge » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/adeleexpressfr.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/adeleexpressfr.md
7 7 Rôle : Fiche connecteur — Adèle Express (employeur direct, ATS recruitee)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Professionnel de ménage - Pour entretien ménager à domicile
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 5 (dont **5 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 3/5 actives (60 %)
79 79 - **GPS** : 5/5 actives (100 %)
80 80 - **Mode** : 5/5 actives (100 %)
81 81 - **Parution** : 5/5 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:31 — trouvées 5, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 27
82 +- **Dernier sync** : 2026-08-22 20:56 — trouvées 5, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 86
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/adi_albert_davidson_industries.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/adi_albert_davidson_industries.md
7 7 Rôle : Fiche connecteur — ADI - Albert Davidson Industries (employeur direct, ATS breezy)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Assistant Production Director* — Pointe-Claire · $28 – $34
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 9 (dont **9 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 9/9 actives (100 %)
79 79 - **GPS** : 9/9 actives (100 %)
80 80 - **Mode** : 1/9 actives (11 %)
81 81 - **Parution** : 9/9 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:31 — trouvées 9, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 27
82 +- **Dernier sync** : 2026-08-22 20:56 — trouvées 9, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 86
84 84
85 85 ## Erreurs & dépannage
86 86
added docs/connecteurs/agiledss.md +104 −0
@@ -0,0 +1,104 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/agiledss.md
7 +Rôle : Fiche connecteur — Agile DSS (employeur direct, ATS recruitee)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Agile DSS (`agiledss`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`recruitee`](ats-recruitee.md) · Statut registre : actif · Connecteur : `jobka/connectors/agiledss.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Agile DSS]()
20 +- **Page carrières** : https://agiledss.recruitee.com
21 +- **Secteurs** : TI
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-recruitee.md`](ats-recruitee.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Agile DSS` |
33 +| `ORG` | `agiledss` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 75 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 100 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 100 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 +
65 +Exemple réel : *Data Engineer AWS* — Montréal · ∅ · parue le 2026-08-20.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- 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.
72 +
73 +## Volumétrie & complétude live
74 +
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 +
77 +- **Offres en base** : 4 (dont **4 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 0/4 actives (0 %)
79 +- **GPS** : 4/4 actives (100 %)
80 +- **Mode** : 4/4 actives (100 %)
81 +- **Parution** : 4/4 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 20:56 — trouvées 4, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 6
84 +
85 +## Erreurs & dépannage
86 +
87 +Aucune erreur dans `sync_log` pour cette source.
88 +
89 +- Rejouer un sync isolé : `.venv/bin/python run.py sync agiledss` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='agiledss' ORDER BY ts DESC LIMIT 5;"`
90 +- 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`.
91 +
92 +## Licence / conformité
93 +
94 +**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 Agile DSS » 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.
95 +
96 +## Historique
97 +
98 +**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 :
99 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
100 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
101 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
102 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
103 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
104 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/agnico_eagle.md +12 −12
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/agnico_eagle.md
7 7 Rôle : Fiche connecteur — Agnico Eagle Mines (employeur direct, ATS taleo)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -39,7 +39,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
39 39
40 40 ## Champs → schéma
41 41
42 Complétude mesurée sur les **20 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 +Complétude mesurée sur les **29 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
43 43
44 44 | Champ (`jobs.*`) | Rôle | Complétude |
45 45 |---|---|---|
@@ -52,13 +52,13 @@ Complétude mesurée sur les **20 offres actives** de la source (base live, 2026
52 52 | `address` — Adresse | adresse du lieu de travail | 0 % |
53 53 | `postal_code` — Code postal | code postal si publié | 0 % |
54 54 | `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
55 | `employment_type` — Type | temps_plein / temps_partiel / … | 5 % |
55 +| `employment_type` — Type | temps_plein / temps_partiel / … | 10 % |
56 56 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
57 57 | `salary_label` — Libellé salaire | texte salarial original | 0 % |
58 58 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
59 59 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
60 60 | `date_posted` — Date de parution | ISO 8601 | 0 % |
61 | `date_deadline` — Date limite | date limite pour postuler | 95 % |
61 +| `date_deadline` — Date limite | date limite pour postuler | 97 % |
62 62 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
63 63 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
64 64 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
@@ -80,15 +80,15 @@ Exemple réel : *Coordonnateur ressources humaines – processus et projets* —
80 80
81 81 ## Volumétrie & complétude live
82 82
83 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
84 84
85 - **Offres en base** : 20 (dont **20 actives**, 0 masquées comme doublons `dup_of`)
86 - **Salaire** : 0/20 actives (0 %)
87 - **GPS** : 20/20 actives (100 %)
88 - **Mode** : 0/20 actives (0 %)
89 - **Parution** : 0/20 actives (0 %)
90 - **Dernier sync** : 2026-08-19 03:31 — trouvées 20, +0, ~0, -0
91 - **Syncs enregistrés** (`sync_log`) : 16
85 +- **Offres en base** : 34 (dont **29 actives**, 0 masquées comme doublons `dup_of`)
86 +- **Salaire** : 0/29 actives (0 %)
87 +- **GPS** : 29/29 actives (100 %)
88 +- **Mode** : 0/29 actives (0 %)
89 +- **Parution** : 0/29 actives (0 %)
90 +- **Dernier sync** : 2026-08-22 20:56 — trouvées 29, +0, ~0, -0
91 +- **Syncs enregistrés** (`sync_log`) : 75
92 92
93 93 ## Erreurs & dépannage
94 94
modified docs/connecteurs/agropur.md +19 −15
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/agropur.md
7 7 Rôle : Fiche connecteur — Agropur (employeur direct, ATS workday)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **75 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **71 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -52,19 +52,19 @@ Complétude mesurée sur les **75 offres actives** de la source (base live, 2026
52 52 | `postal_code` — Code postal | code postal si publié | 0 % |
53 53 | `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 54 | `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
55 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 93 % |
56 | `salary_label` — Libellé salaire | texte salarial original | 93 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 94 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 94 % |
57 57 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 58 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 59 | `date_posted` — Date de parution | ISO 8601 | 100 % |
60 60 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 57 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 61 % |
62 62 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 63 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 99 % |
66 66
67 Exemple réel : *Manager, Commercial Transformation and Process Optimization* — Québec · Salary scale 006: $100 900 to $126 100 ( Base salary will be determined based on your acad… · parue le 2026-08-18.
67 +Exemple réel : *Opérateur 3* — Québec · Salaire débutant à 32.27$ · parue le 2026-08-21.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,19 +79,23 @@ Exemple réel : *Manager, Commercial Transformation and Process Optimization*
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 75 (dont **75 actives**, 0 masquées comme doublons `dup_of`)
85 - **Salaire** : 70/75 actives (93 %)
86 - **GPS** : 74/75 actives (99 %)
87 - **Mode** : 0/75 actives (0 %)
88 - **Parution** : 75/75 actives (100 %)
89 - **Dernier sync** : 2026-08-19 03:32 — trouvées 75, +0, ~67, -0
90 - **Syncs enregistrés** (`sync_log`) : 27
84 +- **Offres en base** : 81 (dont **71 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 67/71 actives (94 %)
86 +- **GPS** : 70/71 actives (99 %)
87 +- **Mode** : 0/71 actives (0 %)
88 +- **Parution** : 71/71 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 20:56 — trouvées 71, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 86
91 91
92 92 ## Erreurs & dépannage
93 93
94 Aucune erreur dans `sync_log` pour cette source.
94 +Erreurs relevées dans `sync_log` :
95 +
96 +| Erreur | Occurrences | Dernière fois |
97 +|---|---|---|
98 +| Expecting value: line 1 column 1 (char 0) | 1 | 2026-08-22 03:18 |
95 99
96 100 - Rejouer un sync isolé : `.venv/bin/python run.py sync agropur` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='agropur' ORDER BY ts DESC LIMIT 5;"`
97 101 - 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`.
modified docs/connecteurs/airbus.md +17 −11
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/airbus.md
7 7 Rôle : Fiche connecteur — Airbus Canada (employeur direct, ATS workday)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **75 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **83 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -79,19 +79,25 @@ Exemple réel : *Conseiller.ère recrutement/Recruitment Advisor* — Montréal
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 75 (dont **75 actives**, 0 masquées comme doublons `dup_of`)
85 - **Salaire** : 1/75 actives (1 %)
86 - **GPS** : 75/75 actives (100 %)
87 - **Mode** : 0/75 actives (0 %)
88 - **Parution** : 75/75 actives (100 %)
89 - **Dernier sync** : 2026-08-19 03:36 — trouvées 75, +0, ~75, -0
90 - **Syncs enregistrés** (`sync_log`) : 15
84 +- **Offres en base** : 85 (dont **83 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 1/83 actives (1 %)
86 +- **GPS** : 83/83 actives (100 %)
87 +- **Mode** : 0/83 actives (0 %)
88 +- **Parution** : 83/83 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 20:58 — trouvées 83, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 74
91 91
92 92 ## Erreurs & dépannage
93 93
94 Aucune erreur dans `sync_log` pour cette source.
94 +Erreurs relevées dans `sync_log` :
95 +
96 +| Erreur | Occurrences | Dernière fois |
97 +|---|---|---|
98 +| Expecting value: line 1 column 1 (char 0) | 1 | 2026-08-22 03:18 |
99 +| 520 Server Error: <none> for url: https://ag.wd3.myworkdayjobs.com/wday/cxs/ag/Airbus/jobs | 1 | 2026-08-21 00:25 |
100 +| HTTPSConnectionPool(host='ag.wd3.myworkdayjobs.com', port=443): Read timed out. (read time… | 1 | 2026-08-19 16:51 |
95 101
96 102 - Rejouer un sync isolé : `.venv/bin/python run.py sync airbus` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='airbus' ORDER BY ts DESC LIMIT 5;"`
97 103 - 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`.
modified docs/connecteurs/ajwalter.md +12 −12
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ajwalter.md
7 7 Rôle : Fiche connecteur — AJ Walter Aviation (employeur direct, ATS recruitee)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **7 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -56,13 +56,13 @@ Complétude mesurée sur les **7 offres actives** de la source (base live, 2026-
56 56 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 100 % |
57 57 | `date_posted` — Date de parution | ISO 8601 | 100 % |
58 58 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 43 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 50 % |
60 60 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 61 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 62 | `apply_url` — Candidature | lien de candidature directe | 100 % |
63 63 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 64
65 Exemple réel : *Analyste, Soutien à la production - Production Support Analyst* — Montréal · ∅ · parue le 2026-08-14.
65 +Exemple réel : *Spécialiste des ventes - Inside Sales Specialist* — Montréal · ∅ · parue le 2026-08-21.
66 66
67 67 ## Fréquence & budgets
68 68
@@ -72,15 +72,15 @@ Exemple réel : *Analyste, Soutien à la production - Production Support Analyst
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 - **Offres en base** : 7 (dont **7 actives**, 0 masquées comme doublons `dup_of`)
78 - **Salaire** : 0/7 actives (0 %)
79 - **GPS** : 7/7 actives (100 %)
80 - **Mode** : 7/7 actives (100 %)
81 - **Parution** : 7/7 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:36 — trouvées 7, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 27
77 +- **Offres en base** : 8 (dont **8 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 0/8 actives (0 %)
79 +- **GPS** : 8/8 actives (100 %)
80 +- **Mode** : 8/8 actives (100 %)
81 +- **Parution** : 8/8 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 20:58 — trouvées 8, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 86
84 84
85 85 ## Erreurs & dépannage
86 86
added docs/connecteurs/alan.md +104 −0
@@ -0,0 +1,104 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/alan.md
7 +Rôle : Fiche connecteur — Alan Canada (employeur direct, ATS ashby)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Alan Canada (`alan`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`ashby`](ats-ashby.md) · Statut registre : actif · Connecteur : `jobka/connectors/alan.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Alan Canada]()
20 +- **Page carrières** : https://jobs.ashbyhq.com/alan
21 +- **Secteurs** : Assurance
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-ashby.md`](ats-ashby.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Alan Canada` |
33 +| `ORG` | `alan` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 +
65 +Exemple réel : *Psychothérapeute - Québec* — Québec · ∅ · parue le 2026-07-21.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- 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.
72 +
73 +## Volumétrie & complétude live
74 +
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 +
77 +- **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 0/1 actives (0 %)
79 +- **GPS** : 1/1 actives (100 %)
80 +- **Mode** : 0/1 actives (0 %)
81 +- **Parution** : 1/1 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 20:58 — trouvées 1, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 6
84 +
85 +## Erreurs & dépannage
86 +
87 +Aucune erreur dans `sync_log` pour cette source.
88 +
89 +- Rejouer un sync isolé : `.venv/bin/python run.py sync alan` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='alan' ORDER BY ts DESC LIMIT 5;"`
90 +- 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`.
91 +
92 +## Licence / conformité
93 +
94 +**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 Alan Canada » 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.
95 +
96 +## Historique
97 +
98 +**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 :
99 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
100 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
101 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
102 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
103 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
104 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/alayacare.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/alayacare.md
7 7 Rôle : Fiche connecteur — AlayaCare (employeur direct, ATS greenhouse)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Manager, Software Development* — Montréal · ∅ · parue le
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 10 (dont **9 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/9 actives (0 %)
79 79 - **GPS** : 9/9 actives (100 %)
80 80 - **Mode** : 0/9 actives (0 %)
81 81 - **Parution** : 9/9 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:36 — trouvées 9, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 15
82 +- **Dernier sync** : 2026-08-22 20:58 — trouvées 9, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 74
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/alcoa.md +21 −17
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/alcoa.md
7 7 Rôle : Fiche connecteur — Alcoa Canada (employeur direct, ATS workday)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **15 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **16 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -46,23 +46,23 @@ Complétude mesurée sur les **15 offres actives** de la source (base live, 2026
46 46 | `employer` — Employeur | nom de l'entreprise | 100 % |
47 47 | `url` — URL | lien direct vers l'offre originale | 100 % |
48 48 | `description` — Description | texte complet (HTML nettoyé) | 100 % |
49 | `city` — Ville | municipalité normalisée | 53 % |
50 | `region` — Région | région administrative | 93 % |
49 +| `city` — Ville | municipalité normalisée | 56 % |
50 +| `region` — Région | région administrative | 94 % |
51 51 | `address` — Adresse | adresse du lieu de travail | 0 % |
52 52 | `postal_code` — Code postal | code postal si publié | 0 % |
53 53 | `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 54 | `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
55 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 13 % |
56 | `salary_label` — Libellé salaire | texte salarial original | 13 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 12 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 12 % |
57 57 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 58 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 59 | `date_posted` — Date de parution | ISO 8601 | 100 % |
60 60 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 93 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 88 % |
62 62 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 63 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 | `gps` — GPS | lat/lng (géocodage sans invention) | 40 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 44 % |
66 66
67 67 Exemple réel : *Assistant(e) opérateur ou opératrice* — Baie-Comeau · Salaire horaire au-delà de 45 $ l'heure · parue le 2026-08-05.
68 68
@@ -79,19 +79,23 @@ Exemple réel : *Assistant(e) opérateur ou opératrice* — Baie-Comeau · Sala
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 16 (dont **15 actives**, 0 masquées comme doublons `dup_of`)
85 - **Salaire** : 2/15 actives (13 %)
86 - **GPS** : 6/15 actives (40 %)
87 - **Mode** : 0/15 actives (0 %)
88 - **Parution** : 15/15 actives (100 %)
89 - **Dernier sync** : 2026-08-19 03:36 — trouvées 15, +0, ~12, -0
90 - **Syncs enregistrés** (`sync_log`) : 15
84 +- **Offres en base** : 17 (dont **16 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 2/16 actives (12 %)
86 +- **GPS** : 7/16 actives (44 %)
87 +- **Mode** : 0/16 actives (0 %)
88 +- **Parution** : 16/16 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 20:58 — trouvées 16, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 74
91 91
92 92 ## Erreurs & dépannage
93 93
94 Aucune erreur dans `sync_log` pour cette source.
94 +Erreurs relevées dans `sync_log` :
95 +
96 +| Erreur | Occurrences | Dernière fois |
97 +|---|---|---|
98 +| Expecting value: line 1 column 1 (char 0) | 1 | 2026-08-22 03:18 |
95 99
96 100 - Rejouer un sync isolé : `.venv/bin/python run.py sync alcoa` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='alcoa' ORDER BY ts DESC LIMIT 5;"`
97 101 - 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`.
modified docs/connecteurs/alimentiv_2.md +12 −12
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/alimentiv_2.md
7 7 Rôle : Fiche connecteur — Alimentiv (employeur direct, ATS lever)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -60,9 +60,9 @@ Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-
60 60 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 61 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 62 | `apply_url` — Candidature | lien de candidature directe | 100 % |
63 | `gps` — GPS | lat/lng (géocodage sans invention) | 50 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 25 % |
64 64
65 Exemple réel : *Statistician* — ∅ · ∅ · parue le 2026-07-28.
65 +Exemple réel : *ERP System Administrator (Acumatica)* — ∅ · ∅ · parue le 2026-08-22.
66 66
67 67 ## Fréquence & budgets
68 68
@@ -72,15 +72,15 @@ Exemple réel : *Statistician* — ∅ · ∅ · parue le 2026-07-28.
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 - **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
78 - **Salaire** : 2/2 actives (100 %)
79 - **GPS** : 1/2 actives (50 %)
80 - **Mode** : 2/2 actives (100 %)
81 - **Parution** : 2/2 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:36 — trouvées 2, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 27
77 +- **Offres en base** : 4 (dont **4 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 4/4 actives (100 %)
79 +- **GPS** : 1/4 actives (25 %)
80 +- **Mode** : 4/4 actives (100 %)
81 +- **Parution** : 4/4 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 20:58 — trouvées 4, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 86
84 84
85 85 ## Erreurs & dépannage
86 86
added docs/connecteurs/allstate.md +111 −0
@@ -0,0 +1,111 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/allstate.md
7 +Rôle : Fiche connecteur — Allstate Canada (employeur direct, ATS workday)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Allstate Canada (`allstate`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`workday`](ats-workday.md) · Statut registre : actif · Connecteur : `jobka/connectors/allstate.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Allstate Canada]()
20 +- **Page carrières** : https://allstate.wd5.myworkdayjobs.com/allstate_careers
21 +- **Secteurs** : Assurance
22 +- **Région** : Québec
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-workday.md`](ats-workday.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Allstate Canada` |
33 +| `HOST` | `wd5` |
34 +| `SITE` | `allstate_careers` |
35 +| `TENANT` | `allstate` |
36 +- **Throttle** : 0.7 s entre requêtes.
37 +- **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).
38 +
39 +## Champs → schéma
40 +
41 +Complétude mesurée sur les **13 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 +
43 +| Champ (`jobs.*`) | Rôle | Complétude |
44 +|---|---|---|
45 +| `title` — Titre | titre du poste | 100 % |
46 +| `employer` — Employeur | nom de l'entreprise | 100 % |
47 +| `url` — URL | lien direct vers l'offre originale | 100 % |
48 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
49 +| `city` — Ville | municipalité normalisée | 85 % |
50 +| `region` — Région | région administrative | 100 % |
51 +| `address` — Adresse | adresse du lieu de travail | 0 % |
52 +| `postal_code` — Code postal | code postal si publié | 0 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 15 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 23 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 23 % |
57 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
60 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 92 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 85 % |
66 +
67 +Exemple réel : *Expert en sinistre sur la route (QC) - remplacement de 8 mois* — ∅ · $70,000-$80,000 selon l'experience · parue le 2026-08-19.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 0.7 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_WORKDAY_DETAIL_LIMIT` | `300` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 13 (dont **13 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 3/13 actives (23 %)
86 +- **GPS** : 11/13 actives (85 %)
87 +- **Mode** : 2/13 actives (15 %)
88 +- **Parution** : 13/13 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 20:59 — trouvées 13, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 5
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync allstate` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='allstate' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 Allstate Canada » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
added docs/connecteurs/aloyoga.md +104 −0
@@ -0,0 +1,104 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/aloyoga.md
7 +Rôle : Fiche connecteur — Alo Yoga (employeur direct, ATS greenhouse)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Alo Yoga (`aloyoga`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`greenhouse`](ats-greenhouse.md) · Statut registre : actif · Connecteur : `jobka/connectors/aloyoga.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Alo Yoga]()
20 +- **Page carrières** : https://job-boards.greenhouse.io/aloyoga
21 +- **Secteurs** : Commerce de détail
22 +- **Région** : Laval
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-greenhouse.md`](ats-greenhouse.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `BOARD` | `aloyoga` |
33 +| `EMPLOYER` | `Alo Yoga` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 67 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 78 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 78 % |
64 +
65 +Exemple réel : *Operations Associate (Part-Time) \| Associé aux opérations - CF Carrefour Laval* — Québec · ∅ · parue le 2026-08-18.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- 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.
72 +
73 +## Volumétrie & complétude live
74 +
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 +
77 +- **Offres en base** : 9 (dont **9 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 0/9 actives (0 %)
79 +- **GPS** : 7/9 actives (78 %)
80 +- **Mode** : 0/9 actives (0 %)
81 +- **Parution** : 9/9 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 20:59 — trouvées 9, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 6
84 +
85 +## Erreurs & dépannage
86 +
87 +Aucune erreur dans `sync_log` pour cette source.
88 +
89 +- Rejouer un sync isolé : `.venv/bin/python run.py sync aloyoga` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='aloyoga' ORDER BY ts DESC LIMIT 5;"`
90 +- 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`.
91 +
92 +## Licence / conformité
93 +
94 +**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 Alo Yoga » 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.
95 +
96 +## Historique
97 +
98 +**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 :
99 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
100 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
101 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
102 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
103 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
104 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/alphanumeric_systems.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/alphanumeric_systems.md
7 7 Rôle : Fiche connecteur — Alphanumeric Systems (employeur direct, ATS breezy)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Bilingual Customer Service Specialist for Pharmaceuticals/Healt
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 5 (dont **5 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 5/5 actives (100 %)
79 79 - **GPS** : 5/5 actives (100 %)
80 80 - **Mode** : 2/5 actives (40 %)
81 81 - **Parution** : 5/5 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:36 — trouvées 5, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 27
82 +- **Dernier sync** : 2026-08-22 20:59 — trouvées 5, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 86
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/altasciences.md +13 −9
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/altasciences.md
7 7 Rôle : Fiche connecteur — Altasciences (employeur direct, ATS workday)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **29 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **29 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -54,7 +54,7 @@ Complétude mesurée sur les **29 offres actives** de la source (base live, 2026
54 54 | `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
55 55 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
56 56 | `salary_label` — Libellé salaire | texte salarial original | 0 % |
57 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 3 % |
57 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 58 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 59 | `date_posted` — Date de parution | ISO 8601 | 100 % |
60 60 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
@@ -64,7 +64,7 @@ Complétude mesurée sur les **29 offres actives** de la source (base live, 2026
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 Exemple réel : *Medical Equipment and Systems Specialist* — Montréal · ∅ · parue le 2026-08-11.
67 +Exemple réel : *Technician, Reference Standard* — Québec · ∅ · parue le 2026-08-19.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,19 +79,23 @@ Exemple réel : *Medical Equipment and Systems Specialist* — Montréal · ∅
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 29 (dont **29 actives**, 0 masquées comme doublons `dup_of`)
84 +- **Offres en base** : 32 (dont **29 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 0/29 actives (0 %)
86 86 - **GPS** : 29/29 actives (100 %)
87 87 - **Mode** : 28/29 actives (97 %)
88 88 - **Parution** : 29/29 actives (100 %)
89 - **Dernier sync** : 2026-08-19 03:36 — trouvées 29, +0, ~12, -0
90 - **Syncs enregistrés** (`sync_log`) : 15
89 +- **Dernier sync** : 2026-08-22 20:59 — trouvées 29, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 74
91 91
92 92 ## Erreurs & dépannage
93 93
94 Aucune erreur dans `sync_log` pour cette source.
94 +Erreurs relevées dans `sync_log` :
95 +
96 +| Erreur | Occurrences | Dernière fois |
97 +|---|---|---|
98 +| Expecting value: line 1 column 1 (char 0) | 1 | 2026-08-22 03:18 |
95 99
96 100 - Rejouer un sync isolé : `.venv/bin/python run.py sync altasciences` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='altasciences' ORDER BY ts DESC LIMIT 5;"`
97 101 - 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`.
modified docs/connecteurs/amilia.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/amilia.md
7 7 Rôle : Fiche connecteur — Amilia (employeur direct, ATS recruitee)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Coordonnateur.trice, Talent & Culture (contrat de 12 mois)* —
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/1 actives (0 %)
79 79 - **GPS** : 0/1 actives (0 %)
80 80 - **Mode** : 1/1 actives (100 %)
81 81 - **Parution** : 1/1 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:36 — trouvées 1, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 15
82 +- **Dernier sync** : 2026-08-22 20:59 — trouvées 1, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 74
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/anciapersonnelinc.md +10 −10
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/anciapersonnelinc.md
7 7 Rôle : Fiche connecteur — ANCIA Personnel (employeur direct, ATS recruitee)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **59 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **60 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Approvisionneur(euse) de pièces* — Saint-Eustache · Salaire
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 - **Offres en base** : 60 (dont **59 actives**, 0 masquées comme doublons `dup_of`)
78 - **Salaire** : 6/59 actives (10 %)
79 - **GPS** : 59/59 actives (100 %)
80 - **Mode** : 59/59 actives (100 %)
81 - **Parution** : 59/59 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:36 — trouvées 59, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 27
77 +- **Offres en base** : 61 (dont **60 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 6/60 actives (10 %)
79 +- **GPS** : 60/60 actives (100 %)
80 +- **Mode** : 60/60 actives (100 %)
81 +- **Parution** : 60/60 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 20:59 — trouvées 60, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 86
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/appdirect.md +11 −11
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/appdirect.md
7 7 Rôle : Fiche connecteur — AppDirect (employeur direct, ATS greenhouse)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **24 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **24 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -50,19 +50,19 @@ Complétude mesurée sur les **24 offres actives** de la source (base live, 2026
50 50 | `postal_code` — Code postal | code postal si publié | 0 % |
51 51 | `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
52 52 | `employment_type` — Type | temps_plein / temps_partiel / … | 0 % |
53 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 25 % |
54 | `salary_label` — Libellé salaire | texte salarial original | 25 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 42 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 42 % |
55 55 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 56 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 57 | `date_posted` — Date de parution | ISO 8601 | 100 % |
58 58 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 92 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 96 % |
60 60 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 61 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 62 | `apply_url` — Candidature | lien de candidature directe | 0 % |
63 63 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 64
65 Exemple réel : *Développeur/Développeuse Logiciel Senior - PHP* — Montréal · $95,000 — $130,000 CAD · parue le 2026-08-13.
65 +Exemple réel : *Customer Success Manager* — Montréal · $92,000 — $121,000 CAD · parue le 2026-08-21.
66 66
67 67 ## Fréquence & budgets
68 68
@@ -72,15 +72,15 @@ Exemple réel : *Développeur/Développeuse Logiciel Senior - PHP* — Montréal
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 - **Offres en base** : 24 (dont **24 actives**, 0 masquées comme doublons `dup_of`)
78 - **Salaire** : 6/24 actives (25 %)
77 +- **Offres en base** : 28 (dont **24 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 10/24 actives (42 %)
79 79 - **GPS** : 24/24 actives (100 %)
80 80 - **Mode** : 0/24 actives (0 %)
81 81 - **Parution** : 24/24 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:36 — trouvées 24, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 27
82 +- **Dernier sync** : 2026-08-22 20:59 — trouvées 24, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 86
84 84
85 85 ## Erreurs & dépannage
86 86
added docs/connecteurs/aritzia.md +111 −0
@@ -0,0 +1,111 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/aritzia.md
7 +Rôle : Fiche connecteur — Aritzia (employeur direct, ATS workday)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Aritzia (`aritzia`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`workday`](ats-workday.md) · Statut registre : actif · Connecteur : `jobka/connectors/aritzia.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Aritzia]()
20 +- **Page carrières** : https://aritzia.wd3.myworkdayjobs.com/external
21 +- **Secteurs** : Commerce de détail
22 +- **Région** : Laval
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-workday.md`](ats-workday.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Aritzia` |
33 +| `HOST` | `wd3` |
34 +| `SITE` | `external` |
35 +| `TENANT` | `aritzia` |
36 +- **Throttle** : 0.7 s entre requêtes.
37 +- **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).
38 +
39 +## Champs → schéma
40 +
41 +Complétude mesurée sur les **11 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 +
43 +| Champ (`jobs.*`) | Rôle | Complétude |
44 +|---|---|---|
45 +| `title` — Titre | titre du poste | 100 % |
46 +| `employer` — Employeur | nom de l'entreprise | 100 % |
47 +| `url` — URL | lien direct vers l'offre originale | 100 % |
48 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
49 +| `city` — Ville | municipalité normalisée | 100 % |
50 +| `region` — Région | région administrative | 100 % |
51 +| `address` — Adresse | adresse du lieu de travail | 0 % |
52 +| `postal_code` — Code postal | code postal si publié | 0 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 64 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 64 % |
57 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
60 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 +
67 +Exemple réel : *Associé·e de la vente au détail - Montreal Premium Outlets* — Montréal · Nous sommes fier∙ères d'offrir les meilleurs salaires du secteur à partir de 20-30 $/h, av… · parue le 2026-07-23.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 0.7 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_WORKDAY_DETAIL_LIMIT` | `300` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 11 (dont **11 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 7/11 actives (64 %)
86 +- **GPS** : 11/11 actives (100 %)
87 +- **Mode** : 0/11 actives (0 %)
88 +- **Parution** : 11/11 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 20:59 — trouvées 11, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 5
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync aritzia` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='aritzia' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 Aritzia » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
added docs/connecteurs/artelia.md +109 −0
@@ -0,0 +1,109 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/artelia.md
7 +Rôle : Fiche connecteur — Artelia Canada (employeur direct, ATS smartrecruiters)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Artelia Canada (`artelia`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`smartrecruiters`](ats-smartrecruiters.md) · Statut registre : actif · Connecteur : `jobka/connectors/artelia.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Artelia Canada]()
20 +- **Page carrières** : https://jobs.smartrecruiters.com/company/artelia
21 +- **Secteurs** : Ingénierie
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
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).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `COMPANY` | `artelia` |
33 +| `EMPLOYER` | `Artelia Canada` |
34 +- **Throttle** : 0.7 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **115 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 24 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 100 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 58 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 98 % |
64 +
65 +Exemple réel : *Technicien·ne en infrastructures urbaines* — Sherbrooke · ∅ · parue le 2026-08-21.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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 +- **Budgets / plafonds (variables d'environnement)** :
72 +
73 +| Variable | Défaut |
74 +|---|---|
75 +| `JOBKA_SR_DETAIL_LIMIT` | `300` |
76 +- 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 +## Volumétrie & complétude live
79 +
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 +
82 +- **Offres en base** : 115 (dont **115 actives**, 0 masquées comme doublons `dup_of`)
83 +- **Salaire** : 0/115 actives (0 %)
84 +- **GPS** : 113/115 actives (98 %)
85 +- **Mode** : 28/115 actives (24 %)
86 +- **Parution** : 115/115 actives (100 %)
87 +- **Dernier sync** : 2026-08-22 20:59 — trouvées 115, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 6
89 +
90 +## Erreurs & dépannage
91 +
92 +Aucune erreur dans `sync_log` pour cette source.
93 +
94 +- Rejouer un sync isolé : `.venv/bin/python run.py sync artelia` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='artelia' ORDER BY ts DESC LIMIT 5;"`
95 +- 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`.
96 +
97 +## Licence / conformité
98 +
99 +**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 Artelia Canada » 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.
100 +
101 +## Historique
102 +
103 +**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 :
104 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
105 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
106 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
107 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
108 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
109 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/astucemedia.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/astucemedia.md
7 7 Rôle : Fiche connecteur — Astucemedia (employeur direct, ATS smartrecruiters)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Lead Front & Back-End Developer* — Montréal · ∅ · parue
77 77
78 78 ## Volumétrie & complétude live
79 79
80 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 5 (dont **5 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/5 actives (0 %)
84 84 - **GPS** : 5/5 actives (100 %)
85 85 - **Mode** : 2/5 actives (40 %)
86 86 - **Parution** : 5/5 actives (100 %)
87 - **Dernier sync** : 2026-08-19 03:36 — trouvées 5, +0, ~0, -0
88 - **Syncs enregistrés** (`sync_log`) : 27
87 +- **Dernier sync** : 2026-08-22 20:59 — trouvées 5, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 86
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/atecna_montreal.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/atecna_montreal.md
7 7 Rôle : Fiche connecteur — Atecna (employeur direct, ATS workable)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *UI-UX Designer Senior* — Montréal · ∅ · parue le 2026-07
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/1 actives (0 %)
79 79 - **GPS** : 1/1 actives (100 %)
80 80 - **Mode** : 0/1 actives (0 %)
81 81 - **Parution** : 1/1 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:36 — trouvées 1, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 27
82 +- **Dernier sync** : 2026-08-22 20:59 — trouvées 1, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 86
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/atlas_workland.md +22 −18
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/atlas_workland.md
7 7 Rôle : Fiche connecteur — Réseau Atlas Workland (~80 employeurs QC : CSS, cégeps, Santé Québec, STQ, UQTR…) (employeur direct, ATS workland)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -30,7 +30,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
30 30
31 31 ## Champs → schéma
32 32
33 Complétude mesurée sur les **1238 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
33 +Complétude mesurée sur les **1301 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
34 34
35 35 | Champ (`jobs.*`) | Rôle | Complétude |
36 36 |---|---|---|
@@ -41,22 +41,22 @@ Complétude mesurée sur les **1238 offres actives** de la source (base live, 20
41 41 | `city` — Ville | municipalité normalisée | 100 % |
42 42 | `region` — Région | région administrative | 99 % |
43 43 | `address` — Adresse | adresse du lieu de travail | 0 % |
44 | `postal_code` — Code postal | code postal si publié | 82 % |
45 | `work_mode` — Mode | presentiel / hybride / teletravail | 82 % |
46 | `employment_type` — Type | temps_plein / temps_partiel / … | 71 % |
47 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 36 % |
48 | `salary_label` — Libellé salaire | texte salarial original | 36 % |
44 +| `postal_code` — Code postal | code postal si publié | 80 % |
45 +| `work_mode` — Mode | presentiel / hybride / teletravail | 81 % |
46 +| `employment_type` — Type | temps_plein / temps_partiel / … | 72 % |
47 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 34 % |
48 +| `salary_label` — Libellé salaire | texte salarial original | 34 % |
49 49 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
50 50 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
51 51 | `date_posted` — Date de parution | ISO 8601 | 100 % |
52 52 | `date_deadline` — Date limite | date limite pour postuler | 100 % |
53 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 80 % |
53 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 81 % |
54 54 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
55 55 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
56 56 | `apply_url` — Candidature | lien de candidature directe | 0 % |
57 57 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
58 58
59 Exemple réel : *Acheteuse ou acheteur* — Sorel-Tracy · : 26,18 $/heure Max · parue le 2026-08-18.
59 +Exemple réel : *Technicien comptabilité et finances* — Candiac · Salaire horaire se situant entre 42.16 $ et 49.02 $ s’établissant en fonction de l’expérie… · parue le 2026-08-22.
60 60
61 61 ## Fréquence & budgets
62 62
@@ -66,19 +66,23 @@ Exemple réel : *Acheteuse ou acheteur* — Sorel-Tracy · : 26,18 $/heure Max
66 66
67 67 ## Volumétrie & complétude live
68 68
69 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
69 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
70 70
71 - **Offres en base** : 1238 (dont **1238 actives**, 13 masquées comme doublons `dup_of`)
72 - **Salaire** : 441/1238 actives (36 %)
73 - **GPS** : 1238/1238 actives (100 %)
74 - **Mode** : 1014/1238 actives (82 %)
75 - **Parution** : 1238/1238 actives (100 %)
76 - **Dernier sync** : 2026-08-19 04:45 — trouvées 1238, +1238, ~0, -0
77 - **Syncs enregistrés** (`sync_log`) : 1
71 +- **Offres en base** : 1456 (dont **1301 actives**, 13 masquées comme doublons `dup_of`)
72 +- **Salaire** : 444/1301 actives (34 %)
73 +- **GPS** : 1301/1301 actives (100 %)
74 +- **Mode** : 1056/1301 actives (81 %)
75 +- **Parution** : 1301/1301 actives (100 %)
76 +- **Dernier sync** : 2026-08-22 20:59 — trouvées 1301, +0, ~0, -0
77 +- **Syncs enregistrés** (`sync_log`) : 60
78 78
79 79 ## Erreurs & dépannage
80 80
81 Aucune erreur dans `sync_log` pour cette source.
81 +Erreurs relevées dans `sync_log` :
82 +
83 +| Erreur | Occurrences | Dernière fois |
84 +|---|---|---|
85 +| HTTPSConnectionPool(host='jobs-prod.workland.com', port=443): Read timed out. (read timeou… | 1 | 2026-08-22 04:52 |
82 86
83 87 - Rejouer un sync isolé : `.venv/bin/python run.py sync atlas_workland` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='atlas_workland' ORDER BY ts DESC LIMIT 5;"`
84 88 - 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`.
modified docs/connecteurs/ats-adp.md +7 −7
@@ -5,14 +5,14 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-adp.md
7 7 Rôle : Fiche plateforme ATS adp — mécanique partagée + tableau des 5 tenants
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 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 `adp`
14 14
15 **5 employeurs connectés** via cette plateforme — **28 offres actives**. Module partagé : `jobka/connectors/adp.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**5 employeurs connectés** via cette plateforme — **27 offres actives**. Module partagé : `jobka/connectors/adp.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -40,11 +40,11 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
40 40
41 41 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
42 42 |---|---|---|---|---|---|---|
43 | [Bento Sushi](bento_sushi.md) | 9 | 89 % | 0 % | 0 % | 2026-08-19 04:49 | ✅ |
44 | [Cultures Gen V](cultures_genv.md) | 6 | 33 % | 0 % | 0 % | 2026-08-19 04:49 | ✅ |
45 | [Mitsubishi HC Capital Canada](mitsubishi_hc_capital.md) | 6 | 50 % | 100 % | 0 % | 2026-08-19 04:15 | ✅ |
46 | [MSI Gestion immobilière](msi_gestion.md) | 6 | 100 % | 100 % | 0 % | 2026-08-19 04:15 | ✅ |
47 | [Osgoode Properties](osgoode_properties.md) | 1 | 100 % | 0 % | 0 % | 2026-08-19 04:49 | ✅ |
43 +| [Bento Sushi](bento_sushi.md) | 9 | 89 % | 100 % | 0 % | 2026-08-22 21:00 | ✅ |
44 +| [Cultures Gen V](cultures_genv.md) | 6 | 33 % | 100 % | 0 % | 2026-08-22 21:08 | ✅ |
45 +| [Mitsubishi HC Capital Canada](mitsubishi_hc_capital.md) | 6 | 50 % | 100 % | 0 % | 2026-08-22 21:22 | ✅ |
46 +| [MSI Gestion immobilière](msi_gestion.md) | 5 | 100 % | 100 % | 0 % | 2026-08-22 21:22 | ✅ |
47 +| [Osgoode Properties](osgoode_properties.md) | 1 | 100 % | 100 % | 0 % | 2026-08-22 21:23 | ✅ |
48 48
49 49 ## Licence / conformité
50 50
modified docs/connecteurs/ats-ashby.md +19 −14
@@ -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-ashby.md
7 Rôle : Fiche plateforme ATS ashby — mécanique partagée + tableau des 11 tenants
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
7 +Rôle : Fiche plateforme ATS ashby — mécanique partagée + tableau des 16 tenants
8 +Généré : 2026-08-22 22:14 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 `ashby`
14 14
15 **11 employeurs connectés** via cette plateforme — **213 offres actives**. Module partagé : `jobka/connectors/ashby.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**16 employeurs connectés** via cette plateforme — **219 offres actives**. Module partagé : `jobka/connectors/ashby.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -40,17 +40,22 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
40 40
41 41 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
42 42 |---|---|---|---|---|---|---|
43 | [MaintainX](maintainx.md) | 78 | 6 % | 83 % | 100 % | 2026-08-19 04:10 | ✅ |
44 | [Lightspeed Commerce](lightspeedhq.md) | 56 | 7 % | 98 % | 100 % | 2026-08-19 04:10 | ✅ |
45 | [Cohere](cohere.md) | 46 | 17 % | 37 % | 100 % | 2026-08-19 03:52 | ✅ |
46 | [Tetrix](tetrix.md) | 9 | 100 % | 11 % | 100 % | 2026-08-19 04:24 | ✅ |
47 | [Hopper](hopper.md) | 6 | 0 % | 67 % | 100 % | 2026-08-19 04:02 | ✅ |
48 | [Mistral AI](mistral_ai.md) | 5 | 0 % | 100 % | 0 % | 2026-08-19 04:15 | ✅ |
49 | [Nomic Bio](nomic.md) | 4 | 0 % | 75 % | 100 % | 2026-08-19 04:15 | ✅ |
50 | [Fuse Energy](fuse.md) | 3 | 0 % | 100 % | 0 % | 2026-08-19 03:56 | ✅ |
51 | [No Saint](no_saint.md) | 3 | 0 % | 100 % | 100 % | 2026-08-19 04:15 | ✅ |
52 | [Vasco](vasco.md) | 2 | 0 % | 100 % | 100 % | 2026-08-19 04:25 | ✅ |
53 | [Industrious](industrious.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 04:03 | ✅ |
43 +| [MaintainX](maintainx.md) | 72 | 6 % | 86 % | 100 % | 2026-08-22 21:22 | ✅ |
44 +| [Lightspeed Commerce](lightspeedhq.md) | 61 | 8 % | 98 % | 100 % | 2026-08-22 21:22 | ✅ |
45 +| [Cohere](cohere.md) | 44 | 16 % | 36 % | 100 % | 2026-08-22 21:08 | ✅ |
46 +| [Tetrix](tetrix.md) | 9 | 100 % | 11 % | 100 % | 2026-08-22 21:29 | ✅ |
47 +| [Hopper](hopper.md) | 5 | 0 % | 60 % | 100 % | 2026-08-22 21:15 | ✅ |
48 +| [Mistral AI](mistral_ai.md) | 5 | 0 % | 100 % | 0 % | 2026-08-22 21:22 | ✅ |
49 +| [Nomic Bio](nomic.md) | 5 | 0 % | 80 % | 100 % | 2026-08-22 21:22 | ✅ |
50 +| [Neo Financial](neofinancial.md) | 4 | 100 % | 100 % | 0 % | 2026-08-22 21:22 | ✅ |
51 +| [Fuse Energy](fuse.md) | 3 | 0 % | 100 % | 0 % | 2026-08-22 21:11 | ✅ |
52 +| [No Saint](no_saint.md) | 3 | 0 % | 100 % | 100 % | 2026-08-22 21:22 | ✅ |
53 +| [Exegy](exegy.md) | 2 | 0 % | 100 % | 100 % | 2026-08-22 21:11 | ✅ |
54 +| [Lambda](lambda.md) | 2 | 100 % | 100 % | 100 % | 2026-08-22 21:21 | ✅ |
55 +| [Industrious](industrious.md) | 1 | 0 % | 100 % | 0 % | 2026-08-22 21:15 | ✅ |
56 +| [Vasco](vasco.md) | 1 | 0 % | 100 % | 100 % | 2026-08-22 21:30 | ✅ |
57 +| [Alan Canada](alan.md) | 1 | 0 % | 100 % | 0 % | 2026-08-22 20:58 | ✅ |
58 +| [Billups](billups.md) | 1 | 100 % | 100 % | 100 % | 2026-08-22 21:00 | ✅ |
54 59
55 60 ## Licence / conformité
56 61
modified docs/connecteurs/ats-bamboohr.md +33 −33
@@ -5,14 +5,14 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-bamboohr.md
7 7 Rôle : Fiche plateforme ATS bamboohr — mécanique partagée + tableau des 31 tenants
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 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 `bamboohr`
14 14
15 **31 employeurs connectés** via cette plateforme — **227 offres actives**. Module partagé : `jobka/connectors/bamboohr.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**31 employeurs connectés** via cette plateforme — **231 offres actives**. Module partagé : `jobka/connectors/bamboohr.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -43,37 +43,37 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
43 43
44 44 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
45 45 |---|---|---|---|---|---|---|
46 | [Broccolini](broccolini.md) | 23 | 0 % | 100 % | 100 % | 2026-08-19 03:41 | ✅ |
47 | [dcbel](dcbel.md) | 20 | 0 % | 100 % | 100 % | 2026-08-19 03:52 | ✅ |
48 | [Explorance](explorance.md) | 18 | 0 % | 100 % | 100 % | 2026-08-19 03:56 | ✅ |
49 | [Produits Labelink](labelink.md) | 17 | 0 % | 100 % | 100 % | 2026-08-19 04:10 | ✅ |
50 | [OPAL-RT Technologies](opalrt.md) | 13 | 0 % | 100 % | 100 % | 2026-08-19 04:15 | ✅ |
51 | [Victoria Park Medispa](vicpark.md) | 13 | 0 % | 100 % | 100 % | 2026-08-19 04:25 | ✅ |
52 | [Logisco](logisco.md) | 12 | 42 % | 100 % | 100 % | 2026-08-19 04:10 | ✅ |
53 | [KPI Digital](kpidigital.md) | 11 | 0 % | 100 % | 100 % | 2026-08-19 04:10 | ✅ |
54 | [Big Bang](bigbang.md) | 8 | 25 % | 100 % | 100 % | 2026-08-19 03:39 | ✅ |
55 | [Devimco Appartements](devimco.md) | 8 | 12 % | 100 % | 100 % | 2026-08-19 03:55 | ✅ |
56 | [Robotiq](robotiq.md) | 7 | 0 % | 100 % | 100 % | 2026-08-19 04:17 | ✅ |
57 | [MXO](mxo.md) | 6 | 83 % | 100 % | 100 % | 2026-08-19 04:15 | ✅ |
58 | [Nexapp](nexapp.md) | 6 | 0 % | 100 % | 100 % | 2026-08-19 04:15 | ✅ |
59 | [North West Rubber](northwestrubber.md) | 6 | 0 % | 100 % | 100 % | 2026-08-19 04:15 | ✅ |
60 | [Portage CyberTech](portagecybertech.md) | 6 | 17 % | 100 % | 100 % | 2026-08-19 04:16 | ✅ |
61 | [Toon Boom Animation](toonboom.md) | 6 | 0 % | 100 % | 100 % | 2026-08-19 04:24 | ✅ |
62 | [Triotech](triotech.md) | 6 | 17 % | 100 % | 100 % | 2026-08-19 04:24 | ✅ |
63 | [Propriétés Scalia](scalia.md) | 5 | 20 % | 100 % | 100 % | 2026-08-19 04:18 | ✅ |
64 | [Surmesur](surmesur.md) | 5 | 80 % | 100 % | 100 % | 2026-08-19 04:19 | ✅ |
65 | [EOS Aircraft](eosaircraftinc.md) | 4 | 0 % | 100 % | 100 % | 2026-08-19 03:55 | ✅ |
66 | [Korem](korem.md) | 4 | 0 % | 100 % | 100 % | 2026-08-19 04:10 | ✅ |
67 | [Mitacs](mitacs.md) | 4 | 100 % | 100 % | 100 % | 2026-08-19 04:15 | ✅ |
68 | [EVLO (Hydro-Québec)](evlo.md) | 3 | 0 % | 100 % | 100 % | 2026-08-19 03:55 | ✅ |
69 | [Rethink](rethinkcanada.md) | 3 | 0 % | 100 % | 100 % | 2026-08-19 04:16 | ✅ |
70 | [Groupe BC2](bc2.md) | 2 | 0 % | 100 % | 100 % | 2026-08-19 03:38 | ✅ |
71 | [Aliments Ouimet-Cordon Bleu inc.](cordonbleu.md) | 2 | 50 % | 100 % | 100 % | 2026-08-19 03:52 | ✅ |
72 | [Fenêtres Concept](fenetresconcept.md) | 2 | 100 % | 100 % | 100 % | 2026-08-19 03:56 | ✅ |
73 | [Flare (cybersécurité)](flare.md) | 2 | 50 % | 100 % | 100 % | 2026-08-19 03:56 | ✅ |
74 | [OTT Financial](ott.md) | 2 | 0 % | 100 % | 100 % | 2026-08-19 04:15 | ✅ |
75 | [Ziptrek Tremblant](ziptrekeco.md) | 2 | 100 % | 100 % | 100 % | 2026-08-19 04:35 | ✅ |
76 | [Poulet Rouge](pouletrouge.md) | 1 | 0 % | 100 % | 100 % | 2026-08-19 04:16 | ✅ |
46 +| [Broccolini](broccolini.md) | 22 | 0 % | 100 % | 100 % | 2026-08-22 21:04 | ✅ |
47 +| [dcbel](dcbel.md) | 21 | 0 % | 100 % | 100 % | 2026-08-22 21:08 | ✅ |
48 +| [Explorance](explorance.md) | 19 | 0 % | 100 % | 100 % | 2026-08-22 21:11 | ✅ |
49 +| [Produits Labelink](labelink.md) | 18 | 0 % | 100 % | 100 % | 2026-08-22 21:21 | ✅ |
50 +| [Victoria Park Medispa](vicpark.md) | 15 | 0 % | 100 % | 100 % | 2026-08-22 21:30 | ✅ |
51 +| [OPAL-RT Technologies](opalrt.md) | 13 | 0 % | 100 % | 100 % | 2026-08-22 21:23 | ✅ |
52 +| [KPI Digital](kpidigital.md) | 11 | 0 % | 100 % | 100 % | 2026-08-22 21:21 | ✅ |
53 +| [Logisco](logisco.md) | 11 | 36 % | 100 % | 100 % | 2026-08-22 21:22 | ✅ |
54 +| [Big Bang](bigbang.md) | 8 | 25 % | 100 % | 100 % | 2026-08-22 21:00 | ✅ |
55 +| [Devimco Appartements](devimco.md) | 8 | 12 % | 100 % | 100 % | 2026-08-22 21:09 | ✅ |
56 +| [Portage CyberTech](portagecybertech.md) | 8 | 38 % | 100 % | 100 % | 2026-08-22 21:23 | ✅ |
57 +| [Nexapp](nexapp.md) | 7 | 0 % | 100 % | 100 % | 2026-08-22 21:22 | ✅ |
58 +| [Robotiq](robotiq.md) | 7 | 0 % | 100 % | 100 % | 2026-08-22 21:23 | ✅ |
59 +| [Toon Boom Animation](toonboom.md) | 7 | 0 % | 100 % | 100 % | 2026-08-22 21:30 | ✅ |
60 +| [MXO](mxo.md) | 6 | 83 % | 100 % | 100 % | 2026-08-22 21:22 | ✅ |
61 +| [North West Rubber](northwestrubber.md) | 6 | 0 % | 100 % | 100 % | 2026-08-22 21:22 | ✅ |
62 +| [Propriétés Scalia](scalia.md) | 5 | 20 % | 100 % | 100 % | 2026-08-22 21:24 | ✅ |
63 +| [Surmesur](surmesur.md) | 5 | 80 % | 100 % | 100 % | 2026-08-22 21:26 | ✅ |
64 +| [Triotech](triotech.md) | 5 | 0 % | 100 % | 100 % | 2026-08-22 21:30 | ✅ |
65 +| [EOS Aircraft](eosaircraftinc.md) | 4 | 0 % | 100 % | 100 % | 2026-08-22 21:11 | ✅ |
66 +| [Korem](korem.md) | 4 | 0 % | 100 % | 100 % | 2026-08-22 21:21 | ✅ |
67 +| [Mitacs](mitacs.md) | 4 | 100 % | 100 % | 100 % | 2026-08-22 21:22 | ✅ |
68 +| [EVLO (Hydro-Québec)](evlo.md) | 3 | 0 % | 100 % | 100 % | 2026-08-22 21:11 | ✅ |
69 +| [Groupe BC2](bc2.md) | 2 | 0 % | 100 % | 100 % | 2026-08-22 21:00 | ✅ |
70 +| [Fenêtres Concept](fenetresconcept.md) | 2 | 100 % | 100 % | 100 % | 2026-08-22 21:11 | ✅ |
71 +| [Flare (cybersécurité)](flare.md) | 2 | 50 % | 100 % | 100 % | 2026-08-22 21:11 | ✅ |
72 +| [OTT Financial](ott.md) | 2 | 0 % | 100 % | 100 % | 2026-08-22 21:23 | ✅ |
73 +| [Rethink](rethinkcanada.md) | 2 | 0 % | 100 % | 100 % | 2026-08-22 21:23 | ✅ |
74 +| [Ziptrek Tremblant](ziptrekeco.md) | 2 | 100 % | 100 % | 100 % | 2026-08-22 21:32 | ✅ |
75 +| [Aliments Ouimet-Cordon Bleu inc.](cordonbleu.md) | 1 | 100 % | 100 % | 100 % | 2026-08-22 21:08 | ✅ |
76 +| [Poulet Rouge](pouletrouge.md) | 1 | 0 % | 100 % | 100 % | 2026-08-22 21:23 | ✅ |
77 77
78 78 ## Licence / conformité
79 79
modified docs/connecteurs/ats-breezy.md +25 −17
@@ -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-breezy.md
7 Rôle : Fiche plateforme ATS breezy — mécanique partagée + tableau des 14 tenants
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
7 +Rôle : Fiche plateforme ATS breezy — mécanique partagée + tableau des 22 tenants
8 +Généré : 2026-08-22 22:14 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 `breezy`
14 14
15 **14 employeurs connectés** via cette plateforme — **135 offres actives**. Module partagé : `jobka/connectors/breezy.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**22 employeurs connectés** via cette plateforme — **188 offres actives**. Module partagé : `jobka/connectors/breezy.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -37,20 +37,28 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
37 37
38 38 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
39 39 |---|---|---|---|---|---|---|
40 | [Brand Momentum](brandmomentum.md) | 30 | 70 % | 100 % | 0 % | 2026-08-19 03:41 | ✅ |
41 | [NOVIPRO](novipro.md) | 17 | 0 % | 100 % | 24 % | 2026-08-19 04:15 | ✅ |
42 | [Réseau Mieux-Être](reseau_mieux_etre.md) | 15 | 0 % | 100 % | 13 % | 2026-08-19 04:16 | ✅ |
43 | [MicroHabitat](microhabitat.md) | 13 | 100 % | 100 % | 38 % | 2026-08-19 04:15 | ✅ |
44 | [3 Brasseurs Canada](trois_brasseurs.md) | 11 | 73 % | 100 % | 100 % | 2026-08-19 04:24 | ✅ |
45 | [EQ3](eq3_ltd.md) | 10 | 60 % | 100 % | 0 % | 2026-08-19 03:55 | ✅ |
46 | [ADI - Albert Davidson Industries](adi_albert_davidson_industries.md) | 9 | 100 % | 100 % | 11 % | 2026-08-19 03:31 | ✅ |
47 | [Nora Pharma](nora_pharma.md) | 9 | 100 % | 89 % | 0 % | 2026-08-19 04:15 | ✅ |
48 | [Luqia (INO)](ino_ca.md) | 7 | 0 % | 100 % | 0 % | 2026-08-19 04:03 | ✅ |
49 | [Alphanumeric Systems](alphanumeric_systems.md) | 5 | 100 % | 100 % | 40 % | 2026-08-19 03:36 | ✅ |
50 | [VOXDATA](voxdata.md) | 5 | 100 % | 100 % | 100 % | 2026-08-19 04:25 | ✅ |
51 | [Vaporus](vaporus_inc.md) | 2 | 100 % | 50 % | 0 % | 2026-08-19 04:25 | ✅ |
52 | [Canada Global Recruitment](canada_global.md) | 1 | 0 % | 0 % | 0 % | 2026-08-19 03:42 | ✅ |
53 | [YouSet](youset.md) | 1 | 0 % | 100 % | 100 % | 2026-08-19 04:35 | ✅ |
40 +| [Brand Momentum](brandmomentum.md) | 32 | 72 % | 100 % | 0 % | 2026-08-22 21:04 | ✅ |
41 +| [Progesys](progesys_inc.md) | 24 | 4 % | 96 % | 4 % | 2026-08-22 21:23 | ✅ |
42 +| [NOVIPRO](novipro.md) | 17 | 0 % | 100 % | 24 % | 2026-08-22 21:22 | ✅ |
43 +| [Réseau Mieux-Être](reseau_mieux_etre.md) | 14 | 0 % | 100 % | 14 % | 2026-08-22 21:23 | ✅ |
44 +| [MicroHabitat](microhabitat.md) | 13 | 100 % | 100 % | 38 % | 2026-08-22 21:22 | ✅ |
45 +| [3 Brasseurs Canada](trois_brasseurs.md) | 11 | 73 % | 100 % | 100 % | 2026-08-22 21:30 | ✅ |
46 +| [EQ3](eq3_ltd.md) | 10 | 60 % | 100 % | 0 % | 2026-08-22 21:11 | ✅ |
47 +| [BDL Énergie](bdl_energie.md) | 10 | 0 % | 30 % | 0 % | 2026-08-22 21:00 | ✅ |
48 +| [ADI - Albert Davidson Industries](adi_albert_davidson_industries.md) | 9 | 100 % | 100 % | 11 % | 2026-08-22 20:56 | ✅ |
49 +| [Nora Pharma](nora_pharma.md) | 9 | 100 % | 89 % | 0 % | 2026-08-22 21:22 | ✅ |
50 +| [Lindt & Sprüngli Canada](lindt_sprunglicanada.md) | 9 | 0 % | 100 % | 0 % | 2026-08-22 21:22 | ✅ |
51 +| [Luqia (INO)](ino_ca.md) | 7 | 0 % | 100 % | 0 % | 2026-08-22 21:15 | ✅ |
52 +| [Alphanumeric Systems](alphanumeric_systems.md) | 5 | 100 % | 100 % | 40 % | 2026-08-22 20:59 | ✅ |
53 +| [VOXDATA](voxdata.md) | 5 | 100 % | 100 % | 100 % | 2026-08-22 21:30 | ✅ |
54 +| [Turbulent](turbulent.md) | 3 | 0 % | 100 % | 0 % | 2026-08-22 21:30 | ✅ |
55 +| [Vaporus](vaporus_inc.md) | 2 | 100 % | 50 % | 0 % | 2026-08-22 21:30 | ✅ |
56 +| [Black & McDonald](black_mcdonald_francais.md) | 2 | 0 % | 100 % | 0 % | 2026-08-22 21:00 | ✅ |
57 +| [Sense Ingénierie](sense_engineering.md) | 2 | 0 % | 100 % | 100 % | 2026-08-22 21:24 | ✅ |
58 +| [Canada Global Recruitment](canada_global.md) | 1 | 0 % | 0 % | 0 % | 2026-08-22 21:04 | ✅ |
59 +| [YouSet](youset.md) | 1 | 0 % | 100 % | 100 % | 2026-08-22 21:32 | ✅ |
60 +| [Panda7](panda7.md) | 1 | 100 % | 100 % | 100 % | 2026-08-22 21:23 | ✅ |
61 +| [TELUS Santé — Cliniques](telus_health_7fe6b0fe8614.md) | 1 | 100 % | 0 % | 0 % | 2026-08-22 21:29 | ✅ |
54 62
55 63 ## Licence / conformité
56 64
modified docs/connecteurs/ats-custom.md +2 −2
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-custom.md
7 7 Rôle : Fiche plateforme ATS custom — mécanique partagée + tableau des 1 tenants
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -28,7 +28,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
28 28
29 29 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
30 30 |---|---|---|---|---|---|---|
31 | [Industries Lassonde](lassonde.md) | 31 | 0 % | 0 % | 0 % | 2026-08-19 04:49 | ✅ |
31 +| [Industries Lassonde](lassonde.md) | 31 | 32 % | 87 % | 10 % | 2026-08-22 21:21 | ✅ |
32 32
33 33 ## Licence / conformité
34 34
added docs/connecteurs/ats-dayforce.md +93 −0
@@ -0,0 +1,93 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/ats-dayforce.md
7 +Rôle : Fiche plateforme ATS dayforce — mécanique partagée + tableau des 26 tenants
8 +Généré : 2026-08-22 22:14 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 `dayforce`
14 +
15 +**26 employeurs connectés** via cette plateforme — **677 offres actives**. Module partagé : `jobka/connectors/dayforce.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 +
17 +## Description & mécanique
18 +
19 +> Plateforme Dayforce HCM (ex-Ceridian) — jobs.dayforcehcm.com.
20 +>
21 +> API JSON publique du frontal (celle que le navigateur appelle) :
22 +> - jeton : GET /api/auth/csrf -> {csrfToken} (+ cookie de session next-auth) ;
23 +> toute requête POST doit porter l'en-tête X-CSRF-TOKEN, sinon 403.
24 +> - liste : POST /api/geo/<NS>/jobposting/search
25 +> body {clientNamespace, jobBoardCode, cultureCode,
26 +> paginationStart} (pages FIXES de 25, champ découvert dans le
27 +> chunk Next.js : paginationStart=(page-1)*25)
28 +> -> {jobPostings:[{jobPostingId, jobTitle, jobDescription (HTML
29 +> COMPLET dès la liste), jobBoardId, postingStartTimestampUTC,
30 +> postingExpiryTimestampUTC, isEvergreen,
31 +> postingLocations:[{formattedAddress, isoCountryCode, stateCode,
32 +> cityName, coordinates "lat:…;lng:…"}]}], maxCount}
33 +> - détail : GET /api/geo/<NS>/jobposting/<NS>/<culture>/<jobBoardId>/<id>
34 +> -> jobPostingAttributes [{name: "PayType"/"PayClass", value}] +
35 +> jobPostingContent (header/description/footer). Visité avec cache BD
36 +> + budget par cycle (n'apporte que les attributs type/paie).
37 +>
38 +> cultureCode « fr-CA » : Dayforce sert la traduction française quand elle
39 +> existe (public québécois), sinon le texte original.
40 +
41 +## Accès
42 +
43 +- **Endpoint** (`BASE`) : `https://jobs.dayforcehcm.com`
44 +- **Pagination** : flux unique (une requête liste)
45 +- **Backend** : GET/POST direct `requests` (throttlé, User-Agent `JobKaBot/1.0` identifié)
46 +- **Auth** : aucune — API/pages publiques du site carrières.
47 +- **Throttle** : 0.8 s entre requêtes.
48 +- **Budgets (env)** : `JOBKA_DAYFORCE_DETAIL_LIMIT` (défaut `80`)
49 +
50 +## Tenants connectés
51 +
52 +| Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
53 +|---|---|---|---|---|---|---|
54 +| [La Vie en Rose](lavieenrose.md) | 138 | 4 % | 100 % | 0 % | 2026-08-22 21:22 | ✅ |
55 +| [Le Groupe Maurice](groupemaurice.md) | 99 | 0 % | 100 % | 0 % | 2026-08-22 21:12 | ✅ |
56 +| [Gray Collection (Groupe Antonopoulos)](graycollection.md) | 71 | 0 % | 100 % | 0 % | 2026-08-22 21:12 | ✅ |
57 +| [BPA (Experts-conseils)](bpa.md) | 51 | 0 % | 100 % | 0 % | 2026-08-22 21:04 | ✅ |
58 +| [Laura Canada](lauracanada.md) | 50 | 0 % | 100 % | 0 % | 2026-08-22 21:21 | ✅ |
59 +| [JD Sports Canada](jdsports.md) | 47 | 0 % | 100 % | 2 % | 2026-08-22 21:15 | ✅ |
60 +| [Camions Excellence Peterbilt](excellencepeterbilt.md) | 40 | 0 % | 100 % | 0 % | 2026-08-22 21:11 | ✅ |
61 +| [Groupe CH (Canadiens de Montréal, Centre Bell)](groupech.md) | 30 | 0 % | 100 % | 0 % | 2026-08-22 21:12 | ✅ |
62 +| [Soprema](soprema.md) | 28 | 39 % | 100 % | 0 % | 2026-08-22 21:25 | ✅ |
63 +| [Groupe AGF](groupeagf.md) | 15 | 53 % | 100 % | 20 % | 2026-08-22 21:12 | ✅ |
64 +| [VinFast Canada](vinfastcanada.md) | 15 | 33 % | 100 % | 0 % | 2026-08-22 21:30 | ✅ |
65 +| [Fastco Canada](fastcocanada.md) | 14 | 0 % | 100 % | 0 % | 2026-08-22 21:11 | ✅ |
66 +| [United Services Group](unitedservices.md) | 14 | 0 % | 100 % | 0 % | 2026-08-22 21:30 | ✅ |
67 +| [Running Room Canada](runningroom.md) | 12 | 0 % | 100 % | 0 % | 2026-08-22 21:23 | ✅ |
68 +| [Groupe Mach](groupemach.md) | 10 | 0 % | 100 % | 0 % | 2026-08-22 21:12 | ✅ |
69 +| [Nationex](nationex.md) | 10 | 0 % | 100 % | 0 % | 2026-08-22 21:22 | ✅ |
70 +| [Administration portuaire de Québec](portquebec.md) | 6 | 0 % | 100 % | 0 % | 2026-08-22 21:23 | ✅ |
71 +| [Air Canada Rouge](acadierouge.md) | 5 | 20 % | 100 % | 0 % | 2026-08-22 20:56 | ✅ |
72 +| [Realstar](realstar.md) | 5 | 0 % | 100 % | 0 % | 2026-08-22 21:23 | ✅ |
73 +| [Dare Foods](darefoods.md) | 4 | 75 % | 100 % | 0 % | 2026-08-22 21:08 | ✅ |
74 +| [East Penn Canada](eastpenn.md) | 3 | 0 % | 100 % | 0 % | 2026-08-22 21:11 | ✅ |
75 +| [Reflector Entertainment](reflector.md) | 3 | 0 % | 100 % | 0 % | 2026-08-22 21:23 | ✅ |
76 +| [Eidos-Montréal](eidosmontreal.md) | 2 | 0 % | 100 % | 0 % | 2026-08-22 21:11 | ✅ |
77 +| [Spectra Premium](spectrapremium.md) | 2 | 0 % | 100 % | 0 % | 2026-08-22 21:25 | ✅ |
78 +| [StorageMart](storagemart.md) | 2 | 100 % | 100 % | 0 % | 2026-08-22 21:25 | ✅ |
79 +| [BLEUFEU (Festival d'été de Québec)](bleufeu.md) | 1 | 0 % | 100 % | 0 % | 2026-08-22 21:00 | ✅ |
80 +
81 +## Licence / conformité
82 +
83 +**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.
84 +
85 +## Historique
86 +
87 +**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 :
88 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
89 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
90 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
91 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
92 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
93 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/ats-digitalrecruiters.md +4 −4
@@ -5,14 +5,14 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-digitalrecruiters.md
7 7 Rôle : Fiche plateforme ATS digitalrecruiters — mécanique partagée + tableau des 2 tenants
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 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 `digitalrecruiters`
14 14
15 **2 employeurs connectés** via cette plateforme — **68 offres actives**. Module partagé : `jobka/connectors/digitalrecruiters.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**2 employeurs connectés** via cette plateforme — **73 offres actives**. Module partagé : `jobka/connectors/digitalrecruiters.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -36,8 +36,8 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
38 38 |---|---|---|---|---|---|---|
39 | [Santé Québec](sante_quebec.md) | 41 | 98 % | 68 % | 0 % | 2026-08-19 04:17 | ✅ |
40 | [CSS des Découvreurs](cssdd.md) | 27 | 78 % | 0 % | 0 % | 2026-08-19 05:09 | ✅ |
39 +| [Santé Québec](sante_quebec.md) | 46 | 98 % | 63 % | 0 % | 2026-08-22 21:24 | ✅ |
40 +| [CSS des Découvreurs](cssdd.md) | 27 | 81 % | 100 % | 0 % | 2026-08-22 21:08 | ✅ |
41 41
42 42 ## Licence / conformité
43 43
modified docs/connecteurs/ats-greenhouse.md +39 −22
@@ -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-greenhouse.md
7 Rôle : Fiche plateforme ATS greenhouse — mécanique partagée + tableau des 19 tenants
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
7 +Rôle : Fiche plateforme ATS greenhouse — mécanique partagée + tableau des 36 tenants
8 +Généré : 2026-08-22 22:14 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 `greenhouse`
14 14
15 **19 employeurs connectés** via cette plateforme — **192 offres actives**. Module partagé : `jobka/connectors/greenhouse.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**36 employeurs connectés** via cette plateforme — **366 offres actives**. Module partagé : `jobka/connectors/greenhouse.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -37,25 +37,42 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
37 37
38 38 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
39 39 |---|---|---|---|---|---|---|
40 | [Levio](levio.md) | 42 | 0 % | 100 % | 0 % | 2026-08-19 04:10 | ✅ |
41 | [AppDirect](appdirect.md) | 24 | 25 % | 100 % | 0 % | 2026-08-19 03:36 | ✅ |
42 | [mthree](mthreerecruitingportal.md) | 22 | 0 % | 100 % | 23 % | 2026-08-19 04:15 | ✅ |
43 | [Vooban](vooban.md) | 18 | 0 % | 100 % | 0 % | 2026-08-19 04:25 | ✅ |
44 | [Valtech](valtech.md) | 15 | 13 % | 100 % | 0 % | 2026-08-19 04:25 | ✅ |
45 | [Sid Lee](sidlee.md) | 13 | 0 % | 100 % | 0 % | 2026-08-19 04:18 | ✅ |
46 | [AlayaCare](alayacare.md) | 9 | 0 % | 100 % | 0 % | 2026-08-19 03:36 | ✅ |
47 | [SIA Innovations](siainnovationsinc.md) | 9 | 44 % | 100 % | 78 % | 2026-08-19 04:18 | ✅ |
48 | [GURUS Solutions](gurussolutions.md) | 8 | 0 % | 100 % | 0 % | 2026-08-19 04:02 | ✅ |
49 | [Lush Cosmétiques](lush.md) | 5 | 100 % | 100 % | 0 % | 2026-08-19 04:10 | ✅ |
50 | [Poka](poka.md) | 5 | 0 % | 100 % | 0 % | 2026-08-19 04:16 | ✅ |
51 | [TandemLaunch](tandemlaunch.md) | 5 | 0 % | 100 % | 0 % | 2026-08-19 04:19 | ✅ |
52 | [Broadsign](broadsign.md) | 4 | 0 % | 100 % | 100 % | 2026-08-19 03:41 | ✅ |
53 | [Vaco](vaco.md) | 4 | 75 % | 100 % | 0 % | 2026-08-19 04:24 | ✅ |
54 | [Gearbox Studio Québec](gearboxquebec.md) | 3 | 0 % | 100 % | 0 % | 2026-08-19 03:56 | ✅ |
55 | [On Running](onrunning.md) | 2 | 0 % | 100 % | 0 % | 2026-08-19 04:15 | ✅ |
56 | [VML Canada](vmlcanadaen.md) | 2 | 50 % | 100 % | 0 % | 2026-08-19 04:25 | ✅ |
57 | [NATIONAL](national.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 04:15 | ✅ |
58 | [Samsara](samsara.md) | 1 | 100 % | 100 % | 100 % | 2026-08-19 04:17 | ✅ |
40 +| [Levio](levio.md) | 42 | 0 % | 100 % | 0 % | 2026-08-22 21:22 | ✅ |
41 +| [Laporte Experts Conseils](laportefr.md) | 34 | 0 % | 100 % | 0 % | 2026-08-22 21:21 | ✅ |
42 +| [Coveo](coveofr.md) | 29 | 0 % | 100 % | 0 % | 2026-08-22 21:08 | ✅ |
43 +| [AppDirect](appdirect.md) | 24 | 42 % | 100 % | 0 % | 2026-08-22 20:59 | ✅ |
44 +| [mthree](mthreerecruitingportal.md) | 23 | 0 % | 100 % | 22 % | 2026-08-22 21:22 | ✅ |
45 +| [Vooban](vooban.md) | 19 | 0 % | 100 % | 0 % | 2026-08-22 21:30 | ✅ |
46 +| [La Senza](lasenza.md) | 17 | 12 % | 100 % | 0 % | 2026-08-22 21:21 | ✅ |
47 +| [Sony Pictures Imageworks](sonypicturesimageworks.md) | 16 | 31 % | 100 % | 0 % | 2026-08-22 21:25 | ✅ |
48 +| [Sid Lee](sidlee.md) | 13 | 0 % | 100 % | 0 % | 2026-08-22 21:25 | ✅ |
49 +| [Cloud Chamber Montréal](cloudchamberfr.md) | 13 | 0 % | 100 % | 0 % | 2026-08-22 21:08 | ✅ |
50 +| [Valtech](valtech.md) | 12 | 17 % | 100 % | 0 % | 2026-08-22 21:30 | ✅ |
51 +| [LoiZéro](loizero.md) | 12 | 0 % | 100 % | 0 % | 2026-08-22 21:22 | ✅ |
52 +| [Royal Vet](royalvet.md) | 10 | 0 % | 100 % | 0 % | 2026-08-22 21:23 | ✅ |
53 +| [AlayaCare](alayacare.md) | 9 | 0 % | 100 % | 0 % | 2026-08-22 20:58 | ✅ |
54 +| [SIA Innovations](siainnovationsinc.md) | 9 | 44 % | 100 % | 78 % | 2026-08-22 21:25 | ✅ |
55 +| [Alo Yoga](aloyoga.md) | 9 | 0 % | 78 % | 0 % | 2026-08-22 20:59 | ✅ |
56 +| [GURUS Solutions](gurussolutions.md) | 8 | 0 % | 100 % | 0 % | 2026-08-22 21:14 | ✅ |
57 +| [Lyft](lyft.md) | 8 | 100 % | 100 % | 0 % | 2026-08-22 21:22 | ✅ |
58 +| [Toboggan Labs](tobogganlabs.md) | 8 | 0 % | 100 % | 0 % | 2026-08-22 21:30 | ✅ |
59 +| [Mejuri](mejuri.md) | 7 | 71 % | 100 % | 0 % | 2026-08-22 21:22 | ✅ |
60 +| [Keel Infrastructure](keelinfrastructure.md) | 6 | 0 % | 100 % | 0 % | 2026-08-22 21:21 | ✅ |
61 +| [Lush Cosmétiques](lush.md) | 5 | 100 % | 100 % | 0 % | 2026-08-22 21:22 | ✅ |
62 +| [Broadsign](broadsign.md) | 4 | 0 % | 100 % | 100 % | 2026-08-22 21:04 | ✅ |
63 +| [TandemLaunch](tandemlaunch.md) | 4 | 0 % | 100 % | 0 % | 2026-08-22 21:26 | ✅ |
64 +| [Vaco](vaco.md) | 4 | 75 % | 100 % | 0 % | 2026-08-22 21:30 | ✅ |
65 +| [Gearbox Studio Québec](gearboxquebec.md) | 3 | 0 % | 100 % | 0 % | 2026-08-22 21:11 | ✅ |
66 +| [Poka](poka.md) | 3 | 0 % | 100 % | 0 % | 2026-08-22 21:23 | ✅ |
67 +| [On Running](onrunning.md) | 2 | 0 % | 100 % | 0 % | 2026-08-22 21:23 | ✅ |
68 +| [VML Canada](vmlcanadaen.md) | 2 | 50 % | 100 % | 0 % | 2026-08-22 21:30 | ✅ |
69 +| [AutoTrader Canada](autotradercanada.md) | 2 | 100 % | 100 % | 0 % | 2026-08-22 20:59 | ✅ |
70 +| [Latys Intelligence](latys.md) | 2 | 0 % | 100 % | 0 % | 2026-08-22 21:21 | ✅ |
71 +| [KRAFTON Montréal Studio](studiokraftonboard.md) | 2 | 0 % | 100 % | 0 % | 2026-08-22 21:25 | ✅ |
72 +| [Terrestar Solutions](terrestarsolutionsfr.md) | 2 | 0 % | 100 % | 0 % | 2026-08-22 21:29 | ✅ |
73 +| [NATIONAL](national.md) | 1 | 0 % | 100 % | 0 % | 2026-08-22 21:22 | ✅ |
74 +| [Samsara](samsara.md) | 1 | 100 % | 100 % | 100 % | 2026-08-22 21:23 | ✅ |
75 +| [Club Monaco](clubmonaco.md) | 1 | 0 % | 100 % | 0 % | 2026-08-22 21:08 | ✅ |
59 76
60 77 ## Licence / conformité
61 78
modified docs/connecteurs/ats-icims.md +8 −8
@@ -5,14 +5,14 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-icims.md
7 7 Rôle : Fiche plateforme ATS icims — mécanique partagée + tableau des 6 tenants
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 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 `icims`
14 14
15 **6 employeurs connectés** via cette plateforme — **60 offres actives**. Module partagé : `jobka/connectors/icims.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**6 employeurs connectés** via cette plateforme — **61 offres actives**. Module partagé : `jobka/connectors/icims.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -39,12 +39,12 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
39 39
40 40 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
41 41 |---|---|---|---|---|---|---|
42 | [McCarthy Tétrault](mccarthy_tetrault.md) | 22 | 0 % | 100 % | 9 % | 2026-08-19 04:11 | ✅ |
43 | [CAPREIT](capreit.md) | 10 | 0 % | 100 % | 0 % | 2026-08-19 03:42 | ✅ |
44 | [EDF Renouvelables Canada](edf_renouvelables.md) | 9 | 78 % | 67 % | 67 % | 2026-08-19 03:55 | ✅ |
45 | [Omni Hôtel Mont-Royal](omni_hotels_gestion.md) | 8 | 88 % | 100 % | 0 % | 2026-08-19 04:15 | ✅ |
46 | [Omni Hôtel Mont-Royal](omni_hotels_horaire.md) | 8 | 88 % | 100 % | 0 % | 2026-08-19 04:15 | ✅ |
47 | [Placements Mackenzie (Power/IGM)](mackenzie.md) | 3 | 100 % | 0 % | 0 % | 2026-08-19 04:49 | ✅ |
42 +| [McCarthy Tétrault](mccarthy_tetrault.md) | 22 | 0 % | 100 % | 9 % | 2026-08-22 21:22 | ✅ |
43 +| [CAPREIT](capreit.md) | 10 | 0 % | 100 % | 0 % | 2026-08-22 21:04 | ✅ |
44 +| [EDF Renouvelables Canada](edf_renouvelables.md) | 9 | 78 % | 67 % | 67 % | 2026-08-22 21:11 | ✅ |
45 +| [Omni Hôtel Mont-Royal](omni_hotels_gestion.md) | 8 | 88 % | 100 % | 0 % | 2026-08-22 21:22 | ✅ |
46 +| [Omni Hôtel Mont-Royal](omni_hotels_horaire.md) | 8 | 88 % | 100 % | 0 % | 2026-08-22 21:23 | ✅ |
47 +| [Placements Mackenzie (Power/IGM)](mackenzie.md) | 4 | 100 % | 75 % | 0 % | 2026-08-22 21:22 | ✅ |
48 48
49 49 ## Licence / conformité
50 50
modified docs/connecteurs/ats-lever.md +28 −22
@@ -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-lever.md
7 Rôle : Fiche plateforme ATS lever — mécanique partagée + tableau des 19 tenants
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
7 +Rôle : Fiche plateforme ATS lever — mécanique partagée + tableau des 25 tenants
8 +Généré : 2026-08-22 22:14 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 `lever`
14 14
15 **19 employeurs connectés** via cette plateforme — **454 offres actives**. Module partagé : `jobka/connectors/lever.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**25 employeurs connectés** via cette plateforme — **505 offres actives**. Module partagé : `jobka/connectors/lever.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -37,25 +37,31 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
37 37
38 38 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
39 39 |---|---|---|---|---|---|---|
40 | [Go RH](gorh.md) | 266 | 18 % | 98 % | 98 % | 2026-08-19 03:56 | ✅ |
41 | [Behaviour Interactif](bhvr.md) | 39 | 0 % | 100 % | 100 % | 2026-08-19 03:39 | ✅ |
42 | [Cirque du Soleil](cirquedusoleil.md) | 22 | 0 % | 86 % | 100 % | 2026-08-19 03:51 | ✅ |
43 | [Xsolla](xsolla.md) | 21 | 95 % | 95 % | 100 % | 2026-08-19 04:35 | ✅ |
44 | [OSEDEA](osedea.md) | 18 | 0 % | 100 % | 100 % | 2026-08-19 04:15 | ✅ |
45 | [VO2 Group](vo2_group.md) | 17 | 6 % | 100 % | 100 % | 2026-08-19 04:25 | ✅ |
46 | [Spiria](spiria.md) | 12 | 58 % | 100 % | 100 % | 2026-08-19 04:18 | ✅ |
47 | [Mirego](mirego.md) | 11 | 0 % | 100 % | 100 % | 2026-08-19 04:15 | ✅ |
48 | [TSMG](tsmg.md) | 11 | 0 % | 100 % | 100 % | 2026-08-19 04:24 | ✅ |
49 | [EQ Bank](eqbank.md) | 6 | 50 % | 50 % | 100 % | 2026-08-19 03:55 | ✅ |
50 | [US Mobile](usmobile.md) | 6 | 100 % | 100 % | 100 % | 2026-08-19 04:24 | ✅ |
51 | [Aviya Aerospace Systems](aviyatech.md) | 5 | 0 % | 100 % | 100 % | 2026-08-19 03:37 | ✅ |
52 | [Distro](distro.md) | 5 | 100 % | 100 % | 100 % | 2026-08-19 03:55 | ✅ |
53 | [DiliTrust](dilitrust.md) | 3 | 0 % | 100 % | 100 % | 2026-08-19 03:55 | ✅ |
54 | [Dulcedo Management](dulcedo.md) | 3 | 33 % | 67 % | 100 % | 2026-08-19 03:55 | ✅ |
55 | [Mistplay](mistplay.md) | 3 | 33 % | 100 % | 100 % | 2026-08-19 04:15 | ✅ |
56 | [Alimentiv](alimentiv_2.md) | 2 | 100 % | 50 % | 100 % | 2026-08-19 03:36 | ✅ |
57 | [Potloc](potloc.md) | 2 | 0 % | 100 % | 100 % | 2026-08-19 04:16 | ✅ |
58 | [Spreedly](spreedly.md) | 2 | 0 % | 100 % | 100 % | 2026-08-19 04:18 | ✅ |
40 +| [Go RH](gorh.md) | 271 | 18 % | 98 % | 99 % | 2026-08-22 21:11 | ✅ |
41 +| [Behaviour Interactif](bhvr.md) | 38 | 0 % | 100 % | 100 % | 2026-08-22 21:00 | ✅ |
42 +| [Cirque du Soleil](cirquedusoleil.md) | 24 | 0 % | 88 % | 100 % | 2026-08-22 21:07 | ✅ |
43 +| [OSEDEA](osedea.md) | 24 | 0 % | 100 % | 100 % | 2026-08-22 21:23 | ✅ |
44 +| [Xsolla](xsolla.md) | 21 | 95 % | 95 % | 100 % | 2026-08-22 21:32 | ✅ |
45 +| [VO2 Group](vo2_group.md) | 17 | 6 % | 100 % | 100 % | 2026-08-22 21:30 | ✅ |
46 +| [Spiria](spiria.md) | 12 | 58 % | 100 % | 100 % | 2026-08-22 21:25 | ✅ |
47 +| [TSMG](tsmg.md) | 11 | 0 % | 100 % | 100 % | 2026-08-22 21:30 | ✅ |
48 +| [Mirego](mirego.md) | 10 | 0 % | 100 % | 100 % | 2026-08-22 21:22 | ✅ |
49 +| [Telesat](telesat.md) | 10 | 0 % | 100 % | 100 % | 2026-08-22 21:29 | ✅ |
50 +| [Distro](distro.md) | 7 | 100 % | 100 % | 100 % | 2026-08-22 21:09 | ✅ |
51 +| [US Mobile](usmobile.md) | 7 | 100 % | 100 % | 100 % | 2026-08-22 21:30 | ✅ |
52 +| [EQ Bank](eqbank.md) | 6 | 50 % | 50 % | 100 % | 2026-08-22 21:11 | ✅ |
53 +| [Daniels Health Canada](daniels_sharpsmart.md) | 6 | 17 % | 33 % | 100 % | 2026-08-22 21:08 | ✅ |
54 +| [LRDG (Language Research Development Group)](lrdgonline.md) | 6 | 100 % | 100 % | 100 % | 2026-08-22 21:22 | ✅ |
55 +| [Maquette Virtuelle](maquettevirtuelle.md) | 6 | 0 % | 100 % | 100 % | 2026-08-22 21:22 | ✅ |
56 +| [Aviya Aerospace Systems](aviyatech.md) | 5 | 0 % | 100 % | 100 % | 2026-08-22 20:59 | ✅ |
57 +| [Alimentiv](alimentiv_2.md) | 4 | 100 % | 25 % | 100 % | 2026-08-22 20:58 | ✅ |
58 +| [Ecosystem Énergie](ecosystem.md) | 4 | 0 % | 100 % | 100 % | 2026-08-22 21:11 | ✅ |
59 +| [DiliTrust](dilitrust.md) | 3 | 0 % | 100 % | 100 % | 2026-08-22 21:09 | ✅ |
60 +| [Dulcedo Management](dulcedo.md) | 3 | 33 % | 67 % | 100 % | 2026-08-22 21:10 | ✅ |
61 +| [Mistplay](mistplay.md) | 3 | 33 % | 100 % | 100 % | 2026-08-22 21:22 | ✅ |
62 +| [Cologix](cologix.md) | 3 | 33 % | 100 % | 100 % | 2026-08-22 21:08 | ✅ |
63 +| [Potloc](potloc.md) | 2 | 0 % | 100 % | 100 % | 2026-08-22 21:23 | ✅ |
64 +| [Spreedly](spreedly.md) | 2 | 0 % | 100 % | 100 % | 2026-08-22 21:25 | ✅ |
59 65
60 66 ## Licence / conformité
61 67
modified docs/connecteurs/ats-njoyn.md +9 −8
@@ -5,14 +5,14 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-njoyn.md
7 7 Rôle : Fiche plateforme ATS njoyn — mécanique partagée + tableau des 6 tenants
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 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 `njoyn`
14 14
15 **6 employeurs connectés** via cette plateforme — **956 offres actives**. Module partagé : `jobka/connectors/njoyn.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**6 employeurs connectés** via cette plateforme — **1148 offres actives**. Module partagé : `jobka/connectors/njoyn.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -42,12 +42,12 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
42 42
43 43 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
44 44 |---|---|---|---|---|---|---|
45 | [Santé Québec — Montréal](sante_montreal.md) | 762 | 97 % | 8 % | 1 % | 2026-08-19 05:30 | ✅ |
46 | [CGI](cgi.md) | 127 | 0 % | 0 % | 0 % | 2026-08-19 05:11 | ✅ |
47 | [Réseau de transport de la Capitale](rtc_quebec.md) | 18 | 0 % | 0 % | 0 % | 2026-08-19 04:17 | ✅ |
48 | [Ville de Gatineau](ville_gatineau.md) | 17 | 94 % | 0 % | 0 % | 2026-08-19 04:25 | ✅ |
49 | [Société de transport de Laval](stl_laval.md) | 16 | 31 % | 0 % | 0 % | 2026-08-19 04:18 | ✅ |
50 | [Ville de Terrebonne](ville_terrebonne.md) | 16 | 94 % | 0 % | 0 % | 2026-08-19 04:25 | ✅ |
45 +| [Santé Québec — Montréal](sante_montreal.md) | 764 | 97 % | 98 % | 1 % | 2026-08-22 21:24 | ✅ |
46 +| [CGI](cgi.md) | 316 | 0 % | 95 % | 0 % | 2026-08-22 21:06 | ✅ |
47 +| [Réseau de transport de la Capitale](rtc_quebec.md) | 18 | 0 % | 0 % | 0 % | 2026-08-22 21:23 | ✅ |
48 +| [Ville de Gatineau](ville_gatineau.md) | 18 | 94 % | 0 % | 0 % | 2026-08-22 21:30 | ✅ |
49 +| [Société de transport de Laval](stl_laval.md) | 17 | 29 % | 0 % | 0 % | 2026-08-22 21:25 | ✅ |
50 +| [Ville de Terrebonne](ville_terrebonne.md) | 15 | 93 % | 0 % | 0 % | 2026-08-22 21:30 | ✅ |
51 51
52 52 ## Licence / conformité
53 53
@@ -67,6 +67,7 @@ Certains domaines de cette plateforme sont servis derrière un gestionnaire anti
67 67
68 68 Commits touchant `jobka/connectors/njoyn.py` :
69 69
70 +- `6bec010` 2026-08-19 Phase 3 — registres et conformité : sources.json (244 sources, 19 familles ATS + réseau Atlas multi-employeurs, retraits cssdm/ttcglobal, lassonde re-pointé sur le site maison) ; docs/CONFORMITE.md daté 2026-08-19 (bases d'accès des nouvelles familles, base légale des API ATS publiques, démarche documentée pour le flux officiel Guichet-Emplois/Job Bank — page libre-service disparue, passer par le formulaire Aide et soutien —, 11 sources écartées avec raisons) ; docs/connecteurs régénérées (265 fiches) ; njoyn : signature stricte de l'habillage tableau (le libellé du lien doit être le numéro de poste) pour ne jamais intercepter les habillages « titre dans le lien » (STL/RTC).
70 71 - `86b0d0b` 2026-08-19 Famille Workland réécrite sur l'API JSON publique du frontal Atlas (jobs-prod published-external + default-profiles) : descriptions complètes fr/en, lieux géocodés, dates, mode de travail — 2 requêtes par cycle pour TOUT le réseau. Nouveau connecteur réseau atlas_workland (~80 employeurs QC : CSS scolaires, cégeps, CIUSSS Ouest-de-l'Île, Santé Québec Côte-Nord, ICM, STQ, UQTR, INRS… ; 1 238 offres QC). Connecteur cssdm retiré (couvert par le réseau), fixture remplacée par atlas_workland (sous-ensemble rejouable). Corrige la limite « workland description 0 % ».
71 72 - `49067dd` 2026-08-19 Connecteurs phase 2 — correctifs et enrichissement champ par champ. Correctifs : villes SuccessFactors à trait d'union (préfixe municipal MAMH sur le slug, bogue « St »/« Pointe »), colonne date Taleo = date LIMITE chez agnico_eagle (+ garde-fou date future). Enrichissement : SmartRecruiters experienceLevel/function/industry/language/refNumber (lignes de liste, zéro requête), BambooHR locationType→work_mode, Breezy is_remote/logo_url/streetAddress, JSON-LD logo/industry/educationRequirements/skills (portails+icims+DR), Ashby applyUrl + composantes Bonus/Equity/Commission, Lever applyUrl + blocs opening/additional + allLocations, Workable application_url + function/industry, Recruitee careers_apply_url + description FR (translations) + expérience/scolarité + heures/sem, Greenhouse language + requisition_id, Workday externalUrl→apply_url + work_mode via facette Remote Type + clé cache v2, Guichet-Emplois avantages structurés + langue de travail, njoyn apply_url en colonne ; secours cache périmé quand le budget détail est épuisé (plus de fiches vidées)
72 73 - `4917d57` 2026-08-18 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics et grands employeurs QC
modified docs/connecteurs/ats-recruitee.md +21 −14
@@ -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-recruitee.md
7 Rôle : Fiche plateforme ATS recruitee — mécanique partagée + tableau des 11 tenants
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
7 +Rôle : Fiche plateforme ATS recruitee — mécanique partagée + tableau des 18 tenants
8 +Généré : 2026-08-22 22:14 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 `recruitee`
14 14
15 **11 employeurs connectés** via cette plateforme — **130 offres actives**. Module partagé : `jobka/connectors/recruitee.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**18 employeurs connectés** via cette plateforme — **224 offres actives**. Module partagé : `jobka/connectors/recruitee.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -38,17 +38,24 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
40 40 |---|---|---|---|---|---|---|
41 | [ANCIA Personnel](anciapersonnelinc.md) | 59 | 10 % | 100 % | 100 % | 2026-08-19 03:36 | ✅ |
42 | [Huawei Canada](huaweicanada.md) | 18 | 0 % | 100 % | 100 % | 2026-08-19 04:02 | ✅ |
43 | [LG2](lg2.md) | 14 | 7 % | 100 % | 100 % | 2026-08-19 04:10 | ✅ |
44 | [Framestore](framestore.md) | 9 | 0 % | 100 % | 100 % | 2026-08-19 03:56 | ✅ |
45 | [AJ Walter Aviation](ajwalter.md) | 7 | 0 % | 100 % | 100 % | 2026-08-19 03:36 | ✅ |
46 | [Petal](petalmd.md) | 7 | 14 % | 100 % | 100 % | 2026-08-19 04:16 | ✅ |
47 | [Adèle Express](adeleexpressfr.md) | 5 | 60 % | 100 % | 100 % | 2026-08-19 03:31 | ✅ |
48 | [Médialo](medialo.md) | 5 | 0 % | 80 % | 100 % | 2026-08-19 04:15 | ✅ |
49 | [Squeeze Studio Animation](squeezestudio.md) | 3 | 0 % | 67 % | 100 % | 2026-08-19 04:18 | ✅ |
50 | [BIXI Montréal](biximontreal.md) | 2 | 50 % | 100 % | 100 % | 2026-08-19 03:39 | ✅ |
51 | [Amilia](amilia.md) | 1 | 0 % | 0 % | 100 % | 2026-08-19 03:36 | ✅ |
41 +| [ANCIA Personnel](anciapersonnelinc.md) | 60 | 10 % | 100 % | 100 % | 2026-08-22 20:59 | ✅ |
42 +| [Eurofins EnvironeX](eurofinsenvironex.md) | 47 | 0 % | 100 % | 100 % | 2026-08-22 21:11 | ✅ |
43 +| [Huawei Canada](huaweicanada.md) | 23 | 0 % | 100 % | 100 % | 2026-08-22 21:15 | ✅ |
44 +| [LG2](lg2.md) | 15 | 7 % | 100 % | 100 % | 2026-08-22 21:22 | ✅ |
45 +| [Teknion Roy & Breton](teknionroybreton.md) | 15 | 53 % | 93 % | 100 % | 2026-08-22 21:29 | ✅ |
46 +| [Framestore](framestore.md) | 10 | 0 % | 100 % | 100 % | 2026-08-22 21:11 | ✅ |
47 +| [Avantage Plus](avantageplus.md) | 10 | 10 % | 100 % | 100 % | 2026-08-22 20:59 | ✅ |
48 +| [AJ Walter Aviation](ajwalter.md) | 8 | 0 % | 100 % | 100 % | 2026-08-22 20:58 | ✅ |
49 +| [Petal](petalmd.md) | 6 | 0 % | 100 % | 100 % | 2026-08-22 21:23 | ✅ |
50 +| [STAS](stasinc.md) | 6 | 0 % | 100 % | 100 % | 2026-08-22 21:25 | ✅ |
51 +| [Adèle Express](adeleexpressfr.md) | 5 | 60 % | 100 % | 100 % | 2026-08-22 20:56 | ✅ |
52 +| [Médialo](medialo.md) | 5 | 0 % | 80 % | 100 % | 2026-08-22 21:22 | ✅ |
53 +| [Agile DSS](agiledss.md) | 4 | 0 % | 100 % | 100 % | 2026-08-22 20:56 | ✅ |
54 +| [Pivot + Edge](pivotandedge.md) | 4 | 0 % | 100 % | 100 % | 2026-08-22 21:23 | ✅ |
55 +| [Squeeze Studio Animation](squeezestudio.md) | 3 | 0 % | 67 % | 100 % | 2026-08-22 21:25 | ✅ |
56 +| [BIXI Montréal](biximontreal.md) | 2 | 50 % | 100 % | 100 % | 2026-08-22 21:00 | ✅ |
57 +| [Amilia](amilia.md) | 1 | 0 % | 0 % | 100 % | 2026-08-22 20:59 | ✅ |
58 +| [Projevia](projevia.md) | 0 | — | — | — | 2026-08-22 21:23 | ✅ |
52 59
53 60 ## Licence / conformité
54 61
modified docs/connecteurs/ats-smartrecruiters.md +44 −31
@@ -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 28 tenants
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
7 +Rôle : Fiche plateforme ATS smartrecruiters — mécanique partagée + tableau des 41 tenants
8 +Généré : 2026-08-22 22:14 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 **28 employeurs connectés** via cette plateforme — **949 offres actives**. Module partagé : `jobka/connectors/smartrecruiters.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**41 employeurs connectés** via cette plateforme — **1456 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,34 +41,47 @@ Généré : 2026-08-19 05:40 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) | 221 | 0 % | 100 % | 84 % | 2026-08-19 03:44 | ✅ |
45 | [Reitmans](reitmanscanadalteltd.md) | 138 | 22 % | 100 % | 29 % | 2026-08-19 04:16 | ✅ |
46 | [Ubisoft](ubisoft.md) | 123 | 0 % | 100 % | 2 % | 2026-08-19 04:24 | ✅ |
47 | [Vidéotron](videotron.md) | 80 | 14 % | 100 % | 40 % | 2026-08-19 04:25 | ✅ |
48 | [EMCO](emcocorporation.md) | 67 | 48 % | 100 % | 22 % | 2026-08-19 03:55 | ✅ |
49 | [Groupe Canam](groupecanam.md) | 65 | 66 % | 98 % | 26 % | 2026-08-19 03:56 | ✅ |
50 | [Techo-Bloc](techo_bloc.md) | 40 | 50 % | 100 % | 20 % | 2026-08-19 04:24 | ✅ |
51 | [QSL](qsl.md) | 37 | 38 % | 100 % | 0 % | 2026-08-19 04:16 | ✅ |
52 | [Transat A.T.](transatat1.md) | 36 | 6 % | 100 % | 56 % | 2026-08-19 04:24 | ✅ |
53 | [MEDFAR Solutions Cliniques](medfar.md) | 23 | 0 % | 100 % | 96 % | 2026-08-19 04:15 | ✅ |
54 | [Rodeo FX](rodeofx.md) | 20 | 0 % | 100 % | 10 % | 2026-08-19 04:17 | ✅ |
55 | [Vosker](vosker.md) | 19 | 0 % | 100 % | 89 % | 2026-08-19 04:25 | ✅ |
56 | [Gameloft](gameloft.md) | 14 | 0 % | 100 % | 71 % | 2026-08-19 03:56 | ✅ |
57 | [Talan](talan.md) | 13 | 0 % | 100 % | 85 % | 2026-08-19 04:19 | ✅ |
58 | [People Can Fly](peoplecanfly.md) | 10 | 0 % | 100 % | 100 % | 2026-08-19 04:16 | ✅ |
59 | [J'Excelle](jexcelleinc.md) | 9 | 0 % | 100 % | 11 % | 2026-08-19 04:04 | ✅ |
60 | [CF Montréal](cfmontreal.md) | 8 | 0 % | 100 % | 0 % | 2026-08-19 03:42 | ✅ |
61 | [Mattel (Mega Bloks)](mattelinc.md) | 6 | 0 % | 100 % | 17 % | 2026-08-19 04:11 | ✅ |
62 | [Astucemedia](astucemedia.md) | 5 | 0 % | 100 % | 40 % | 2026-08-19 03:36 | ✅ |
63 | [HoYoverse](hoyoverse.md) | 4 | 0 % | 100 % | 100 % | 2026-08-19 04:02 | ✅ |
64 | [Playmind](playmind.md) | 2 | 0 % | 100 % | 0 % | 2026-08-19 04:16 | ✅ |
65 | [ServiceNow](servicenow.md) | 2 | 0 % | 100 % | 100 % | 2026-08-19 04:18 | ✅ |
66 | [Venture Media](venturemedia.md) | 2 | 100 % | 100 % | 50 % | 2026-08-19 04:25 | ✅ |
67 | [GoLogic](gologic.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 03:56 | ✅ |
68 | [Sparkgrid](sparkgrid.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 04:18 | ✅ |
69 | [Stelpro](stelpro.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 04:18 | ✅ |
70 | [Talsom](talsom.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 04:19 | ✅ |
71 | [Xplornet](xplornet.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 04:35 | ✅ |
44 +| [CIMA+](cima2.md) | 239 | 0 % | 100 % | 85 % | 2026-08-22 21:06 | ✅ |
45 +| [Reitmans](reitmanscanadalteltd.md) | 137 | 23 % | 100 % | 28 % | 2026-08-22 21:23 | ✅ |
46 +| [Sodexo Canada](sodexocanadaltd.md) | 135 | 82 % | 100 % | 10 % | 2026-08-22 21:25 | ✅ |
47 +| [Ubisoft](ubisoft.md) | 127 | 0 % | 100 % | 2 % | 2026-08-22 21:30 | ✅ |
48 +| [Artelia Canada](artelia.md) | 115 | 0 % | 98 % | 24 % | 2026-08-22 20:59 | ✅ |
49 +| [Linen Chest](linenchest.md) | 82 | 9 % | 100 % | 6 % | 2026-08-22 21:22 | ✅ |
50 +| [Vidéotron](videotron.md) | 77 | 17 % | 100 % | 39 % | 2026-08-22 21:30 | ✅ |
51 +| [Renaud-Bray](renaud_bray.md) | 71 | 1 % | 100 % | 1 % | 2026-08-22 21:23 | ✅ |
52 +| [EMCO](emcocorporation.md) | 64 | 45 % | 100 % | 20 % | 2026-08-22 21:11 | ✅ |
53 +| [Groupe Canam](groupecanam.md) | 64 | 66 % | 98 % | 27 % | 2026-08-22 21:12 | ✅ |
54 +| [Techo-Bloc](techo_bloc.md) | 44 | 59 % | 100 % | 18 % | 2026-08-22 21:29 | ✅ |
55 +| [Transat A.T.](transatat1.md) | 40 | 5 % | 100 % | 60 % | 2026-08-22 21:30 | ✅ |
56 +| [QSL](qsl.md) | 32 | 22 % | 100 % | 0 % | 2026-08-22 21:23 | ✅ |
57 +| [H&M](hmgroup.md) | 32 | 3 % | 100 % | 0 % | 2026-08-22 21:15 | ✅ |
58 +| [Structube](structube1.md) | 25 | 0 % | 100 % | 0 % | 2026-08-22 21:25 | ✅ |
59 +| [MEDFAR Solutions Cliniques](medfar.md) | 23 | 0 % | 100 % | 96 % | 2026-08-22 21:22 | ✅ |
60 +| [Rodeo FX](rodeofx.md) | 20 | 0 % | 100 % | 10 % | 2026-08-22 21:23 | ✅ |
61 +| [Vosker](vosker.md) | 18 | 0 % | 100 % | 89 % | 2026-08-22 21:30 | ✅ |
62 +| [Gameloft](gameloft.md) | 13 | 0 % | 100 % | 77 % | 2026-08-22 21:11 | ✅ |
63 +| [Talan](talan.md) | 13 | 0 % | 100 % | 85 % | 2026-08-22 21:26 | ✅ |
64 +| [Lemay](lemay.md) | 12 | 8 % | 100 % | 67 % | 2026-08-22 21:22 | ✅ |
65 +| [People Can Fly](peoplecanfly.md) | 11 | 0 % | 100 % | 100 % | 2026-08-22 21:23 | ✅ |
66 +| [Sika Canada](sikaag.md) | 11 | 0 % | 100 % | 18 % | 2026-08-22 21:25 | ✅ |
67 +| [J'Excelle](jexcelleinc.md) | 9 | 0 % | 100 % | 11 % | 2026-08-22 21:15 | ✅ |
68 +| [CF Montréal](cfmontreal.md) | 8 | 0 % | 100 % | 0 % | 2026-08-22 21:04 | ✅ |
69 +| [Astucemedia](astucemedia.md) | 5 | 0 % | 100 % | 40 % | 2026-08-22 20:59 | ✅ |
70 +| [HoYoverse](hoyoverse.md) | 4 | 0 % | 100 % | 100 % | 2026-08-22 21:15 | ✅ |
71 +| [Mattel (Mega Bloks)](mattelinc.md) | 4 | 0 % | 100 % | 25 % | 2026-08-22 21:22 | ✅ |
72 +| [ServiceNow](servicenow.md) | 4 | 0 % | 100 % | 75 % | 2026-08-22 21:25 | ✅ |
73 +| [GURU Boisson Énergisante](guruorganicenergydrink.md) | 3 | 0 % | 100 % | 33 % | 2026-08-22 21:14 | ✅ |
74 +| [Playmind](playmind.md) | 2 | 0 % | 100 % | 0 % | 2026-08-22 21:23 | ✅ |
75 +| [Venture Media](venturemedia.md) | 2 | 100 % | 100 % | 50 % | 2026-08-22 21:30 | ✅ |
76 +| [Trupanion](trupanion1.md) | 2 | 50 % | 100 % | 100 % | 2026-08-22 21:30 | ✅ |
77 +| [GoLogic](gologic.md) | 1 | 0 % | 100 % | 0 % | 2026-08-22 21:11 | ✅ |
78 +| [Sparkgrid](sparkgrid.md) | 1 | 0 % | 100 % | 0 % | 2026-08-22 21:25 | ✅ |
79 +| [Stelpro](stelpro.md) | 1 | 0 % | 100 % | 0 % | 2026-08-22 21:25 | ✅ |
80 +| [Talsom](talsom.md) | 1 | 0 % | 100 % | 0 % | 2026-08-22 21:26 | ✅ |
81 +| [Xplornet](xplornet.md) | 1 | 0 % | 100 % | 0 % | 2026-08-22 21:32 | ✅ |
82 +| [California Closets](californiaclosets.md) | 1 | 0 % | 100 % | 0 % | 2026-08-22 21:04 | ✅ |
83 +| [Centre multiethnique de Québec](centremultiethniquedequbec.md) | 1 | 100 % | 100 % | 100 % | 2026-08-22 21:04 | ✅ |
84 +| [École des entrepreneurs du Québec](coledesentrepreneursduqubec.md) | 1 | 0 % | 100 % | 100 % | 2026-08-22 21:08 | ✅ |
72 85
73 86 ## Licence / conformité
74 87
modified docs/connecteurs/ats-successfactors.md +7 −7
@@ -5,14 +5,14 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-successfactors.md
7 7 Rôle : Fiche plateforme ATS successfactors — mécanique partagée + tableau des 5 tenants
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 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 `successfactors`
14 14
15 **5 employeurs connectés** via cette plateforme — **1224 offres actives**. Module partagé : `jobka/connectors/successfactors.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**5 employeurs connectés** via cette plateforme — **1186 offres actives**. Module partagé : `jobka/connectors/successfactors.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -38,11 +38,11 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
40 40 |---|---|---|---|---|---|---|
41 | [Bombardier](bombardier.md) | 847 | 0 % | 100 % | 88 % | 2026-08-19 03:41 | ✅ |
42 | [Domtar](domtar.md) | 106 | 0 % | 99 % | 0 % | 2026-08-19 03:55 | ✅ |
43 | [Deloitte Canada](deloitte.md) | 105 | 96 % | 0 % | 98 % | 2026-08-19 04:48 | ✅ |
44 | [Cascades](cascades.md) | 100 | 77 % | 100 % | 12 % | 2026-08-19 03:42 | ✅ |
45 | [Hydro-Québec](hydroquebec.md) | 66 | 61 % | 0 % | 0 % | 2026-08-19 04:48 | ✅ |
41 +| [Bombardier](bombardier.md) | 812 | 0 % | 100 % | 89 % | 2026-08-22 21:04 | ✅ |
42 +| [Deloitte Canada](deloitte.md) | 105 | 96 % | 100 % | 98 % | 2026-08-22 21:08 | ✅ |
43 +| [Domtar](domtar.md) | 102 | 0 % | 99 % | 0 % | 2026-08-22 21:10 | ✅ |
44 +| [Cascades](cascades.md) | 100 | 75 % | 100 % | 14 % | 2026-08-22 21:04 | ✅ |
45 +| [Hydro-Québec](hydroquebec.md) | 67 | 55 % | 81 % | 0 % | 2026-08-22 21:15 | ✅ |
46 46
47 47 ## Licence / conformité
48 48
modified docs/connecteurs/ats-taleo.md +6 −6
@@ -5,14 +5,14 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-taleo.md
7 7 Rôle : Fiche plateforme ATS taleo — mécanique partagée + tableau des 4 tenants
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 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 `taleo`
14 14
15 **4 employeurs connectés** via cette plateforme — **71 offres actives**. Module partagé : `jobka/connectors/taleo.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**4 employeurs connectés** via cette plateforme — **83 offres actives**. Module partagé : `jobka/connectors/taleo.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -45,10 +45,10 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
45 45
46 46 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
47 47 |---|---|---|---|---|---|---|
48 | [CIUSSS de l'Est-de-l'Île-de-Montréal](ciusss_est_montreal.md) | 23 | 0 % | 100 % | 0 % | 2026-08-19 03:51 | ✅ |
49 | [Agnico Eagle Mines](agnico_eagle.md) | 20 | 0 % | 100 % | 0 % | 2026-08-19 03:31 | ✅ |
50 | [Bell Textron Canada](bell_textron.md) | 15 | 0 % | 100 % | 0 % | 2026-08-19 03:38 | ✅ |
51 | [Bayshore HealthCare](bayshore.md) | 13 | 0 % | 100 % | 0 % | 2026-08-19 03:38 | ✅ |
48 +| [Agnico Eagle Mines](agnico_eagle.md) | 29 | 0 % | 100 % | 0 % | 2026-08-22 20:56 | ✅ |
49 +| [CIUSSS de l'Est-de-l'Île-de-Montréal](ciusss_est_montreal.md) | 24 | 0 % | 100 % | 0 % | 2026-08-22 21:08 | ✅ |
50 +| [Bell Textron Canada](bell_textron.md) | 16 | 0 % | 100 % | 0 % | 2026-08-22 21:00 | ✅ |
51 +| [Bayshore HealthCare](bayshore.md) | 14 | 0 % | 100 % | 0 % | 2026-08-22 21:00 | ✅ |
52 52
53 53 ## Licence / conformité
54 54
modified docs/connecteurs/ats-taleo_tbe.md +8 −8
@@ -5,14 +5,14 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-taleo_tbe.md
7 7 Rôle : Fiche plateforme ATS taleo_tbe — mécanique partagée + tableau des 6 tenants
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 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 `taleo_tbe`
14 14
15 **6 employeurs connectés** via cette plateforme — **143 offres actives**. Module partagé : `jobka/connectors/taleo_tbe.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**6 employeurs connectés** via cette plateforme — **142 offres actives**. Module partagé : `jobka/connectors/taleo_tbe.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -46,12 +46,12 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
46 46
47 47 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
48 48 |---|---|---|---|---|---|---|
49 | [Sépaq](sepaq.md) | 99 | 55 % | 0 % | 4 % | 2026-08-19 04:46 | ✅ |
50 | [exo (transport métropolitain)](exo.md) | 25 | 0 % | 0 % | 100 % | 2026-08-19 04:48 | ✅ |
51 | [HEC Montréal](hec_montreal.md) | 9 | 0 % | 0 % | 0 % | 2026-08-19 04:48 | ✅ |
52 | [HEC Montréal — corps professoral](hec_montreal_profs.md) | 9 | 0 % | 0 % | 0 % | 2026-08-19 04:48 | ✅ |
53 | [Produits Kruger](produits_kruger.md) | 1 | 0 % | 0 % | 0 % | 2026-08-19 04:48 | ✅ |
54 | [Kruger](kruger.md) | 0 | — | — | — | 2026-08-19 04:47 | ✅ |
49 +| [Sépaq](sepaq.md) | 98 | 54 % | 8 % | 4 % | 2026-08-22 21:24 | ✅ |
50 +| [exo (transport métropolitain)](exo.md) | 25 | 0 % | 100 % | 96 % | 2026-08-22 21:11 | ✅ |
51 +| [HEC Montréal](hec_montreal.md) | 9 | 0 % | 100 % | 0 % | 2026-08-22 21:14 | ✅ |
52 +| [HEC Montréal — corps professoral](hec_montreal_profs.md) | 9 | 0 % | 100 % | 0 % | 2026-08-22 21:14 | ✅ |
53 +| [Produits Kruger](produits_kruger.md) | 1 | 0 % | 0 % | 0 % | 2026-08-22 21:23 | ✅ |
54 +| [Kruger](kruger.md) | 0 | — | — | — | 2026-08-22 21:21 | ✅ |
55 55
56 56 ## Licence / conformité
57 57
modified docs/connecteurs/ats-ultipro.md +5 −5
@@ -5,14 +5,14 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-ultipro.md
7 7 Rôle : Fiche plateforme ATS ultipro — mécanique partagée + tableau des 3 tenants
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 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 `ultipro`
14 14
15 **3 employeurs connectés** via cette plateforme — **58 offres actives**. Module partagé : `jobka/connectors/ultipro.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**3 employeurs connectés** via cette plateforme — **60 offres actives**. Module partagé : `jobka/connectors/ultipro.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -40,9 +40,9 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
40 40
41 41 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
42 42 |---|---|---|---|---|---|---|
43 | [Nortera](nortera.md) | 24 | 62 % | 0 % | 4 % | 2026-08-19 04:49 | ✅ |
44 | [Messer Canada](messer_canada.md) | 22 | 91 % | 100 % | 0 % | 2026-08-19 04:15 | ✅ |
45 | [Fruit d'Or](fruitdor.md) | 12 | 0 % | 0 % | 0 % | 2026-08-19 04:48 | ✅ |
43 +| [Messer Canada](messer_canada.md) | 23 | 87 % | 100 % | 0 % | 2026-08-22 21:22 | ✅ |
44 +| [Nortera](nortera.md) | 23 | 61 % | 100 % | 4 % | 2026-08-22 21:22 | ✅ |
45 +| [Fruit d'Or](fruitdor.md) | 14 | 0 % | 100 % | 0 % | 2026-08-22 21:11 | ✅ |
46 46
47 47 ## Licence / conformité
48 48
modified docs/connecteurs/ats-workable.md +33 −22
@@ -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-workable.md
7 Rôle : Fiche plateforme ATS workable — mécanique partagée + tableau des 19 tenants
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
7 +Rôle : Fiche plateforme ATS workable — mécanique partagée + tableau des 30 tenants
8 +Généré : 2026-08-22 22:14 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 `workable`
14 14
15 **19 employeurs connectés** via cette plateforme — **649 offres actives**. Module partagé : `jobka/connectors/workable.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**30 employeurs connectés** via cette plateforme — **735 offres actives**. Module partagé : `jobka/connectors/workable.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -39,25 +39,36 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
39 39
40 40 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
41 41 |---|---|---|---|---|---|---|
42 | [TEHORA](tehora.md) | 346 | 0 % | 100 % | 32 % | 2026-08-19 04:24 | ✅ |
43 | [Genetec](genetec_inc.md) | 80 | 0 % | 100 % | 18 % | 2026-08-19 03:56 | ✅ |
44 | [SOGECLAIR](sogeclair.md) | 43 | 2 % | 100 % | 2 % | 2026-08-19 04:18 | ✅ |
45 | [Valsoft](valsoft_corp.md) | 37 | 11 % | 100 % | 16 % | 2026-08-19 04:25 | ✅ |
46 | [Side (PTW)](sideinc.md) | 33 | 0 % | 100 % | 21 % | 2026-08-19 04:18 | ✅ |
47 | [Tecsys](tecsys.md) | 27 | 0 % | 100 % | 93 % | 2026-08-19 04:24 | ✅ |
48 | [Evolving Web](evolving_web.md) | 14 | 0 % | 100 % | 14 % | 2026-08-19 03:55 | ✅ |
49 | [Lamour](lamour.md) | 11 | 0 % | 100 % | 0 % | 2026-08-19 04:10 | ✅ |
50 | [Eminent Valet](eminent_valet.md) | 9 | 100 % | 100 % | 0 % | 2026-08-19 03:55 | ✅ |
51 | [Botpress](botpress.md) | 8 | 0 % | 100 % | 0 % | 2026-08-19 03:41 | ✅ |
52 | [LIDD Consultants](lidd.md) | 8 | 0 % | 100 % | 0 % | 2026-08-19 04:10 | ✅ |
53 | [Mila — Institut québécois d'IA](mila_2.md) | 8 | 0 % | 100 % | 0 % | 2026-08-19 04:15 | ✅ |
54 | [Nuovo Photography](nuovophotography.md) | 8 | 25 % | 100 % | 0 % | 2026-08-19 04:15 | ✅ |
55 | [Sweat Pants Agency](sweat_pants_agency.md) | 6 | 50 % | 100 % | 100 % | 2026-08-19 04:19 | ✅ |
56 | [Bardel Entertainment](bardel_entertainment.md) | 3 | 100 % | 100 % | 0 % | 2026-08-19 03:37 | ✅ |
57 | [Flinks](flinks.md) | 3 | 100 % | 100 % | 100 % | 2026-08-19 03:56 | ✅ |
58 | [Unit8](unit8.md) | 3 | 0 % | 100 % | 67 % | 2026-08-19 04:24 | ✅ |
59 | [Atecna](atecna_montreal.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 03:36 | ✅ |
60 | [Charger Logistics](charger_logistics_inc.md) | 1 | 0 % | 100 % | 0 % | 2026-08-19 03:42 | ✅ |
42 +| [TEHORA](tehora.md) | 346 | 0 % | 100 % | 32 % | 2026-08-22 21:29 | ✅ |
43 +| [Genetec](genetec_inc.md) | 80 | 0 % | 100 % | 16 % | 2026-08-22 21:11 | ✅ |
44 +| [SOGECLAIR](sogeclair.md) | 43 | 2 % | 100 % | 2 % | 2026-08-22 21:25 | ✅ |
45 +| [Valsoft](valsoft_corp.md) | 36 | 11 % | 100 % | 17 % | 2026-08-22 21:30 | ✅ |
46 +| [Side (PTW)](sideinc.md) | 31 | 0 % | 100 % | 32 % | 2026-08-22 21:25 | ✅ |
47 +| [Keywords Studios](keywords_intl1.md) | 27 | 89 % | 100 % | 33 % | 2026-08-22 21:21 | ✅ |
48 +| [Tecsys](tecsys.md) | 25 | 0 % | 100 % | 92 % | 2026-08-22 21:29 | ✅ |
49 +| [Lamour](lamour.md) | 14 | 0 % | 100 % | 0 % | 2026-08-22 21:21 | ✅ |
50 +| [Starlink Aviation](starlink_aviation.md) | 14 | 0 % | 100 % | 14 % | 2026-08-22 21:25 | ✅ |
51 +| [Evolving Web](evolving_web.md) | 12 | 0 % | 100 % | 17 % | 2026-08-22 21:11 | ✅ |
52 +| [LIDD Consultants](lidd.md) | 11 | 0 % | 100 % | 0 % | 2026-08-22 21:22 | ✅ |
53 +| [FLO (AddÉnergie)](flo_addenergie.md) | 11 | 0 % | 100 % | 18 % | 2026-08-22 21:11 | ✅ |
54 +| [Eminent Valet](eminent_valet.md) | 10 | 100 % | 100 % | 0 % | 2026-08-22 21:11 | ✅ |
55 +| [Botpress](botpress.md) | 9 | 0 % | 100 % | 0 % | 2026-08-22 21:04 | ✅ |
56 +| [Rentokil Initial](rentokil_initial.md) | 9 | 89 % | 100 % | 11 % | 2026-08-22 21:23 | ✅ |
57 +| [Mila — Institut québécois d'IA](mila_2.md) | 8 | 0 % | 100 % | 0 % | 2026-08-22 21:22 | ✅ |
58 +| [Nuovo Photography](nuovophotography.md) | 7 | 29 % | 100 % | 0 % | 2026-08-22 21:22 | ✅ |
59 +| [Sweat Pants Agency](sweat_pants_agency.md) | 6 | 50 % | 100 % | 100 % | 2026-08-22 21:26 | ✅ |
60 +| [CTS Foods Brokers](cts_foods_brokers_inc.md) | 6 | 33 % | 100 % | 0 % | 2026-08-22 21:08 | ✅ |
61 +| [Exportation et développement Canada (EDC)](export_development_canada.md) | 6 | 83 % | 100 % | 17 % | 2026-08-22 21:11 | ✅ |
62 +| [Bardel Entertainment](bardel_entertainment.md) | 4 | 100 % | 100 % | 0 % | 2026-08-22 20:59 | ✅ |
63 +| [Delmar International](delmar_international_inc.md) | 4 | 0 % | 100 % | 0 % | 2026-08-22 21:08 | ✅ |
64 +| [Unit8](unit8.md) | 3 | 0 % | 100 % | 67 % | 2026-08-22 21:30 | ✅ |
65 +| [CSN Collision](csncollision.md) | 3 | 0 % | 100 % | 0 % | 2026-08-22 21:08 | ✅ |
66 +| [Damotech](damotech.md) | 3 | 33 % | 100 % | 33 % | 2026-08-22 21:08 | ✅ |
67 +| [Charger Logistics](charger_logistics_inc.md) | 2 | 0 % | 100 % | 0 % | 2026-08-22 21:06 | ✅ |
68 +| [Charlotte Tilbury](charlotte_tilbury.md) | 2 | 0 % | 100 % | 0 % | 2026-08-22 21:06 | ✅ |
69 +| [Financeit](financeit.md) | 2 | 100 % | 100 % | 0 % | 2026-08-22 21:11 | ✅ |
70 +| [Atecna](atecna_montreal.md) | 1 | 0 % | 100 % | 0 % | 2026-08-22 20:59 | ✅ |
71 +| [Flinks](flinks.md) | 0 | — | — | — | 2026-08-22 21:11 | ✅ |
61 72
62 73 ## Licence / conformité
63 74
modified docs/connecteurs/ats-workday.md +61 −44
@@ -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-workday.md
7 Rôle : Fiche plateforme ATS workday — mécanique partagée + tableau des 41 tenants
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
7 +Rôle : Fiche plateforme ATS workday — mécanique partagée + tableau des 58 tenants
8 +Généré : 2026-08-22 22:14 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 `workday`
14 14
15 **41 employeurs connectés** via cette plateforme — **3570 offres actives**. Module partagé : `jobka/connectors/workday.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**58 employeurs connectés** via cette plateforme — **4108 offres actives**. Module partagé : `jobka/connectors/workday.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -44,47 +44,64 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
44 44
45 45 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
46 46 |---|---|---|---|---|---|---|
47 | [Couche-Tard / Circle K](circlek.md) | 1012 | 61 % | 63 % | 0 % | 2026-08-19 03:51 | ✅ |
48 | [Walmart Canada](walmart.md) | 979 | 93 % | 91 % | 0 % | 2026-08-19 04:35 | ✅ |
49 | [Mouvement Desjardins](desjardins.md) | 241 | 2 % | 94 % | 21 % | 2026-08-19 03:55 | ✅ |
50 | [Université McGill](mcgill.md) | 193 | 70 % | 100 % | 0 % | 2026-08-19 04:14 | ✅ |
51 | [BMO Groupe financier](bmo.md) | 106 | 88 % | 79 % | 17 % | 2026-08-19 03:41 | ✅ |
52 | [Agropur](agropur.md) | 75 | 93 % | 99 % | 0 % | 2026-08-19 03:32 | ✅ |
53 | [Airbus Canada](airbus.md) | 75 | 1 % | 100 % | 0 % | 2026-08-19 03:36 | ✅ |
54 | [Groupe Banque TD](td.md) | 69 | 99 % | 100 % | 99 % | 2026-08-19 04:24 | ✅ |
55 | [Autodesk](autodesk.md) | 65 | 91 % | 48 % | 20 % | 2026-08-19 03:37 | ✅ |
56 | [Banque CIBC](cibc.md) | 65 | 0 % | 100 % | 3 % | 2026-08-19 03:44 | ✅ |
57 | [CAE](cae.md) | 55 | 7 % | 93 % | 0 % | 2026-08-19 03:42 | ✅ |
58 | [Manuvie](manulife.md) | 51 | 90 % | 75 % | 29 % | 2026-08-19 04:11 | ✅ |
59 | [Cogeco](cogeco.md) | 50 | 18 % | 56 % | 4 % | 2026-08-19 03:52 | ✅ |
60 | [Beneva](beneva.md) | 48 | 2 % | 100 % | 2 % | 2026-08-19 03:39 | ✅ |
61 | [Investissements PSP](investpsp.md) | 43 | 5 % | 100 % | 0 % | 2026-08-19 04:04 | ✅ |
62 | [McKesson Canada](mckesson.md) | 43 | 84 % | 86 % | 93 % | 2026-08-19 04:15 | ✅ |
63 | [Promutuel Assurance](promutuel.md) | 37 | 0 % | 100 % | 16 % | 2026-08-19 04:16 | ✅ |
64 | [Service alimentaire Gordon](gfs.md) | 30 | 73 % | 100 % | 0 % | 2026-08-19 03:56 | ✅ |
65 | [Altasciences](altasciences.md) | 29 | 0 % | 100 % | 97 % | 2026-08-19 03:36 | ✅ |
66 | [CDPQ — Caisse de dépôt et placement du Québec](cdpq.md) | 28 | 0 % | 100 % | 0 % | 2026-08-19 03:42 | ✅ |
67 | [EXFO](exfo.md) | 27 | 0 % | 100 % | 56 % | 2026-08-19 03:56 | ✅ |
68 | [Scotts Canada (Fafard)](scottsmiraclegro.md) | 27 | 4 % | 100 % | 0 % | 2026-08-19 04:18 | ✅ |
69 | [Saputo](saputo.md) | 24 | 75 % | 100 % | 100 % | 2026-08-19 04:18 | ✅ |
70 | [Intact Corporation financière](intactfc.md) | 23 | 0 % | 100 % | 0 % | 2026-08-19 04:03 | ✅ |
71 | [Rio Tinto](riotinto.md) | 23 | 0 % | 100 % | 4 % | 2026-08-19 04:17 | ✅ |
72 | [CAA-Québec](caaquebec.md) | 19 | 21 % | 100 % | 0 % | 2026-08-19 03:41 | ✅ |
73 | [iA Groupe financier](ia_groupe.md) | 17 | 100 % | 100 % | 6 % | 2026-08-19 04:03 | ✅ |
74 | [BDC](bdc.md) | 16 | 0 % | 100 % | 0 % | 2026-08-19 03:38 | ✅ |
75 | [Alcoa Canada](alcoa.md) | 15 | 13 % | 40 % | 0 % | 2026-08-19 03:36 | ✅ |
76 | [GSK](gsk.md) | 12 | 0 % | 83 % | 0 % | 2026-08-19 03:56 | ✅ |
77 | [Investissement Québec](investquebec.md) | 12 | 8 % | 100 % | 0 % | 2026-08-19 04:04 | ✅ |
78 | [Fonds de solidarité FTQ](fondsftq.md) | 10 | 0 % | 100 % | 100 % | 2026-08-19 03:56 | ✅ |
79 | [Canadian Tire](canadiantirecorporation.md) | 9 | 56 % | 100 % | 0 % | 2026-08-19 03:42 | ✅ |
80 | [JG Rive-Sud (GFS)](jgrivesud.md) | 9 | 67 % | 100 % | 0 % | 2026-08-19 04:04 | ✅ |
81 | [Sun Life](sunlife.md) | 8 | 0 % | 100 % | 0 % | 2026-08-19 04:19 | ✅ |
82 | [Church & Dwight Canada](churchdwight.md) | 6 | 0 % | 100 % | 0 % | 2026-08-19 03:42 | ✅ |
83 | [Raymond Chabot Grant Thornton](rcgt.md) | 5 | 0 % | 100 % | 20 % | 2026-08-19 04:16 | ✅ |
84 | [Pfizer Canada](pfizer.md) | 4 | 100 % | 0 % | 0 % | 2026-08-19 04:16 | ✅ |
85 | [Plusgrade](plusgrade.md) | 4 | 0 % | 100 % | 0 % | 2026-08-19 04:16 | ✅ |
86 | [Brasseries Sleeman (Unibroue)](sleeman.md) | 3 | 33 % | 100 % | 0 % | 2026-08-19 04:18 | ✅ |
87 | [Suncor Énergie](suncor.md) | 3 | 0 % | 100 % | 0 % | 2026-08-19 04:19 | ✅ |
47 +| [Couche-Tard / Circle K](circlek.md) | 1019 | 61 % | 63 % | 0 % | 2026-08-22 21:07 | ✅ |
48 +| [Walmart Canada](walmart.md) | 1008 | 92 % | 92 % | 0 % | 2026-08-22 21:32 | ✅ |
49 +| [Mouvement Desjardins](desjardins.md) | 255 | 2 % | 93 % | 22 % | 2026-08-22 21:09 | ✅ |
50 +| [Université McGill](mcgill.md) | 194 | 73 % | 100 % | 0 % | 2026-08-22 21:22 | ✅ |
51 +| [Consignaction (AQRCB)](consignaction.md) | 134 | 90 % | 100 % | 0 % | 2026-08-22 21:08 | ✅ |
52 +| [BMO Groupe financier](bmo.md) | 121 | 86 % | 82 % | 15 % | 2026-08-22 21:00 | ✅ |
53 +| [Dentalcorp](dentalcorp.md) | 97 | 13 % | 99 % | 1 % | 2026-08-22 21:08 | ✅ |
54 +| [Airbus Canada](airbus.md) | 83 | 1 % | 100 % | 0 % | 2026-08-22 20:58 | ✅ |
55 +| [Agropur](agropur.md) | 71 | 94 % | 99 % | 0 % | 2026-08-22 20:56 | ✅ |
56 +| [Groupe Banque TD](td.md) | 71 | 97 % | 100 % | 99 % | 2026-08-22 21:29 | ✅ |
57 +| [Autodesk](autodesk.md) | 65 | 89 % | 46 % | 22 % | 2026-08-22 20:59 | ✅ |
58 +| [CAE](cae.md) | 56 | 7 % | 93 % | 0 % | 2026-08-22 21:04 | ✅ |
59 +| [Banque CIBC](cibc.md) | 56 | 0 % | 100 % | 4 % | 2026-08-22 21:06 | ✅ |
60 +| [Manuvie](manulife.md) | 55 | 91 % | 69 % | 29 % | 2026-08-22 21:22 | ✅ |
61 +| [Cogeco](cogeco.md) | 45 | 18 % | 60 % | 2 % | 2026-08-22 21:08 | ✅ |
62 +| [McKesson Canada](mckesson.md) | 44 | 80 % | 89 % | 89 % | 2026-08-22 21:22 | ✅ |
63 +| [Investissements PSP](investpsp.md) | 43 | 5 % | 100 % | 0 % | 2026-08-22 21:15 | ✅ |
64 +| [La Maison Simons](simons.md) | 42 | 0 % | 93 % | 0 % | 2026-08-22 21:25 | ✅ |
65 +| [Beneva](beneva.md) | 39 | 3 % | 100 % | 3 % | 2026-08-22 21:00 | ✅ |
66 +| [TJX Canada (Winners, HomeSense, Marshalls)](tjx.md) | 38 | 100 % | 100 % | 0 % | 2026-08-22 21:30 | ✅ |
67 +| [Promutuel Assurance](promutuel.md) | 34 | 0 % | 100 % | 18 % | 2026-08-22 21:23 | ✅ |
68 +| [Service alimentaire Gordon](gfs.md) | 33 | 73 % | 100 % | 0 % | 2026-08-22 21:11 | ✅ |
69 +| [Intelcom (Dragonfly)](intelcomgroup.md) | 31 | 0 % | 100 % | 0 % | 2026-08-22 21:15 | ✅ |
70 +| [Altasciences](altasciences.md) | 29 | 0 % | 100 % | 97 % | 2026-08-22 20:59 | ✅ |
71 +| [Scotts Canada (Fafard)](scottsmiraclegro.md) | 27 | 4 % | 100 % | 0 % | 2026-08-22 21:24 | ✅ |
72 +| [CDPQ — Caisse de dépôt et placement du Québec](cdpq.md) | 25 | 0 % | 100 % | 0 % | 2026-08-22 21:04 | ✅ |
73 +| [Saputo](saputo.md) | 25 | 76 % | 100 % | 100 % | 2026-08-22 21:24 | ✅ |
74 +| [EXFO](exfo.md) | 24 | 0 % | 100 % | 58 % | 2026-08-22 21:11 | ✅ |
75 +| [Cineplex](cineplex.md) | 24 | 4 % | 100 % | 8 % | 2026-08-22 21:06 | ✅ |
76 +| [FedEx Express Canada](fedex.md) | 24 | 100 % | 88 % | 0 % | 2026-08-22 21:11 | ✅ |
77 +| [OPENLANE Canada](openlane.md) | 24 | 29 % | 83 % | 4 % | 2026-08-22 21:23 | ✅ |
78 +| [Intact Corporation financière](intactfc.md) | 23 | 0 % | 100 % | 0 % | 2026-08-22 21:15 | ✅ |
79 +| [Rio Tinto](riotinto.md) | 23 | 0 % | 100 % | 4 % | 2026-08-22 21:23 | ✅ |
80 +| [JLL](jll.md) | 22 | 5 % | 91 % | 100 % | 2026-08-22 21:15 | ✅ |
81 +| [CAA-Québec](caaquebec.md) | 19 | 21 % | 100 % | 0 % | 2026-08-22 21:04 | ✅ |
82 +| [Alcoa Canada](alcoa.md) | 16 | 12 % | 44 % | 0 % | 2026-08-22 20:58 | ✅ |
83 +| [BDC](bdc.md) | 15 | 0 % | 100 % | 0 % | 2026-08-22 21:00 | ✅ |
84 +| [iA Groupe financier](ia_groupe.md) | 13 | 100 % | 100 % | 8 % | 2026-08-22 21:15 | ✅ |
85 +| [Investissement Québec](investquebec.md) | 13 | 8 % | 100 % | 0 % | 2026-08-22 21:15 | ✅ |
86 +| [Allstate Canada](allstate.md) | 13 | 23 % | 85 % | 15 % | 2026-08-22 20:59 | ✅ |
87 +| [GSK](gsk.md) | 12 | 0 % | 83 % | 0 % | 2026-08-22 21:12 | ✅ |
88 +| [JG Rive-Sud (GFS)](jgrivesud.md) | 12 | 75 % | 100 % | 0 % | 2026-08-22 21:15 | ✅ |
89 +| [Aritzia](aritzia.md) | 11 | 64 % | 100 % | 0 % | 2026-08-22 20:59 | ✅ |
90 +| [Sun Life](sunlife.md) | 10 | 10 % | 100 % | 0 % | 2026-08-22 21:26 | ✅ |
91 +| [Abbott](abbott.md) | 10 | 20 % | 90 % | 40 % | 2026-08-22 20:56 | ✅ |
92 +| [VF Corporation (The North Face, Vans)](vfc.md) | 10 | 80 % | 100 % | 0 % | 2026-08-22 21:30 | ✅ |
93 +| [Canadian Tire](canadiantirecorporation.md) | 9 | 56 % | 100 % | 0 % | 2026-08-22 21:04 | ✅ |
94 +| [Fonds de solidarité FTQ](fondsftq.md) | 8 | 0 % | 100 % | 100 % | 2026-08-22 21:11 | ✅ |
95 +| [Pfizer Canada](pfizer.md) | 7 | 100 % | 29 % | 14 % | 2026-08-22 21:23 | ✅ |
96 +| [Church & Dwight Canada](churchdwight.md) | 6 | 0 % | 100 % | 0 % | 2026-08-22 21:06 | ✅ |
97 +| [Plusgrade](plusgrade.md) | 5 | 0 % | 100 % | 0 % | 2026-08-22 21:23 | ✅ |
98 +| [Raymond Chabot Grant Thornton](rcgt.md) | 5 | 0 % | 100 % | 20 % | 2026-08-22 21:23 | ✅ |
99 +| [Brasseries Sleeman (Unibroue)](sleeman.md) | 3 | 33 % | 100 % | 0 % | 2026-08-22 21:25 | ✅ |
100 +| [Suncor Énergie](suncor.md) | 2 | 0 % | 100 % | 0 % | 2026-08-22 21:25 | ✅ |
101 +| [Fiserv](fiserv.md) | 2 | 50 % | 100 % | 0 % | 2026-08-22 21:11 | ✅ |
102 +| [Guillevin International](guillevin.md) | 1 | 0 % | 100 % | 0 % | 2026-08-22 21:14 | ✅ |
103 +| [Shell Canada](shell.md) | 1 | 0 % | 100 % | 0 % | 2026-08-22 21:25 | ✅ |
104 +| [ZOLL Medical](zoll.md) | 1 | 100 % | 100 % | 100 % | 2026-08-22 21:32 | ✅ |
88 105
89 106 ## Licence / conformité
90 107
modified docs/connecteurs/ats-workland.md +3 −3
@@ -5,14 +5,14 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-workland.md
7 7 Rôle : Fiche plateforme ATS workland — mécanique partagée + tableau des 1 tenants
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 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 `workland`
14 14
15 **1 employeurs connectés** via cette plateforme — **1238 offres actives**. Module partagé : `jobka/connectors/workland.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**1 employeurs connectés** via cette plateforme — **1301 offres actives**. Module partagé : `jobka/connectors/workland.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -51,7 +51,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
51 51
52 52 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
53 53 |---|---|---|---|---|---|---|
54 | [Réseau Atlas Workland (~80 employeurs QC : CSS, cégeps, Santé Québec, STQ, UQTR…)](atlas_workland.md) | 1238 | 36 % | 100 % | 82 % | 2026-08-19 04:45 | ✅ |
54 +| [Réseau Atlas Workland (~80 employeurs QC : CSS, cégeps, Santé Québec, STQ, UQTR…)](atlas_workland.md) | 1301 | 34 % | 100 % | 81 % | 2026-08-22 20:59 | ✅ |
55 55
56 56 ## Licence / conformité
57 57
modified docs/connecteurs/ats-wpjobmanager.md +10 −10
@@ -5,14 +5,14 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ats-wpjobmanager.md
7 7 Rôle : Fiche plateforme ATS wpjobmanager — mécanique partagée + tableau des 8 tenants
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 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 `wpjobmanager`
14 14
15 **8 employeurs connectés** via cette plateforme — **842 offres actives**. Module partagé : `jobka/connectors/wpjobmanager.py` ; un employeur = une sous-classe d'environ 10 lignes.
15 +**8 employeurs connectés** via cette plateforme — **874 offres actives**. Module partagé : `jobka/connectors/wpjobmanager.py` ; un employeur = une sous-classe d'environ 10 lignes.
16 16
17 17 ## Description & mécanique
18 18
@@ -38,14 +38,14 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 | Employeur | Actives | Salaire | GPS | Mode | Dernier sync | OK |
40 40 |---|---|---|---|---|---|---|
41 | [CISSS de Laval](cisss_laval.md) | 149 | 1 % | 0 % | 0 % | 2026-08-19 05:05 | ✅ |
42 | [CISSS de l'Abitibi-Témiscamingue](cisss_abitibi.md) | 141 | 0 % | 0 % | 0 % | 2026-08-19 04:55 | ✅ |
43 | [CISSS des Laurentides](cisss_laurentides.md) | 130 | 12 % | 0 % | 1 % | 2026-08-19 05:39 | ✅ |
44 | [CISSS de Lanaudière](cisss_lanaudiere.md) | 124 | 4 % | 0 % | 0 % | 2026-08-19 05:35 | ✅ |
45 | [CISSS de Chaudière-Appalaches](cisss_chaudiere_appalaches.md) | 112 | 8 % | 0 % | 0 % | 2026-08-19 04:59 | ✅ |
46 | [CISSS de l'Outaouais](cisss_outaouais.md) | 101 | 31 % | 0 % | 0 % | 2026-08-19 05:09 | ✅ |
47 | [CHU de Québec — Université Laval](chu_quebec.md) | 60 | 10 % | 0 % | 0 % | 2026-08-19 04:51 | ✅ |
48 | [CHUM](chum.md) | 25 | 0 % | 0 % | 0 % | 2026-08-19 04:52 | ✅ |
41 +| [CISSS de Laval](cisss_laval.md) | 149 | 1 % | 100 % | 0 % | 2026-08-22 21:08 | ✅ |
42 +| [CISSS des Laurentides](cisss_laurentides.md) | 142 | 11 % | 100 % | 1 % | 2026-08-22 21:08 | ✅ |
43 +| [CISSS de l'Abitibi-Témiscamingue](cisss_abitibi.md) | 140 | 0 % | 100 % | 0 % | 2026-08-22 21:08 | ✅ |
44 +| [CISSS de Lanaudière](cisss_lanaudiere.md) | 132 | 5 % | 100 % | 0 % | 2026-08-22 21:08 | ✅ |
45 +| [CISSS de Chaudière-Appalaches](cisss_chaudiere_appalaches.md) | 115 | 9 % | 100 % | 0 % | 2026-08-22 21:08 | ✅ |
46 +| [CISSS de l'Outaouais](cisss_outaouais.md) | 108 | 31 % | 100 % | 0 % | 2026-08-22 21:08 | ✅ |
47 +| [CHU de Québec — Université Laval](chu_quebec.md) | 59 | 7 % | 100 % | 0 % | 2026-08-22 21:06 | ✅ |
48 +| [CHUM](chum.md) | 29 | 0 % | 100 % | 0 % | 2026-08-22 21:06 | ✅ |
49 49
50 50 ## Licence / conformité
51 51
modified docs/connecteurs/autodesk.md +20 −16
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/autodesk.md
7 7 Rôle : Fiche connecteur — Autodesk (employeur direct, ATS workday)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **65 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **65 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -50,21 +50,21 @@ Complétude mesurée sur les **65 offres actives** de la source (base live, 2026
50 50 | `region` — Région | région administrative | 32 % |
51 51 | `address` — Adresse | adresse du lieu de travail | 0 % |
52 52 | `postal_code` — Code postal | code postal si publié | 0 % |
53 | `work_mode` — Mode | presentiel / hybride / teletravail | 20 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 22 % |
54 54 | `employment_type` — Type | temps_plein / temps_partiel / … | 97 % |
55 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 91 % |
56 | `salary_label` — Libellé salaire | texte salarial original | 91 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 89 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 89 % |
57 57 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 58 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 59 | `date_posted` — Date de parution | ISO 8601 | 100 % |
60 60 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 83 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 85 % |
62 62 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 63 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 | `gps` — GPS | lat/lng (géocodage sans invention) | 48 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 46 % |
66 66
67 Exemple réel : *AI Builder, Principal Product Manager* — ∅ · For Canada based roles, we expect a starting base salary between $142,000 and $207,900. Of… · parue le 2026-08-14.
67 +Exemple réel : *Senior Software Developer* — ∅ · For Canada based roles, we expect a starting base salary between $107,000 and $157,300. Of… · parue le 2026-08-21.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,19 +79,23 @@ Exemple réel : *AI Builder, Principal Product Manager* — ∅ · For Canada ba
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 68 (dont **65 actives**, 0 masquées comme doublons `dup_of`)
85 - **Salaire** : 59/65 actives (91 %)
86 - **GPS** : 31/65 actives (48 %)
87 - **Mode** : 13/65 actives (20 %)
84 +- **Offres en base** : 74 (dont **65 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 58/65 actives (89 %)
86 +- **GPS** : 30/65 actives (46 %)
87 +- **Mode** : 14/65 actives (22 %)
88 88 - **Parution** : 65/65 actives (100 %)
89 - **Dernier sync** : 2026-08-19 03:37 — trouvées 65, +0, ~61, -0
90 - **Syncs enregistrés** (`sync_log`) : 27
89 +- **Dernier sync** : 2026-08-22 20:59 — trouvées 65, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 86
91 91
92 92 ## Erreurs & dépannage
93 93
94 Aucune erreur dans `sync_log` pour cette source.
94 +Erreurs relevées dans `sync_log` :
95 +
96 +| Erreur | Occurrences | Dernière fois |
97 +|---|---|---|
98 +| Expecting value: line 1 column 1 (char 0) | 1 | 2026-08-22 03:19 |
95 99
96 100 - Rejouer un sync isolé : `.venv/bin/python run.py sync autodesk` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='autodesk' ORDER BY ts DESC LIMIT 5;"`
97 101 - 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`.
added docs/connecteurs/autotradercanada.md +104 −0
@@ -0,0 +1,104 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/autotradercanada.md
7 +Rôle : Fiche connecteur — AutoTrader Canada (employeur direct, ATS greenhouse)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# AutoTrader Canada (`autotradercanada`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`greenhouse`](ats-greenhouse.md) · Statut registre : actif · Connecteur : `jobka/connectors/autotradercanada.py`
16 +
17 +## Description
18 +
19 +- **Site** : [AutoTrader Canada]()
20 +- **Page carrières** : https://job-boards.greenhouse.io/autotradercanada
21 +- **Secteurs** : Automobile
22 +- **Région** : Longueuil
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-greenhouse.md`](ats-greenhouse.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `BOARD` | `autotradercanada` |
33 +| `EMPLOYER` | `AutoTrader Canada` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 0 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 100 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 100 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 +
65 +Exemple réel : *Performance Manager, Longueuil, QC* — Longueuil · $65,000 — $70,000 CAD · parue le 2026-07-29.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- 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.
72 +
73 +## Volumétrie & complétude live
74 +
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 +
77 +- **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 2/2 actives (100 %)
79 +- **GPS** : 2/2 actives (100 %)
80 +- **Mode** : 0/2 actives (0 %)
81 +- **Parution** : 2/2 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 20:59 — trouvées 2, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 6
84 +
85 +## Erreurs & dépannage
86 +
87 +Aucune erreur dans `sync_log` pour cette source.
88 +
89 +- Rejouer un sync isolé : `.venv/bin/python run.py sync autotradercanada` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='autotradercanada' ORDER BY ts DESC LIMIT 5;"`
90 +- 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`.
91 +
92 +## Licence / conformité
93 +
94 +**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 AutoTrader Canada » 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.
95 +
96 +## Historique
97 +
98 +**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 :
99 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
100 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
101 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
102 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
103 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
104 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
added docs/connecteurs/avantageplus.md +104 −0
@@ -0,0 +1,104 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/avantageplus.md
7 +Rôle : Fiche connecteur — Avantage Plus (employeur direct, ATS recruitee)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Avantage Plus (`avantageplus`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`recruitee`](ats-recruitee.md) · Statut registre : actif · Connecteur : `jobka/connectors/avantageplus.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Avantage Plus]()
20 +- **Page carrières** : https://avantageplus.recruitee.com
21 +- **Secteurs** : Services
22 +- **Région** : Québec
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-recruitee.md`](ats-recruitee.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Avantage Plus` |
33 +| `ORG` | `avantageplus` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **10 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 100 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 100 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 10 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 10 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 100 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 90 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 +
65 +Exemple réel : *Économiste de la construction* — Montréal · Salaire offert de 95 000$ · parue le 2026-01-30.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- 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.
72 +
73 +## Volumétrie & complétude live
74 +
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 +
77 +- **Offres en base** : 10 (dont **10 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 1/10 actives (10 %)
79 +- **GPS** : 10/10 actives (100 %)
80 +- **Mode** : 10/10 actives (100 %)
81 +- **Parution** : 10/10 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 20:59 — trouvées 10, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 6
84 +
85 +## Erreurs & dépannage
86 +
87 +Aucune erreur dans `sync_log` pour cette source.
88 +
89 +- Rejouer un sync isolé : `.venv/bin/python run.py sync avantageplus` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='avantageplus' ORDER BY ts DESC LIMIT 5;"`
90 +- 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`.
91 +
92 +## Licence / conformité
93 +
94 +**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 Avantage Plus » 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.
95 +
96 +## Historique
97 +
98 +**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 :
99 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
100 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
101 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
102 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
103 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
104 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/aviyatech.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/aviyatech.md
7 7 Rôle : Fiche connecteur — Aviya Aerospace Systems (employeur direct, ATS lever)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Computer Engineer-Talent Pool Longueuil* — Québec · ∅ ·
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 5 (dont **5 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/5 actives (0 %)
79 79 - **GPS** : 5/5 actives (100 %)
80 80 - **Mode** : 5/5 actives (100 %)
81 81 - **Parution** : 5/5 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:37 — trouvées 5, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 27
82 +- **Dernier sync** : 2026-08-22 20:59 — trouvées 5, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 86
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/bardel_entertainment.md +13 −13
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/bardel_entertainment.md
7 7 Rôle : Fiche connecteur — Bardel Entertainment (employeur direct, ATS workable)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -53,16 +53,16 @@ Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-
53 53 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 100 % |
54 54 | `salary_label` — Libellé salaire | texte salarial original | 100 % |
55 55 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 25 % |
57 57 | `date_posted` — Date de parution | ISO 8601 | 100 % |
58 58 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 33 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 50 % |
60 60 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 61 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 62 | `apply_url` — Candidature | lien de candidature directe | 100 % |
63 63 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 64
65 Exemple réel : *Artiste d’éclairage/ Lighting Artist (Featurette)* — Montréal · Échelle salariale : $ 1400 - 1700 $ CAD par semaine · parue le 2026-08-12.
65 +Exemple réel : *Artiste en éclairage / Lighting Artist - Feature Animation (short-term)* — Montréal · Échelle de salaires : $1,600 - 2,000 CAD par semaine · parue le 2026-08-20.
66 66
67 67 ## Fréquence & budgets
68 68
@@ -72,15 +72,15 @@ Exemple réel : *Artiste d’éclairage/ Lighting Artist (Featurette)* — Montr
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 - **Offres en base** : 3 (dont **3 actives**, 0 masquées comme doublons `dup_of`)
78 - **Salaire** : 3/3 actives (100 %)
79 - **GPS** : 3/3 actives (100 %)
80 - **Mode** : 0/3 actives (0 %)
81 - **Parution** : 3/3 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:37 — trouvées 3, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 27
77 +- **Offres en base** : 4 (dont **4 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 4/4 actives (100 %)
79 +- **GPS** : 4/4 actives (100 %)
80 +- **Mode** : 0/4 actives (0 %)
81 +- **Parution** : 4/4 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 20:59 — trouvées 4, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 86
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/bayshore.md +11 −11
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/bayshore.md
7 7 Rôle : Fiche connecteur — Bayshore HealthCare (employeur direct, ATS taleo)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -39,7 +39,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
39 39
40 40 ## Champs → schéma
41 41
42 Complétude mesurée sur les **13 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 +Complétude mesurée sur les **14 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
43 43
44 44 | Champ (`jobs.*`) | Rôle | Complétude |
45 45 |---|---|---|
@@ -60,7 +60,7 @@ Complétude mesurée sur les **13 offres actives** de la source (base live, 2026
60 60 | `date_posted` — Date de parution | ISO 8601 | 0 % |
61 61 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
62 62 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
63 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 38 % |
63 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 36 % |
64 64 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
65 65 | `apply_url` — Candidature | lien de candidature directe | 0 % |
66 66 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
@@ -80,15 +80,15 @@ Exemple réel : *Gestionnaire de programme - Program Manager* — Montréal ·
80 80
81 81 ## Volumétrie & complétude live
82 82
83 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
84 84
85 - **Offres en base** : 13 (dont **13 actives**, 0 masquées comme doublons `dup_of`)
86 - **Salaire** : 0/13 actives (0 %)
87 - **GPS** : 13/13 actives (100 %)
88 - **Mode** : 0/13 actives (0 %)
89 - **Parution** : 0/13 actives (0 %)
90 - **Dernier sync** : 2026-08-19 03:38 — trouvées 13, +0, ~0, -0
91 - **Syncs enregistrés** (`sync_log`) : 16
85 +- **Offres en base** : 14 (dont **14 actives**, 0 masquées comme doublons `dup_of`)
86 +- **Salaire** : 0/14 actives (0 %)
87 +- **GPS** : 14/14 actives (100 %)
88 +- **Mode** : 0/14 actives (0 %)
89 +- **Parution** : 0/14 actives (0 %)
90 +- **Dernier sync** : 2026-08-22 21:00 — trouvées 14, +0, ~0, -0
91 +- **Syncs enregistrés** (`sync_log`) : 75
92 92
93 93 ## Erreurs & dépannage
94 94
modified docs/connecteurs/bc2.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/bc2.md
7 7 Rôle : Fiche connecteur — Groupe BC2 (employeur direct, ATS bamboohr)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *DIRECTEUR(TRICE) DE PROJET \| URBANISME, DÉVELOPPEMENT IMMOBIL
77 77
78 78 ## Volumétrie & complétude live
79 79
80 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/2 actives (0 %)
84 84 - **GPS** : 2/2 actives (100 %)
85 85 - **Mode** : 2/2 actives (100 %)
86 86 - **Parution** : 2/2 actives (100 %)
87 - **Dernier sync** : 2026-08-19 03:38 — trouvées 2, +0, ~0, -0
88 - **Syncs enregistrés** (`sync_log`) : 27
87 +- **Dernier sync** : 2026-08-22 21:00 — trouvées 2, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 86
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/bdc.md +12 −12
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/bdc.md
7 7 Rôle : Fiche connecteur — BDC (employeur direct, ATS workday)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **16 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **15 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -58,13 +58,13 @@ Complétude mesurée sur les **16 offres actives** de la source (base live, 2026
58 58 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 59 | `date_posted` — Date de parution | ISO 8601 | 100 % |
60 60 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 38 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 40 % |
62 62 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 63 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 Exemple réel : *SPECIALIST, FINANCIAL REPORTING* — Montréal · ∅ · parue le 2026-08-18.
67 +Exemple réel : *ADMINISTRATIVE ASSISTANT - DEFENCE* — Montréal · ∅ · parue le 2026-08-19.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *SPECIALIST, FINANCIAL REPORTING* — Montréal · ∅ · parue
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 18 (dont **16 actives**, 0 masquées comme doublons `dup_of`)
85 - **Salaire** : 0/16 actives (0 %)
86 - **GPS** : 16/16 actives (100 %)
87 - **Mode** : 0/16 actives (0 %)
88 - **Parution** : 16/16 actives (100 %)
89 - **Dernier sync** : 2026-08-19 03:38 — trouvées 16, +0, ~16, -0
90 - **Syncs enregistrés** (`sync_log`) : 15
84 +- **Offres en base** : 19 (dont **15 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 0/15 actives (0 %)
86 +- **GPS** : 15/15 actives (100 %)
87 +- **Mode** : 0/15 actives (0 %)
88 +- **Parution** : 15/15 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:00 — trouvées 15, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 74
91 91
92 92 ## Erreurs & dépannage
93 93
added docs/connecteurs/bdl_energie.md +104 −0
@@ -0,0 +1,104 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/bdl_energie.md
7 +Rôle : Fiche connecteur — BDL Énergie (employeur direct, ATS breezy)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# BDL Énergie (`bdl_energie`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`breezy`](ats-breezy.md) · Statut registre : actif · Connecteur : `jobka/connectors/bdl_energie.py`
16 +
17 +## Description
18 +
19 +- **Site** : [BDL Énergie]()
20 +- **Page carrières** : https://bdl-energie.breezy.hr
21 +- **Secteurs** : Énergie
22 +- **Région** : Sherbrooke
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-breezy.md`](ats-breezy.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `BDL Énergie` |
33 +| `ORG` | `bdl-energie` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **10 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 10 % |
50 +| `postal_code` — Code postal | code postal si publié | 40 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 90 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 30 % |
64 +
65 +Exemple réel : *Commis(e) à la répartition* — 9771 Boul Métropolitain E, Anjou, QC · ∅ · parue le 2026-08-19.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- 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.
72 +
73 +## Volumétrie & complétude live
74 +
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 +
77 +- **Offres en base** : 10 (dont **10 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 0/10 actives (0 %)
79 +- **GPS** : 3/10 actives (30 %)
80 +- **Mode** : 0/10 actives (0 %)
81 +- **Parution** : 10/10 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:00 — trouvées 10, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 6
84 +
85 +## Erreurs & dépannage
86 +
87 +Aucune erreur dans `sync_log` pour cette source.
88 +
89 +- Rejouer un sync isolé : `.venv/bin/python run.py sync bdl_energie` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='bdl_energie' ORDER BY ts DESC LIMIT 5;"`
90 +- 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`.
91 +
92 +## Licence / conformité
93 +
94 +**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 BDL Énergie » 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.
95 +
96 +## Historique
97 +
98 +**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 :
99 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
100 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
101 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
102 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
103 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
104 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/bell_textron.md +12 −12
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/bell_textron.md
7 7 Rôle : Fiche connecteur — Bell Textron Canada (employeur direct, ATS taleo)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -39,7 +39,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
39 39
40 40 ## Champs → schéma
41 41
42 Complétude mesurée sur les **15 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 +Complétude mesurée sur les **16 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
43 43
44 44 | Champ (`jobs.*`) | Rôle | Complétude |
45 45 |---|---|---|
@@ -60,12 +60,12 @@ Complétude mesurée sur les **15 offres actives** de la source (base live, 2026
60 60 | `date_posted` — Date de parution | ISO 8601 | 100 % |
61 61 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
62 62 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
63 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 33 % |
63 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 38 % |
64 64 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
65 65 | `apply_url` — Candidature | lien de candidature directe | 0 % |
66 66 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
67 67
68 Exemple réel : *Analyste en conformité commerce internationale /Trade Compliance Associate Analyst* — Québec · ∅ · parue le 2026-08-04.
68 +Exemple réel : *Ingénieur de projet (407) / Project Engineer (407)* — Québec · ∅ · parue le 2026-08-19.
69 69
70 70 ## Fréquence & budgets
71 71
@@ -80,15 +80,15 @@ Exemple réel : *Analyste en conformité commerce internationale /Trade Complian
80 80
81 81 ## Volumétrie & complétude live
82 82
83 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
84 84
85 - **Offres en base** : 15 (dont **15 actives**, 0 masquées comme doublons `dup_of`)
86 - **Salaire** : 0/15 actives (0 %)
87 - **GPS** : 15/15 actives (100 %)
88 - **Mode** : 0/15 actives (0 %)
89 - **Parution** : 15/15 actives (100 %)
90 - **Dernier sync** : 2026-08-19 03:38 — trouvées 15, +0, ~0, -0
91 - **Syncs enregistrés** (`sync_log`) : 15
85 +- **Offres en base** : 16 (dont **16 actives**, 0 masquées comme doublons `dup_of`)
86 +- **Salaire** : 0/16 actives (0 %)
87 +- **GPS** : 16/16 actives (100 %)
88 +- **Mode** : 0/16 actives (0 %)
89 +- **Parution** : 16/16 actives (100 %)
90 +- **Dernier sync** : 2026-08-22 21:00 — trouvées 16, +0, ~0, -0
91 +- **Syncs enregistrés** (`sync_log`) : 74
92 92
93 93 ## Erreurs & dépannage
94 94
modified docs/connecteurs/beneva.md +13 −13
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/beneva.md
7 7 Rôle : Fiche connecteur — Beneva (employeur direct, ATS workday)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **48 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **39 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -50,10 +50,10 @@ Complétude mesurée sur les **48 offres actives** de la source (base live, 2026
50 50 | `region` — Région | région administrative | 100 % |
51 51 | `address` — Adresse | adresse du lieu de travail | 0 % |
52 52 | `postal_code` — Code postal | code postal si publié | 0 % |
53 | `work_mode` — Mode | presentiel / hybride / teletravail | 2 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 3 % |
54 54 | `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
55 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 2 % |
56 | `salary_label` — Libellé salaire | texte salarial original | 2 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 3 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 3 % |
57 57 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 58 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 59 | `date_posted` — Date de parution | ISO 8601 | 100 % |
@@ -79,15 +79,15 @@ Exemple réel : *Agent service à la clientèle* — Québec · Salaire débutan
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 49 (dont **48 actives**, 0 masquées comme doublons `dup_of`)
85 - **Salaire** : 1/48 actives (2 %)
86 - **GPS** : 48/48 actives (100 %)
87 - **Mode** : 1/48 actives (2 %)
88 - **Parution** : 48/48 actives (100 %)
89 - **Dernier sync** : 2026-08-19 03:39 — trouvées 48, +0, ~34, -0
90 - **Syncs enregistrés** (`sync_log`) : 15
84 +- **Offres en base** : 52 (dont **39 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 1/39 actives (3 %)
86 +- **GPS** : 39/39 actives (100 %)
87 +- **Mode** : 1/39 actives (3 %)
88 +- **Parution** : 39/39 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:00 — trouvées 39, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 74
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/bento_sushi.md +12 −8
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/bento_sushi.md
7 7 Rôle : Fiche connecteur — Bento Sushi (employeur direct, ATS adp)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -62,7 +62,7 @@ Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-
62 62 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 63 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 64 | `apply_url` — Candidature | lien de candidature directe | 0 % |
65 | `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 67 Exemple réel : *Membres de l'équipe de service alimentaire* — Québec · ∅ · parue le 2026-08-14.
68 68
@@ -79,19 +79,23 @@ Exemple réel : *Membres de l'équipe de service alimentaire* — Québec · ∅
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 9 (dont **9 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 8/9 actives (89 %)
86 - **GPS** : 0/9 actives (0 %)
86 +- **GPS** : 9/9 actives (100 %)
87 87 - **Mode** : 0/9 actives (0 %)
88 88 - **Parution** : 9/9 actives (100 %)
89 - **Dernier sync** : 2026-08-19 04:49 — trouvées 9, +9, ~0, -0
90 - **Syncs enregistrés** (`sync_log`) : 1
89 +- **Dernier sync** : 2026-08-22 21:00 — trouvées 9, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 60
91 91
92 92 ## Erreurs & dépannage
93 93
94 Aucune erreur dans `sync_log` pour cette source.
94 +Erreurs relevées dans `sync_log` :
95 +
96 +| Erreur | Occurrences | Dernière fois |
97 +|---|---|---|
98 +| 500 Server Error: for url: https://workforcenow.adp.com/mascsr/default/careercenter/publi… | 1 | 2026-08-22 00:30 |
95 99
96 100 - Rejouer un sync isolé : `.venv/bin/python run.py sync bento_sushi` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='bento_sushi' ORDER BY ts DESC LIMIT 5;"`
97 101 - 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`.
modified docs/connecteurs/bhvr.md +13 −13
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/bhvr.md
7 7 Rôle : Fiche connecteur — Behaviour Interactif (employeur direct, ATS lever)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **39 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **38 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -49,20 +49,20 @@ Complétude mesurée sur les **39 offres actives** de la source (base live, 2026
49 49 | `address` — Adresse | adresse du lieu de travail | 0 % |
50 50 | `postal_code` — Code postal | code postal si publié | 0 % |
51 51 | `work_mode` — Mode | presentiel / hybride / teletravail | 100 % |
52 | `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 97 % |
53 53 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 54 | `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 55 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 56 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 57 | `date_posted` — Date de parution | ISO 8601 | 100 % |
58 58 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 59 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 61 % |
60 60 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 61 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 62 | `apply_url` — Candidature | lien de candidature directe | 100 % |
63 63 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 64
65 Exemple réel : *Release Manager - Dead By Daylight \| Responsable du Déploiement - Dead By Daylight* — Montréal · ∅ · parue le 2026-08-17.
65 +Exemple réel : *Senior Systems Programmer - 7 Days to Die \| Programmeur·euse systèmes sénior·e - 7 Days t…* — Montréal · ∅ · parue le 2026-08-19.
66 66
67 67 ## Fréquence & budgets
68 68
@@ -72,15 +72,15 @@ Exemple réel : *Release Manager - Dead By Daylight \| Responsable du Déploieme
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 - **Offres en base** : 39 (dont **39 actives**, 0 masquées comme doublons `dup_of`)
78 - **Salaire** : 0/39 actives (0 %)
79 - **GPS** : 39/39 actives (100 %)
80 - **Mode** : 39/39 actives (100 %)
81 - **Parution** : 39/39 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:39 — trouvées 39, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 15
77 +- **Offres en base** : 40 (dont **38 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 0/38 actives (0 %)
79 +- **GPS** : 38/38 actives (100 %)
80 +- **Mode** : 38/38 actives (100 %)
81 +- **Parution** : 38/38 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:00 — trouvées 38, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 74
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/bigbang.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/bigbang.md
7 7 Rôle : Fiche connecteur — Big Bang (employeur direct, ATS bamboohr)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Client Solutions Manager* — Montréal · CAD 38.46 per hour
77 77
78 78 ## Volumétrie & complétude live
79 79
80 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 8 (dont **8 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 2/8 actives (25 %)
84 84 - **GPS** : 8/8 actives (100 %)
85 85 - **Mode** : 8/8 actives (100 %)
86 86 - **Parution** : 8/8 actives (100 %)
87 - **Dernier sync** : 2026-08-19 03:39 — trouvées 8, +0, ~0, -0
88 - **Syncs enregistrés** (`sync_log`) : 15
87 +- **Dernier sync** : 2026-08-22 21:00 — trouvées 8, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 74
89 89
90 90 ## Erreurs & dépannage
91 91
added docs/connecteurs/billups.md +104 −0
@@ -0,0 +1,104 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/billups.md
7 +Rôle : Fiche connecteur — Billups (employeur direct, ATS ashby)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Billups (`billups`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`ashby`](ats-ashby.md) · Statut registre : actif · Connecteur : `jobka/connectors/billups.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Billups]()
20 +- **Page carrières** : https://jobs.ashbyhq.com/billups
21 +- **Secteurs** : Marketing
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-ashby.md`](ats-ashby.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Billups` |
33 +| `ORG` | `billups` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 100 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 100 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 100 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 +
65 +Exemple réel : *Account Manager - Canada* — Montréal · 75 000,00 $ par année · parue le 2026-07-29.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- 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.
72 +
73 +## Volumétrie & complétude live
74 +
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 +
77 +- **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 1/1 actives (100 %)
79 +- **GPS** : 1/1 actives (100 %)
80 +- **Mode** : 1/1 actives (100 %)
81 +- **Parution** : 1/1 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:00 — trouvées 1, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 6
84 +
85 +## Erreurs & dépannage
86 +
87 +Aucune erreur dans `sync_log` pour cette source.
88 +
89 +- Rejouer un sync isolé : `.venv/bin/python run.py sync billups` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='billups' ORDER BY ts DESC LIMIT 5;"`
90 +- 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`.
91 +
92 +## Licence / conformité
93 +
94 +**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 Billups » 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.
95 +
96 +## Historique
97 +
98 +**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 :
99 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
100 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
101 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
102 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
103 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
104 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/biximontreal.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/biximontreal.md
7 7 Rôle : Fiche connecteur — BIXI Montréal (employeur direct, ATS recruitee)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Technicien(ne) – Service réseau* — Montréal · • Un sal
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 1/2 actives (50 %)
79 79 - **GPS** : 2/2 actives (100 %)
80 80 - **Mode** : 2/2 actives (100 %)
81 81 - **Parution** : 2/2 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:39 — trouvées 2, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 28
82 +- **Dernier sync** : 2026-08-22 21:00 — trouvées 2, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 87
84 84
85 85 ## Erreurs & dépannage
86 86
added docs/connecteurs/black_mcdonald_francais.md +104 −0
@@ -0,0 +1,104 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/black_mcdonald_francais.md
7 +Rôle : Fiche connecteur — Black & McDonald (employeur direct, ATS breezy)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Black & McDonald (`black_mcdonald_francais`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`breezy`](ats-breezy.md) · Statut registre : actif · Connecteur : `jobka/connectors/black_mcdonald_francais.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Black & McDonald]()
20 +- **Page carrières** : https://black-mcdonald-francais.breezy.hr
21 +- **Secteurs** : Construction
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-breezy.md`](ats-breezy.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Black & McDonald` |
33 +| `ORG` | `black-mcdonald-francais` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 100 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 +
65 +Exemple réel : *Frigoriste Compagnon* — Brossard · ∅ · parue le 2026-05-12.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- 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.
72 +
73 +## Volumétrie & complétude live
74 +
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 +
77 +- **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 0/2 actives (0 %)
79 +- **GPS** : 2/2 actives (100 %)
80 +- **Mode** : 0/2 actives (0 %)
81 +- **Parution** : 2/2 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:00 — trouvées 2, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 6
84 +
85 +## Erreurs & dépannage
86 +
87 +Aucune erreur dans `sync_log` pour cette source.
88 +
89 +- Rejouer un sync isolé : `.venv/bin/python run.py sync black_mcdonald_francais` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='black_mcdonald_francais' ORDER BY ts DESC LIMIT 5;"`
90 +- 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`.
91 +
92 +## Licence / conformité
93 +
94 +**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 Black & McDonald » 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.
95 +
96 +## Historique
97 +
98 +**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 :
99 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
100 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
101 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
102 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
103 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
104 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
added docs/connecteurs/bleufeu.md +111 −0
@@ -0,0 +1,111 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/bleufeu.md
7 +Rôle : Fiche connecteur — BLEUFEU (Festival d'été de Québec) (employeur direct, ATS dayforce)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# BLEUFEU (Festival d'été de Québec) (`bleufeu`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`dayforce`](ats-dayforce.md) · Statut registre : actif · Connecteur : `jobka/connectors/bleufeu.py`
16 +
17 +## Description
18 +
19 +- **Site** : [BLEUFEU (Festival d'été de Québec)]()
20 +- **Page carrières** : https://jobs.dayforcehcm.com/fr-CA/feiq/CANDIDATEPORTAL
21 +- **Secteurs** : Divertissement
22 +- **Région** : Québec
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-dayforce.md`](ats-dayforce.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `BOARD` | `CANDIDATEPORTAL` |
33 +| `CULTURE` | `fr-CA` |
34 +| `EMPLOYER` | `BLEUFEU (Festival d'été de Québec)` |
35 +| `NS` | `feiq` |
36 +- **Throttle** : 0.8 s entre requêtes.
37 +- **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).
38 +
39 +## Champs → schéma
40 +
41 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 +
43 +| Champ (`jobs.*`) | Rôle | Complétude |
44 +|---|---|---|
45 +| `title` — Titre | titre du poste | 100 % |
46 +| `employer` — Employeur | nom de l'entreprise | 100 % |
47 +| `url` — URL | lien direct vers l'offre originale | 100 % |
48 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
49 +| `city` — Ville | municipalité normalisée | 100 % |
50 +| `region` — Région | région administrative | 100 % |
51 +| `address` — Adresse | adresse du lieu de travail | 100 % |
52 +| `postal_code` — Code postal | code postal si publié | 0 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 0 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
57 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
60 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 0 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 +
67 +Exemple réel : *Candidature spontanée - BLEUFEU* — Québec · ∅ · parue le 2026-04-17.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 0.8 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_DAYFORCE_DETAIL_LIMIT` | `80` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 0/1 actives (0 %)
86 +- **GPS** : 1/1 actives (100 %)
87 +- **Mode** : 0/1 actives (0 %)
88 +- **Parution** : 1/1 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:00 — trouvées 1, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 5
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync bleufeu` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='bleufeu' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 BLEUFEU (Festival d'été de Québec) » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/bmo.md +23 −19
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/bmo.md
7 7 Rôle : Fiche connecteur — BMO Groupe financier (employeur direct, ATS workday)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **106 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **121 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -46,25 +46,25 @@ Complétude mesurée sur les **106 offres actives** de la source (base live, 202
46 46 | `employer` — Employeur | nom de l'entreprise | 100 % |
47 47 | `url` — URL | lien direct vers l'offre originale | 100 % |
48 48 | `description` — Description | texte complet (HTML nettoyé) | 100 % |
49 | `city` — Ville | municipalité normalisée | 80 % |
49 +| `city` — Ville | municipalité normalisée | 83 % |
50 50 | `region` — Région | région administrative | 93 % |
51 51 | `address` — Adresse | adresse du lieu de travail | 0 % |
52 52 | `postal_code` — Code postal | code postal si publié | 0 % |
53 | `work_mode` — Mode | presentiel / hybride / teletravail | 17 % |
54 | `employment_type` — Type | temps_plein / temps_partiel / … | 93 % |
55 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 88 % |
56 | `salary_label` — Libellé salaire | texte salarial original | 88 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 15 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 96 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 86 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 86 % |
57 57 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 58 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 59 | `date_posted` — Date de parution | ISO 8601 | 100 % |
60 60 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 96 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 98 % |
62 62 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 63 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 | `gps` — GPS | lat/lng (géocodage sans invention) | 79 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 82 % |
66 66
67 Exemple réel : *Director, Equipment Finance* — Montréal · $69,000.00 - $129,000.00 · parue le 2026-08-18.
67 +Exemple réel : *Manager, Court Orders Oversight (Bilingual)* — Montréal · $69,000.00 - $129,000.00 · parue le 2026-08-21.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,19 +79,23 @@ Exemple réel : *Director, Equipment Finance* — Montréal · $69,000.00 - $129
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 108 (dont **106 actives**, 0 masquées comme doublons `dup_of`)
85 - **Salaire** : 93/106 actives (88 %)
86 - **GPS** : 84/106 actives (79 %)
87 - **Mode** : 18/106 actives (17 %)
88 - **Parution** : 106/106 actives (100 %)
89 - **Dernier sync** : 2026-08-19 03:41 — trouvées 106, +0, ~96, -0
90 - **Syncs enregistrés** (`sync_log`) : 27
84 +- **Offres en base** : 141 (dont **121 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 104/121 actives (86 %)
86 +- **GPS** : 99/121 actives (82 %)
87 +- **Mode** : 18/121 actives (15 %)
88 +- **Parution** : 121/121 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:00 — trouvées 121, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 86
91 91
92 92 ## Erreurs & dépannage
93 93
94 Aucune erreur dans `sync_log` pour cette source.
94 +Erreurs relevées dans `sync_log` :
95 +
96 +| Erreur | Occurrences | Dernière fois |
97 +|---|---|---|
98 +| Expecting value: line 1 column 1 (char 0) | 1 | 2026-08-22 03:20 |
95 99
96 100 - Rejouer un sync isolé : `.venv/bin/python run.py sync bmo` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='bmo' ORDER BY ts DESC LIMIT 5;"`
97 101 - 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`.
modified docs/connecteurs/bombardier.md +13 −13
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/bombardier.md
7 7 Rôle : Fiche connecteur — Bombardier (employeur direct, ATS successfactors)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **847 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **812 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -48,8 +48,8 @@ Complétude mesurée sur les **847 offres actives** de la source (base live, 202
48 48 | `region` — Région | région administrative | 100 % |
49 49 | `address` — Adresse | adresse du lieu de travail | 0 % |
50 50 | `postal_code` — Code postal | code postal si publié | 100 % |
51 | `work_mode` — Mode | presentiel / hybride / teletravail | 88 % |
52 | `employment_type` — Type | temps_plein / temps_partiel / … | 5 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 89 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 4 % |
53 53 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 54 | `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 55 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
@@ -62,7 +62,7 @@ Complétude mesurée sur les **847 offres actives** de la source (base live, 202
62 62 | `apply_url` — Candidature | lien de candidature directe | 0 % |
63 63 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 64
65 Exemple réel : *Analyst Sr, Quality Assurance Product Safety Management* — Dorval · ∅ · parue le 2026-08-15.
65 +Exemple réel : *Analyst Sr, Quality Assurance Product Safety Management* — Dorval · ∅ · parue le 2026-08-22.
66 66
67 67 ## Fréquence & budgets
68 68
@@ -77,15 +77,15 @@ Exemple réel : *Analyst Sr, Quality Assurance Product Safety Management* — Do
77 77
78 78 ## Volumétrie & complétude live
79 79
80 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 81
82 - **Offres en base** : 853 (dont **847 actives**, 0 masquées comme doublons `dup_of`)
83 - **Salaire** : 0/847 actives (0 %)
84 - **GPS** : 847/847 actives (100 %)
85 - **Mode** : 742/847 actives (88 %)
86 - **Parution** : 847/847 actives (100 %)
87 - **Dernier sync** : 2026-08-19 03:41 — trouvées 847, +0, ~0, -0
88 - **Syncs enregistrés** (`sync_log`) : 15
82 +- **Offres en base** : 869 (dont **812 actives**, 0 masquées comme doublons `dup_of`)
83 +- **Salaire** : 0/812 actives (0 %)
84 +- **GPS** : 812/812 actives (100 %)
85 +- **Mode** : 724/812 actives (89 %)
86 +- **Parution** : 812/812 actives (100 %)
87 +- **Dernier sync** : 2026-08-22 21:04 — trouvées 812, +0, ~812, -0
88 +- **Syncs enregistrés** (`sync_log`) : 74
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/botpress.md +12 −12
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/botpress.md
7 7 Rôle : Fiche connecteur — Botpress (employeur direct, ATS workable)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -53,7 +53,7 @@ Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-
53 53 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 54 | `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 55 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 75 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 78 % |
57 57 | `date_posted` — Date de parution | ISO 8601 | 100 % |
58 58 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 59 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
@@ -62,7 +62,7 @@ Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-
62 62 | `apply_url` — Candidature | lien de candidature directe | 100 % |
63 63 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 64
65 Exemple réel : *Développeur(euse) croissance - GTM* — Québec · ∅ · parue le 2026-08-05.
65 +Exemple réel : *Designer produit sénior (Senior Product Designer)* — Montréal · ∅ · parue le 2026-08-21.
66 66
67 67 ## Fréquence & budgets
68 68
@@ -72,15 +72,15 @@ Exemple réel : *Développeur(euse) croissance - GTM* — Québec · ∅ · paru
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 - **Offres en base** : 8 (dont **8 actives**, 0 masquées comme doublons `dup_of`)
78 - **Salaire** : 0/8 actives (0 %)
79 - **GPS** : 8/8 actives (100 %)
80 - **Mode** : 0/8 actives (0 %)
81 - **Parution** : 8/8 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:41 — trouvées 10, +0, ~4, -0
83 - **Syncs enregistrés** (`sync_log`) : 27
77 +- **Offres en base** : 10 (dont **9 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 0/9 actives (0 %)
79 +- **GPS** : 9/9 actives (100 %)
80 +- **Mode** : 0/9 actives (0 %)
81 +- **Parution** : 9/9 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:04 — trouvées 11, +0, ~4, -0
83 +- **Syncs enregistrés** (`sync_log`) : 86
84 84
85 85 ## Erreurs & dépannage
86 86
added docs/connecteurs/bpa.md +111 −0
@@ -0,0 +1,111 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/bpa.md
7 +Rôle : Fiche connecteur — BPA (Experts-conseils) (employeur direct, ATS dayforce)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# BPA (Experts-conseils) (`bpa`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`dayforce`](ats-dayforce.md) · Statut registre : actif · Connecteur : `jobka/connectors/bpa.py`
16 +
17 +## Description
18 +
19 +- **Site** : [BPA (Experts-conseils)]()
20 +- **Page carrières** : https://jobs.dayforcehcm.com/fr-CA/bpapointca/CANDIDATEPORTAL
21 +- **Secteurs** : Ingénierie
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-dayforce.md`](ats-dayforce.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `BOARD` | `CANDIDATEPORTAL` |
33 +| `CULTURE` | `fr-CA` |
34 +| `EMPLOYER` | `BPA (Experts-conseils)` |
35 +| `NS` | `bpapointca` |
36 +- **Throttle** : 0.8 s entre requêtes.
37 +- **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).
38 +
39 +## Champs → schéma
40 +
41 +Complétude mesurée sur les **51 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 +
43 +| Champ (`jobs.*`) | Rôle | Complétude |
44 +|---|---|---|
45 +| `title` — Titre | titre du poste | 100 % |
46 +| `employer` — Employeur | nom de l'entreprise | 100 % |
47 +| `url` — URL | lien direct vers l'offre originale | 100 % |
48 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
49 +| `city` — Ville | municipalité normalisée | 100 % |
50 +| `region` — Région | région administrative | 100 % |
51 +| `address` — Adresse | adresse du lieu de travail | 100 % |
52 +| `postal_code` — Code postal | code postal si publié | 0 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 0 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
57 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
60 +| `date_deadline` — Date limite | date limite pour postuler | 2 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 53 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 +
67 +Exemple réel : *Contrôleur - Contrôleuse de projet - Génie-conseil* — Laval · ∅ · parue le 2026-08-21.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 0.8 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_DAYFORCE_DETAIL_LIMIT` | `80` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 51 (dont **51 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 0/51 actives (0 %)
86 +- **GPS** : 51/51 actives (100 %)
87 +- **Mode** : 0/51 actives (0 %)
88 +- **Parution** : 51/51 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:04 — trouvées 51, +0, ~1, -0
90 +- **Syncs enregistrés** (`sync_log`) : 5
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync bpa` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='bpa' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 BPA (Experts-conseils) » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/brandmomentum.md +13 −13
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/brandmomentum.md
7 7 Rôle : Fiche connecteur — Brand Momentum (employeur direct, ATS breezy)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **30 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **32 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -50,8 +50,8 @@ Complétude mesurée sur les **30 offres actives** de la source (base live, 2026
50 50 | `postal_code` — Code postal | code postal si publié | 0 % |
51 51 | `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
52 52 | `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 70 % |
54 | `salary_label` — Libellé salaire | texte salarial original | 73 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 72 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 75 % |
55 55 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 56 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 57 | `date_posted` — Date de parution | ISO 8601 | 100 % |
@@ -62,7 +62,7 @@ Complétude mesurée sur les **30 offres actives** de la source (base live, 2026
62 62 | `apply_url` — Candidature | lien de candidature directe | 0 % |
63 63 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 64
65 Exemple réel : *Représentant(e) des ventes – Roadshow* — Laval · $22+ / hour · parue le 2026-08-18.
65 +Exemple réel : *Représentant(e) des ventes – Roadshow* — Laval · $22+ / hour · parue le 2026-08-21.
66 66
67 67 ## Fréquence & budgets
68 68
@@ -72,15 +72,15 @@ Exemple réel : *Représentant(e) des ventes – Roadshow* — Laval · $22+ / h
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 - **Offres en base** : 30 (dont **30 actives**, 0 masquées comme doublons `dup_of`)
78 - **Salaire** : 21/30 actives (70 %)
79 - **GPS** : 30/30 actives (100 %)
80 - **Mode** : 0/30 actives (0 %)
81 - **Parution** : 30/30 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:41 — trouvées 30, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 28
77 +- **Offres en base** : 32 (dont **32 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 23/32 actives (72 %)
79 +- **GPS** : 32/32 actives (100 %)
80 +- **Mode** : 0/32 actives (0 %)
81 +- **Parution** : 32/32 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:04 — trouvées 32, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 87
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/broadsign.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/broadsign.md
7 7 Rôle : Fiche connecteur — Broadsign (employeur direct, ATS greenhouse)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Sales Director, Platform Sales - North America* — Montréal
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 4 (dont **4 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/4 actives (0 %)
79 79 - **GPS** : 4/4 actives (100 %)
80 80 - **Mode** : 4/4 actives (100 %)
81 81 - **Parution** : 4/4 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:41 — trouvées 4, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 27
82 +- **Dernier sync** : 2026-08-22 21:04 — trouvées 4, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 86
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/broccolini.md +14 −14
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/broccolini.md
7 7 Rôle : Fiche connecteur — Broccolini (employeur direct, ATS bamboohr)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,14 +36,14 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **23 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **22 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
43 43 | `title` — Titre | titre du poste | 100 % |
44 44 | `employer` — Employeur | nom de l'entreprise | 100 % |
45 45 | `url` — URL | lien direct vers l'offre originale | 100 % |
46 | `description` — Description | texte complet (HTML nettoyé) | 96 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 95 % |
47 47 | `city` — Ville | municipalité normalisée | 100 % |
48 48 | `region` — Région | région administrative | 100 % |
49 49 | `address` — Adresse | adresse du lieu de travail | 0 % |
@@ -53,11 +53,11 @@ Complétude mesurée sur les **23 offres actives** de la source (base live, 2026
53 53 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 54 | `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 55 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 96 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 95 % |
57 57 | `date_posted` — Date de parution | ISO 8601 | 100 % |
58 58 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 87 % |
60 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 96 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 86 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 95 % |
61 61 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 62 | `apply_url` — Candidature | lien de candidature directe | 0 % |
63 63 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
@@ -77,15 +77,15 @@ Exemple réel : *Concepteur(trice) en architecture \| Architectural Designer*
77 77
78 78 ## Volumétrie & complétude live
79 79
80 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 81
82 - **Offres en base** : 23 (dont **23 actives**, 0 masquées comme doublons `dup_of`)
83 - **Salaire** : 0/23 actives (0 %)
84 - **GPS** : 23/23 actives (100 %)
85 - **Mode** : 23/23 actives (100 %)
86 - **Parution** : 23/23 actives (100 %)
87 - **Dernier sync** : 2026-08-19 03:41 — trouvées 23, +0, ~0, -0
88 - **Syncs enregistrés** (`sync_log`) : 15
82 +- **Offres en base** : 23 (dont **22 actives**, 0 masquées comme doublons `dup_of`)
83 +- **Salaire** : 0/22 actives (0 %)
84 +- **GPS** : 22/22 actives (100 %)
85 +- **Mode** : 22/22 actives (100 %)
86 +- **Parution** : 22/22 actives (100 %)
87 +- **Dernier sync** : 2026-08-22 21:04 — trouvées 22, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 74
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/caaquebec.md +10 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/caaquebec.md
7 7 Rôle : Fiche connecteur — CAA-Québec (employeur direct, ATS workday)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **19 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **19 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -79,19 +79,23 @@ Exemple réel : *Représentant(e) en assurance voyage (Certifié(e) AMF)* — Mo
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 19 (dont **19 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 4/19 actives (21 %)
86 86 - **GPS** : 19/19 actives (100 %)
87 87 - **Mode** : 0/19 actives (0 %)
88 88 - **Parution** : 19/19 actives (100 %)
89 - **Dernier sync** : 2026-08-19 03:41 — trouvées 19, +0, ~8, -0
90 - **Syncs enregistrés** (`sync_log`) : 15
89 +- **Dernier sync** : 2026-08-22 21:04 — trouvées 19, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 74
91 91
92 92 ## Erreurs & dépannage
93 93
94 Aucune erreur dans `sync_log` pour cette source.
94 +Erreurs relevées dans `sync_log` :
95 +
96 +| Erreur | Occurrences | Dernière fois |
97 +|---|---|---|
98 +| Expecting value: line 1 column 1 (char 0) | 1 | 2026-08-22 03:20 |
95 99
96 100 - Rejouer un sync isolé : `.venv/bin/python run.py sync caaquebec` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='caaquebec' ORDER BY ts DESC LIMIT 5;"`
97 101 - 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`.
modified docs/connecteurs/cae.md +18 −14
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cae.md
7 7 Rôle : Fiche connecteur — CAE (employeur direct, ATS workday)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **55 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **56 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -46,8 +46,8 @@ Complétude mesurée sur les **55 offres actives** de la source (base live, 2026
46 46 | `employer` — Employeur | nom de l'entreprise | 100 % |
47 47 | `url` — URL | lien direct vers l'offre originale | 100 % |
48 48 | `description` — Description | texte complet (HTML nettoyé) | 100 % |
49 | `city` — Ville | municipalité normalisée | 87 % |
50 | `region` — Région | région administrative | 87 % |
49 +| `city` — Ville | municipalité normalisée | 88 % |
50 +| `region` — Région | région administrative | 88 % |
51 51 | `address` — Adresse | adresse du lieu de travail | 0 % |
52 52 | `postal_code` — Code postal | code postal si publié | 0 % |
53 53 | `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
@@ -58,7 +58,7 @@ Complétude mesurée sur les **55 offres actives** de la source (base live, 2026
58 58 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 59 | `date_posted` — Date de parution | ISO 8601 | 100 % |
60 60 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 75 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 73 % |
62 62 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 63 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
@@ -79,19 +79,23 @@ Exemple réel : *Director, Business Development, D&S Canada* — ∅ · $184,600
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 56 (dont **55 actives**, 0 masquées comme doublons `dup_of`)
85 - **Salaire** : 4/55 actives (7 %)
86 - **GPS** : 51/55 actives (93 %)
87 - **Mode** : 0/55 actives (0 %)
88 - **Parution** : 55/55 actives (100 %)
89 - **Dernier sync** : 2026-08-19 03:42 — trouvées 55, +0, ~27, -0
90 - **Syncs enregistrés** (`sync_log`) : 30
84 +- **Offres en base** : 59 (dont **56 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 4/56 actives (7 %)
86 +- **GPS** : 52/56 actives (93 %)
87 +- **Mode** : 0/56 actives (0 %)
88 +- **Parution** : 56/56 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:04 — trouvées 56, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 89
91 91
92 92 ## Erreurs & dépannage
93 93
94 Aucune erreur dans `sync_log` pour cette source.
94 +Erreurs relevées dans `sync_log` :
95 +
96 +| Erreur | Occurrences | Dernière fois |
97 +|---|---|---|
98 +| Expecting value: line 1 column 1 (char 0) | 1 | 2026-08-22 03:20 |
95 99
96 100 - Rejouer un sync isolé : `.venv/bin/python run.py sync cae` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='cae' ORDER BY ts DESC LIMIT 5;"`
97 101 - 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`.
added docs/connecteurs/californiaclosets.md +109 −0
@@ -0,0 +1,109 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/californiaclosets.md
7 +Rôle : Fiche connecteur — California Closets (employeur direct, ATS smartrecruiters)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# California Closets (`californiaclosets`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`smartrecruiters`](ats-smartrecruiters.md) · Statut registre : actif · Connecteur : `jobka/connectors/californiaclosets.py`
16 +
17 +## Description
18 +
19 +- **Site** : [California Closets]()
20 +- **Page carrières** : https://jobs.smartrecruiters.com/company/californiaclosets
21 +- **Secteurs** : Fabrication
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
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).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `COMPANY` | `californiaclosets` |
33 +| `EMPLOYER` | `California Closets` |
34 +- **Throttle** : 0.7 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 100 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 +
65 +Exemple réel : *Production Operator - Montréal* — Montréal · ∅ · parue le 2026-07-17.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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 +- **Budgets / plafonds (variables d'environnement)** :
72 +
73 +| Variable | Défaut |
74 +|---|---|
75 +| `JOBKA_SR_DETAIL_LIMIT` | `300` |
76 +- 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 +## Volumétrie & complétude live
79 +
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 +
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** : 0/1 actives (0 %)
86 +- **Parution** : 1/1 actives (100 %)
87 +- **Dernier sync** : 2026-08-22 21:04 — trouvées 1, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 6
89 +
90 +## Erreurs & dépannage
91 +
92 +Aucune erreur dans `sync_log` pour cette source.
93 +
94 +- Rejouer un sync isolé : `.venv/bin/python run.py sync californiaclosets` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='californiaclosets' ORDER BY ts DESC LIMIT 5;"`
95 +- 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`.
96 +
97 +## Licence / conformité
98 +
99 +**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 California Closets » 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.
100 +
101 +## Historique
102 +
103 +**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 :
104 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
105 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
106 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
107 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
108 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
109 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/canada_global.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/canada_global.md
7 7 Rôle : Fiche connecteur — Canada Global Recruitment (employeur direct, ATS breezy)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *General labor* — Montreal - QC · ∅ · parue le 2026-06-27.
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/1 actives (0 %)
79 79 - **GPS** : 0/1 actives (0 %)
80 80 - **Mode** : 0/1 actives (0 %)
81 81 - **Parution** : 1/1 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:42 — trouvées 1, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 27
82 +- **Dernier sync** : 2026-08-22 21:04 — trouvées 1, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 86
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/canadiantirecorporation.md +11 −7
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/canadiantirecorporation.md
7 7 Rôle : Fiche connecteur — Canadian Tire (employeur direct, ATS workday)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -64,7 +64,7 @@ Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 Exemple réel : *Assistant Manager* — Lévis · Our typical hiring range is between $34,800 and $43,500. Salary decisions are also depende… · parue le 2026-07-27.
67 +Exemple réel : *Store Manager* — Gaspe · Our typical hiring range is between $55,000 and $60,000. Salary decisions are also depende… · parue le 2026-08-20.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,19 +79,23 @@ Exemple réel : *Assistant Manager* — Lévis · Our typical hiring range is be
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 9 (dont **9 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 5/9 actives (56 %)
86 86 - **GPS** : 9/9 actives (100 %)
87 87 - **Mode** : 0/9 actives (0 %)
88 88 - **Parution** : 9/9 actives (100 %)
89 - **Dernier sync** : 2026-08-19 03:42 — trouvées 9, +0, ~3, -0
90 - **Syncs enregistrés** (`sync_log`) : 15
89 +- **Dernier sync** : 2026-08-22 21:04 — trouvées 9, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 74
91 91
92 92 ## Erreurs & dépannage
93 93
94 Aucune erreur dans `sync_log` pour cette source.
94 +Erreurs relevées dans `sync_log` :
95 +
96 +| Erreur | Occurrences | Dernière fois |
97 +|---|---|---|
98 +| Expecting value: line 1 column 1 (char 0) | 1 | 2026-08-22 03:20 |
95 99
96 100 - Rejouer un sync isolé : `.venv/bin/python run.py sync canadiantirecorporation` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='canadiantirecorporation' ORDER BY ts DESC LIMIT 5;"`
97 101 - 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`.
modified docs/connecteurs/capreit.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/capreit.md
7 7 Rôle : Fiche connecteur — CAPREIT (employeur direct, ATS icims)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **10 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **10 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Operations Manager 1* — Montréal · ∅ · parue le 2026-07-
77 77
78 78 ## Volumétrie & complétude live
79 79
80 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 10 (dont **10 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/10 actives (0 %)
84 84 - **GPS** : 10/10 actives (100 %)
85 85 - **Mode** : 0/10 actives (0 %)
86 86 - **Parution** : 10/10 actives (100 %)
87 - **Dernier sync** : 2026-08-19 03:42 — trouvées 10, +0, ~0, -0
88 - **Syncs enregistrés** (`sync_log`) : 14
87 +- **Dernier sync** : 2026-08-22 21:04 — trouvées 10, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 73
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/cascades.md +13 −13
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cascades.md
7 7 Rôle : Fiche connecteur — Cascades (employeur direct, ATS successfactors)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **100 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **100 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -48,15 +48,15 @@ Complétude mesurée sur les **100 offres actives** de la source (base live, 202
48 48 | `region` — Région | région administrative | 100 % |
49 49 | `address` — Adresse | adresse du lieu de travail | 0 % |
50 50 | `postal_code` — Code postal | code postal si publié | 0 % |
51 | `work_mode` — Mode | presentiel / hybride / teletravail | 12 % |
52 | `employment_type` — Type | temps_plein / temps_partiel / … | 12 % |
53 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 77 % |
54 | `salary_label` — Libellé salaire | texte salarial original | 77 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 14 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 11 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 75 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 75 % |
55 55 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 56 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 57 | `date_posted` — Date de parution | ISO 8601 | 0 % |
58 58 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 65 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 63 % |
60 60 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 61 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 62 | `apply_url` — Candidature | lien de candidature directe | 0 % |
@@ -77,15 +77,15 @@ Exemple réel : *Électrotechnicien de nuit* — Granby · Salaire horaire de 43
77 77
78 78 ## Volumétrie & complétude live
79 79
80 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 81
82 - **Offres en base** : 101 (dont **100 actives**, 0 masquées comme doublons `dup_of`)
83 - **Salaire** : 77/100 actives (77 %)
82 +- **Offres en base** : 109 (dont **100 actives**, 0 masquées comme doublons `dup_of`)
83 +- **Salaire** : 75/100 actives (75 %)
84 84 - **GPS** : 100/100 actives (100 %)
85 - **Mode** : 12/100 actives (12 %)
85 +- **Mode** : 14/100 actives (14 %)
86 86 - **Parution** : 0/100 actives (0 %)
87 - **Dernier sync** : 2026-08-19 03:42 — trouvées 100, +0, ~0, -0
88 - **Syncs enregistrés** (`sync_log`) : 15
87 +- **Dernier sync** : 2026-08-22 21:04 — trouvées 100, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 74
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/cdpq.md +12 −12
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cdpq.md
7 7 Rôle : Fiche connecteur — CDPQ — Caisse de dépôt et placement du Québec (employeur direct, ATS workday)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **28 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **25 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -51,7 +51,7 @@ Complétude mesurée sur les **28 offres actives** de la source (base live, 2026
51 51 | `address` — Adresse | adresse du lieu de travail | 0 % |
52 52 | `postal_code` — Code postal | code postal si publié | 0 % |
53 53 | `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 | `employment_type` — Type | temps_plein / temps_partiel / … | 86 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 84 % |
55 55 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
56 56 | `salary_label` — Libellé salaire | texte salarial original | 0 % |
57 57 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
@@ -64,7 +64,7 @@ Complétude mesurée sur les **28 offres actives** de la source (base live, 2026
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 Exemple réel : *Analyste, Divulgation financière – Comptabilité** — Montréal · ∅ · parue le 2026-08-18.
67 +Exemple réel : *Analyste principal(e), Capital de risque* — Montréal · ∅ · parue le 2026-08-21.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Analyste, Divulgation financière – Comptabilité** — Montr
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 28 (dont **28 actives**, 0 masquées comme doublons `dup_of`)
85 - **Salaire** : 0/28 actives (0 %)
86 - **GPS** : 28/28 actives (100 %)
87 - **Mode** : 0/28 actives (0 %)
88 - **Parution** : 28/28 actives (100 %)
89 - **Dernier sync** : 2026-08-19 03:42 — trouvées 28, +0, ~20, -0
90 - **Syncs enregistrés** (`sync_log`) : 14
84 +- **Offres en base** : 29 (dont **25 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 0/25 actives (0 %)
86 +- **GPS** : 25/25 actives (100 %)
87 +- **Mode** : 0/25 actives (0 %)
88 +- **Parution** : 25/25 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:04 — trouvées 25, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 73
91 91
92 92 ## Erreurs & dépannage
93 93
added docs/connecteurs/centremultiethniquedequbec.md +109 −0
@@ -0,0 +1,109 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/centremultiethniquedequbec.md
7 +Rôle : Fiche connecteur — Centre multiethnique de Québec (employeur direct, ATS smartrecruiters)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Centre multiethnique de Québec (`centremultiethniquedequbec`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`smartrecruiters`](ats-smartrecruiters.md) · Statut registre : actif · Connecteur : `jobka/connectors/centremultiethniquedequbec.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Centre multiethnique de Québec]()
20 +- **Page carrières** : https://jobs.smartrecruiters.com/company/centremultiethniquedequbec
21 +- **Secteurs** : Services sociaux
22 +- **Région** : Québec
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
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).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `COMPANY` | `centremultiethniquedequbec` |
33 +| `EMPLOYER` | `Centre multiethnique de Québec` |
34 +- **Throttle** : 0.7 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 100 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 100 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 100 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 100 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 0 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 +
65 +Exemple réel : *Intervenant.e à l’accueil et à l’installation des personnes réfugiées - volet logement* — Québec · Salaire horaire de base : $20.75 · parue le 2022-05-11.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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 +- **Budgets / plafonds (variables d'environnement)** :
72 +
73 +| Variable | Défaut |
74 +|---|---|
75 +| `JOBKA_SR_DETAIL_LIMIT` | `300` |
76 +- 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 +## Volumétrie & complétude live
79 +
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 +
82 +- **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
83 +- **Salaire** : 1/1 actives (100 %)
84 +- **GPS** : 1/1 actives (100 %)
85 +- **Mode** : 1/1 actives (100 %)
86 +- **Parution** : 1/1 actives (100 %)
87 +- **Dernier sync** : 2026-08-22 21:04 — trouvées 1, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 6
89 +
90 +## Erreurs & dépannage
91 +
92 +Aucune erreur dans `sync_log` pour cette source.
93 +
94 +- Rejouer un sync isolé : `.venv/bin/python run.py sync centremultiethniquedequbec` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='centremultiethniquedequbec' ORDER BY ts DESC LIMIT 5;"`
95 +- 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`.
96 +
97 +## Licence / conformité
98 +
99 +**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 Centre multiethnique de Québec » 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.
100 +
101 +## Historique
102 +
103 +**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 :
104 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
105 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
106 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
107 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
108 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
109 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/cfmontreal.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cfmontreal.md
7 7 Rôle : Fiche connecteur — CF Montréal (employeur direct, ATS smartrecruiters)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Chef(e) de projets et production marketing - TEMPORAIRE / Marke
77 77
78 78 ## Volumétrie & complétude live
79 79
80 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 8 (dont **8 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/8 actives (0 %)
84 84 - **GPS** : 8/8 actives (100 %)
85 85 - **Mode** : 0/8 actives (0 %)
86 86 - **Parution** : 8/8 actives (100 %)
87 - **Dernier sync** : 2026-08-19 03:42 — trouvées 8, +0, ~0, -0
88 - **Syncs enregistrés** (`sync_log`) : 26
87 +- **Dernier sync** : 2026-08-22 21:04 — trouvées 8, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 85
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/cgi.md +20 −16
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cgi.md
7 7 Rôle : Fiche connecteur — CGI (employeur direct, ATS njoyn)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -40,31 +40,31 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
40 40
41 41 ## Champs → schéma
42 42
43 Complétude mesurée sur les **127 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
43 +Complétude mesurée sur les **316 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
44 44
45 45 | Champ (`jobs.*`) | Rôle | Complétude |
46 46 |---|---|---|
47 47 | `title` — Titre | titre du poste | 100 % |
48 48 | `employer` — Employeur | nom de l'entreprise | 100 % |
49 49 | `url` — URL | lien direct vers l'offre originale | 100 % |
50 | `description` — Description | texte complet (HTML nettoyé) | 9 % |
50 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
51 51 | `city` — Ville | municipalité normalisée | 100 % |
52 52 | `region` — Région | région administrative | 100 % |
53 53 | `address` — Adresse | adresse du lieu de travail | 0 % |
54 54 | `postal_code` — Code postal | code postal si publié | 0 % |
55 55 | `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
56 | `employment_type` — Type | temps_plein / temps_partiel / … | 8 % |
56 +| `employment_type` — Type | temps_plein / temps_partiel / … | 9 % |
57 57 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
58 58 | `salary_label` — Libellé salaire | texte salarial original | 0 % |
59 59 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
60 60 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
61 61 | `date_posted` — Date de parution | ISO 8601 | 0 % |
62 62 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
63 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 66 % |
64 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 0 % |
63 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 59 % |
64 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 2 % |
65 65 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
66 66 | `apply_url` — Candidature | lien de candidature directe | 0 % |
67 | `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
67 +| `gps` — GPS | lat/lng (géocodage sans invention) | 95 % |
68 68
69 69 Exemple réel : *Conseiller en architecture de solution Infrastructure Cloud AWS* — Québec · ∅ · parue le ∅.
70 70
@@ -81,19 +81,23 @@ Exemple réel : *Conseiller en architecture de solution Infrastructure Cloud AWS
81 81
82 82 ## Volumétrie & complétude live
83 83
84 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
84 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
85 85
86 - **Offres en base** : 127 (dont **127 actives**, 0 masquées comme doublons `dup_of`)
87 - **Salaire** : 0/127 actives (0 %)
88 - **GPS** : 0/127 actives (0 %)
89 - **Mode** : 0/127 actives (0 %)
90 - **Parution** : 0/127 actives (0 %)
91 - **Dernier sync** : 2026-08-19 05:11 — trouvées 127, +127, ~0, -0
92 - **Syncs enregistrés** (`sync_log`) : 1
86 +- **Offres en base** : 336 (dont **316 actives**, 0 masquées comme doublons `dup_of`)
87 +- **Salaire** : 0/316 actives (0 %)
88 +- **GPS** : 300/316 actives (95 %)
89 +- **Mode** : 0/316 actives (0 %)
90 +- **Parution** : 0/316 actives (0 %)
91 +- **Dernier sync** : 2026-08-22 21:06 — trouvées 315, +0, ~0, -0
92 +- **Syncs enregistrés** (`sync_log`) : 63
93 93
94 94 ## Erreurs & dépannage
95 95
96 Aucune erreur dans `sync_log` pour cette source.
96 +Erreurs relevées dans `sync_log` :
97 +
98 +| Erreur | Occurrences | Dernière fois |
99 +|---|---|---|
100 +| SCRAPFLY_API_KEY manquant (voir .env) | 1 | 2026-08-19 06:36 |
97 101
98 102 - Rejouer un sync isolé : `.venv/bin/python run.py sync cgi` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='cgi' ORDER BY ts DESC LIMIT 5;"`
99 103 - 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`.
modified docs/connecteurs/charger_logistics_inc.md +12 −12
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/charger_logistics_inc.md
7 7 Rôle : Fiche connecteur — Charger Logistics (employeur direct, ATS workable)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -49,7 +49,7 @@ Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-
49 49 | `address` — Adresse | adresse du lieu de travail | 0 % |
50 50 | `postal_code` — Code postal | code postal si publié | 0 % |
51 51 | `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
52 | `employment_type` — Type | temps_plein / temps_partiel / … | 0 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 50 % |
53 53 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 54 | `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 55 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
@@ -62,7 +62,7 @@ Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-
62 62 | `apply_url` — Candidature | lien de candidature directe | 100 % |
63 63 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 64
65 Exemple réel : *Security Guard (Trucking Yard)* — Québec · ∅ · parue le 2026-08-14.
65 +Exemple réel : *Security Guard (Trucking Yard)* — Québec · ∅ · parue le 2026-08-21.
66 66
67 67 ## Fréquence & budgets
68 68
@@ -72,15 +72,15 @@ Exemple réel : *Security Guard (Trucking Yard)* — Québec · ∅ · parue le
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 - **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
78 - **Salaire** : 0/1 actives (0 %)
79 - **GPS** : 1/1 actives (100 %)
80 - **Mode** : 0/1 actives (0 %)
81 - **Parution** : 1/1 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:42 — trouvées 1, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 26
77 +- **Offres en base** : 4 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 0/2 actives (0 %)
79 +- **GPS** : 2/2 actives (100 %)
80 +- **Mode** : 0/2 actives (0 %)
81 +- **Parution** : 2/2 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:06 — trouvées 2, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 85
84 84
85 85 ## Erreurs & dépannage
86 86
added docs/connecteurs/charlotte_tilbury.md +104 −0
@@ -0,0 +1,104 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/charlotte_tilbury.md
7 +Rôle : Fiche connecteur — Charlotte Tilbury (employeur direct, ATS workable)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Charlotte Tilbury (`charlotte_tilbury`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`workable`](ats-workable.md) · Statut registre : actif · Connecteur : `jobka/connectors/charlotte_tilbury.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Charlotte Tilbury]()
20 +- **Page carrières** : https://apply.workable.com/charlotte-tilbury
21 +- **Secteurs** : Commerce de détail
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-workable.md`](ats-workable.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Charlotte Tilbury` |
33 +| `ORG` | `charlotte-tilbury` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 +
65 +Exemple réel : *Brand Expert - Montreal,Laval Qc (Temps Partiel)* — Montréal · ∅ · parue le 2026-06-08.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- 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.
72 +
73 +## Volumétrie & complétude live
74 +
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 +
77 +- **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 0/2 actives (0 %)
79 +- **GPS** : 2/2 actives (100 %)
80 +- **Mode** : 0/2 actives (0 %)
81 +- **Parution** : 2/2 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:06 — trouvées 2, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 5
84 +
85 +## Erreurs & dépannage
86 +
87 +Aucune erreur dans `sync_log` pour cette source.
88 +
89 +- Rejouer un sync isolé : `.venv/bin/python run.py sync charlotte_tilbury` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='charlotte_tilbury' ORDER BY ts DESC LIMIT 5;"`
90 +- 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`.
91 +
92 +## Licence / conformité
93 +
94 +**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 Charlotte Tilbury » 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.
95 +
96 +## Historique
97 +
98 +**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 :
99 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
100 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
101 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
102 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
103 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
104 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/chu_quebec.md +14 −14
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/chu_quebec.md
7 7 Rôle : Fiche connecteur — CHU de Québec — Université Laval (employeur direct, ATS wpjobmanager)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **60 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **59 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -51,9 +51,9 @@ Complétude mesurée sur les **60 offres actives** de la source (base live, 2026
51 51 | `address` — Adresse | adresse du lieu de travail | 0 % |
52 52 | `postal_code` — Code postal | code postal si publié | 0 % |
53 53 | `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 | `employment_type` — Type | temps_plein / temps_partiel / … | 57 % |
55 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 10 % |
56 | `salary_label` — Libellé salaire | texte salarial original | 10 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 56 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 7 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 7 % |
57 57 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 2 % |
58 58 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 59 | `date_posted` — Date de parution | ISO 8601 | 100 % |
@@ -62,7 +62,7 @@ Complétude mesurée sur les **60 offres actives** de la source (base live, 2026
62 62 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 63 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 64 | `apply_url` — Candidature | lien de candidature directe | 0 % |
65 | `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 67 Exemple réel : *Conseiller.ère cadre – Partenaire d’affaires – Concours 2026-49* — Québec · Selon les normes applicables au personnel d’encadrement du réseau de la santé et des servi… · parue le 2026-08-19.
68 68
@@ -79,15 +79,15 @@ Exemple réel : *Conseiller.ère cadre – Partenaire d’affaires – Concours
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 60 (dont **60 actives**, 0 masquées comme doublons `dup_of`)
85 - **Salaire** : 6/60 actives (10 %)
86 - **GPS** : 0/60 actives (0 %)
87 - **Mode** : 0/60 actives (0 %)
88 - **Parution** : 60/60 actives (100 %)
89 - **Dernier sync** : 2026-08-19 04:51 — trouvées 60, +60, ~0, -0
90 - **Syncs enregistrés** (`sync_log`) : 1
84 +- **Offres en base** : 64 (dont **59 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 4/59 actives (7 %)
86 +- **GPS** : 59/59 actives (100 %)
87 +- **Mode** : 0/59 actives (0 %)
88 +- **Parution** : 59/59 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:06 — trouvées 59, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 60
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/chum.md +15 −15
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/chum.md
7 7 Rôle : Fiche connecteur — CHUM (employeur direct, ATS wpjobmanager)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **25 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **29 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -51,20 +51,20 @@ Complétude mesurée sur les **25 offres actives** de la source (base live, 2026
51 51 | `address` — Adresse | adresse du lieu de travail | 0 % |
52 52 | `postal_code` — Code postal | code postal si publié | 0 % |
53 53 | `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 | `employment_type` — Type | temps_plein / temps_partiel / … | 12 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 10 % |
55 55 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
56 56 | `salary_label` — Libellé salaire | texte salarial original | 0 % |
57 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 4 % |
57 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 3 % |
58 58 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 59 | `date_posted` — Date de parution | ISO 8601 | 100 % |
60 60 | `date_deadline` — Date limite | date limite pour postuler | 100 % |
61 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 96 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 97 % |
62 62 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 63 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 64 | `apply_url` — Candidature | lien de candidature directe | 0 % |
65 | `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 Exemple réel : *Chef de service – Chef de service Systèmes d’information et gestion de projets* — Montréal · ∅ · parue le 2026-08-17.
67 +Exemple réel : *Technicien(ne) en administration – Laboratoire Optilab* — Montréal · ∅ · parue le 2026-08-21.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Chef de service – Chef de service Systèmes d’information e
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 25 (dont **25 actives**, 24 masquées comme doublons `dup_of`)
85 - **Salaire** : 0/25 actives (0 %)
86 - **GPS** : 0/25 actives (0 %)
87 - **Mode** : 0/25 actives (0 %)
88 - **Parution** : 25/25 actives (100 %)
89 - **Dernier sync** : 2026-08-19 04:52 — trouvées 25, +25, ~0, -0
90 - **Syncs enregistrés** (`sync_log`) : 1
84 +- **Offres en base** : 34 (dont **29 actives**, 27 masquées comme doublons `dup_of`)
85 +- **Salaire** : 0/29 actives (0 %)
86 +- **GPS** : 29/29 actives (100 %)
87 +- **Mode** : 0/29 actives (0 %)
88 +- **Parution** : 29/29 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:06 — trouvées 29, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 60
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/churchdwight.md +10 −6
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/churchdwight.md
7 7 Rôle : Fiche connecteur — Church & Dwight Canada (employeur direct, ATS workday)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -79,19 +79,23 @@ Exemple réel : *Electromécanicien(ne)* — Montréal · ∅ · parue le 2026-0
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 6 (dont **6 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 0/6 actives (0 %)
86 86 - **GPS** : 6/6 actives (100 %)
87 87 - **Mode** : 0/6 actives (0 %)
88 88 - **Parution** : 6/6 actives (100 %)
89 - **Dernier sync** : 2026-08-19 03:42 — trouvées 6, +0, ~2, -0
90 - **Syncs enregistrés** (`sync_log`) : 14
89 +- **Dernier sync** : 2026-08-22 21:06 — trouvées 6, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 73
91 91
92 92 ## Erreurs & dépannage
93 93
94 Aucune erreur dans `sync_log` pour cette source.
94 +Erreurs relevées dans `sync_log` :
95 +
96 +| Erreur | Occurrences | Dernière fois |
97 +|---|---|---|
98 +| Expecting value: line 1 column 1 (char 0) | 1 | 2026-08-22 03:22 |
95 99
96 100 - Rejouer un sync isolé : `.venv/bin/python run.py sync churchdwight` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='churchdwight' ORDER BY ts DESC LIMIT 5;"`
97 101 - 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`.
modified docs/connecteurs/cibc.md +13 −12
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cibc.md
7 7 Rôle : Fiche connecteur — Banque CIBC (employeur direct, ATS workday)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **65 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **56 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -50,7 +50,7 @@ Complétude mesurée sur les **65 offres actives** de la source (base live, 2026
50 50 | `region` — Région | région administrative | 100 % |
51 51 | `address` — Adresse | adresse du lieu de travail | 0 % |
52 52 | `postal_code` — Code postal | code postal si publié | 0 % |
53 | `work_mode` — Mode | presentiel / hybride / teletravail | 3 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 4 % |
54 54 | `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
55 55 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
56 56 | `salary_label` — Libellé salaire | texte salarial original | 0 % |
@@ -64,7 +64,7 @@ Complétude mesurée sur les **65 offres actives** de la source (base live, 2026
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 Exemple réel : *Relationship Manager, Commercial Banking-Bilingual* — Rouyn-Noranda · ∅ · parue le 2026-08-18.
67 +Exemple réel : *Investment Specialist - Montréal - Bilingual* — Saint Leonard · ∅ · parue le 2026-08-21.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Relationship Manager, Commercial Banking-Bilingual* — Rouyn-N
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 69 (dont **65 actives**, 0 masquées comme doublons `dup_of`)
85 - **Salaire** : 0/65 actives (0 %)
86 - **GPS** : 65/65 actives (100 %)
87 - **Mode** : 2/65 actives (3 %)
88 - **Parution** : 65/65 actives (100 %)
89 - **Dernier sync** : 2026-08-19 03:44 — trouvées 65, +0, ~61, -0
90 - **Syncs enregistrés** (`sync_log`) : 26
84 +- **Offres en base** : 82 (dont **56 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 0/56 actives (0 %)
86 +- **GPS** : 56/56 actives (100 %)
87 +- **Mode** : 2/56 actives (4 %)
88 +- **Parution** : 56/56 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:06 — trouvées 56, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 85
91 91
92 92 ## Erreurs & dépannage
93 93
@@ -95,6 +95,7 @@ Erreurs relevées dans `sync_log` :
95 95
96 96 | Erreur | Occurrences | Dernière fois |
97 97 |---|---|---|
98 +| Expecting value: line 1 column 1 (char 0) | 1 | 2026-08-22 03:22 |
98 99 | HTTPSConnectionPool(host='cibc.wd3.myworkdayjobs.com', port=443): Read timed out. (read ti… | 1 | 2026-08-17 21:23 |
99 100
100 101 - Rejouer un sync isolé : `.venv/bin/python run.py sync cibc` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='cibc' ORDER BY ts DESC LIMIT 5;"`
modified docs/connecteurs/cima2.md +12 −12
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cima2.md
7 7 Rôle : Fiche connecteur — CIMA+ (employeur direct, ATS smartrecruiters)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **221 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **239 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -48,7 +48,7 @@ Complétude mesurée sur les **221 offres actives** de la source (base live, 202
48 48 | `region` — Région | région administrative | 100 % |
49 49 | `address` — Adresse | adresse du lieu de travail | 0 % |
50 50 | `postal_code` — Code postal | code postal si publié | 0 % |
51 | `work_mode` — Mode | presentiel / hybride / teletravail | 84 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 85 % |
52 52 | `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 53 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 54 | `salary_label` — Libellé salaire | texte salarial original | 0 % |
@@ -62,7 +62,7 @@ Complétude mesurée sur les **221 offres actives** de la source (base live, 202
62 62 | `apply_url` — Candidature | lien de candidature directe | 0 % |
63 63 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 64
65 Exemple réel : *Technicienne ou technicien, inspection de structures de télécommunications - Montréal ou L…* — Montréal · ∅ · parue le 2026-08-18.
65 +Exemple réel : *Conseillère ou Conseiller senior en santé et sécurité* — Québec · ∅ · parue le 2026-08-21.
66 66
67 67 ## Fréquence & budgets
68 68
@@ -77,15 +77,15 @@ Exemple réel : *Technicienne ou technicien, inspection de structures de téléc
77 77
78 78 ## Volumétrie & complétude live
79 79
80 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 81
82 - **Offres en base** : 231 (dont **221 actives**, 0 masquées comme doublons `dup_of`)
83 - **Salaire** : 0/221 actives (0 %)
84 - **GPS** : 221/221 actives (100 %)
85 - **Mode** : 185/221 actives (84 %)
86 - **Parution** : 221/221 actives (100 %)
87 - **Dernier sync** : 2026-08-19 03:44 — trouvées 221, +0, ~0, -0
88 - **Syncs enregistrés** (`sync_log`) : 26
82 +- **Offres en base** : 298 (dont **239 actives**, 0 masquées comme doublons `dup_of`)
83 +- **Salaire** : 0/239 actives (0 %)
84 +- **GPS** : 239/239 actives (100 %)
85 +- **Mode** : 204/239 actives (85 %)
86 +- **Parution** : 239/239 actives (100 %)
87 +- **Dernier sync** : 2026-08-22 21:06 — trouvées 239, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 85
89 89
90 90 ## Erreurs & dépannage
91 91
added docs/connecteurs/cineplex.md +111 −0
@@ -0,0 +1,111 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/cineplex.md
7 +Rôle : Fiche connecteur — Cineplex (employeur direct, ATS workday)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Cineplex (`cineplex`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`workday`](ats-workday.md) · Statut registre : actif · Connecteur : `jobka/connectors/cineplex.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Cineplex]()
20 +- **Page carrières** : https://cineplex.wd3.myworkdayjobs.com/Cineplex
21 +- **Secteurs** : Divertissement
22 +- **Région** : Gatineau
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-workday.md`](ats-workday.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Cineplex` |
33 +| `HOST` | `wd3` |
34 +| `SITE` | `Cineplex` |
35 +| `TENANT` | `cineplex` |
36 +- **Throttle** : 0.7 s entre requêtes.
37 +- **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).
38 +
39 +## Champs → schéma
40 +
41 +Complétude mesurée sur les **24 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 +
43 +| Champ (`jobs.*`) | Rôle | Complétude |
44 +|---|---|---|
45 +| `title` — Titre | titre du poste | 100 % |
46 +| `employer` — Employeur | nom de l'entreprise | 100 % |
47 +| `url` — URL | lien direct vers l'offre originale | 100 % |
48 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
49 +| `city` — Ville | municipalité normalisée | 100 % |
50 +| `region` — Région | région administrative | 92 % |
51 +| `address` — Adresse | adresse du lieu de travail | 0 % |
52 +| `postal_code` — Code postal | code postal si publié | 0 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 8 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 4 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 4 % |
57 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
60 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 42 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 +
67 +Exemple réel : *Représentant du service aux invités Bilingue - Travail de la maison* — Québec · Salaire : 19,35 $/heure + prime de bilinguisme applicable · parue le 2026-08-19.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 0.7 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_WORKDAY_DETAIL_LIMIT` | `300` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 24 (dont **24 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 1/24 actives (4 %)
86 +- **GPS** : 24/24 actives (100 %)
87 +- **Mode** : 2/24 actives (8 %)
88 +- **Parution** : 24/24 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:06 — trouvées 24, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 5
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync cineplex` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='cineplex' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 Cineplex » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/circlek.md +20 −14
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/circlek.md
7 7 Rôle : Fiche connecteur — Couche-Tard / Circle K (employeur direct, ATS workday)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **1012 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **1019 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -58,13 +58,13 @@ Complétude mesurée sur les **1012 offres actives** de la source (base live, 20
58 58 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 59 | `date_posted` — Date de parution | ISO 8601 | 100 % |
60 60 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 78 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 79 % |
62 62 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 63 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 | `apply_url` — Candidature | lien de candidature directe | 30 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
65 65 | `gps` — GPS | lat/lng (géocodage sans invention) | 63 % |
66 66
67 Exemple réel : *Assistant-Gérant* — Sherbrooke · Salaire de jour : $17.75 (prime incluse**) · parue le 2026-08-19.
67 +Exemple réel : *Préposé service à la clientèle de nuit -ACT* — ∅ · Salaire (nuit) : 19,60$/h (Prime incluse**) · parue le 2026-08-22.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,19 +79,25 @@ Exemple réel : *Assistant-Gérant* — Sherbrooke · Salaire de jour : $17.75 (
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 1039 (dont **1012 actives**, 0 masquées comme doublons `dup_of`)
85 - **Salaire** : 616/1012 actives (61 %)
86 - **GPS** : 642/1012 actives (63 %)
87 - **Mode** : 2/1012 actives (0 %)
88 - **Parution** : 1012/1012 actives (100 %)
89 - **Dernier sync** : 2026-08-19 03:51 — trouvées 1012, +0, ~432, -0
90 - **Syncs enregistrés** (`sync_log`) : 26
84 +- **Offres en base** : 1144 (dont **1019 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 622/1019 actives (61 %)
86 +- **GPS** : 642/1019 actives (63 %)
87 +- **Mode** : 2/1019 actives (0 %)
88 +- **Parution** : 1019/1019 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:07 — trouvées 1019, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 85
91 91
92 92 ## Erreurs & dépannage
93 93
94 Aucune erreur dans `sync_log` pour cette source.
94 +Erreurs relevées dans `sync_log` :
95 +
96 +| Erreur | Occurrences | Dernière fois |
97 +|---|---|---|
98 +| Expecting value: line 1 column 1 (char 0) | 2 | 2026-08-22 05:04 |
99 +| 520 Server Error: <none> for url: https://circlek.wd3.myworkdayjobs.com/wday/cxs/circlek/C… | 1 | 2026-08-22 02:01 |
100 +| 503 Server Error: Service Unavailable for url: https://circlek.wd3.myworkdayjobs.com/wday/… | 1 | 2026-08-19 16:57 |
95 101
96 102 - Rejouer un sync isolé : `.venv/bin/python run.py sync circlek` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='circlek' ORDER BY ts DESC LIMIT 5;"`
97 103 - 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`.
modified docs/connecteurs/cirquedusoleil.md +16 −16
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cirquedusoleil.md
7 7 Rôle : Fiche connecteur — Cirque du Soleil (employeur direct, ATS lever)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **22 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **24 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -44,25 +44,25 @@ Complétude mesurée sur les **22 offres actives** de la source (base live, 2026
44 44 | `employer` — Employeur | nom de l'entreprise | 100 % |
45 45 | `url` — URL | lien direct vers l'offre originale | 100 % |
46 46 | `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 | `city` — Ville | municipalité normalisée | 86 % |
48 | `region` — Région | région administrative | 86 % |
47 +| `city` — Ville | municipalité normalisée | 88 % |
48 +| `region` — Région | région administrative | 88 % |
49 49 | `address` — Adresse | adresse du lieu de travail | 0 % |
50 50 | `postal_code` — Code postal | code postal si publié | 0 % |
51 51 | `work_mode` — Mode | presentiel / hybride / teletravail | 100 % |
52 | `employment_type` — Type | temps_plein / temps_partiel / … | 91 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 92 % |
53 53 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 54 | `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 55 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 56 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 57 | `date_posted` — Date de parution | ISO 8601 | 100 % |
58 58 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 82 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 79 % |
60 60 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 61 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 62 | `apply_url` — Candidature | lien de candidature directe | 100 % |
63 | `gps` — GPS | lat/lng (géocodage sans invention) | 86 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 88 % |
64 64
65 Exemple réel : *Vice-président(e), Marketing – Spectacles internationaux et Amériques \| Vice President Ma…* — ∅ · ∅ · parue le 2026-08-14.
65 +Exemple réel : *Responsable du développement de produits – Produits de consommation \| Product Development…* — Montréal · ∅ · parue le 2026-08-20.
66 66
67 67 ## Fréquence & budgets
68 68
@@ -72,15 +72,15 @@ Exemple réel : *Vice-président(e), Marketing – Spectacles internationaux et
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 - **Offres en base** : 22 (dont **22 actives**, 0 masquées comme doublons `dup_of`)
78 - **Salaire** : 0/22 actives (0 %)
79 - **GPS** : 19/22 actives (86 %)
80 - **Mode** : 22/22 actives (100 %)
81 - **Parution** : 22/22 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:51 — trouvées 22, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 14
77 +- **Offres en base** : 25 (dont **24 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 0/24 actives (0 %)
79 +- **GPS** : 21/24 actives (88 %)
80 +- **Mode** : 24/24 actives (100 %)
81 +- **Parution** : 24/24 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:07 — trouvées 24, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 73
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/cisss_abitibi.md +12 −12
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cisss_abitibi.md
7 7 Rôle : Fiche connecteur — CISSS de l'Abitibi-Témiscamingue (employeur direct, ATS wpjobmanager)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **141 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **140 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -51,7 +51,7 @@ Complétude mesurée sur les **141 offres actives** de la source (base live, 202
51 51 | `address` — Adresse | adresse du lieu de travail | 0 % |
52 52 | `postal_code` — Code postal | code postal si publié | 0 % |
53 53 | `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 | `employment_type` — Type | temps_plein / temps_partiel / … | 23 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 24 % |
55 55 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
56 56 | `salary_label` — Libellé salaire | texte salarial original | 0 % |
57 57 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
@@ -62,7 +62,7 @@ Complétude mesurée sur les **141 offres actives** de la source (base live, 202
62 62 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 63 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 64 | `apply_url` — Candidature | lien de candidature directe | 0 % |
65 | `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 67 Exemple réel : *Chef de service de l’unité multiclientèle et continuum mère-enfant MRC Témiscamingue* — Rouyn-Noranda · ∅ · parue le 2026-08-18.
68 68
@@ -79,15 +79,15 @@ Exemple réel : *Chef de service de l’unité multiclientèle et continuum mèr
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 141 (dont **141 actives**, 0 masquées comme doublons `dup_of`)
85 - **Salaire** : 0/141 actives (0 %)
86 - **GPS** : 0/141 actives (0 %)
87 - **Mode** : 0/141 actives (0 %)
88 - **Parution** : 141/141 actives (100 %)
89 - **Dernier sync** : 2026-08-19 04:55 — trouvées 141, +141, ~0, -0
90 - **Syncs enregistrés** (`sync_log`) : 1
84 +- **Offres en base** : 141 (dont **140 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 0/140 actives (0 %)
86 +- **GPS** : 140/140 actives (100 %)
87 +- **Mode** : 0/140 actives (0 %)
88 +- **Parution** : 140/140 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 140, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 60
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/cisss_chaudiere_appalaches.md +16 −16
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cisss_chaudiere_appalaches.md
7 7 Rôle : Fiche connecteur — CISSS de Chaudière-Appalaches (employeur direct, ATS wpjobmanager)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **112 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **115 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -51,20 +51,20 @@ Complétude mesurée sur les **112 offres actives** de la source (base live, 202
51 51 | `address` — Adresse | adresse du lieu de travail | 0 % |
52 52 | `postal_code` — Code postal | code postal si publié | 0 % |
53 53 | `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 | `employment_type` — Type | temps_plein / temps_partiel / … | 38 % |
55 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 8 % |
56 | `salary_label` — Libellé salaire | texte salarial original | 8 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 36 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 9 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 9 % |
57 57 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 2 % |
58 58 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 59 | `date_posted` — Date de parution | ISO 8601 | 100 % |
60 60 | `date_deadline` — Date limite | date limite pour postuler | 100 % |
61 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 75 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 76 % |
62 62 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 63 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 64 | `apply_url` — Candidature | lien de candidature directe | 0 % |
65 | `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 Exemple réel : *Directeur médical Optilab et Chef du département clinique de médecine de laboratoire* — Lévis · Classe G (275 102$ annuel) · parue le 2026-08-12.
67 +Exemple réel : *Conseiller cadre stratégique pour les milieux de vie* — Lévis · De 91 837 $ à 119 388 $ (Classe 37) · parue le 2026-08-21.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Directeur médical Optilab et Chef du département clinique de
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 112 (dont **112 actives**, 0 masquées comme doublons `dup_of`)
85 - **Salaire** : 9/112 actives (8 %)
86 - **GPS** : 0/112 actives (0 %)
87 - **Mode** : 0/112 actives (0 %)
88 - **Parution** : 112/112 actives (100 %)
89 - **Dernier sync** : 2026-08-19 04:59 — trouvées 112, +112, ~0, -0
90 - **Syncs enregistrés** (`sync_log`) : 1
84 +- **Offres en base** : 118 (dont **115 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 10/115 actives (9 %)
86 +- **GPS** : 115/115 actives (100 %)
87 +- **Mode** : 0/115 actives (0 %)
88 +- **Parution** : 115/115 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 115, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 60
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/cisss_lanaudiere.md +16 −16
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cisss_lanaudiere.md
7 7 Rôle : Fiche connecteur — CISSS de Lanaudière (employeur direct, ATS wpjobmanager)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **124 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **132 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -51,20 +51,20 @@ Complétude mesurée sur les **124 offres actives** de la source (base live, 202
51 51 | `address` — Adresse | adresse du lieu de travail | 0 % |
52 52 | `postal_code` — Code postal | code postal si publié | 0 % |
53 53 | `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 | `employment_type` — Type | temps_plein / temps_partiel / … | 55 % |
55 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 4 % |
56 | `salary_label` — Libellé salaire | texte salarial original | 4 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 58 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 5 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 5 % |
57 57 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 58 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 59 | `date_posted` — Date de parution | ISO 8601 | 100 % |
60 60 | `date_deadline` — Date limite | date limite pour postuler | 100 % |
61 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 73 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 74 % |
62 62 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 63 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 64 | `apply_url` — Candidature | lien de candidature directe | 0 % |
65 | `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 Exemple réel : *CHEF DE L’ADMINISTRATION DES PROGRAMMES MILIEUX FAVORABLES À LA SANTÉ ET DÉVELOPPEMENT DES…* — Joliette · Minimum de la classe : 96 770 $ annuel · parue le 2026-08-17.
67 +Exemple réel : *Agent ou agente de la gestion du personnel – Relations de travail* — Joliette · Salaire : taux horaire de 30.56 $ à 52.37 $, selon l’expérience · parue le 2026-08-21.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *CHEF DE L’ADMINISTRATION DES PROGRAMMES MILIEUX FAVORABLES À
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 124 (dont **124 actives**, 0 masquées comme doublons `dup_of`)
85 - **Salaire** : 5/124 actives (4 %)
86 - **GPS** : 0/124 actives (0 %)
87 - **Mode** : 0/124 actives (0 %)
88 - **Parution** : 124/124 actives (100 %)
89 - **Dernier sync** : 2026-08-19 05:35 — trouvées 124, +124, ~0, -0
90 - **Syncs enregistrés** (`sync_log`) : 1
84 +- **Offres en base** : 134 (dont **132 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 6/132 actives (5 %)
86 +- **GPS** : 132/132 actives (100 %)
87 +- **Mode** : 0/132 actives (0 %)
88 +- **Parution** : 132/132 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 132, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 60
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/cisss_laurentides.md +15 −15
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cisss_laurentides.md
7 7 Rôle : Fiche connecteur — CISSS des Laurentides (employeur direct, ATS wpjobmanager)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **130 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **142 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -52,19 +52,19 @@ Complétude mesurée sur les **130 offres actives** de la source (base live, 202
52 52 | `postal_code` — Code postal | code postal si publié | 0 % |
53 53 | `work_mode` — Mode | presentiel / hybride / teletravail | 1 % |
54 54 | `employment_type` — Type | temps_plein / temps_partiel / … | 23 % |
55 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 12 % |
56 | `salary_label` — Libellé salaire | texte salarial original | 12 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 11 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 11 % |
57 57 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 58 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 59 | `date_posted` — Date de parution | ISO 8601 | 100 % |
60 60 | `date_deadline` — Date limite | date limite pour postuler | 100 % |
61 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 70 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 72 % |
62 62 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 63 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 64 | `apply_url` — Candidature | lien de candidature directe | 0 % |
65 | `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 Exemple réel : *Bourse psychothérapie volet professionnel* — Saint-Jérôme · 30 000$ (formation prescrite de 900 heures et moins · parue le 2026-08-18.
67 +Exemple réel : *Auxiliaire de recherche clinique – Unité de recherche clinique (URC)* — Saint-Jérôme · Salaire : de 25,61 $ à 28,65 $ l’heure · parue le 2026-08-21.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Bourse psychothérapie volet professionnel* — Saint-Jérôme
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 130 (dont **130 actives**, 0 masquées comme doublons `dup_of`)
85 - **Salaire** : 15/130 actives (12 %)
86 - **GPS** : 0/130 actives (0 %)
87 - **Mode** : 1/130 actives (1 %)
88 - **Parution** : 130/130 actives (100 %)
89 - **Dernier sync** : 2026-08-19 05:39 — trouvées 130, +130, ~0, -0
90 - **Syncs enregistrés** (`sync_log`) : 1
84 +- **Offres en base** : 148 (dont **142 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 16/142 actives (11 %)
86 +- **GPS** : 142/142 actives (100 %)
87 +- **Mode** : 1/142 actives (1 %)
88 +- **Parution** : 142/142 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 142, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 60
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/cisss_laval.md +11 −11
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cisss_laval.md
7 7 Rôle : Fiche connecteur — CISSS de Laval (employeur direct, ATS wpjobmanager)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **149 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **149 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -54,7 +54,7 @@ Complétude mesurée sur les **149 offres actives** de la source (base live, 202
54 54 | `employment_type` — Type | temps_plein / temps_partiel / … | 10 % |
55 55 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 1 % |
56 56 | `salary_label` — Libellé salaire | texte salarial original | 1 % |
57 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 46 % |
57 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 45 % |
58 58 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 59 | `date_posted` — Date de parution | ISO 8601 | 100 % |
60 60 | `date_deadline` — Date limite | date limite pour postuler | 100 % |
@@ -62,9 +62,9 @@ Complétude mesurée sur les **149 offres actives** de la source (base live, 202
62 62 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 63 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 64 | `apply_url` — Candidature | lien de candidature directe | 0 % |
65 | `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 Exemple réel : *CHEF DE SERVICE DE LA PERMANENCE \| DPDI-TSA-DP \| REQ26-5489* — Laval · 91 837$ à 119 388$ · parue le 2026-08-14.
67 +Exemple réel : *CHEF DE SERVICE RELATIONS DE TRAVAIL – DRH, REQ26-5439* — Laval · 101 965$ à 132 555$ · parue le 2026-08-21.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *CHEF DE SERVICE DE LA PERMANENCE \| DPDI-TSA-DP \| REQ26-5489*
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 149 (dont **149 actives**, 0 masquées comme doublons `dup_of`)
85 - **Salaire** : 1/149 actives (1 %)
86 - **GPS** : 0/149 actives (0 %)
84 +- **Offres en base** : 153 (dont **149 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 2/149 actives (1 %)
86 +- **GPS** : 149/149 actives (100 %)
87 87 - **Mode** : 0/149 actives (0 %)
88 88 - **Parution** : 149/149 actives (100 %)
89 - **Dernier sync** : 2026-08-19 05:05 — trouvées 149, +149, ~0, -0
90 - **Syncs enregistrés** (`sync_log`) : 1
89 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 149, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 60
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/cisss_outaouais.md +14 −14
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cisss_outaouais.md
7 7 Rôle : Fiche connecteur — CISSS de l'Outaouais (employeur direct, ATS wpjobmanager)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **101 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **108 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -51,20 +51,20 @@ Complétude mesurée sur les **101 offres actives** de la source (base live, 202
51 51 | `address` — Adresse | adresse du lieu de travail | 0 % |
52 52 | `postal_code` — Code postal | code postal si publié | 0 % |
53 53 | `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 | `employment_type` — Type | temps_plein / temps_partiel / … | 8 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 7 % |
55 55 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 31 % |
56 56 | `salary_label` — Libellé salaire | texte salarial original | 31 % |
57 57 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 58 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 59 | `date_posted` — Date de parution | ISO 8601 | 100 % |
60 60 | `date_deadline` — Date limite | date limite pour postuler | 100 % |
61 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 84 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 83 % |
62 62 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 63 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 64 | `apply_url` — Candidature | lien de candidature directe | 0 % |
65 | `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 Exemple réel : *INTÉRIM – Chef de service du bénévolat et de la satisfaction à la clientèle (DTPQ)* — Gatineau · Minimum : 91 837 $ · parue le 2026-08-12.
67 +Exemple réel : *Chef de service – clin. ext., clin. d’ortho., de l’AOC, de la neuro. ambulatoire, de pneum…* — Gatineau · Minimum : 96 770 $ · parue le 2026-08-19.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *INTÉRIM – Chef de service du bénévolat et de la satisfacti
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 101 (dont **101 actives**, 0 masquées comme doublons `dup_of`)
85 - **Salaire** : 31/101 actives (31 %)
86 - **GPS** : 0/101 actives (0 %)
87 - **Mode** : 0/101 actives (0 %)
88 - **Parution** : 101/101 actives (100 %)
89 - **Dernier sync** : 2026-08-19 05:09 — trouvées 101, +101, ~0, -0
90 - **Syncs enregistrés** (`sync_log`) : 1
84 +- **Offres en base** : 108 (dont **108 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 33/108 actives (31 %)
86 +- **GPS** : 108/108 actives (100 %)
87 +- **Mode** : 0/108 actives (0 %)
88 +- **Parution** : 108/108 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 108, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 60
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/ciusss_est_montreal.md +12 −12
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/ciusss_est_montreal.md
7 7 Rôle : Fiche connecteur — CIUSSS de l'Est-de-l'Île-de-Montréal (employeur direct, ATS taleo)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -39,7 +39,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
39 39
40 40 ## Champs → schéma
41 41
42 Complétude mesurée sur les **23 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 +Complétude mesurée sur les **24 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
43 43
44 44 | Champ (`jobs.*`) | Rôle | Complétude |
45 45 |---|---|---|
@@ -52,7 +52,7 @@ Complétude mesurée sur les **23 offres actives** de la source (base live, 2026
52 52 | `address` — Adresse | adresse du lieu de travail | 0 % |
53 53 | `postal_code` — Code postal | code postal si publié | 0 % |
54 54 | `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
55 | `employment_type` — Type | temps_plein / temps_partiel / … | 9 % |
55 +| `employment_type` — Type | temps_plein / temps_partiel / … | 4 % |
56 56 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
57 57 | `salary_label` — Libellé salaire | texte salarial original | 0 % |
58 58 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
@@ -65,7 +65,7 @@ Complétude mesurée sur les **23 offres actives** de la source (base live, 2026
65 65 | `apply_url` — Candidature | lien de candidature directe | 0 % |
66 66 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
67 67
68 Exemple réel : *Chef de service - aide à domicile - secteur Pointe-Aux-Trembles (Intérim)* — Montréal · ∅ · parue le 2026-08-18.
68 +Exemple réel : *Travailleur(euse) social(e) - Urgence psychiatrique (IUSMM)* — Montréal · ∅ · parue le 2026-08-19.
69 69
70 70 ## Fréquence & budgets
71 71
@@ -80,15 +80,15 @@ Exemple réel : *Chef de service - aide à domicile - secteur Pointe-Aux-Tremble
80 80
81 81 ## Volumétrie & complétude live
82 82
83 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
84 84
85 - **Offres en base** : 23 (dont **23 actives**, 14 masquées comme doublons `dup_of`)
86 - **Salaire** : 0/23 actives (0 %)
87 - **GPS** : 23/23 actives (100 %)
88 - **Mode** : 0/23 actives (0 %)
89 - **Parution** : 23/23 actives (100 %)
90 - **Dernier sync** : 2026-08-19 03:51 — trouvées 23, +0, ~0, -0
91 - **Syncs enregistrés** (`sync_log`) : 14
85 +- **Offres en base** : 25 (dont **24 actives**, 14 masquées comme doublons `dup_of`)
86 +- **Salaire** : 0/24 actives (0 %)
87 +- **GPS** : 24/24 actives (100 %)
88 +- **Mode** : 0/24 actives (0 %)
89 +- **Parution** : 24/24 actives (100 %)
90 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 24, +0, ~0, -0
91 +- **Syncs enregistrés** (`sync_log`) : 73
92 92
93 93 ## Erreurs & dépannage
94 94
added docs/connecteurs/cloudchamberfr.md +104 −0
@@ -0,0 +1,104 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/cloudchamberfr.md
7 +Rôle : Fiche connecteur — Cloud Chamber Montréal (employeur direct, ATS greenhouse)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Cloud Chamber Montréal (`cloudchamberfr`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`greenhouse`](ats-greenhouse.md) · Statut registre : actif · Connecteur : `jobka/connectors/cloudchamberfr.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Cloud Chamber Montréal]()
20 +- **Page carrières** : https://job-boards.greenhouse.io/cloudchamberfr
21 +- **Secteurs** : Jeu vidéo
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-greenhouse.md`](ats-greenhouse.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `BOARD` | `cloudchamberfr` |
33 +| `EMPLOYER` | `Cloud Chamber Montréal` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **13 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 8 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 +
65 +Exemple réel : *Chef·fe d’équipe animation* — Montréal · ∅ · parue le 2026-08-19.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- 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.
72 +
73 +## Volumétrie & complétude live
74 +
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 +
77 +- **Offres en base** : 13 (dont **13 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 0/13 actives (0 %)
79 +- **GPS** : 13/13 actives (100 %)
80 +- **Mode** : 0/13 actives (0 %)
81 +- **Parution** : 13/13 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 13, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 6
84 +
85 +## Erreurs & dépannage
86 +
87 +Aucune erreur dans `sync_log` pour cette source.
88 +
89 +- Rejouer un sync isolé : `.venv/bin/python run.py sync cloudchamberfr` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='cloudchamberfr' ORDER BY ts DESC LIMIT 5;"`
90 +- 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`.
91 +
92 +## Licence / conformité
93 +
94 +**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 Cloud Chamber Montréal » 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.
95 +
96 +## Historique
97 +
98 +**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 :
99 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
100 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
101 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
102 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
103 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
104 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
added docs/connecteurs/clubmonaco.md +104 −0
@@ -0,0 +1,104 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/clubmonaco.md
7 +Rôle : Fiche connecteur — Club Monaco (employeur direct, ATS greenhouse)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Club Monaco (`clubmonaco`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`greenhouse`](ats-greenhouse.md) · Statut registre : actif · Connecteur : `jobka/connectors/clubmonaco.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Club Monaco]()
20 +- **Page carrières** : https://job-boards.greenhouse.io/clubmonaco
21 +- **Secteurs** : Commerce de détail
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-greenhouse.md`](ats-greenhouse.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `BOARD` | `clubmonaco` |
33 +| `EMPLOYER` | `Club Monaco` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 +
65 +Exemple réel : *Assistant Manager/Gestionnaire adjoint à temps plein* — Laval · ∅ · parue le 2026-08-05.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- 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.
72 +
73 +## Volumétrie & complétude live
74 +
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 +
77 +- **Offres en base** : 1 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 0/1 actives (0 %)
79 +- **GPS** : 1/1 actives (100 %)
80 +- **Mode** : 0/1 actives (0 %)
81 +- **Parution** : 1/1 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 1, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 6
84 +
85 +## Erreurs & dépannage
86 +
87 +Aucune erreur dans `sync_log` pour cette source.
88 +
89 +- Rejouer un sync isolé : `.venv/bin/python run.py sync clubmonaco` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='clubmonaco' ORDER BY ts DESC LIMIT 5;"`
90 +- 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`.
91 +
92 +## Licence / conformité
93 +
94 +**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 Club Monaco » 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.
95 +
96 +## Historique
97 +
98 +**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 :
99 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
100 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
101 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
102 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
103 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
104 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/cogeco.md +21 −16
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cogeco.md
7 7 Rôle : Fiche connecteur — Cogeco (employeur direct, ATS workday)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **50 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **45 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -46,11 +46,11 @@ Complétude mesurée sur les **50 offres actives** de la source (base live, 2026
46 46 | `employer` — Employeur | nom de l'entreprise | 100 % |
47 47 | `url` — URL | lien direct vers l'offre originale | 100 % |
48 48 | `description` — Description | texte complet (HTML nettoyé) | 100 % |
49 | `city` — Ville | municipalité normalisée | 92 % |
50 | `region` — Région | région administrative | 52 % |
49 +| `city` — Ville | municipalité normalisée | 89 % |
50 +| `region` — Région | région administrative | 56 % |
51 51 | `address` — Adresse | adresse du lieu de travail | 0 % |
52 52 | `postal_code` — Code postal | code postal si publié | 0 % |
53 | `work_mode` — Mode | presentiel / hybride / teletravail | 4 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 2 % |
54 54 | `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
55 55 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 18 % |
56 56 | `salary_label` — Libellé salaire | texte salarial original | 18 % |
@@ -58,11 +58,11 @@ Complétude mesurée sur les **50 offres actives** de la source (base live, 2026
58 58 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 59 | `date_posted` — Date de parution | ISO 8601 | 100 % |
60 60 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 38 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 40 % |
62 62 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 63 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 | `gps` — GPS | lat/lng (géocodage sans invention) | 56 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 60 % |
66 66
67 67 Exemple réel : *Technician, Customer and Network Facing* — Grasonville · For candidates whose primary place of work will be in Maryland, the expected salary range … · parue le 2026-08-12.
68 68
@@ -79,19 +79,24 @@ Exemple réel : *Technician, Customer and Network Facing* — Grasonville · For
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 50 (dont **50 actives**, 0 masquées comme doublons `dup_of`)
85 - **Salaire** : 9/50 actives (18 %)
86 - **GPS** : 28/50 actives (56 %)
87 - **Mode** : 2/50 actives (4 %)
88 - **Parution** : 50/50 actives (100 %)
89 - **Dernier sync** : 2026-08-19 03:52 — trouvées 50, +0, ~25, -0
90 - **Syncs enregistrés** (`sync_log`) : 26
84 +- **Offres en base** : 53 (dont **45 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 8/45 actives (18 %)
86 +- **GPS** : 27/45 actives (60 %)
87 +- **Mode** : 1/45 actives (2 %)
88 +- **Parution** : 45/45 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 45, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 85
91 91
92 92 ## Erreurs & dépannage
93 93
94 Aucune erreur dans `sync_log` pour cette source.
94 +Erreurs relevées dans `sync_log` :
95 +
96 +| Erreur | Occurrences | Dernière fois |
97 +|---|---|---|
98 +| Expecting value: line 1 column 1 (char 0) | 1 | 2026-08-22 03:23 |
99 +| 503 Server Error: Service Unavailable for url: https://cogeco.wd3.myworkdayjobs.com/wday/c… | 1 | 2026-08-19 16:57 |
95 100
96 101 - Rejouer un sync isolé : `.venv/bin/python run.py sync cogeco` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='cogeco' ORDER BY ts DESC LIMIT 5;"`
97 102 - 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`.
modified docs/connecteurs/cohere.md +15 −15
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cohere.md
7 7 Rôle : Fiche connecteur — Cohere (employeur direct, ATS ashby)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **46 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **44 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -44,14 +44,14 @@ Complétude mesurée sur les **46 offres actives** de la source (base live, 2026
44 44 | `employer` — Employeur | nom de l'entreprise | 100 % |
45 45 | `url` — URL | lien direct vers l'offre originale | 100 % |
46 46 | `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 | `city` — Ville | municipalité normalisée | 17 % |
48 | `region` — Région | région administrative | 4 % |
47 +| `city` — Ville | municipalité normalisée | 16 % |
48 +| `region` — Région | région administrative | 2 % |
49 49 | `address` — Adresse | adresse du lieu de travail | 0 % |
50 50 | `postal_code` — Code postal | code postal si publié | 0 % |
51 51 | `work_mode` — Mode | presentiel / hybride / teletravail | 100 % |
52 52 | `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 17 % |
54 | `salary_label` — Libellé salaire | texte salarial original | 17 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 16 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 16 % |
55 55 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 56 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 57 | `date_posted` — Date de parution | ISO 8601 | 100 % |
@@ -60,7 +60,7 @@ Complétude mesurée sur les **46 offres actives** de la source (base live, 2026
60 60 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 61 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 62 | `apply_url` — Candidature | lien de candidature directe | 100 % |
63 | `gps` — GPS | lat/lng (géocodage sans invention) | 37 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 36 % |
64 64
65 65 Exemple réel : *Member of Technical Staff, Multilingual* — ∅ · - For candidates in the US, the Compensation Range is: $110,000 - $370,000 [USD] · parue le 2026-08-17.
66 66
@@ -72,15 +72,15 @@ Exemple réel : *Member of Technical Staff, Multilingual* — ∅ · - For candi
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 - **Offres en base** : 46 (dont **46 actives**, 0 masquées comme doublons `dup_of`)
78 - **Salaire** : 8/46 actives (17 %)
79 - **GPS** : 17/46 actives (37 %)
80 - **Mode** : 46/46 actives (100 %)
81 - **Parution** : 46/46 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:52 — trouvées 46, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 27
77 +- **Offres en base** : 47 (dont **44 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 7/44 actives (16 %)
79 +- **GPS** : 16/44 actives (36 %)
80 +- **Mode** : 44/44 actives (100 %)
81 +- **Parution** : 44/44 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 44, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 86
84 84
85 85 ## Erreurs & dépannage
86 86
added docs/connecteurs/coledesentrepreneursduqubec.md +109 −0
@@ -0,0 +1,109 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/coledesentrepreneursduqubec.md
7 +Rôle : Fiche connecteur — École des entrepreneurs du Québec (employeur direct, ATS smartrecruiters)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# École des entrepreneurs du Québec (`coledesentrepreneursduqubec`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`smartrecruiters`](ats-smartrecruiters.md) · Statut registre : actif · Connecteur : `jobka/connectors/coledesentrepreneursduqubec.py`
16 +
17 +## Description
18 +
19 +- **Site** : [École des entrepreneurs du Québec]()
20 +- **Page carrières** : https://jobs.smartrecruiters.com/company/coledesentrepreneursduqubec
21 +- **Secteurs** : Éducation
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
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).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `COMPANY` | `coledesentrepreneursduqubec` |
33 +| `EMPLOYER` | `École des entrepreneurs du Québec` |
34 +- **Throttle** : 0.7 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 100 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 100 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 +
65 +Exemple réel : *CONSEILLER.ÈRE AUX ENTREPRENEURS* — Montréal · ∅ · parue le 2022-02-21.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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 +- **Budgets / plafonds (variables d'environnement)** :
72 +
73 +| Variable | Défaut |
74 +|---|---|
75 +| `JOBKA_SR_DETAIL_LIMIT` | `300` |
76 +- 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 +## Volumétrie & complétude live
79 +
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 +
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-08-22 21:08 — trouvées 1, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 6
89 +
90 +## Erreurs & dépannage
91 +
92 +Aucune erreur dans `sync_log` pour cette source.
93 +
94 +- Rejouer un sync isolé : `.venv/bin/python run.py sync coledesentrepreneursduqubec` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='coledesentrepreneursduqubec' ORDER BY ts DESC LIMIT 5;"`
95 +- 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`.
96 +
97 +## Licence / conformité
98 +
99 +**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 École des entrepreneurs du Québec » 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.
100 +
101 +## Historique
102 +
103 +**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 :
104 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
105 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
106 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
107 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
108 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
109 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
added docs/connecteurs/cologix.md +104 −0
@@ -0,0 +1,104 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/cologix.md
7 +Rôle : Fiche connecteur — Cologix (employeur direct, ATS lever)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Cologix (`cologix`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`lever`](ats-lever.md) · Statut registre : actif · Connecteur : `jobka/connectors/cologix.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Cologix]()
20 +- **Page carrières** : https://jobs.lever.co/cologix
21 +- **Secteurs** : TI
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-lever.md`](ats-lever.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Cologix` |
33 +| `ORG` | `cologix` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 100 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 33 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 +
65 +Exemple réel : *Généraliste RH* — Montréal · ∅ · parue le 2026-08-13.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- 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.
72 +
73 +## Volumétrie & complétude live
74 +
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 +
77 +- **Offres en base** : 3 (dont **3 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 1/3 actives (33 %)
79 +- **GPS** : 3/3 actives (100 %)
80 +- **Mode** : 3/3 actives (100 %)
81 +- **Parution** : 3/3 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 3, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 6
84 +
85 +## Erreurs & dépannage
86 +
87 +Aucune erreur dans `sync_log` pour cette source.
88 +
89 +- Rejouer un sync isolé : `.venv/bin/python run.py sync cologix` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='cologix' ORDER BY ts DESC LIMIT 5;"`
90 +- 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`.
91 +
92 +## Licence / conformité
93 +
94 +**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 Cologix » 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.
95 +
96 +## Historique
97 +
98 +**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 :
99 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
100 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
101 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
102 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
103 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
104 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
added docs/connecteurs/consignaction.md +111 −0
@@ -0,0 +1,111 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/consignaction.md
7 +Rôle : Fiche connecteur — Consignaction (AQRCB) (employeur direct, ATS workday)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Consignaction (AQRCB) (`consignaction`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`workday`](ats-workday.md) · Statut registre : actif · Connecteur : `jobka/connectors/consignaction.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Consignaction (AQRCB)]()
20 +- **Page carrières** : https://consignaction.wd10.myworkdayjobs.com/Consignaction_carrieres
21 +- **Secteurs** : Environnement
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-workday.md`](ats-workday.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Consignaction (AQRCB)` |
33 +| `HOST` | `wd10` |
34 +| `SITE` | `Consignaction_carrieres` |
35 +| `TENANT` | `consignaction` |
36 +- **Throttle** : 0.7 s entre requêtes.
37 +- **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).
38 +
39 +## Champs → schéma
40 +
41 +Complétude mesurée sur les **134 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 +
43 +| Champ (`jobs.*`) | Rôle | Complétude |
44 +|---|---|---|
45 +| `title` — Titre | titre du poste | 100 % |
46 +| `employer` — Employeur | nom de l'entreprise | 100 % |
47 +| `url` — URL | lien direct vers l'offre originale | 100 % |
48 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
49 +| `city` — Ville | municipalité normalisée | 100 % |
50 +| `region` — Région | région administrative | 100 % |
51 +| `address` — Adresse | adresse du lieu de travail | 0 % |
52 +| `postal_code` — Code postal | code postal si publié | 0 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 90 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 90 % |
57 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
60 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 23 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 +
67 +Exemple réel : *Conseiller(ère) aux retours* — Trois-Rivières · Salaire : 20$/heure · parue le 2026-08-21.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 0.7 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_WORKDAY_DETAIL_LIMIT` | `300` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 134 (dont **134 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 120/134 actives (90 %)
86 +- **GPS** : 134/134 actives (100 %)
87 +- **Mode** : 0/134 actives (0 %)
88 +- **Parution** : 134/134 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 134, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 5
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync consignaction` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='consignaction' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 Consignaction (AQRCB) » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/cordonbleu.md +12 −12
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cordonbleu.md
7 7 Rôle : Fiche connecteur — Aliments Ouimet-Cordon Bleu inc. (employeur direct, ATS bamboohr)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **1 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -50,8 +50,8 @@ Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-
50 50 | `postal_code` — Code postal | code postal si publié | 0 % |
51 51 | `work_mode` — Mode | presentiel / hybride / teletravail | 100 % |
52 52 | `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 50 % |
54 | `salary_label` — Libellé salaire | texte salarial original | 50 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 100 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 100 % |
55 55 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 56 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 100 % |
57 57 | `date_posted` — Date de parution | ISO 8601 | 100 % |
@@ -77,15 +77,15 @@ Exemple réel : *Électromécanicien Licence C - Jusqu'à 45$/hr* — Montréal
77 77
78 78 ## Volumétrie & complétude live
79 79
80 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 81
82 - **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
83 - **Salaire** : 1/2 actives (50 %)
84 - **GPS** : 2/2 actives (100 %)
85 - **Mode** : 2/2 actives (100 %)
86 - **Parution** : 2/2 actives (100 %)
87 - **Dernier sync** : 2026-08-19 03:52 — trouvées 2, +0, ~0, -0
88 - **Syncs enregistrés** (`sync_log`) : 14
82 +- **Offres en base** : 2 (dont **1 actives**, 0 masquées comme doublons `dup_of`)
83 +- **Salaire** : 1/1 actives (100 %)
84 +- **GPS** : 1/1 actives (100 %)
85 +- **Mode** : 1/1 actives (100 %)
86 +- **Parution** : 1/1 actives (100 %)
87 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 1, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 73
89 89
90 90 ## Erreurs & dépannage
91 91
added docs/connecteurs/coveofr.md +104 −0
@@ -0,0 +1,104 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/coveofr.md
7 +Rôle : Fiche connecteur — Coveo (employeur direct, ATS greenhouse)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Coveo (`coveofr`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`greenhouse`](ats-greenhouse.md) · Statut registre : actif · Connecteur : `jobka/connectors/coveofr.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Coveo]()
20 +- **Page carrières** : https://job-boards.greenhouse.io/coveofr
21 +- **Secteurs** : TI
22 +- **Région** : Québec
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-greenhouse.md`](ats-greenhouse.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `BOARD` | `coveofr` |
33 +| `EMPLOYER` | `Coveo` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **29 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 10 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 86 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 +
65 +Exemple réel : *Développeur.euse logiciel - Fondations* — Montréal · ∅ · parue le 2026-08-21.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- 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.
72 +
73 +## Volumétrie & complétude live
74 +
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 +
77 +- **Offres en base** : 29 (dont **29 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 0/29 actives (0 %)
79 +- **GPS** : 29/29 actives (100 %)
80 +- **Mode** : 0/29 actives (0 %)
81 +- **Parution** : 29/29 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 29, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 6
84 +
85 +## Erreurs & dépannage
86 +
87 +Aucune erreur dans `sync_log` pour cette source.
88 +
89 +- Rejouer un sync isolé : `.venv/bin/python run.py sync coveofr` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='coveofr' ORDER BY ts DESC LIMIT 5;"`
90 +- 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`.
91 +
92 +## Licence / conformité
93 +
94 +**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 Coveo » 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.
95 +
96 +## Historique
97 +
98 +**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 :
99 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
100 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
101 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
102 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
103 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
104 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
added docs/connecteurs/csncollision.md +104 −0
@@ -0,0 +1,104 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/csncollision.md
7 +Rôle : Fiche connecteur — CSN Collision (employeur direct, ATS workable)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# CSN Collision (`csncollision`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`workable`](ats-workable.md) · Statut registre : actif · Connecteur : `jobka/connectors/csncollision.py`
16 +
17 +## Description
18 +
19 +- **Site** : [CSN Collision]()
20 +- **Page carrières** : https://apply.workable.com/csncollision
21 +- **Secteurs** : Automobile
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-workable.md`](ats-workable.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `CSN Collision` |
33 +| `ORG` | `csncollision` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 33 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 +
65 +Exemple réel : *Technicien en carrosserie automobile - Carrossier Débosseleur* — Québec · ∅ · parue le 2025-12-01.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- 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.
72 +
73 +## Volumétrie & complétude live
74 +
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 +
77 +- **Offres en base** : 3 (dont **3 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 0/3 actives (0 %)
79 +- **GPS** : 3/3 actives (100 %)
80 +- **Mode** : 0/3 actives (0 %)
81 +- **Parution** : 3/3 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 3, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 5
84 +
85 +## Erreurs & dépannage
86 +
87 +Aucune erreur dans `sync_log` pour cette source.
88 +
89 +- Rejouer un sync isolé : `.venv/bin/python run.py sync csncollision` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='csncollision' ORDER BY ts DESC LIMIT 5;"`
90 +- 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`.
91 +
92 +## Licence / conformité
93 +
94 +**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 CSN Collision » 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.
95 +
96 +## Historique
97 +
98 +**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 :
99 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
100 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
101 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
102 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
103 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
104 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/cssdd.md +11 −11
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cssdd.md
7 7 Rôle : Fiche connecteur — CSS des Découvreurs (employeur direct, ATS digitalrecruiters)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -37,7 +37,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
37 37
38 38 ## Champs → schéma
39 39
40 Complétude mesurée sur les **27 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40 +Complétude mesurée sur les **27 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
41 41
42 42 | Champ (`jobs.*`) | Rôle | Complétude |
43 43 |---|---|---|
@@ -50,8 +50,8 @@ Complétude mesurée sur les **27 offres actives** de la source (base live, 2026
50 50 | `address` — Adresse | adresse du lieu de travail | 100 % |
51 51 | `postal_code` — Code postal | code postal si publié | 100 % |
52 52 | `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
53 | `employment_type` — Type | temps_plein / temps_partiel / … | 78 % |
54 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 78 % |
53 +| `employment_type` — Type | temps_plein / temps_partiel / … | 74 % |
54 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 81 % |
55 55 | `salary_label` — Libellé salaire | texte salarial original | 7 % |
56 56 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 15 % |
57 57 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
@@ -61,7 +61,7 @@ Complétude mesurée sur les **27 offres actives** de la source (base live, 2026
61 61 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
62 62 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 100 % |
63 63 | `apply_url` — Candidature | lien de candidature directe | 0 % |
64 | `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
64 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
65 65
66 66 Exemple réel : *Technicien(ne) en bâtiment - Mécanique du bâtiment spécialisé en contrôles* — Québec · Salaire de 27,91 $ à 38,91 $ de l’heure · parue le 2026-06-11.
67 67
@@ -78,15 +78,15 @@ Exemple réel : *Technicien(ne) en bâtiment - Mécanique du bâtiment spéciali
78 78
79 79 ## Volumétrie & complétude live
80 80
81 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
81 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
82 82
83 - **Offres en base** : 27 (dont **27 actives**, 0 masquées comme doublons `dup_of`)
84 - **Salaire** : 21/27 actives (78 %)
85 - **GPS** : 0/27 actives (0 %)
83 +- **Offres en base** : 29 (dont **27 actives**, 0 masquées comme doublons `dup_of`)
84 +- **Salaire** : 22/27 actives (81 %)
85 +- **GPS** : 27/27 actives (100 %)
86 86 - **Mode** : 0/27 actives (0 %)
87 87 - **Parution** : 27/27 actives (100 %)
88 - **Dernier sync** : 2026-08-19 05:09 — trouvées 27, +27, ~0, -0
89 - **Syncs enregistrés** (`sync_log`) : 1
88 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 27, +0, ~0, -0
89 +- **Syncs enregistrés** (`sync_log`) : 60
90 90
91 91 ## Erreurs & dépannage
92 92
added docs/connecteurs/cts_foods_brokers_inc.md +104 −0
@@ -0,0 +1,104 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/cts_foods_brokers_inc.md
7 +Rôle : Fiche connecteur — CTS Foods Brokers (employeur direct, ATS workable)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# CTS Foods Brokers (`cts_foods_brokers_inc`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`workable`](ats-workable.md) · Statut registre : actif · Connecteur : `jobka/connectors/cts_foods_brokers_inc.py`
16 +
17 +## Description
18 +
19 +- **Site** : [CTS Foods Brokers]()
20 +- **Page carrières** : https://apply.workable.com/cts-foods-brokers-inc
21 +- **Secteurs** : Agroalimentaire
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-workable.md`](ats-workable.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `CTS Foods Brokers` |
33 +| `ORG` | `cts-foods-brokers-inc` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 33 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 33 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 17 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 100 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 +
65 +Exemple réel : *Travailleur d'entrepôt - Jour / Warehouse Worker - Day* — Québec · · 17 $ · parue le 2026-08-12.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- 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.
72 +
73 +## Volumétrie & complétude live
74 +
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 +
77 +- **Offres en base** : 6 (dont **6 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 2/6 actives (33 %)
79 +- **GPS** : 6/6 actives (100 %)
80 +- **Mode** : 0/6 actives (0 %)
81 +- **Parution** : 6/6 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 6, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 5
84 +
85 +## Erreurs & dépannage
86 +
87 +Aucune erreur dans `sync_log` pour cette source.
88 +
89 +- Rejouer un sync isolé : `.venv/bin/python run.py sync cts_foods_brokers_inc` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='cts_foods_brokers_inc' ORDER BY ts DESC LIMIT 5;"`
90 +- 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`.
91 +
92 +## Licence / conformité
93 +
94 +**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 CTS Foods Brokers » 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.
95 +
96 +## Historique
97 +
98 +**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 :
99 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
100 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
101 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
102 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
103 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
104 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/cultures_genv.md +12 −8
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/cultures_genv.md
7 7 Rôle : Fiche connecteur — Cultures Gen V (employeur direct, ATS adp)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -62,7 +62,7 @@ Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-
62 62 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 63 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 64 | `apply_url` — Candidature | lien de candidature directe | 0 % |
65 | `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 67 Exemple réel : *Acheteur* — Mirabel · ∅ · parue le 2026-08-18.
68 68
@@ -79,19 +79,23 @@ Exemple réel : *Acheteur* — Mirabel · ∅ · parue le 2026-08-18.
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 84 - **Offres en base** : 6 (dont **6 actives**, 0 masquées comme doublons `dup_of`)
85 85 - **Salaire** : 2/6 actives (33 %)
86 - **GPS** : 0/6 actives (0 %)
86 +- **GPS** : 6/6 actives (100 %)
87 87 - **Mode** : 0/6 actives (0 %)
88 88 - **Parution** : 6/6 actives (100 %)
89 - **Dernier sync** : 2026-08-19 04:49 — trouvées 6, +6, ~0, -0
90 - **Syncs enregistrés** (`sync_log`) : 1
89 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 6, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 60
91 91
92 92 ## Erreurs & dépannage
93 93
94 Aucune erreur dans `sync_log` pour cette source.
94 +Erreurs relevées dans `sync_log` :
95 +
96 +| Erreur | Occurrences | Dernière fois |
97 +|---|---|---|
98 +| 500 Server Error: for url: https://workforcenow.adp.com/mascsr/default/careercenter/publi… | 1 | 2026-08-22 00:35 |
95 99
96 100 - Rejouer un sync isolé : `.venv/bin/python run.py sync cultures_genv` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='cultures_genv' ORDER BY ts DESC LIMIT 5;"`
97 101 - 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`.
added docs/connecteurs/damotech.md +104 −0
@@ -0,0 +1,104 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/damotech.md
7 +Rôle : Fiche connecteur — Damotech (employeur direct, ATS workable)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Damotech (`damotech`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`workable`](ats-workable.md) · Statut registre : actif · Connecteur : `jobka/connectors/damotech.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Damotech]()
20 +- **Page carrières** : https://apply.workable.com/damotech
21 +- **Secteurs** : Fabrication
22 +- **Région** : Boucherville
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-workable.md`](ats-workable.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Damotech` |
33 +| `ORG` | `damotech` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 33 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 33 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 33 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 100 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 +
65 +Exemple réel : *Technicien installation* — Québec · Le salaire pour ce poste se situe entre 25$/h et 30$/h · parue le 2026-05-05.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- 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.
72 +
73 +## Volumétrie & complétude live
74 +
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 +
77 +- **Offres en base** : 3 (dont **3 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 1/3 actives (33 %)
79 +- **GPS** : 3/3 actives (100 %)
80 +- **Mode** : 1/3 actives (33 %)
81 +- **Parution** : 3/3 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 3, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 5
84 +
85 +## Erreurs & dépannage
86 +
87 +Aucune erreur dans `sync_log` pour cette source.
88 +
89 +- Rejouer un sync isolé : `.venv/bin/python run.py sync damotech` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='damotech' ORDER BY ts DESC LIMIT 5;"`
90 +- 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`.
91 +
92 +## Licence / conformité
93 +
94 +**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 Damotech » 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.
95 +
96 +## Historique
97 +
98 +**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 :
99 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
100 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
101 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
102 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
103 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
104 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
added docs/connecteurs/daniels_sharpsmart.md +104 −0
@@ -0,0 +1,104 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/daniels_sharpsmart.md
7 +Rôle : Fiche connecteur — Daniels Health Canada (employeur direct, ATS lever)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Daniels Health Canada (`daniels_sharpsmart`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`lever`](ats-lever.md) · Statut registre : actif · Connecteur : `jobka/connectors/daniels_sharpsmart.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Daniels Health Canada]()
20 +- **Page carrières** : https://jobs.lever.co/daniels-sharpsmart
21 +- **Secteurs** : Santé
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-lever.md`](ats-lever.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Daniels Health Canada` |
33 +| `ORG` | `daniels-sharpsmart` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 33 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 100 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 17 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 67 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 33 % |
64 +
65 +Exemple réel : *Préposé(e) au service – Déchets biomédicaux* — Rivière-Rouge · ∅ · parue le 2026-08-22.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- 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.
72 +
73 +## Volumétrie & complétude live
74 +
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 +
77 +- **Offres en base** : 6 (dont **6 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 1/6 actives (17 %)
79 +- **GPS** : 2/6 actives (33 %)
80 +- **Mode** : 6/6 actives (100 %)
81 +- **Parution** : 6/6 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 6, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 6
84 +
85 +## Erreurs & dépannage
86 +
87 +Aucune erreur dans `sync_log` pour cette source.
88 +
89 +- Rejouer un sync isolé : `.venv/bin/python run.py sync daniels_sharpsmart` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='daniels_sharpsmart' ORDER BY ts DESC LIMIT 5;"`
90 +- 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`.
91 +
92 +## Licence / conformité
93 +
94 +**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 Daniels Health Canada » 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.
95 +
96 +## Historique
97 +
98 +**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 :
99 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
100 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
101 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
102 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
103 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
104 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
added docs/connecteurs/darefoods.md +111 −0
@@ -0,0 +1,111 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/darefoods.md
7 +Rôle : Fiche connecteur — Dare Foods (employeur direct, ATS dayforce)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Dare Foods (`darefoods`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`dayforce`](ats-dayforce.md) · Statut registre : actif · Connecteur : `jobka/connectors/darefoods.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Dare Foods]()
20 +- **Page carrières** : https://jobs.dayforcehcm.com/fr-CA/darefoods/CANDIDATEPORTAL
21 +- **Secteurs** : Agroalimentaire
22 +- **Région** : Sainte-Marthe-sur-le-Lac
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-dayforce.md`](ats-dayforce.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `BOARD` | `CANDIDATEPORTAL` |
33 +| `CULTURE` | `fr-CA` |
34 +| `EMPLOYER` | `Dare Foods` |
35 +| `NS` | `darefoods` |
36 +- **Throttle** : 0.8 s entre requêtes.
37 +- **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).
38 +
39 +## Champs → schéma
40 +
41 +Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 +
43 +| Champ (`jobs.*`) | Rôle | Complétude |
44 +|---|---|---|
45 +| `title` — Titre | titre du poste | 100 % |
46 +| `employer` — Employeur | nom de l'entreprise | 100 % |
47 +| `url` — URL | lien direct vers l'offre originale | 100 % |
48 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
49 +| `city` — Ville | municipalité normalisée | 100 % |
50 +| `region` — Région | région administrative | 100 % |
51 +| `address` — Adresse | adresse du lieu de travail | 100 % |
52 +| `postal_code` — Code postal | code postal si publié | 100 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 0 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 75 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 75 % |
57 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
60 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 +
67 +Exemple réel : *Journalier de production* — Sainte-Martine · 26.81$ de l’heure* · parue le 2026-06-14.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 0.8 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_DAYFORCE_DETAIL_LIMIT` | `80` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 4 (dont **4 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 3/4 actives (75 %)
86 +- **GPS** : 4/4 actives (100 %)
87 +- **Mode** : 0/4 actives (0 %)
88 +- **Parution** : 4/4 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 4, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 5
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync darefoods` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='darefoods' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 Dare Foods » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/dcbel.md +12 −12
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/dcbel.md
7 7 Rôle : Fiche connecteur — dcbel (employeur direct, ATS bamboohr)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **20 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **21 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -56,13 +56,13 @@ Complétude mesurée sur les **20 offres actives** de la source (base live, 2026
56 56 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 90 % |
57 57 | `date_posted` — Date de parution | ISO 8601 | 100 % |
58 58 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 60 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 57 % |
60 60 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 61 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 62 | `apply_url` — Candidature | lien de candidature directe | 0 % |
63 63 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 64
65 Exemple réel : *Production supervisor* — Montréal · ∅ · parue le 2026-08-05.
65 +Exemple réel : *Product Knowledge Specialist* — Montréal · ∅ · parue le 2026-08-21.
66 66
67 67 ## Fréquence & budgets
68 68
@@ -77,15 +77,15 @@ Exemple réel : *Production supervisor* — Montréal · ∅ · parue le 2026-08
77 77
78 78 ## Volumétrie & complétude live
79 79
80 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 81
82 - **Offres en base** : 20 (dont **20 actives**, 0 masquées comme doublons `dup_of`)
83 - **Salaire** : 0/20 actives (0 %)
84 - **GPS** : 20/20 actives (100 %)
85 - **Mode** : 20/20 actives (100 %)
86 - **Parution** : 20/20 actives (100 %)
87 - **Dernier sync** : 2026-08-19 03:52 — trouvées 20, +0, ~0, -0
88 - **Syncs enregistrés** (`sync_log`) : 26
82 +- **Offres en base** : 21 (dont **21 actives**, 0 masquées comme doublons `dup_of`)
83 +- **Salaire** : 0/21 actives (0 %)
84 +- **GPS** : 21/21 actives (100 %)
85 +- **Mode** : 21/21 actives (100 %)
86 +- **Parution** : 21/21 actives (100 %)
87 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 21, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 85
89 89
90 90 ## Erreurs & dépannage
91 91
added docs/connecteurs/delmar_international_inc.md +104 −0
@@ -0,0 +1,104 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/delmar_international_inc.md
7 +Rôle : Fiche connecteur — Delmar International (employeur direct, ATS workable)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Delmar International (`delmar_international_inc`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`workable`](ats-workable.md) · Statut registre : actif · Connecteur : `jobka/connectors/delmar_international_inc.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Delmar International]()
20 +- **Page carrières** : https://apply.workable.com/delmar-international-inc
21 +- **Secteurs** : Logistique
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-workable.md`](ats-workable.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Delmar International` |
33 +| `ORG` | `delmar-international-inc` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 100 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 +
65 +Exemple réel : *D365 Business Analyst* — Montréal · ∅ · parue le 2026-08-17.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- 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.
72 +
73 +## Volumétrie & complétude live
74 +
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 +
77 +- **Offres en base** : 4 (dont **4 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 0/4 actives (0 %)
79 +- **GPS** : 4/4 actives (100 %)
80 +- **Mode** : 0/4 actives (0 %)
81 +- **Parution** : 4/4 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 4, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 5
84 +
85 +## Erreurs & dépannage
86 +
87 +Aucune erreur dans `sync_log` pour cette source.
88 +
89 +- Rejouer un sync isolé : `.venv/bin/python run.py sync delmar_international_inc` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='delmar_international_inc' ORDER BY ts DESC LIMIT 5;"`
90 +- 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`.
91 +
92 +## Licence / conformité
93 +
94 +**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 Delmar International » 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.
95 +
96 +## Historique
97 +
98 +**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 :
99 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
100 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
101 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
102 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
103 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
104 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/deloitte.md +9 −9
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/deloitte.md
7 7 Rôle : Fiche connecteur — Deloitte Canada (employeur direct, ATS successfactors)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **105 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **105 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -56,11 +56,11 @@ Complétude mesurée sur les **105 offres actives** de la source (base live, 202
56 56 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 57 | `date_posted` — Date de parution | ISO 8601 | 0 % |
58 58 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 93 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 94 % |
60 60 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 61 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 62 | `apply_url` — Candidature | lien de candidature directe | 0 % |
63 | `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 64
65 65 Exemple réel : *Consultant(e) sénior, Gestion de contenu OpenText* — Montréal · L’échelle salariale pour ce poste est de 80,000 $ à 138,000 $ · parue le ∅.
66 66
@@ -77,15 +77,15 @@ Exemple réel : *Consultant(e) sénior, Gestion de contenu OpenText* — Montré
77 77
78 78 ## Volumétrie & complétude live
79 79
80 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 81
82 - **Offres en base** : 105 (dont **105 actives**, 0 masquées comme doublons `dup_of`)
82 +- **Offres en base** : 107 (dont **105 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 101/105 actives (96 %)
84 - **GPS** : 0/105 actives (0 %)
84 +- **GPS** : 105/105 actives (100 %)
85 85 - **Mode** : 103/105 actives (98 %)
86 86 - **Parution** : 0/105 actives (0 %)
87 - **Dernier sync** : 2026-08-19 04:48 — trouvées 105, +105, ~0, -0
88 - **Syncs enregistrés** (`sync_log`) : 1
87 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 105, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 60
89 89
90 90 ## Erreurs & dépannage
91 91
added docs/connecteurs/dentalcorp.md +111 −0
@@ -0,0 +1,111 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/dentalcorp.md
7 +Rôle : Fiche connecteur — Dentalcorp (employeur direct, ATS workday)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Dentalcorp (`dentalcorp`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`workday`](ats-workday.md) · Statut registre : actif · Connecteur : `jobka/connectors/dentalcorp.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Dentalcorp]()
20 +- **Page carrières** : https://dentalcorp.wd3.myworkdayjobs.com/dentalcorp
21 +- **Secteurs** : Santé
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-workday.md`](ats-workday.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Dentalcorp` |
33 +| `HOST` | `wd3` |
34 +| `SITE` | `dentalcorp` |
35 +| `TENANT` | `dentalcorp` |
36 +- **Throttle** : 0.7 s entre requêtes.
37 +- **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).
38 +
39 +## Champs → schéma
40 +
41 +Complétude mesurée sur les **97 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 +
43 +| Champ (`jobs.*`) | Rôle | Complétude |
44 +|---|---|---|
45 +| `title` — Titre | titre du poste | 100 % |
46 +| `employer` — Employeur | nom de l'entreprise | 100 % |
47 +| `url` — URL | lien direct vers l'offre originale | 100 % |
48 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
49 +| `city` — Ville | municipalité normalisée | 100 % |
50 +| `region` — Région | région administrative | 99 % |
51 +| `address` — Adresse | adresse du lieu de travail | 0 % |
52 +| `postal_code` — Code postal | code postal si publié | 0 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 1 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 13 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 13 % |
57 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 2 % |
58 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
60 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 99 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 99 % |
66 +
67 +Exemple réel : *Bilingual Talent Engagement & Events Coordinator* — Montréal · The salary range for this position is $60,000 to $65,000 annually + 10% bonus · parue le 2026-08-07.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 0.7 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_WORKDAY_DETAIL_LIMIT` | `300` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 97 (dont **97 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 13/97 actives (13 %)
86 +- **GPS** : 96/97 actives (99 %)
87 +- **Mode** : 1/97 actives (1 %)
88 +- **Parution** : 97/97 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:08 — trouvées 97, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 5
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync dentalcorp` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='dentalcorp' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 Dentalcorp » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/depot-direct.md +2 −2
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/depot-direct.md
7 7 Rôle : Fiche du canal de dépôt direct employeurs
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Volumétrie & complétude live
38 38
39 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
39 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
40 40
41 41 - **Offres en base** : 0 (dont **0 actives**, 0 masquées comme doublons `dup_of`)
42 42 - **Salaire** : 0/0 actives (—)
modified docs/connecteurs/desjardins.md +14 −14
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/desjardins.md
7 7 Rôle : Fiche connecteur — Mouvement Desjardins (employeur direct, ATS workday)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **241 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **255 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -46,11 +46,11 @@ Complétude mesurée sur les **241 offres actives** de la source (base live, 202
46 46 | `employer` — Employeur | nom de l'entreprise | 100 % |
47 47 | `url` — URL | lien direct vers l'offre originale | 100 % |
48 48 | `description` — Description | texte complet (HTML nettoyé) | 100 % |
49 | `city` — Ville | municipalité normalisée | 94 % |
49 +| `city` — Ville | municipalité normalisée | 93 % |
50 50 | `region` — Région | région administrative | 92 % |
51 51 | `address` — Adresse | adresse du lieu de travail | 0 % |
52 52 | `postal_code` — Code postal | code postal si publié | 0 % |
53 | `work_mode` — Mode | presentiel / hybride / teletravail | 21 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 22 % |
54 54 | `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
55 55 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 2 % |
56 56 | `salary_label` — Libellé salaire | texte salarial original | 2 % |
@@ -58,11 +58,11 @@ Complétude mesurée sur les **241 offres actives** de la source (base live, 202
58 58 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 59 | `date_posted` — Date de parution | ISO 8601 | 100 % |
60 60 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 61 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 65 % |
62 62 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 63 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 64 | `apply_url` — Candidature | lien de candidature directe | 100 % |
65 | `gps` — GPS | lat/lng (géocodage sans invention) | 94 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 93 % |
66 66
67 67 Exemple réel : *Advisor, Banking and Credit Services, Customer Relations Center* — Montréal · A competitive wage starting at $26,41/hour, adjusted based on relevant experience · parue le 2026-08-04.
68 68
@@ -79,15 +79,15 @@ Exemple réel : *Advisor, Banking and Credit Services, Customer Relations Center
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 260 (dont **241 actives**, 0 masquées comme doublons `dup_of`)
85 - **Salaire** : 4/241 actives (2 %)
86 - **GPS** : 226/241 actives (94 %)
87 - **Mode** : 50/241 actives (21 %)
88 - **Parution** : 241/241 actives (100 %)
89 - **Dernier sync** : 2026-08-19 03:55 — trouvées 241, +0, ~172, -0
90 - **Syncs enregistrés** (`sync_log`) : 30
84 +- **Offres en base** : 309 (dont **255 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 4/255 actives (2 %)
86 +- **GPS** : 236/255 actives (93 %)
87 +- **Mode** : 55/255 actives (22 %)
88 +- **Parution** : 255/255 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:09 — trouvées 255, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 89
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/devimco.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/devimco.md
7 7 Rôle : Fiche connecteur — Devimco Appartements (employeur direct, ATS bamboohr)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Superviseur(e) à la maintenance* — Québec · Salaire: 75 00
77 77
78 78 ## Volumétrie & complétude live
79 79
80 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 8 (dont **8 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 1/8 actives (12 %)
84 84 - **GPS** : 8/8 actives (100 %)
85 85 - **Mode** : 8/8 actives (100 %)
86 86 - **Parution** : 8/8 actives (100 %)
87 - **Dernier sync** : 2026-08-19 03:55 — trouvées 8, +0, ~0, -0
88 - **Syncs enregistrés** (`sync_log`) : 14
87 +- **Dernier sync** : 2026-08-22 21:09 — trouvées 8, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 73
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/dilitrust.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/dilitrust.md
7 7 Rôle : Fiche connecteur — DiliTrust (employeur direct, ATS lever)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Account Manager* — Montréal · ∅ · parue le 2026-06-04.
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 3 (dont **3 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 0/3 actives (0 %)
79 79 - **GPS** : 3/3 actives (100 %)
80 80 - **Mode** : 3/3 actives (100 %)
81 81 - **Parution** : 3/3 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:55 — trouvées 3, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 26
82 +- **Dernier sync** : 2026-08-22 21:09 — trouvées 3, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 85
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/distro.md +12 −12
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/distro.md
7 7 Rôle : Fiche connecteur — Distro (employeur direct, ATS lever)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **7 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -56,13 +56,13 @@ Complétude mesurée sur les **5 offres actives** de la source (base live, 2026-
56 56 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 57 | `date_posted` — Date de parution | ISO 8601 | 100 % |
58 58 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 80 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 86 % |
60 60 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 61 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 62 | `apply_url` — Candidature | lien de candidature directe | 100 % |
63 63 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 64
65 Exemple réel : *Conversion Consultant* — Québec · ∅ · parue le 2026-06-08.
65 +Exemple réel : *16487.1 - System Expert - Canada - On Site* — Québec · ∅ · parue le 2026-08-20.
66 66
67 67 ## Fréquence & budgets
68 68
@@ -72,15 +72,15 @@ Exemple réel : *Conversion Consultant* — Québec · ∅ · parue le 2026-06-0
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 - **Offres en base** : 5 (dont **5 actives**, 0 masquées comme doublons `dup_of`)
78 - **Salaire** : 5/5 actives (100 %)
79 - **GPS** : 5/5 actives (100 %)
80 - **Mode** : 5/5 actives (100 %)
81 - **Parution** : 5/5 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:55 — trouvées 5, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 26
77 +- **Offres en base** : 7 (dont **7 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 7/7 actives (100 %)
79 +- **GPS** : 7/7 actives (100 %)
80 +- **Mode** : 7/7 actives (100 %)
81 +- **Parution** : 7/7 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:09 — trouvées 7, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 85
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/domtar.md +13 −13
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/domtar.md
7 7 Rôle : Fiche connecteur — Domtar (employeur direct, ATS successfactors)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,14 +36,14 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **106 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **102 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
43 43 | `title` — Titre | titre du poste | 100 % |
44 44 | `employer` — Employeur | nom de l'entreprise | 100 % |
45 45 | `url` — URL | lien direct vers l'offre originale | 100 % |
46 | `description` — Description | texte complet (HTML nettoyé) | 93 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 94 % |
47 47 | `city` — Ville | municipalité normalisée | 100 % |
48 48 | `region` — Région | région administrative | 92 % |
49 49 | `address` — Adresse | adresse du lieu de travail | 0 % |
@@ -56,8 +56,8 @@ Complétude mesurée sur les **106 offres actives** de la source (base live, 202
56 56 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 57 | `date_posted` — Date de parution | ISO 8601 | 0 % |
58 58 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 92 % |
60 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 92 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 91 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 93 % |
61 61 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 62 | `apply_url` — Candidature | lien de candidature directe | 0 % |
63 63 | `gps` — GPS | lat/lng (géocodage sans invention) | 99 % |
@@ -77,15 +77,15 @@ Exemple réel : *Sales Manager, Quebec Region* — Lachine · ∅ · parue le
77 77
78 78 ## Volumétrie & complétude live
79 79
80 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 81
82 - **Offres en base** : 107 (dont **106 actives**, 0 masquées comme doublons `dup_of`)
83 - **Salaire** : 0/106 actives (0 %)
84 - **GPS** : 105/106 actives (99 %)
85 - **Mode** : 0/106 actives (0 %)
86 - **Parution** : 0/106 actives (0 %)
87 - **Dernier sync** : 2026-08-19 03:55 — trouvées 106, +0, ~0, -0
88 - **Syncs enregistrés** (`sync_log`) : 14
82 +- **Offres en base** : 107 (dont **102 actives**, 0 masquées comme doublons `dup_of`)
83 +- **Salaire** : 0/102 actives (0 %)
84 +- **GPS** : 101/102 actives (99 %)
85 +- **Mode** : 0/102 actives (0 %)
86 +- **Parution** : 0/102 actives (0 %)
87 +- **Dernier sync** : 2026-08-22 21:10 — trouvées 102, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 73
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/dulcedo.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/dulcedo.md
7 7 Rôle : Fiche connecteur — Dulcedo Management (employeur direct, ATS lever)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Senior Manager, Strategic Partnerships & New Business* — Mont
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 4 (dont **3 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 1/3 actives (33 %)
79 79 - **GPS** : 2/3 actives (67 %)
80 80 - **Mode** : 3/3 actives (100 %)
81 81 - **Parution** : 3/3 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:55 — trouvées 3, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 26
82 +- **Dernier sync** : 2026-08-22 21:10 — trouvées 3, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 85
84 84
85 85 ## Erreurs & dépannage
86 86
added docs/connecteurs/eastpenn.md +111 −0
@@ -0,0 +1,111 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/eastpenn.md
7 +Rôle : Fiche connecteur — East Penn Canada (employeur direct, ATS dayforce)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# East Penn Canada (`eastpenn`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`dayforce`](ats-dayforce.md) · Statut registre : actif · Connecteur : `jobka/connectors/eastpenn.py`
16 +
17 +## Description
18 +
19 +- **Site** : [East Penn Canada]()
20 +- **Page carrières** : https://jobs.dayforcehcm.com/fr-CA/eastpenn/CANDIDATEPORTAL
21 +- **Secteurs** : Distribution
22 +- **Région** : Laval
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-dayforce.md`](ats-dayforce.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `BOARD` | `CANDIDATEPORTAL` |
33 +| `CULTURE` | `fr-CA` |
34 +| `EMPLOYER` | `East Penn Canada` |
35 +| `NS` | `eastpenn` |
36 +- **Throttle** : 0.8 s entre requêtes.
37 +- **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).
38 +
39 +## Champs → schéma
40 +
41 +Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 +
43 +| Champ (`jobs.*`) | Rôle | Complétude |
44 +|---|---|---|
45 +| `title` — Titre | titre du poste | 100 % |
46 +| `employer` — Employeur | nom de l'entreprise | 100 % |
47 +| `url` — URL | lien direct vers l'offre originale | 100 % |
48 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
49 +| `city` — Ville | municipalité normalisée | 100 % |
50 +| `region` — Région | région administrative | 100 % |
51 +| `address` — Adresse | adresse du lieu de travail | 100 % |
52 +| `postal_code` — Code postal | code postal si publié | 33 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 33 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
57 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
60 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 67 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 +
67 +Exemple réel : *Technicien de service - Laval* — Laval · ∅ · parue le 2026-07-27.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 0.8 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_DAYFORCE_DETAIL_LIMIT` | `80` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 3 (dont **3 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 0/3 actives (0 %)
86 +- **GPS** : 3/3 actives (100 %)
87 +- **Mode** : 0/3 actives (0 %)
88 +- **Parution** : 3/3 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 3, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 5
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync eastpenn` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='eastpenn' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 East Penn Canada » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
added docs/connecteurs/ecosystem.md +104 −0
@@ -0,0 +1,104 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/ecosystem.md
7 +Rôle : Fiche connecteur — Ecosystem Énergie (employeur direct, ATS lever)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Ecosystem Énergie (`ecosystem`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`lever`](ats-lever.md) · Statut registre : actif · Connecteur : `jobka/connectors/ecosystem.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Ecosystem Énergie]()
20 +- **Page carrières** : https://jobs.lever.co/ecosystem
21 +- **Secteurs** : Énergie
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-lever.md`](ats-lever.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Ecosystem Énergie` |
33 +| `ORG` | `ecosystem` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 100 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 +
65 +Exemple réel : *Surveillant de chantier (Mécanique du bâtiment)* — Montréal · ∅ · parue le 2026-06-19.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- 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.
72 +
73 +## Volumétrie & complétude live
74 +
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 +
77 +- **Offres en base** : 4 (dont **4 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 0/4 actives (0 %)
79 +- **GPS** : 4/4 actives (100 %)
80 +- **Mode** : 4/4 actives (100 %)
81 +- **Parution** : 4/4 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 4, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 6
84 +
85 +## Erreurs & dépannage
86 +
87 +Aucune erreur dans `sync_log` pour cette source.
88 +
89 +- Rejouer un sync isolé : `.venv/bin/python run.py sync ecosystem` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='ecosystem' ORDER BY ts DESC LIMIT 5;"`
90 +- 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`.
91 +
92 +## Licence / conformité
93 +
94 +**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 Ecosystem Énergie » 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.
95 +
96 +## Historique
97 +
98 +**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 :
99 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
100 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
101 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
102 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
103 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
104 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/edf_renouvelables.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/edf_renouvelables.md
7 7 Rôle : Fiche connecteur — EDF Renouvelables Canada (employeur direct, ATS icims)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Ingénieur.e électrique sénior [Hybride]* — Montréal · É
77 77
78 78 ## Volumétrie & complétude live
79 79
80 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 9 (dont **9 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 7/9 actives (78 %)
84 84 - **GPS** : 6/9 actives (67 %)
85 85 - **Mode** : 6/9 actives (67 %)
86 86 - **Parution** : 9/9 actives (100 %)
87 - **Dernier sync** : 2026-08-19 03:55 — trouvées 9, +0, ~0, -0
88 - **Syncs enregistrés** (`sync_log`) : 14
87 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 9, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 73
89 89
90 90 ## Erreurs & dépannage
91 91
added docs/connecteurs/eidosmontreal.md +111 −0
@@ -0,0 +1,111 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/eidosmontreal.md
7 +Rôle : Fiche connecteur — Eidos-Montréal (employeur direct, ATS dayforce)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Eidos-Montréal (`eidosmontreal`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`dayforce`](ats-dayforce.md) · Statut registre : actif · Connecteur : `jobka/connectors/eidosmontreal.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Eidos-Montréal]()
20 +- **Page carrières** : https://jobs.dayforcehcm.com/fr-CA/eic/CANDIDATEPORTAL
21 +- **Secteurs** : Jeu vidéo
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-dayforce.md`](ats-dayforce.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `BOARD` | `CANDIDATEPORTAL` |
33 +| `CULTURE` | `fr-CA` |
34 +| `EMPLOYER` | `Eidos-Montréal` |
35 +| `NS` | `eic` |
36 +- **Throttle** : 0.8 s entre requêtes.
37 +- **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).
38 +
39 +## Champs → schéma
40 +
41 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 +
43 +| Champ (`jobs.*`) | Rôle | Complétude |
44 +|---|---|---|
45 +| `title` — Titre | titre du poste | 100 % |
46 +| `employer` — Employeur | nom de l'entreprise | 100 % |
47 +| `url` — URL | lien direct vers l'offre originale | 100 % |
48 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
49 +| `city` — Ville | municipalité normalisée | 100 % |
50 +| `region` — Région | région administrative | 100 % |
51 +| `address` — Adresse | adresse du lieu de travail | 100 % |
52 +| `postal_code` — Code postal | code postal si publié | 0 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
57 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
60 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 +
67 +Exemple réel : *Responsable senior, marketing et marque* — Montréal · ∅ · parue le 2026-07-07.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 0.8 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_DAYFORCE_DETAIL_LIMIT` | `80` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 0/2 actives (0 %)
86 +- **GPS** : 2/2 actives (100 %)
87 +- **Mode** : 0/2 actives (0 %)
88 +- **Parution** : 2/2 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 2, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 5
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync eidosmontreal` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='eidosmontreal' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 Eidos-Montréal » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/emcocorporation.md +14 −14
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/emcocorporation.md
7 7 Rôle : Fiche connecteur — EMCO (employeur direct, ATS smartrecruiters)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **67 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **64 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -48,15 +48,15 @@ Complétude mesurée sur les **67 offres actives** de la source (base live, 2026
48 48 | `region` — Région | région administrative | 100 % |
49 49 | `address` — Adresse | adresse du lieu de travail | 0 % |
50 50 | `postal_code` — Code postal | code postal si publié | 0 % |
51 | `work_mode` — Mode | presentiel / hybride / teletravail | 22 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 20 % |
52 52 | `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 48 % |
54 | `salary_label` — Libellé salaire | texte salarial original | 48 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 45 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 45 % |
55 55 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 56 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 100 % |
57 57 | `date_posted` — Date de parution | ISO 8601 | 100 % |
58 58 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 93 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 92 % |
60 60 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 61 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 62 | `apply_url` — Candidature | lien de candidature directe | 0 % |
@@ -77,15 +77,15 @@ Exemple réel : *Gestionnaire Junior en Distribution / Strategic Development Tra
77 77
78 78 ## Volumétrie & complétude live
79 79
80 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 81
82 - **Offres en base** : 67 (dont **67 actives**, 0 masquées comme doublons `dup_of`)
83 - **Salaire** : 32/67 actives (48 %)
84 - **GPS** : 67/67 actives (100 %)
85 - **Mode** : 15/67 actives (22 %)
86 - **Parution** : 67/67 actives (100 %)
87 - **Dernier sync** : 2026-08-19 03:55 — trouvées 67, +0, ~0, -0
88 - **Syncs enregistrés** (`sync_log`) : 26
82 +- **Offres en base** : 67 (dont **64 actives**, 0 masquées comme doublons `dup_of`)
83 +- **Salaire** : 29/64 actives (45 %)
84 +- **GPS** : 64/64 actives (100 %)
85 +- **Mode** : 13/64 actives (20 %)
86 +- **Parution** : 64/64 actives (100 %)
87 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 64, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 85
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/eminent_valet.md +12 −12
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/eminent_valet.md
7 7 Rôle : Fiche connecteur — Eminent Valet (employeur direct, ATS workable)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **10 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -49,7 +49,7 @@ Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-
49 49 | `address` — Adresse | adresse du lieu de travail | 0 % |
50 50 | `postal_code` — Code postal | code postal si publié | 0 % |
51 51 | `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
52 | `employment_type` — Type | temps_plein / temps_partiel / … | 89 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 80 % |
53 53 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 100 % |
54 54 | `salary_label` — Libellé salaire | texte salarial original | 100 % |
55 55 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
@@ -62,7 +62,7 @@ Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-
62 62 | `apply_url` — Candidature | lien de candidature directe | 100 % |
63 63 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 64
65 Exemple réel : *Valet & Butler \| Voiturier et Majordome (On-call, Sur appel)* — Montréal · Rémunération compétitive : 18 $ de l’heure+ pourboires selon la performance (non plafonnés… · parue le 2026-08-17.
65 +Exemple réel : *Valet Voiturier \| Valet driver (Sur appel/On-call)* — Montréal · Rémunération compétitive : 18 $ de l’heure + pourboires selon la performance (non plafonné… · parue le 2026-08-20.
66 66
67 67 ## Fréquence & budgets
68 68
@@ -72,15 +72,15 @@ Exemple réel : *Valet & Butler \| Voiturier et Majordome (On-call, Sur appel)*
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 - **Offres en base** : 9 (dont **9 actives**, 0 masquées comme doublons `dup_of`)
78 - **Salaire** : 9/9 actives (100 %)
79 - **GPS** : 9/9 actives (100 %)
80 - **Mode** : 0/9 actives (0 %)
81 - **Parution** : 9/9 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:55 — trouvées 9, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 26
77 +- **Offres en base** : 10 (dont **10 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 10/10 actives (100 %)
79 +- **GPS** : 10/10 actives (100 %)
80 +- **Mode** : 0/10 actives (0 %)
81 +- **Parution** : 10/10 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 10, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 85
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/eosaircraftinc.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/eosaircraftinc.md
7 7 Rôle : Fiche connecteur — EOS Aircraft (employeur direct, ATS bamboohr)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **4 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Ingénieur principal – Systèmes de gestion de batterie (BMS)
77 77
78 78 ## Volumétrie & complétude live
79 79
80 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 4 (dont **4 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/4 actives (0 %)
84 84 - **GPS** : 4/4 actives (100 %)
85 85 - **Mode** : 4/4 actives (100 %)
86 86 - **Parution** : 4/4 actives (100 %)
87 - **Dernier sync** : 2026-08-19 03:55 — trouvées 4, +0, ~0, -0
88 - **Syncs enregistrés** (`sync_log`) : 26
87 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 4, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 85
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/eq3_ltd.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/eq3_ltd.md
7 7 Rôle : Fiche connecteur — EQ3 (employeur direct, ATS breezy)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **10 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **10 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Consultant(e) en design - À temps plein* — Brossard · Nos c
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 10 (dont **10 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 6/10 actives (60 %)
79 79 - **GPS** : 10/10 actives (100 %)
80 80 - **Mode** : 0/10 actives (0 %)
81 81 - **Parution** : 10/10 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:55 — trouvées 10, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 26
82 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 10, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 85
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/eqbank.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/eqbank.md
7 7 Rôle : Fiche connecteur — EQ Bank (employeur direct, ATS lever)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -72,15 +72,15 @@ Exemple réel : *Directeur régional adjoint, Origination commerciale (CFG)/Asso
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 77 - **Offres en base** : 6 (dont **6 actives**, 0 masquées comme doublons `dup_of`)
78 78 - **Salaire** : 3/6 actives (50 %)
79 79 - **GPS** : 3/6 actives (50 %)
80 80 - **Mode** : 6/6 actives (100 %)
81 81 - **Parution** : 6/6 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:55 — trouvées 6, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 26
82 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 6, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 85
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/espresso_jobs.md +23 −23
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/espresso_jobs.md
7 7 Rôle : Fiche connecteur — portail agrégateur Espresso-Jobs
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -35,7 +35,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
35 35
36 36 ## Champs → schéma
37 37
38 Complétude mesurée sur les **309 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
38 +Complétude mesurée sur les **305 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
39 39
40 40 | Champ (`jobs.*`) | Rôle | Complétude |
41 41 |---|---|---|
@@ -43,25 +43,25 @@ Complétude mesurée sur les **309 offres actives** de la source (base live, 202
43 43 | `employer` — Employeur | nom de l'entreprise | 100 % |
44 44 | `url` — URL | lien direct vers l'offre originale | 100 % |
45 45 | `description` — Description | texte complet (HTML nettoyé) | 100 % |
46 | `city` — Ville | municipalité normalisée | 99 % |
47 | `region` — Région | région administrative | 99 % |
46 +| `city` — Ville | municipalité normalisée | 100 % |
47 +| `region` — Région | région administrative | 100 % |
48 48 | `address` — Adresse | adresse du lieu de travail | 100 % |
49 | `postal_code` — Code postal | code postal si publié | 1 % |
50 | `work_mode` — Mode | presentiel / hybride / teletravail | 13 % |
51 | `employment_type` — Type | temps_plein / temps_partiel / … | 34 % |
52 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 23 % |
53 | `salary_label` — Libellé salaire | texte salarial original | 3 % |
49 +| `postal_code` — Code postal | code postal si publié | 2 % |
50 +| `work_mode` — Mode | presentiel / hybride / teletravail | 19 % |
51 +| `employment_type` — Type | temps_plein / temps_partiel / … | 32 % |
52 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 21 % |
53 +| `salary_label` — Libellé salaire | texte salarial original | 6 % |
54 54 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
55 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
55 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 88 % |
56 56 | `date_posted` — Date de parution | ISO 8601 | 100 % |
57 57 | `date_deadline` — Date limite | date limite pour postuler | 100 % |
58 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 77 % |
59 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
60 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
58 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 76 % |
59 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 99 % |
60 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 99 % |
61 61 | `apply_url` — Candidature | lien de candidature directe | 0 % |
62 | `gps` — GPS | lat/lng (géocodage sans invention) | 94 % |
62 +| `gps` — GPS | lat/lng (géocodage sans invention) | 5 % |
63 63
64 Exemple réel : *Bilingual Customer Service Representative* — Montréal · This position is hourly, and the starting pay rate is $23.50/hour with eligibility for a a… · parue le 2026-08-15.
64 +Exemple réel : *Développeur logiciel I / Software Engineer I* — Montréal · The annualized base pay range for this role is expected to be between $67,900 - $126,100 C… · parue le 2026-08-22.
65 65
66 66 ## Fréquence & budgets
67 67
@@ -77,15 +77,15 @@ Exemple réel : *Bilingual Customer Service Representative* — Montréal · Thi
77 77
78 78 ## Volumétrie & complétude live
79 79
80 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 81
82 - **Offres en base** : 309 (dont **309 actives**, 13 masquées comme doublons `dup_of`)
83 - **Salaire** : 70/309 actives (23 %)
84 - **GPS** : 292/309 actives (94 %)
85 - **Mode** : 39/309 actives (13 %)
86 - **Parution** : 309/309 actives (100 %)
87 - **Dernier sync** : 2026-08-19 03:55 — trouvées 309, +0, ~0, -0
88 - **Syncs enregistrés** (`sync_log`) : 14
82 +- **Offres en base** : 617 (dont **305 actives**, 12 masquées comme doublons `dup_of`)
83 +- **Salaire** : 63/305 actives (21 %)
84 +- **GPS** : 14/305 actives (5 %)
85 +- **Mode** : 58/305 actives (19 %)
86 +- **Parution** : 305/305 actives (100 %)
87 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 305, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 73
89 89
90 90 ## Erreurs & dépannage
91 91
added docs/connecteurs/eurofinsenvironex.md +104 −0
@@ -0,0 +1,104 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/eurofinsenvironex.md
7 +Rôle : Fiche connecteur — Eurofins EnvironeX (employeur direct, ATS recruitee)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Eurofins EnvironeX (`eurofinsenvironex`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`recruitee`](ats-recruitee.md) · Statut registre : actif · Connecteur : `jobka/connectors/eurofinsenvironex.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Eurofins EnvironeX]()
20 +- **Page carrières** : https://eurofinsenvironex.recruitee.com
21 +- **Secteurs** : Laboratoires
22 +- **Région** : Longueuil
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-recruitee.md`](ats-recruitee.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Eurofins EnvironeX` |
33 +| `ORG` | `eurofinsenvironex` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **47 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 100 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 100 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 36 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 100 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 98 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 +
65 +Exemple réel : *Technicien(ne) de laboratoire en chimie métaux - Quart de Soir* — Longueuil · ∅ · parue le 2026-08-21.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- 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.
72 +
73 +## Volumétrie & complétude live
74 +
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 +
77 +- **Offres en base** : 47 (dont **47 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 0/47 actives (0 %)
79 +- **GPS** : 47/47 actives (100 %)
80 +- **Mode** : 47/47 actives (100 %)
81 +- **Parution** : 47/47 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 47, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 6
84 +
85 +## Erreurs & dépannage
86 +
87 +Aucune erreur dans `sync_log` pour cette source.
88 +
89 +- Rejouer un sync isolé : `.venv/bin/python run.py sync eurofinsenvironex` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='eurofinsenvironex' ORDER BY ts DESC LIMIT 5;"`
90 +- 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`.
91 +
92 +## Licence / conformité
93 +
94 +**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 Eurofins EnvironeX » 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.
95 +
96 +## Historique
97 +
98 +**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 :
99 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
100 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
101 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
102 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
103 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
104 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/evlo.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/evlo.md
7 7 Rôle : Fiche connecteur — EVLO (Hydro-Québec) (employeur direct, ATS bamboohr)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Ingénieur en automatisation* — Québec · ∅ · parue le 20
77 77
78 78 ## Volumétrie & complétude live
79 79
80 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 3 (dont **3 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 0/3 actives (0 %)
84 84 - **GPS** : 3/3 actives (100 %)
85 85 - **Mode** : 3/3 actives (100 %)
86 86 - **Parution** : 3/3 actives (100 %)
87 - **Dernier sync** : 2026-08-19 03:55 — trouvées 3, +0, ~0, -0
88 - **Syncs enregistrés** (`sync_log`) : 14
87 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 3, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 73
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/evolving_web.md +13 −13
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/evolving_web.md
7 7 Rôle : Fiche connecteur — Evolving Web (employeur direct, ATS workable)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **14 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **12 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -48,12 +48,12 @@ Complétude mesurée sur les **14 offres actives** de la source (base live, 2026
48 48 | `region` — Région | région administrative | 100 % |
49 49 | `address` — Adresse | adresse du lieu de travail | 0 % |
50 50 | `postal_code` — Code postal | code postal si publié | 0 % |
51 | `work_mode` — Mode | presentiel / hybride / teletravail | 14 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 17 % |
52 52 | `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 53 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 54 | `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 55 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 93 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 92 % |
57 57 | `date_posted` — Date de parution | ISO 8601 | 100 % |
58 58 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 59 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 50 % |
@@ -62,7 +62,7 @@ Complétude mesurée sur les **14 offres actives** de la source (base live, 2026
62 62 | `apply_url` — Candidature | lien de candidature directe | 100 % |
63 63 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 64
65 Exemple réel : *Technical Content and Proposal Writer* — Montréal · ∅ · parue le 2026-08-12.
65 +Exemple réel : *Chef de projets* — Montréal · ∅ · parue le 2026-08-19.
66 66
67 67 ## Fréquence & budgets
68 68
@@ -72,15 +72,15 @@ Exemple réel : *Technical Content and Proposal Writer* — Montréal · ∅ ·
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 - **Offres en base** : 14 (dont **14 actives**, 0 masquées comme doublons `dup_of`)
78 - **Salaire** : 0/14 actives (0 %)
79 - **GPS** : 14/14 actives (100 %)
80 - **Mode** : 2/14 actives (14 %)
81 - **Parution** : 14/14 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:55 — trouvées 14, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 26
77 +- **Offres en base** : 17 (dont **12 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 0/12 actives (0 %)
79 +- **GPS** : 12/12 actives (100 %)
80 +- **Mode** : 2/12 actives (17 %)
81 +- **Parution** : 12/12 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 12, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 85
84 84
85 85 ## Erreurs & dépannage
86 86
added docs/connecteurs/excellencepeterbilt.md +111 −0
@@ -0,0 +1,111 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/excellencepeterbilt.md
7 +Rôle : Fiche connecteur — Camions Excellence Peterbilt (employeur direct, ATS dayforce)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Camions Excellence Peterbilt (`excellencepeterbilt`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`dayforce`](ats-dayforce.md) · Statut registre : actif · Connecteur : `jobka/connectors/excellencepeterbilt.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Camions Excellence Peterbilt]()
20 +- **Page carrières** : https://jobs.dayforcehcm.com/fr-CA/camion/CANDIDATEPORTAL
21 +- **Secteurs** : Automobile
22 +- **Région** : Sainte-Julie
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-dayforce.md`](ats-dayforce.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `BOARD` | `CANDIDATEPORTAL` |
33 +| `CULTURE` | `fr-CA` |
34 +| `EMPLOYER` | `Camions Excellence Peterbilt` |
35 +| `NS` | `camion` |
36 +- **Throttle** : 0.8 s entre requêtes.
37 +- **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).
38 +
39 +## Champs → schéma
40 +
41 +Complétude mesurée sur les **40 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 +
43 +| Champ (`jobs.*`) | Rôle | Complétude |
44 +|---|---|---|
45 +| `title` — Titre | titre du poste | 100 % |
46 +| `employer` — Employeur | nom de l'entreprise | 100 % |
47 +| `url` — URL | lien direct vers l'offre originale | 100 % |
48 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
49 +| `city` — Ville | municipalité normalisée | 100 % |
50 +| `region` — Région | région administrative | 100 % |
51 +| `address` — Adresse | adresse du lieu de travail | 100 % |
52 +| `postal_code` — Code postal | code postal si publié | 0 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 32 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
57 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
60 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 62 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 +
67 +Exemple réel : *Conseiller au service* — Sainte-Julie · ∅ · parue le 2026-08-19.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 0.8 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_DAYFORCE_DETAIL_LIMIT` | `80` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 40 (dont **40 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 0/40 actives (0 %)
86 +- **GPS** : 40/40 actives (100 %)
87 +- **Mode** : 0/40 actives (0 %)
88 +- **Parution** : 40/40 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 40, +0, ~1, -0
90 +- **Syncs enregistrés** (`sync_log`) : 5
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync excellencepeterbilt` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='excellencepeterbilt' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 Camions Excellence Peterbilt » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
added docs/connecteurs/exegy.md +104 −0
@@ -0,0 +1,104 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/exegy.md
7 +Rôle : Fiche connecteur — Exegy (employeur direct, ATS ashby)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Exegy (`exegy`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`ashby`](ats-ashby.md) · Statut registre : actif · Connecteur : `jobka/connectors/exegy.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Exegy]()
20 +- **Page carrières** : https://jobs.ashbyhq.com/exegy
21 +- **Secteurs** : TI
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-ashby.md`](ats-ashby.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Exegy` |
33 +| `ORG` | `exegy` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 100 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 +
65 +Exemple réel : *Chef d'équipe développement logiciel C++ / Lead Software Developer, C++* — Montréal · ∅ · parue le 2026-08-05.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- 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.
72 +
73 +## Volumétrie & complétude live
74 +
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 +
77 +- **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 0/2 actives (0 %)
79 +- **GPS** : 2/2 actives (100 %)
80 +- **Mode** : 2/2 actives (100 %)
81 +- **Parution** : 2/2 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 2, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 6
84 +
85 +## Erreurs & dépannage
86 +
87 +Aucune erreur dans `sync_log` pour cette source.
88 +
89 +- Rejouer un sync isolé : `.venv/bin/python run.py sync exegy` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='exegy' ORDER BY ts DESC LIMIT 5;"`
90 +- 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`.
91 +
92 +## Licence / conformité
93 +
94 +**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 Exegy » 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.
95 +
96 +## Historique
97 +
98 +**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 :
99 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
100 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
101 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
102 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
103 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
104 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/exfo.md +11 −11
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/exfo.md
7 7 Rôle : Fiche connecteur — EXFO (employeur direct, ATS workday)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **27 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **24 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -50,7 +50,7 @@ Complétude mesurée sur les **27 offres actives** de la source (base live, 2026
50 50 | `region` — Région | région administrative | 100 % |
51 51 | `address` — Adresse | adresse du lieu de travail | 0 % |
52 52 | `postal_code` — Code postal | code postal si publié | 0 % |
53 | `work_mode` — Mode | presentiel / hybride / teletravail | 56 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 58 % |
54 54 | `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
55 55 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
56 56 | `salary_label` — Libellé salaire | texte salarial original | 0 % |
@@ -79,15 +79,15 @@ Exemple réel : *Specialiste controle des offres* — Québec · ∅ · parue le
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 27 (dont **27 actives**, 0 masquées comme doublons `dup_of`)
85 - **Salaire** : 0/27 actives (0 %)
86 - **GPS** : 27/27 actives (100 %)
87 - **Mode** : 15/27 actives (56 %)
88 - **Parution** : 27/27 actives (100 %)
89 - **Dernier sync** : 2026-08-19 03:56 — trouvées 27, +0, ~17, -0
90 - **Syncs enregistrés** (`sync_log`) : 14
84 +- **Offres en base** : 27 (dont **24 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 0/24 actives (0 %)
86 +- **GPS** : 24/24 actives (100 %)
87 +- **Mode** : 14/24 actives (58 %)
88 +- **Parution** : 24/24 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 24, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 73
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/exo.md +19 −15
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/exo.md
7 7 Rôle : Fiche connecteur — exo (transport métropolitain) (employeur direct, ATS taleo_tbe)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -39,7 +39,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
39 39
40 40 ## Champs → schéma
41 41
42 Complétude mesurée sur les **25 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
42 +Complétude mesurée sur les **25 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
43 43
44 44 | Champ (`jobs.*`) | Rôle | Complétude |
45 45 |---|---|---|
@@ -49,21 +49,21 @@ Complétude mesurée sur les **25 offres actives** de la source (base live, 2026
49 49 | `description` — Description | texte complet (HTML nettoyé) | 100 % |
50 50 | `city` — Ville | municipalité normalisée | 100 % |
51 51 | `region` — Région | région administrative | 100 % |
52 | `address` — Adresse | adresse du lieu de travail | 96 % |
53 | `postal_code` — Code postal | code postal si publié | 96 % |
54 | `work_mode` — Mode | presentiel / hybride / teletravail | 100 % |
52 +| `address` — Adresse | adresse du lieu de travail | 100 % |
53 +| `postal_code` — Code postal | code postal si publié | 100 % |
54 +| `work_mode` — Mode | presentiel / hybride / teletravail | 96 % |
55 55 | `employment_type` — Type | temps_plein / temps_partiel / … | 96 % |
56 56 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
57 57 | `salary_label` — Libellé salaire | texte salarial original | 0 % |
58 58 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
59 59 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
60 | `date_posted` — Date de parution | ISO 8601 | 100 % |
60 +| `date_posted` — Date de parution | ISO 8601 | 92 % |
61 61 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
62 62 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
63 63 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
64 64 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
65 65 | `apply_url` — Candidature | lien de candidature directe | 0 % |
66 | `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
66 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
67 67
68 68 Exemple réel : *Chargé(e) de projets* — Montréal - Siège social · ∅ · parue le 2026-08-13.
69 69
@@ -80,19 +80,23 @@ Exemple réel : *Chargé(e) de projets* — Montréal - Siège social · ∅ ·
80 80
81 81 ## Volumétrie & complétude live
82 82
83 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
83 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
84 84
85 - **Offres en base** : 25 (dont **25 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Offres en base** : 27 (dont **25 actives**, 0 masquées comme doublons `dup_of`)
86 86 - **Salaire** : 0/25 actives (0 %)
87 - **GPS** : 0/25 actives (0 %)
88 - **Mode** : 25/25 actives (100 %)
89 - **Parution** : 25/25 actives (100 %)
90 - **Dernier sync** : 2026-08-19 04:48 — trouvées 25, +25, ~0, -0
91 - **Syncs enregistrés** (`sync_log`) : 1
87 +- **GPS** : 25/25 actives (100 %)
88 +- **Mode** : 24/25 actives (96 %)
89 +- **Parution** : 23/25 actives (92 %)
90 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 25, +0, ~0, -0
91 +- **Syncs enregistrés** (`sync_log`) : 60
92 92
93 93 ## Erreurs & dépannage
94 94
95 Aucune erreur dans `sync_log` pour cette source.
95 +Erreurs relevées dans `sync_log` :
96 +
97 +| Erreur | Occurrences | Dernière fois |
98 +|---|---|---|
99 +| 503 Server Error: Service Unavailable for url: https://phh.tbe.taleo.net/phh04/ats/servlet… | 1 | 2026-08-21 23:11 |
96 100
97 101 - Rejouer un sync isolé : `.venv/bin/python run.py sync exo` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='exo' ORDER BY ts DESC LIMIT 5;"`
98 102 - 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`.
modified docs/connecteurs/explorance.md +12 −12
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/explorance.md
7 7 Rôle : Fiche connecteur — Explorance (employeur direct, ATS bamboohr)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **18 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **19 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -56,13 +56,13 @@ Complétude mesurée sur les **18 offres actives** de la source (base live, 2026
56 56 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 100 % |
57 57 | `date_posted` — Date de parution | ISO 8601 | 100 % |
58 58 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 78 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 79 % |
60 60 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 61 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 62 | `apply_url` — Candidature | lien de candidature directe | 0 % |
63 63 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 64
65 Exemple réel : *Coordonnateur(trice) des services de bureau et de la réception / Office Services & Recepti…* — Montréal · ∅ · parue le 2026-08-07.
65 +Exemple réel : *Administrateur(trice) de bases de données – PostgreSQL / Database Administrator – PostgreS…* — Montréal · ∅ · parue le 2026-08-21.
66 66
67 67 ## Fréquence & budgets
68 68
@@ -77,15 +77,15 @@ Exemple réel : *Coordonnateur(trice) des services de bureau et de la réception
77 77
78 78 ## Volumétrie & complétude live
79 79
80 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 81
82 - **Offres en base** : 18 (dont **18 actives**, 0 masquées comme doublons `dup_of`)
83 - **Salaire** : 0/18 actives (0 %)
84 - **GPS** : 18/18 actives (100 %)
85 - **Mode** : 18/18 actives (100 %)
86 - **Parution** : 18/18 actives (100 %)
87 - **Dernier sync** : 2026-08-19 03:56 — trouvées 18, +0, ~0, -0
88 - **Syncs enregistrés** (`sync_log`) : 26
82 +- **Offres en base** : 19 (dont **19 actives**, 0 masquées comme doublons `dup_of`)
83 +- **Salaire** : 0/19 actives (0 %)
84 +- **GPS** : 19/19 actives (100 %)
85 +- **Mode** : 19/19 actives (100 %)
86 +- **Parution** : 19/19 actives (100 %)
87 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 19, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 85
89 89
90 90 ## Erreurs & dépannage
91 91
added docs/connecteurs/export_development_canada.md +104 −0
@@ -0,0 +1,104 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/export_development_canada.md
7 +Rôle : Fiche connecteur — Exportation et développement Canada (EDC) (employeur direct, ATS workable)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Exportation et développement Canada (EDC) (`export_development_canada`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`workable`](ats-workable.md) · Statut registre : actif · Connecteur : `jobka/connectors/export_development_canada.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Exportation et développement Canada (EDC)]()
20 +- **Page carrières** : https://apply.workable.com/export-development-canada
21 +- **Secteurs** : Finance
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-workable.md`](ats-workable.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Exportation et développement Canada (EDC)` |
33 +| `ORG` | `export-development-canada` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **6 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 17 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 83 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 83 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 33 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 +
65 +Exemple réel : *Associate/Sr. Associate, Portfolio Management & Impact Analytics - EN-265* — Montréal · Associate Position (Performance Risk Manager 16): Salaries typically range from $74,297 to… · parue le 2026-08-21.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- 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.
72 +
73 +## Volumétrie & complétude live
74 +
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 +
77 +- **Offres en base** : 6 (dont **6 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 5/6 actives (83 %)
79 +- **GPS** : 6/6 actives (100 %)
80 +- **Mode** : 1/6 actives (17 %)
81 +- **Parution** : 6/6 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 6, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 5
84 +
85 +## Erreurs & dépannage
86 +
87 +Aucune erreur dans `sync_log` pour cette source.
88 +
89 +- Rejouer un sync isolé : `.venv/bin/python run.py sync export_development_canada` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='export_development_canada' ORDER BY ts DESC LIMIT 5;"`
90 +- 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`.
91 +
92 +## Licence / conformité
93 +
94 +**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 Exportation et développement Canada (EDC) » 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.
95 +
96 +## Historique
97 +
98 +**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 :
99 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
100 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
101 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
102 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
103 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
104 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
added docs/connecteurs/fastcocanada.md +111 −0
@@ -0,0 +1,111 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/fastcocanada.md
7 +Rôle : Fiche connecteur — Fastco Canada (employeur direct, ATS dayforce)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Fastco Canada (`fastcocanada`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`dayforce`](ats-dayforce.md) · Statut registre : actif · Connecteur : `jobka/connectors/fastcocanada.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Fastco Canada]()
20 +- **Page carrières** : https://jobs.dayforcehcm.com/fr-CA/fastco/CANDIDATEPORTAL
21 +- **Secteurs** : Fabrication
22 +- **Région** : Pointe-Claire
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-dayforce.md`](ats-dayforce.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `BOARD` | `CANDIDATEPORTAL` |
33 +| `CULTURE` | `fr-CA` |
34 +| `EMPLOYER` | `Fastco Canada` |
35 +| `NS` | `fastco` |
36 +- **Throttle** : 0.8 s entre requêtes.
37 +- **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).
38 +
39 +## Champs → schéma
40 +
41 +Complétude mesurée sur les **14 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 +
43 +| Champ (`jobs.*`) | Rôle | Complétude |
44 +|---|---|---|
45 +| `title` — Titre | titre du poste | 100 % |
46 +| `employer` — Employeur | nom de l'entreprise | 100 % |
47 +| `url` — URL | lien direct vers l'offre originale | 100 % |
48 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
49 +| `city` — Ville | municipalité normalisée | 100 % |
50 +| `region` — Région | région administrative | 100 % |
51 +| `address` — Adresse | adresse du lieu de travail | 100 % |
52 +| `postal_code` — Code postal | code postal si publié | 0 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 57 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
57 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
60 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 71 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 +
67 +Exemple réel : *Production/Installation - Opérateur CNC* — Vaudreuil Dorion · ∅ · parue le 2026-08-17.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 0.8 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_DAYFORCE_DETAIL_LIMIT` | `80` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 14 (dont **14 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 0/14 actives (0 %)
86 +- **GPS** : 14/14 actives (100 %)
87 +- **Mode** : 0/14 actives (0 %)
88 +- **Parution** : 14/14 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 14, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 5
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync fastcocanada` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='fastcocanada' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 Fastco Canada » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
added docs/connecteurs/fedex.md +111 −0
@@ -0,0 +1,111 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/fedex.md
7 +Rôle : Fiche connecteur — FedEx Express Canada (employeur direct, ATS workday)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# FedEx Express Canada (`fedex`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`workday`](ats-workday.md) · Statut registre : actif · Connecteur : `jobka/connectors/fedex.py`
16 +
17 +## Description
18 +
19 +- **Site** : [FedEx Express Canada]()
20 +- **Page carrières** : https://fedex.wd1.myworkdayjobs.com/FXE-Canada_External_Career_Site
21 +- **Secteurs** : Logistique
22 +- **Région** : Québec
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-workday.md`](ats-workday.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `FedEx Express Canada` |
33 +| `HOST` | `wd1` |
34 +| `SITE` | `FXE-Canada_External_Career_Site` |
35 +| `TENANT` | `fedex` |
36 +- **Throttle** : 0.7 s entre requêtes.
37 +- **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).
38 +
39 +## Champs → schéma
40 +
41 +Complétude mesurée sur les **24 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 +
43 +| Champ (`jobs.*`) | Rôle | Complétude |
44 +|---|---|---|
45 +| `title` — Titre | titre du poste | 100 % |
46 +| `employer` — Employeur | nom de l'entreprise | 100 % |
47 +| `url` — URL | lien direct vers l'offre originale | 100 % |
48 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
49 +| `city` — Ville | municipalité normalisée | 100 % |
50 +| `region` — Région | région administrative | 88 % |
51 +| `address` — Adresse | adresse du lieu de travail | 0 % |
52 +| `postal_code` — Code postal | code postal si publié | 0 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 100 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 100 % |
57 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
60 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 96 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 88 % |
66 +
67 +Exemple réel : *Livreur Temps Plein / Full Time Courier* — Montréal · SALAIRE: $20.93 de l'heure · parue le 2026-07-23.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 0.7 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_WORKDAY_DETAIL_LIMIT` | `300` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 24 (dont **24 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 24/24 actives (100 %)
86 +- **GPS** : 21/24 actives (88 %)
87 +- **Mode** : 0/24 actives (0 %)
88 +- **Parution** : 24/24 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 24, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 5
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync fedex` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='fedex' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 FedEx Express Canada » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/fenetresconcept.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/fenetresconcept.md
7 7 Rôle : Fiche connecteur — Fenêtres Concept (employeur direct, ATS bamboohr)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Commis à la réception de marchandise* — Québec · à parti
77 77
78 78 ## Volumétrie & complétude live
79 79
80 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 2/2 actives (100 %)
84 84 - **GPS** : 2/2 actives (100 %)
85 85 - **Mode** : 2/2 actives (100 %)
86 86 - **Parution** : 2/2 actives (100 %)
87 - **Dernier sync** : 2026-08-19 03:56 — trouvées 2, +0, ~0, -0
88 - **Syncs enregistrés** (`sync_log`) : 14
87 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 2, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 73
89 89
90 90 ## Erreurs & dépannage
91 91
added docs/connecteurs/financeit.md +104 −0
@@ -0,0 +1,104 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/financeit.md
7 +Rôle : Fiche connecteur — Financeit (employeur direct, ATS workable)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Financeit (`financeit`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`workable`](ats-workable.md) · Statut registre : actif · Connecteur : `jobka/connectors/financeit.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Financeit]()
20 +- **Page carrières** : https://apply.workable.com/financeit
21 +- **Secteurs** : Finance
22 +- **Région** : Montréal
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-workable.md`](ats-workable.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Financeit` |
33 +| `ORG` | `financeit` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 100 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 100 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 100 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 +
65 +Exemple réel : *Directeur(trice) régional(e) des ventes - Québec, T.-N.-L. et Maritimes* — Québec · Salaire de base annuel : 80 000 $ - 90 000 $ · parue le 2026-08-21.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- 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.
72 +
73 +## Volumétrie & complétude live
74 +
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 +
77 +- **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 2/2 actives (100 %)
79 +- **GPS** : 2/2 actives (100 %)
80 +- **Mode** : 0/2 actives (0 %)
81 +- **Parution** : 2/2 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 2, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 5
84 +
85 +## Erreurs & dépannage
86 +
87 +Aucune erreur dans `sync_log` pour cette source.
88 +
89 +- Rejouer un sync isolé : `.venv/bin/python run.py sync financeit` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='financeit' ORDER BY ts DESC LIMIT 5;"`
90 +- 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`.
91 +
92 +## Licence / conformité
93 +
94 +**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 Financeit » 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.
95 +
96 +## Historique
97 +
98 +**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 :
99 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
100 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
101 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
102 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
103 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
104 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
added docs/connecteurs/fiserv.md +111 −0
@@ -0,0 +1,111 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/fiserv.md
7 +Rôle : Fiche connecteur — Fiserv (employeur direct, ATS workday)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# Fiserv (`fiserv`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`workday`](ats-workday.md) · Statut registre : actif · Connecteur : `jobka/connectors/fiserv.py`
16 +
17 +## Description
18 +
19 +- **Site** : [Fiserv]()
20 +- **Page carrières** : https://fiserv.wd5.myworkdayjobs.com/EXT
21 +- **Secteurs** : Finance
22 +- **Région** : Laval
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-workday.md`](ats-workday.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `Fiserv` |
33 +| `HOST` | `wd5` |
34 +| `SITE` | `EXT` |
35 +| `TENANT` | `fiserv` |
36 +- **Throttle** : 0.7 s entre requêtes.
37 +- **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).
38 +
39 +## Champs → schéma
40 +
41 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 +
43 +| Champ (`jobs.*`) | Rôle | Complétude |
44 +|---|---|---|
45 +| `title` — Titre | titre du poste | 100 % |
46 +| `employer` — Employeur | nom de l'entreprise | 100 % |
47 +| `url` — URL | lien direct vers l'offre originale | 100 % |
48 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
49 +| `city` — Ville | municipalité normalisée | 100 % |
50 +| `region` — Région | région administrative | 100 % |
51 +| `address` — Adresse | adresse du lieu de travail | 0 % |
52 +| `postal_code` — Code postal | code postal si publié | 0 % |
53 +| `work_mode` — Mode | presentiel / hybride / teletravail | 0 % |
54 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
55 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 50 % |
56 +| `salary_label` — Libellé salaire | texte salarial original | 50 % |
57 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
58 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
60 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 50 % |
62 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 +
67 +Exemple réel : *Territory Manager \| Laval* — Québec · Présente dans plus de 100 pays dans le monde, avec un chiffre d’affaires de 19,1 G$ · parue le 2026-08-14.
68 +
69 +## Fréquence & budgets
70 +
71 +- **Cadence** : resynchronisation **horaire** (PM2 `job-ka-sync` = `run.py watch 60`), suivie du géocodage en lot puis de la déduplication inter-sources.
72 +- **Throttle** : 0.7 s minimum entre deux requêtes vers la source (`request_delay`).
73 +- **Budgets / plafonds (variables d'environnement)** :
74 +
75 +| Variable | Défaut |
76 +|---|---|
77 +| `JOBKA_WORKDAY_DETAIL_LIMIT` | `300` |
78 +- 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.
79 +
80 +## Volumétrie & complétude live
81 +
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 +
84 +- **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 1/2 actives (50 %)
86 +- **GPS** : 2/2 actives (100 %)
87 +- **Mode** : 0/2 actives (0 %)
88 +- **Parution** : 2/2 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 2, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 5
91 +
92 +## Erreurs & dépannage
93 +
94 +Aucune erreur dans `sync_log` pour cette source.
95 +
96 +- Rejouer un sync isolé : `.venv/bin/python run.py sync fiserv` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='fiserv' ORDER BY ts DESC LIMIT 5;"`
97 +- 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`.
98 +
99 +## Licence / conformité
100 +
101 +**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 Fiserv » 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.
102 +
103 +## Historique
104 +
105 +**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 :
106 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
107 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
108 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
109 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
110 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
111 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/flare.md +5 −5
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/flare.md
7 7 Rôle : Fiche connecteur — Flare (cybersécurité) (employeur direct, ATS bamboohr)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **2 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -77,15 +77,15 @@ Exemple réel : *Chef·effe d'équipe en développement logiciel, Plateforme Age
77 77
78 78 ## Volumétrie & complétude live
79 79
80 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
80 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
81 81
82 82 - **Offres en base** : 2 (dont **2 actives**, 0 masquées comme doublons `dup_of`)
83 83 - **Salaire** : 1/2 actives (50 %)
84 84 - **GPS** : 2/2 actives (100 %)
85 85 - **Mode** : 2/2 actives (100 %)
86 86 - **Parution** : 2/2 actives (100 %)
87 - **Dernier sync** : 2026-08-19 03:56 — trouvées 2, +0, ~0, -0
88 - **Syncs enregistrés** (`sync_log`) : 14
87 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 2, +0, ~0, -0
88 +- **Syncs enregistrés** (`sync_log`) : 73
89 89
90 90 ## Erreurs & dépannage
91 91
modified docs/connecteurs/flinks.md +10 −36
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/flinks.md
7 7 Rôle : Fiche connecteur — Flinks (employeur direct, ATS workable)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,33 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **3 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
40
41 | Champ (`jobs.*`) | Rôle | Complétude |
42 |---|---|---|
43 | `title` — Titre | titre du poste | 100 % |
44 | `employer` — Employeur | nom de l'entreprise | 100 % |
45 | `url` — URL | lien direct vers l'offre originale | 100 % |
46 | `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 | `city` — Ville | municipalité normalisée | 100 % |
48 | `region` — Région | région administrative | 100 % |
49 | `address` — Adresse | adresse du lieu de travail | 0 % |
50 | `postal_code` — Code postal | code postal si publié | 0 % |
51 | `work_mode` — Mode | presentiel / hybride / teletravail | 100 % |
52 | `employment_type` — Type | temps_plein / temps_partiel / … | 67 % |
53 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 100 % |
54 | `salary_label` — Libellé salaire | texte salarial original | 100 % |
55 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 67 % |
57 | `date_posted` — Date de parution | ISO 8601 | 100 % |
58 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 100 % |
60 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 | `apply_url` — Candidature | lien de candidature directe | 100 % |
63 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64
65 Exemple réel : *Senior Full-Stack Developer* — Montréal · For experienced and qualified hires located in Canada, of senior (IC4) level, the compensa… · parue le 2026-06-29.
39 +*Aucune offre active en base pour cette source.*
66 40
67 41 ## Fréquence & budgets
68 42
@@ -72,15 +46,15 @@ Exemple réel : *Senior Full-Stack Developer* — Montréal · For experienced a
72 46
73 47 ## Volumétrie & complétude live
74 48
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
49 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 50
77 - **Offres en base** : 3 (dont **3 actives**, 0 masquées comme doublons `dup_of`)
78 - **Salaire** : 3/3 actives (100 %)
79 - **GPS** : 3/3 actives (100 %)
80 - **Mode** : 3/3 actives (100 %)
81 - **Parution** : 3/3 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:56 — trouvées 3, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 26
51 +- **Offres en base** : 3 (dont **0 actives**, 0 masquées comme doublons `dup_of`)
52 +- **Salaire** : 0/0 actives (—)
53 +- **GPS** : 0/0 actives (—)
54 +- **Mode** : 0/0 actives (—)
55 +- **Parution** : 0/0 actives (—)
56 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 0, +0, ~0, -0
57 +- **Syncs enregistrés** (`sync_log`) : 85
84 58
85 59 ## Erreurs & dépannage
86 60
added docs/connecteurs/flo_addenergie.md +104 −0
@@ -0,0 +1,104 @@
1 +<!--
2 +=============================================================================
3 +Job·Ka — Groupe KA
4 +Auteur : Simon-Pierre Boucher
5 +Contact : contact@spboucher.ai
6 +Fichier : docs/connecteurs/flo_addenergie.md
7 +Rôle : Fiche connecteur — FLO (AddÉnergie) (employeur direct, ATS workable)
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 + relancer le script pour régénérer.
10 +=============================================================================
11 +-->
12 +
13 +# FLO (AddÉnergie) (`flo_addenergie`)
14 +
15 +**Employeur direct** · Plateforme ATS : [`workable`](ats-workable.md) · Statut registre : actif · Connecteur : `jobka/connectors/flo_addenergie.py`
16 +
17 +## Description
18 +
19 +- **Site** : [FLO (AddÉnergie)]()
20 +- **Page carrières** : https://apply.workable.com/flo-addenergie
21 +- **Secteurs** : Énergie
22 +- **Région** : Québec
23 +- Offres marquées **« Offre directe »** dans l'app (badge) : la candidature se fait chez l'employeur, jamais via un intermédiaire.
24 +
25 +## Accès
26 +
27 +- **Mécanique** : voir la fiche plateforme [`ats-workable.md`](ats-workable.md) — API JSON publique du site carrières, backend `requests` direct (Scrapfly seulement si indiqué sur la fiche plateforme).
28 +- **Identifiants du tenant** (attributs du connecteur) :
29 +
30 +| Attribut | Valeur |
31 +|---|---|
32 +| `EMPLOYER` | `FLO (AddÉnergie)` |
33 +| `ORG` | `flo-addenergie` |
34 +- **Throttle** : 1.0 s entre requêtes.
35 +- **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 +## Champs → schéma
38 +
39 +Complétude mesurée sur les **11 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 +
41 +| Champ (`jobs.*`) | Rôle | Complétude |
42 +|---|---|---|
43 +| `title` — Titre | titre du poste | 100 % |
44 +| `employer` — Employeur | nom de l'entreprise | 100 % |
45 +| `url` — URL | lien direct vers l'offre originale | 100 % |
46 +| `description` — Description | texte complet (HTML nettoyé) | 100 % |
47 +| `city` — Ville | municipalité normalisée | 100 % |
48 +| `region` — Région | région administrative | 100 % |
49 +| `address` — Adresse | adresse du lieu de travail | 0 % |
50 +| `postal_code` — Code postal | code postal si publié | 0 % |
51 +| `work_mode` — Mode | presentiel / hybride / teletravail | 18 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 100 % |
53 +| `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 +| `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 +| `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 +| `requirements` — Exigences | scolarité, expérience, langues (JSON) | 9 % |
57 +| `date_posted` — Date de parution | ISO 8601 | 100 % |
58 +| `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 73 % |
60 +| `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 +| `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 +| `apply_url` — Candidature | lien de candidature directe | 100 % |
63 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 +
65 +Exemple réel : *Analyste développeur en support logiciel* — Québec · ∅ · parue le 2026-08-20.
66 +
67 +## Fréquence & budgets
68 +
69 +- **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** : 1.0 s minimum entre deux requêtes vers la source (`request_delay`).
71 +- 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.
72 +
73 +## Volumétrie & complétude live
74 +
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 +
77 +- **Offres en base** : 11 (dont **11 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 0/11 actives (0 %)
79 +- **GPS** : 11/11 actives (100 %)
80 +- **Mode** : 2/11 actives (18 %)
81 +- **Parution** : 11/11 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 23, +0, ~18, -0
83 +- **Syncs enregistrés** (`sync_log`) : 5
84 +
85 +## Erreurs & dépannage
86 +
87 +Aucune erreur dans `sync_log` pour cette source.
88 +
89 +- Rejouer un sync isolé : `.venv/bin/python run.py sync flo_addenergie` puis inspecter `sync_log` : `sqlite3 data/jobka.db "SELECT * FROM sync_log WHERE source='flo_addenergie' ORDER BY ts DESC LIMIT 5;"`
90 +- 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`.
91 +
92 +## Licence / conformité
93 +
94 +**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 FLO (AddÉnergie) » 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.
95 +
96 +## Historique
97 +
98 +**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 :
99 +- `fd4bfc8` qualité lieux : rejet des villes hors Québec, bâtiments McGill → Montréal ;
100 +- `5a66f48` +59 employeurs (sondage massif d'ATS + détection de pages carrières) ;
101 +- `4917d57` 8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics ;
102 +- `f6e7571` portails Guichet-Emplois, Jobillico, Espresso-Jobs — l'offre directe gagne toujours la canonique (dédup) ;
103 +- `744cbfc` badge « Offre directe », stats directes/portails, dépôt direct employeurs ;
104 +- `1604ff9` reprise sur coupure WAF Guichet-Emplois (retry + acquis partiel).
modified docs/connecteurs/fondsftq.md +10 −10
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/fondsftq.md
7 7 Rôle : Fiche connecteur — Fonds de solidarité FTQ (employeur direct, ATS workday)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **10 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **8 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -79,15 +79,15 @@ Exemple réel : *Expert(e) sénior(e) en gestion des identités et des accès (G
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 10 (dont **10 actives**, 0 masquées comme doublons `dup_of`)
85 - **Salaire** : 0/10 actives (0 %)
86 - **GPS** : 10/10 actives (100 %)
87 - **Mode** : 10/10 actives (100 %)
88 - **Parution** : 10/10 actives (100 %)
89 - **Dernier sync** : 2026-08-19 03:56 — trouvées 10, +0, ~7, -0
90 - **Syncs enregistrés** (`sync_log`) : 14
84 +- **Offres en base** : 10 (dont **8 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 0/8 actives (0 %)
86 +- **GPS** : 8/8 actives (100 %)
87 +- **Mode** : 8/8 actives (100 %)
88 +- **Parution** : 8/8 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 8, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 73
91 91
92 92 ## Erreurs & dépannage
93 93
modified docs/connecteurs/framestore.md +13 −13
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/framestore.md
7 7 Rôle : Fiche connecteur — Framestore (employeur direct, ATS recruitee)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -36,7 +36,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
36 36
37 37 ## Champs → schéma
38 38
39 Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
39 +Complétude mesurée sur les **10 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
40 40
41 41 | Champ (`jobs.*`) | Rôle | Complétude |
42 42 |---|---|---|
@@ -49,20 +49,20 @@ Complétude mesurée sur les **9 offres actives** de la source (base live, 2026-
49 49 | `address` — Adresse | adresse du lieu de travail | 0 % |
50 50 | `postal_code` — Code postal | code postal si publié | 100 % |
51 51 | `work_mode` — Mode | presentiel / hybride / teletravail | 100 % |
52 | `employment_type` — Type | temps_plein / temps_partiel / … | 22 % |
52 +| `employment_type` — Type | temps_plein / temps_partiel / … | 20 % |
53 53 | `salary` — Salaire ($) | bornes numériques normalisées $/h et $/an | 0 % |
54 54 | `salary_label` — Libellé salaire | texte salarial original | 0 % |
55 55 | `benefits` — Avantages | avantages sociaux publiés (JSON) | 0 % |
56 56 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 100 % |
57 57 | `date_posted` — Date de parution | ISO 8601 | 100 % |
58 58 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
59 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 67 % |
59 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 70 % |
60 60 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
61 61 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
62 62 | `apply_url` — Candidature | lien de candidature directe | 100 % |
63 63 | `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
64 64
65 Exemple réel : *Directeur·trice technique des éclairages \| Lighting TD* — Montréal · ∅ · parue le 2026-08-14.
65 +Exemple réel : *Generaliste Blender - Artiste au development visuel \| Blender Generalist - Visual Develop…* — Montréal · ∅ · parue le 2026-08-21.
66 66
67 67 ## Fréquence & budgets
68 68
@@ -72,15 +72,15 @@ Exemple réel : *Directeur·trice technique des éclairages \| Lighting TD* —
72 72
73 73 ## Volumétrie & complétude live
74 74
75 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
75 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
76 76
77 - **Offres en base** : 9 (dont **9 actives**, 0 masquées comme doublons `dup_of`)
78 - **Salaire** : 0/9 actives (0 %)
79 - **GPS** : 9/9 actives (100 %)
80 - **Mode** : 9/9 actives (100 %)
81 - **Parution** : 9/9 actives (100 %)
82 - **Dernier sync** : 2026-08-19 03:56 — trouvées 9, +0, ~0, -0
83 - **Syncs enregistrés** (`sync_log`) : 26
77 +- **Offres en base** : 10 (dont **10 actives**, 0 masquées comme doublons `dup_of`)
78 +- **Salaire** : 0/10 actives (0 %)
79 +- **GPS** : 10/10 actives (100 %)
80 +- **Mode** : 10/10 actives (100 %)
81 +- **Parution** : 10/10 actives (100 %)
82 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 10, +0, ~0, -0
83 +- **Syncs enregistrés** (`sync_log`) : 85
84 84
85 85 ## Erreurs & dépannage
86 86
modified docs/connecteurs/fruitdor.md +13 −13
@@ -5,7 +5,7 @@ Auteur : Simon-Pierre Boucher
5 5 Contact : contact@spboucher.ai
6 6 Fichier : docs/connecteurs/fruitdor.md
7 7 Rôle : Fiche connecteur — Fruit d'Or (employeur direct, ATS ultipro)
8 Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
8 +Généré : 2026-08-22 22:14 EDT par scripts/gen_connector_docs.py — NE PAS ÉDITER,
9 9 relancer le script pour régénérer.
10 10 =============================================================================
11 11 -->
@@ -38,7 +38,7 @@ Généré : 2026-08-19 05:40 EDT par scripts/gen_connector_docs.py — NE PAS
38 38
39 39 ## Champs → schéma
40 40
41 Complétude mesurée sur les **12 offres actives** de la source (base live, 2026-08-19 05:40 EDT).
41 +Complétude mesurée sur les **14 offres actives** de la source (base live, 2026-08-22 22:14 EDT).
42 42
43 43 | Champ (`jobs.*`) | Rôle | Complétude |
44 44 |---|---|---|
@@ -58,13 +58,13 @@ Complétude mesurée sur les **12 offres actives** de la source (base live, 2026
58 58 | `requirements` — Exigences | scolarité, expérience, langues (JSON) | 0 % |
59 59 | `date_posted` — Date de parution | ISO 8601 | 100 % |
60 60 | `date_deadline` — Date limite | date limite pour postuler | 0 % |
61 | `category` — Catégorie | taxonomie interne (TI, Santé, …) | 67 % |
61 +| `category` — Catégorie | taxonomie interne (TI, Santé, …) | 71 % |
62 62 | `language` — Langue | fr / en / bilingue (source ou heuristique) | 100 % |
63 63 | `company_logo` — Logo employeur | URL du logo si exposé par la source | 0 % |
64 64 | `apply_url` — Candidature | lien de candidature directe | 0 % |
65 | `gps` — GPS | lat/lng (géocodage sans invention) | 0 % |
65 +| `gps` — GPS | lat/lng (géocodage sans invention) | 100 % |
66 66
67 Exemple réel : *Conseiller(ère) Ressources humaines* — Plessisville · ∅ · parue le 2026-08-17.
67 +Exemple réel : *Opérateur en transformation alimentaire* — Plessisville · ∅ · parue le 2026-08-19.
68 68
69 69 ## Fréquence & budgets
70 70
@@ -79,15 +79,15 @@ Exemple réel : *Conseiller(ère) Ressources humaines* — Plessisville · ∅
79 79
80 80 ## Volumétrie & complétude live
81 81
82 *(mesuré le 2026-08-19 05:40 EDT dans `data/jobka.db`)*
82 +*(mesuré le 2026-08-22 22:14 EDT dans `data/jobka.db`)*
83 83
84 - **Offres en base** : 12 (dont **12 actives**, 0 masquées comme doublons `dup_of`)
85 - **Salaire** : 0/12 actives (0 %)
86 - **GPS** : 0/12 actives (0 %)
87 - **Mode** : 0/12 actives (0 %)
88 - **Parution** : 12/12 actives (100 %)
89 - **Dernier sync** : 2026-08-19 04:48 — trouvées 12, +12, ~0, -0
90 - **Syncs enregistrés** (`sync_log`) : 1
84 +- **Offres en base** : 14 (dont **14 actives**, 0 masquées comme doublons `dup_of`)
85 +- **Salaire** : 0/14 actives (0 %)
86 +- **GPS** : 14/14 actives (100 %)
87 +- **Mode** : 0/14 actives (0 %)
88 +- **Parution** : 14/14 actives (100 %)
89 +- **Dernier sync** : 2026-08-22 21:11 — trouvées 14, +0, ~0, -0
90 +- **Syncs enregistrés** (`sync_log`) : 60
91 91
92 92 ## Erreurs & dépannage
93 93

Diff truncated — file too large.