Créa·Ka — annuaire public cross-plateforme des créateurs de contenu québécois (crea-ka.com)
Python 73.6%
HTML 13.2%
TypeScript 6%
JavaScript 4.5%
CSS 1.7%
Dockerfile 0.6%
1{2 "_author": "Simon-Pierre Boucher <contact@spboucher.ai>",3 "_file": "data/sources.json",4 "_desc": "Registre des sources connectées — famille, mode d'accès, cadence (CLAUDE.md §9, §14, §19)",5 "updated": "2026-08-18",6 "sources": [7 {8 "id": "listes-medias",9 "famille": "decouverte",10 "palier": 3,11 "acces": "dataset local (listes & palmarès médias publics compilés : billie, frank, metricool, Favikon QC, canadult…)",12 "signal_identite": "listes_medias (0.85)",13 "cadence": "mensuelle (recompilation du dataset)",14 "notes": "376 créateurs québécois, handles par plateforme + audiences approximatives"15 },16 {17 "id": "wikidata-qc",18 "famille": "decouverte",19 "palier": 3,20 "acces": "API SPARQL publique Wikidata (nés/résidant au Québec, occupation créateur, handles sociaux curés)",21 "signal_identite": "base_publique (0.85)",22 "cadence": "hebdomadaire",23 "notes": "humoristes, youtubeurs, vidéastes web, streamers, podcasteurs notables ; is_minor levé via l'année de naissance publique"24 },25 {26 "id": "onlyqueb",27 "famille": "decouverte",28 "palier": 3,29 "acces": "requêtes directes (sitemap.xml + JSON-LD ProfilePage des pages profil publiques SSR)",30 "signal_identite": "cross_link (0.90) — liens sameAs auto-déclarés par la personne",31 "cadence": "hebdomadaire",32 "notes": "annuaire public onlyqueb.com — créateurs québécois sur abonnement (18+) ; nom public, photo, liens OnlyFans/Instagram/TikTok/X"33 },34 {35 "id": "youtube-recherche",36 "famille": "decouverte",37 "palier": 3,38 "acces": "requêtes directes (recherche publique YouTube filtre « chaînes », ytInitialData) — ~120 requêtes thématiques × marqueurs QC",39 "signal_identite": "profil_source (0.98) — la chaîne est le compte d'origine de la fiche",40 "cadence": "quotidienne (watch) — la couverture s'accumule à chaque passage",41 "notes": "filtre conservateur : marqueur québécois requis dans titre/description de la chaîne"42 },43 {44 "id": "wikipedia-qc",45 "famille": "decouverte",46 "palier": 3,47 "acces": "API MediaWiki publique (fr+en, catégories de créateurs QC : Vidéaste web canadien, Humoriste/Blogueur québécois, Canadian YouTubers/podcasters/Twitch streamers/TikTokers…) + API Wikidata wbgetentities (handles sociaux curés de l'infobox) — sans clé",48 "signal_identite": "base_publique (0.85)",49 "cadence": "hebdomadaire",50 "notes": "vague 3 — complète wikidata-qc (SPARQL) : catégories éditoriales → intro d'article (marqueur QC OBLIGATOIRE pour les catégories pan-canadiennes) → handles P2003/P7085/P2397/P2002/P5797/P2013 + site officiel P856 ; personnes décédées exclues, is_minor via P569, fiche seulement si ≥1 lien curé"51 },52 {53 "id": "palmares-apple",54 "famille": "decouverte",55 "palier": 2,56 "acces": "API marketing OFFICIELLE d'Apple (rss.marketingtools.apple.com, top 100 podcasts Canada, sans clé) + lookup iTunes groupé + tête de flux RSS pour l'attribution QC",57 "signal_identite": "profil_source (0.98)",58 "cadence": "quotidienne (watch) — le palmarès bouge chaque jour",59 "notes": "vague 3 — balados QC qui percent dans le top 100 CA (metrics.chart_rank_ca). Palmarès évalués 2026-08-18 : Spotify podcastcharts → API morte (HTTP 500) ; ADISQ → SPA JavaScript + artistes sans liens sociaux ; Bible urbaine → articles en prose sans handles (liaison ambiguë interdite §12) → Apple retenu. Fusion naturelle avec balados-itunes (même clé podcast:collectionId)"60 },61 {62 "id": "balados-itunes",63 "famille": "decouverte",64 "palier": 2,65 "acces": "API de recherche iTunes/Apple Podcasts (officielle, gratuite, sans clé)",66 "signal_identite": "profil_source (0.98)",67 "cadence": "quotidienne (watch)",68 "notes": "podcasteurs québécois : nom, artiste, pochette, genre, nb d'épisodes, flux RSS ; marqueur QC requis"69 },70 {71 "id": "instagram-profil",72 "famille": "enrichissement",73 "palier": 4,74 "acces": "Scrapfly (profil public web_profile_info — pas d'API publique de lecture)",75 "signal_identite": "cross_link (0.90) pour les liens de bio découverts",76 "cadence": "hebdomadaire (gros créateurs) / mensuelle",77 "notes": "abonnés, badge, bio, liens de bio → link_in_bio_url + comptes croisés"78 },79 {80 "id": "tiktok-profil",81 "famille": "enrichissement",82 "palier": 4,83 "acces": "Scrapfly (JSON d'hydratation de la page publique @handle)",84 "signal_identite": "cross_link (0.90) pour le lien de bio",85 "cadence": "hebdomadaire (gros créateurs) / mensuelle",86 "notes": "abonnés, badge, bio, lien de bio"87 },88 {89 "id": "youtube",90 "famille": "enrichissement",91 "palier": 2,92 "acces": "YouTube Data API v3 (officielle) si YOUTUBE_API_KEY, sinon voie publique complète SANS clé (vague 3) : page de chaîne (ytInitialData) + InnerTube browse du panneau « À propos » (clé publique embarquée) + page /videos",93 "signal_identite": "api_officielle (0.95) quand confirmé par l'API ; la voie publique ne touche pas au score",94 "cadence": "quotidienne (watch) — cap 300 chaînes/passage, rotation 14 j (≈4 200 comptes → convergence ~2 semaines)",95 "notes": "abonnés, nb de vidéos, vues totales (si affichées), date de la dernière vidéo (dormant >12 mois), description → bio, bannière + avatar, pays affiché"96 },97 {98 "id": "twitch",99 "famille": "enrichissement",100 "palier": 2,101 "acces": "API GQL publique du site web officiel (gql.twitch.tv, Client-ID public du client web — SANS clé, requêtes groupées 20 profils/POST) ; voie Helix officielle reprise si TWITCH_CLIENT_ID/SECRET fournis",102 "signal_identite": "api_officielle (0.95) via Helix ; la voie GQL publique ne touche pas au score",103 "cadence": "hebdomadaire",104 "notes": "vague 3 — abonnés (followers.totalCount, que Helix ne donne plus sans jeton de modérateur depuis 2023), description → bio, avatar, partenaire/affilié, dernière diffusion + jeu (fraîcheur). Empreinte TLS : requests accepté (vérifié 2026-08-18), repli curl-binaire prévu"105 },106 {107 "id": "link-in-bio",108 "famille": "enrichissement",109 "palier": 1,110 "acces": "requêtes directes (pages publiques SSR : linktr.ee, beacons.ai, bio.link, msha.ke, campsite.bio, snipfeed.co), repli Firecrawl",111 "signal_identite": "link_in_bio (0.95) — le signal le plus fort (§12.1)",112 "cadence": "mensuelle",113 "notes": "une page → TOUS les comptes du créateur ; consomme les link_in_bio_url découvertes par instagram-profil/tiktok-profil"114 },115 {116 "id": "balados-rss",117 "famille": "enrichissement",118 "palier": 1,119 "acces": "requêtes directes (flux RSS auto-déclarés des balados — AUCUNE clé) ; cap 150 flux/passage, re-visite 7 j, timeout court, fetch parallèle poli",120 "signal_identite": "cross_link (0.90) pour le lien officiel <link> du flux",121 "cadence": "quotidienne (watch) — rotation complète des 433 balados en ~3 jours, puis hebdomadaire",122 "notes": "nb d'épisodes réels, date du dernier épisode (détection dormant >12 mois), pochette → avatar, description → bio, catégories iTunes → niches, <link> → compte site-web/plateforme. Substitut sans clé de Podcast Index."123 },124 {125 "id": "podcastindex",126 "famille": "enrichissement",127 "palier": 2,128 "statut": "prêt — clés requises",129 "acces": "API Podcast Index (officielle, GRATUITE — inscription requise : https://api.podcastindex.org ; PODCASTINDEX_API_KEY/SECRET dans .env) — sauté proprement sans clés",130 "signal_identite": "api_officielle (0.95)",131 "cadence": "quotidienne (watch), re-visite 7 j par balado",132 "notes": "episodeCount, lastUpdateTime, itunesId, image, catégories des balados par feed_url. En attendant les clés, balados-rss couvre les mêmes champs sans clé."133 },134 {135 "id": "x-profil",136 "famille": "enrichissement",137 "palier": 3,138 "acces": "requêtes directes (service public de syndication des widgets officiels : syndication.twitter.com/srv/timeline-profile — objet user complet dans __NEXT_DATA__ ; repli très limité page x.com) ; cap 150/passage, re-visite 7 j, délai 2 s",139 "signal_identite": "aucun nouveau rattachement — métriques du compte déjà rattaché seulement",140 "cadence": "quotidienne (watch), rotation hebdomadaire",141 "notes": "abonnés + abonnements + badge + avatar X. Ancien widget followbutton MORT (vérifié 2026-08-18 : réponse vide) ; page x.com : mur de connexion après ~15-20 req/IP (constaté 2026-08-18) → repli seulement. Facebook : page publique bloquée sans clé (HTTP 400, vérifié 2026-08-18) et Scrapfly non justifié → aucune voie fiable, on passe."142 },143 {144 "id": "bio-liens",145 "famille": "enrichissement",146 "palier": 1,147 "acces": "AUCUNE requête — liaison croisée à partir des URLs COMPLÈTES déjà stockées dans les bios publiques (jamais de « @handle » textuel ambigu)",148 "signal_identite": "cross_link (0.90) — le créateur pointe lui-même vers son autre compte",149 "cadence": "quotidienne (watch), en dernier du pipeline",150 "notes": "passe conservatrice §12 : patrons sûrs seulement, cap 5 nouveaux comptes par fiche"151 },152 {153 "id": "twitch-decouverte",154 "famille": "decouverte",155 "palier": 3,156 "acces": "API GQL publique du site officiel de Twitch (Client-ID public web, sans clé) : recherche searchFor par ~43 termes QC paginée + répertoire des diffusions EN DIRECT en français (streams languages:[FR], 20 pages)",157 "signal_identite": "profil_source (0.98) — la chaîne est le compte d'origine de la fiche",158 "cadence": "quotidienne (watch) — qui est en direct change chaque jour, la couverture s'accumule",159 "notes": "vague 4 — marqueur québécois OBLIGATOIRE dans nom/bio/titre du stream ; abonnés, avatar, partenaire/affilié, dernier direct et jeu captés à la source ; niche déduite du jeu (Just Chatting → lifestyle, Music → musique…)"160 },161 {162 "id": "kick-decouverte",163 "famille": "decouverte",164 "palier": 4,165 "acces": "Scrapfly ASP sans render_js (Cloudflare bloque le direct) : kick.com/api/search par ~27 termes QC + fiche v2 par chaîne retenue (cap 120/passage — budget Scrapfly)",166 "signal_identite": "profil_source (0.98) pour la chaîne Kick ; cross_link (0.90) pour les liens sociaux AUTO-DÉCLARÉS du profil v2 (instagram/x/youtube/tiktok/facebook/discord)",167 "cadence": "quotidienne (watch)",168 "notes": "vague 4 — marqueur québécois requis dans pseudo/slug/bio ; la fiche v2 expose les liens sociaux remplis par le créateur lui-même : meilleure matière première du rattachement §12.1"169 },170 {171 "id": "region-bio",172 "famille": "enrichissement",173 "palier": 1,174 "acces": "AUCUNE requête — relit les bios publiques déjà en base : ville DÉCLARÉE avec tournure locative (« de Sherbrooke », « based in Montreal ») ou gentilé (« montréalaise ») → région §7 + ville",175 "signal_identite": "n/a (ne touche pas aux comptes)",176 "cadence": "quotidienne (watch), tout dernier du pipeline",177 "notes": "vague 4 — liste de ~70 villes SÛRES seulement (pas d'Alma/Waterloo/Varennes : prénoms, homonymes hors QC, particules) ; abstention si villes de régions différentes ; ne remplit que les champs vides"178 },179 {180 "id": "instagram-apify",181 "famille": "enrichissement",182 "palier": 4,183 "acces": "acteur Apify maison ka-instagram (endpoint web public web_profile_info, proxy résidentiel)",184 "signal_identite": "cross_link (0.90) pour les liens de bio",185 "cadence": "quotidienne (rotation 5 j, lot <=400)",186 "notes": "profil ultra détaillé : abonnés, bio, liens, 12 derniers posts (likes/commentaires/vues/musique/lieu), engagement, cadence, profils reliés"187 },188 {189 "id": "tiktok-apify",190 "famille": "enrichissement",191 "palier": 4,192 "acces": "acteur Apify maison ka-tiktok (page publique @handle, proxy résidentiel)",193 "signal_identite": "cross_link (0.90) pour le lien de bio",194 "cadence": "quotidienne (rotation 5 j, lot <=300)",195 "notes": "abonnés, coeurs, vidéos, bio, badge, commerce/live + vidéos récentes si SSR"196 },197 {198 "id": "x-apify",199 "famille": "enrichissement",200 "palier": 3,201 "acces": "acteur Apify maison ka-x (syndication officielle des widgets, sans clé)",202 "signal_identite": "cross_link (0.90) pour le site du profil",203 "cadence": "quotidienne (rotation 5 j, lot <=300)",204 "notes": "profil complet + 20 tweets récents avec métriques, hashtags, cadence ; remplace la voie locale 429 (TLS)"205 },206 {207 "id": "facebook-apify",208 "famille": "enrichissement",209 "palier": 4,210 "acces": "acteur Apify maison ka-facebook (HTML public de page, proxy résidentiel) — EXPÉRIMENTAL",211 "signal_identite": "—",212 "cadence": "hebdomadaire (rotation 7 j, lot <=100)",213 "notes": "abonnés/catégorie/avatar de pages publiques ; found=false fréquent (mur de connexion)"214 },215 {216 "id": "threads-apify",217 "famille": "enrichissement",218 "palier": 4,219 "acces": "acteur Apify maison ka-threads (JSON embarqué de la page publique, proxy résidentiel)",220 "signal_identite": "—",221 "cadence": "hebdomadaire (rotation 7 j, lot <=60)",222 "notes": "abonnés, bio, badge + posts récents si embarqués"223 },224 {225 "id": "snapchat-apify",226 "famille": "enrichissement",227 "palier": 3,228 "acces": "acteur Apify maison ka-snapchat (__NEXT_DATA__ de snapchat.com/add)",229 "signal_identite": "—",230 "cadence": "hebdomadaire (rotation 7 j, lot <=60)",231 "notes": "abonnés, bio, badge, catégorie, story/spotlight/lenses, comptes reliés"232 },233 {234 "id": "instagram-decouverte",235 "famille": "decouverte",236 "palier": 4,237 "acces": "acteur Apify maison ka-instagram mode recherche (topsearch web public, proxy résidentiel)",238 "signal_identite": "profil_source (0.98)",239 "cadence": "quotidienne (40 requêtes tournantes sur ~160 combinaisons thème x QC)",240 "notes": "découverte de créateurs IG par mots-clés québécois"241 },242 {243 "id": "youtube-apify",244 "famille": "enrichissement",245 "palier": 3,246 "acces": "acteur Apify maison ka-youtube (ytInitialData de /videos, sans clé)",247 "signal_identite": "—",248 "cadence": "quotidienne (rotation 5 j, lot <=300)",249 "notes": "abonnés, nb vidéos, pays, description + vidéos récentes avec vues ; complète le connecteur youtube (API) quand la clé manque"250 },251 {252 "id": "twitch-apify",253 "famille": "enrichissement",254 "palier": 3,255 "acces": "acteur Apify maison ka-twitch (GQL public Client-ID web, sans clé)",256 "signal_identite": "—",257 "cadence": "quotidienne (rotation 5 j, lot <=300)",258 "notes": "abonnés, partenaire/affilié, live en cours, dernière diffusion, jeux + vidéos récentes"259 },260 {261 "id": "kick-apify",262 "famille": "enrichissement",263 "palier": 4,264 "acces": "acteur Apify maison ka-kick (API v2 publique, proxy résidentiel pour Cloudflare)",265 "signal_identite": "cross_link (0.90) pour les liens sociaux auto-déclarés",266 "cadence": "quotidienne (rotation 5 j, lot <=120)",267 "notes": "abonnés, live, catégories + liens sociaux déclarés → découverte croisée"268 },269 {270 "id": "onlyfans-apify",271 "famille": "enrichissement",272 "palier": 4,273 "acces": "acteur Apify maison ka-onlyfans (page publique, proxy résidentiel) — EXPÉRIMENTAL",274 "signal_identite": "—",275 "cadence": "hebdomadaire (rotation 7 j, lot <=100)",276 "notes": "posts/photos/vidéos/J'aime, prix d'abonnement, bio ; found=false fréquent (mur Cloudflare)"277 },278 {279 "id": "fansly-apify",280 "famille": "enrichissement",281 "palier": 3,282 "acces": "acteur Apify maison ka-fansly (API v1 publique, lots de 20)",283 "signal_identite": "—",284 "cadence": "hebdomadaire (rotation 7 j, lot <=200)",285 "notes": "abonnés, bio, badge, compteurs de médias, avatar"286 },287 {288 "id": "tavily-seed",289 "famille": "decouverte",290 "palier": 3,291 "acces": "dataset local moissonné par le Tavily scout (outils/creator-harvest.py) : handles extraits des annuaires/palmarès/agences QC",292 "signal_identite": "listes_medias (0.85)",293 "cadence": "par vague (re-moisson périodique)",294 "notes": "expansion massive du bassin ; existence vérifiée ensuite par lenrichissement Apify"295 },296 {297 "id": "snowball-ig",298 "famille": "decouverte",299 "palier": 1,300 "acces": "base interne : profils reliés Instagram (related_profiles) captés par instagram-apify",301 "signal_identite": "mention (0.60) — à confirmer par enrichissement",302 "cadence": "quotidienne (parcours en largeur, cap 4000/vague)",303 "notes": "levier déchelle : chaque profil IG suggère ~10-20 comptes similaires"304 },305 {306 "id": "patreon-apify",307 "famille": "enrichissement",308 "palier": 3,309 "acces": "acteur Apify maison ka-patreon (données embarquées de la page publique)",310 "signal_identite": "—",311 "cadence": "hebdomadaire (rotation 7 j)",312 "notes": "patrons, publications, nom, avatar"313 },314 {315 "id": "discord-apify",316 "famille": "enrichissement",317 "palier": 2,318 "acces": "acteur Apify maison ka-discord (API publique d'invitation, code sensible à la casse depuis l'URL)",319 "signal_identite": "—",320 "cadence": "hebdomadaire (rotation 7 j)",321 "notes": "membres approximatifs, en ligne, boosts, nom/description du serveur"322 }323 ]324}