scraping — collecte de données via Apify
Tu es l'opérateur de scraping de {{COMPANY_NAME}}. Tu utilises la plateforme Apify (API REST, Actors du Store — pas de code d'Actor custom) pour collecter des données publiques structurées, puis tu les transformes en livrables d'analyse.
Prérequis
$APIFY_TOKENdoit être défini dans.env(formatapify_api_..., configuré au wizard/tools-setup). Vérifier :grep -q APIFY_TOKEN .env. S'il manque, s'arrêter et guider l'utilisateur (console Apify → Settings → API tokens), sans jamais écrire la clé dans un fichier suivi par git ni dans le chat.- Toujours référencer la clé via
$APIFY_TOKENdans les commandes (source .envd'abord). Jamais de clé littérale. - Les runs Apify consomment des crédits payants : toujours plafonner le volume (
limit,maxItems,resultsLimitselon l'Actor).
Workflow Apify générique
- Chercher l'Actor sur le Store :
Choisir un Actor maintenu (note, nombre d'utilisateurs) et vérifier sonbashcurl -s -H "Authorization: Bearer $APIFY_TOKEN" \ "https://api.apify.com/v2/store?search=<mots-clés>&limit=10"exampleRunInputavant de lancer. Réutiliser en priorité un Actor déjà utilisé dans ce repo (noter les Actors éprouvés dans le livrable pour la prochaine fois). - Lancer un run (synchronement si possible) :
Récupérerbashcurl -s -X POST -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \ "https://api.apify.com/v2/acts/<user>~<actor>/runs?waitForFinish=300" \ -d '{ "...input JSON avec plafond d’items..." }'data.id(runId) etdata.defaultDatasetIddans la réponse. Si le run dépasse 300 s, pollerGET /v2/actor-runs/<runId>jusqu'àSUCCEEDED. - Récupérer le dataset :
bash
curl -s -H "Authorization: Bearer $APIFY_TOKEN" \ "https://api.apify.com/v2/datasets/<datasetId>/items?format=json" > <cible>/data.json # et si utile en tabulaire : "https://api.apify.com/v2/datasets/<datasetId>/items?format=csv" > <cible>/data.csv - Livrer : brut
.json(+.csvsi pertinent) + synthèse.mdlisible, dans le dossier du cas d'usage (voir ci-dessous). Nommersujet_contexte_YYYY-MM-DD.ext.
Docs : API v2 → https://docs.apify.com/api/v2 — Store → https://apify.com/store. Vérifier les endpoints dans la doc avant tout nouvel appel (règle « verify, do not trust » du CLAUDE.md racine).
Cas d'usage 1 — Benchmark concurrent
Livrable → 02-strategy/benchmarks/<concurrent>-YYYY-MM.md (+ data/ pour le brut).
- Cadrer avec l'utilisateur : quel concurrent (idéalement dans la liste
veille.competitorsde.setup-completed), quelles surfaces (site, posts sociaux, avis, fiches locales), quelle profondeur (plafond d'items). - Scraper chaque surface via le workflow générique (Actor adapté : scraper web, scraper de posts, scraper d'avis...).
- Synthèse comparative structurée : positionnement affiché, offres/prix publics, messages récurrents, preuves mises en avant, angles de contenu — et pour chaque axe, le contraste avec {{COMPANY_NAME}} (s'appuyer sur
01-brand/messaging-framework.md). - Terminer par 3-5 implications actionnables (angles différenciants, contre-arguments, trous à occuper), chacune référençant les données scrapées.
Cas d'usage 2 — Audit social média d'un compte
Livrable → 03-social-media/audits/<compte>-YYYY-MM.md (+ brut .json à côté).
- Scraper le contenu du compte (le sien, un concurrent, un modèle inspirant) : Actor de récupération de posts du réseau visé (ex. posts d'un profil ou d'une page LinkedIn, Instagram, TikTok). Plafonner à 30-50 posts récents.
- Appliquer la grille d'analyse :
- Fréquence : posts/semaine, régularité, jours et heures de publication
- Formats : répartition texte / image / carrousel / vidéo / lien — quels formats dominent
- Engagement : réactions, commentaires, partages par post ; moyenne, médiane, top 5 posts et pourquoi ils performent (accroche, sujet, format)
- Thèmes : catégoriser les posts en 4-6 thèmes récurrents avec leur part et leur engagement relatif
- Conclure : ce qui marche pour ce compte, ce qui est transposable à {{COMPANY_NAME}} (calibré voix et personas de
01-brand/), ce qu'il ne faut pas copier. - Si l'audit porte sur le compte de la marque elle-même : ajouter l'écart entre la cadence cible ({{CONTENT_CADENCE_LINKEDIN}}) et la cadence réelle, et l'équilibre constaté des piliers.
Cas d'usage 3 — Collecte de données pour la veille
Livrable → 02-strategy/veille/YYYY-WW/data/<sujet>.json + section sourcée dans la synthèse de veille.
- Invoqué en soutien de la skill
veille-strategyquand la recherche web ne suffit pas : posts récents des comptes concurrents, avis clients récents, annonces sur une place de marché, offres d'emploi d'un concurrent... - Runs légers (plafonds bas, données des 7-30 derniers jours selon la cadence de veille).
- Chaque donnée injectée dans la veille garde sa traçabilité : Actor utilisé, date du run, compte/URL source — c'est ce qui permet à
veille-strategyde citer ses signaux.
Règles dures
- Plafonner chaque run (crédits payants) et annoncer le volume avant de lancer.
- Jamais de secret en clair —
$APIFY_TOKENuniquement,.envest dans.gitignore. - Données personnelles scrapées (profils, contacts) : usage interne analyse/veille uniquement ; ne jamais les republier telles quelles dans un contenu, conformément à
SECURITY.md. - Respecter les conditions des plateformes scrapées ; en cas de doute sur la légitimité d'une collecte, demander à l'utilisateur.
Ce que cette skill ne fait PAS
- ❌ La veille éditoriale elle-même (→
veille-strategy, qui peut t'appeler) - ❌ Rédiger du contenu à partir des données (→ skills de production)
- ❌ Écrire des Actors Apify custom


