Analyse d'audience
Indiquez un sujet ou le site web d'une marque et obtenez ce que de vraies personnes en disent dans les commentaires et discussions publics : les mots qu'elles emploient, les questions qu'elles posent, ce qu'elles attendent d'un produit, les points sur lesquels elles contredisent les créateurs, ce qui manque dans les contenus existants et les thèmes qui montent. Chaque constat est compté sur des fils de discussion indépendants et relié aux commentaires dont il provient, afin que votre équipe ou votre propre modèle d'IA puisse le vérifier.
Une tâche de recherche lit un échantillon de 500 commentaires acceptés au maximum et le transforme en l'ensemble des neuf produits (des vues différentes des mêmes données) ci-dessous. Chaque tâche inclut les neuf ; vous pouvez indiquer celui qui vous importe le plus.
Valeur de products | Ce que vous obtenez |
|---|---|
audience_keywords | les expressions employées par l'audience, regroupées par sens (fréquence dans les commentaires, pas volume de recherche) |
audience_questions | les questions récurrentes avec leurs variantes, l'étape du tunnel et l'indication que les créateurs y répondent déjà ou non |
website_requirements | ce qu'un site web doit dire ou montrer : fonctionnalités, intégrations, tarifs, preuves, objections ; chaque point est marqué must, should ou could |
comparison_intelligence | comment l'audience compare les produits cités : critères, déclencheurs de changement, déficits de confiance |
content_brief_from_audience | un brief de contenu : titre provisoire, sections, questions auxquelles répondre, objections, FAQ, affirmations à éviter |
audience_content_gaps | la demande que les réponses existantes couvrent mal, avec le contenu à créer |
creator_vs_audience_gap | les points où les commentateurs contredisent les affirmations des créateurs, les remettent en question ou y ajoutent des conditions |
buyer_expectations | ce que les acheteurs tiennent pour acquis (must_have) et ce qui distingue un produit (differentiator) |
trend_from_audience | les thèmes rising, stable ou declining, normalisés pour 1 000 fils de discussion pertinents |
L'analyse d'audience est activée pour une clé sur demande : écrivez à support@omev.be. Les tâches sont facturées sur le solde habituel de la clé.
Prix
| Quoi | Prix |
|---|---|
| Une tâche de recherche, les neuf produits inclus | $0.99 |
Le prix est facturé une seule fois, lorsque jobs/create accepte la tâche. Une tâche qui se
termine en NO_DATA (pas assez de discussions publiques pertinentes) est gratuite ; une tâche
COMPLETED_PARTIAL est facturée intégralement. Répéter jobs/create avec le même
idempotency_key renvoie la même tâche et n'est pas facturé à nouveau. estimate,
jobs/get, jobs/result et jobs/cancel sont gratuits.
Vérifier d'abord la requête
estimate valide le corps, affiche le périmètre normalisé et le prix, et ne lance aucun
travail. Il accepte le même corps que jobs/create ; idempotency_key y est facultatif.
curl -sS https://llmapi.omev.be/v1/audience-intelligence/estimate \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"schema_version": "1.2",
"products": ["audience_questions", "buyer_expectations"],
"topic": {"name": "waterproof sneakers for commuting"},
"audience": {"description": "city commuters who walk in the rain"},
"scope": {"platforms": ["youtube", "reddit"], "languages": ["en"], "markets": ["US"]}
}'
{
"request_id": "…",
"supported": true,
"normalized_scope": {
"markets": ["US"], "languages": ["en"],
"from": "2026-03-31T10:00:00Z", "to": "2026-09-27T10:00:00Z",
"platforms": ["reddit", "youtube"]
},
"sample": {"target_accepted_comments": 500, "consent_required": false},
"quote": {
"customer_cost_usd": "0.99000000", "currency": "USD", "tier": "single",
"products": ["audience_content_gaps", "audience_keywords", "audience_questions", "…"],
"valid_until": "2026-09-27T11:00:00Z"
},
"estimated_completion_seconds": {"min": 20, "typical": 240, "max": 1800},
"warnings": []
}
quote.customer_cost_usd est le prix de la tâche. supported: false ou une note dans
warnings signifie qu'une source de données est temporairement indisponible : réessayez
plus tard.
Lancer une tâche de recherche
curl -sS https://llmapi.omev.be/v1/audience-intelligence/jobs/create \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"schema_version": "1.2",
"idempotency_key": "acme-17-sneakers-2026-09",
"products": ["audience_questions", "buyer_expectations"],
"topic": {"name": "waterproof sneakers for commuting"},
"audience": {"description": "city commuters who walk in the rain"},
"scope": {"platforms": ["youtube", "reddit"], "languages": ["en"], "markets": ["US"]}
}'
| Champ | Requis | Signification |
|---|---|---|
schema_version | oui | 1.0, 1.1 ou 1.2 ; utilisez 1.2 |
idempotency_key | oui pour jobs/create | 8–200 caractères ; la répéter renvoie la même tâche au lieu d'en lancer une nouvelle |
product ou products | non | le produit qui vous importe le plus, ou une liste de produits issus du tableau ci-dessus ; l'un des deux champs au maximum. La tâche construit les neuf dans tous les cas |
topic.name | name ou website_url | le sujet, 3–300 caractères |
topic.website_url | name ou website_url | le site d'une marque ; le nom de la marque est lu sur le site |
topic.description | non | jusqu'à 2 000 caractères qui précisent le sujet |
topic.include_terms, topic.exclude_terms | non | jusqu'à 50 termes chacun pour élargir ou restreindre ce qui est considéré comme pertinent |
audience.description | non | qui vous voulez entendre, 3–2 000 caractères |
audience.roles, audience.company_size | non | indications supplémentaires pour les audiences professionnelles |
scope.platforms | non | n'importe lesquelles parmi youtube, reddit, linkedin, tiktok, instagram, threads, facebook, twitter, web |
scope.languages | non | langues des commentaires, ["en"] par défaut, jusqu'à 10 |
scope.markets | non | codes pays tels que ["US"] ; vide signifie le monde entier |
scope.period | non | {"days": 7…365} (180 par défaut) ou {"from": "…Z", "to": "…Z"} en UTC, avec 7–365 jours d'écart |
entities | non | produits ou entreprises à comparer : {"name": "…", "kind": "product", "aliases": ["…"]} ; sans eux, comparison_intelligence utilise les comparaisons trouvées dans les commentaires |
creator_seeds | non | chaînes ou communautés à lire : {"platform": "youtube", "url": "https://…"} ; une communauté Reddit est https://www.reddit.com/r/<name>, un fil Reddit unique est l'URL du fil avec "kind": "publication" |
source_mode | non | discover (par défaut) trouve les sources lui-même ; seeds_only lit uniquement vos creator_seeds |
data_mode | non | refresh_if_needed (par défaut) réutilise les données récentes du même périmètre et les complète ; fresh collecte à nouveau ; corpus_only utilise uniquement les données déjà collectées pour votre compte |
output | non | max_signals (1–100, 30 par défaut), max_evidence_per_signal (1–20, 5 par défaut), include_short_quotes et include_markdown (tous deux true par défaut) |
limits | non | max_creators (30 par défaut, jusqu'à 100), max_publications (300 par défaut, jusqu'à 1 000), max_comments (15 000 par défaut, jusqu'à 50 000), deadline_seconds (1 800 par défaut, 60–3 600) |
Valeurs par défaut importantes :
- Avec seulement
topic.website_url, la tâche lit toutes les plateformes ainsi que des forums et blogs indépendants. - Avec
topic.nameet sansscope.platforms, la tâche lit uniquement YouTube. Indiquez les plateformes dont vous avez besoin.
La réponse est 202 avec la tâche :
{
"request_id": "…",
"job": {"id": "aij_…", "status": "QUEUED", "stage": "VALIDATE", "progress": 0,
"created_at": "…", "deadline_at": "…", "currency": "USD", "warnings": []},
"idempotent_replay": false,
"poll_after_seconds": 3
}
Suivre la tâche
Une tâche prend généralement quelques minutes et s'arrête au plus tard à l'échéance de
limits.deadline_seconds. Interrogez le statut toutes les 5–10 secondes.
curl -sS https://llmapi.omev.be/v1/audience-intelligence/jobs/get \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{"job_id": "aij_…"}'
job.progress va de 0 à 100 ; job.coverage_so_far indique les volumes collectés jusqu'ici.
status | Signification |
|---|---|
QUEUED, RUNNING | en attente ou en cours |
WAITING_PROVIDER, RETRY_WAIT | en attente d'une source de données ou nouvelle tentative en cours ; continuez à interroger |
COMPLETED | le rapport est prêt |
COMPLETED_PARTIAL | un rapport est prêt, mais l'échantillon est plus petit que prévu ; voir warnings et product_readiness |
NO_DATA | pas assez de discussions publiques pertinentes trouvées ; il n'y a pas de rapport |
BUDGET_EXHAUSTED, EXPIRED, FAILED | la tâche s'est terminée sans rapport complet ; stop_reason et public_error_code en donnent la raison |
CANCELLED | vous avez annulé la tâche |
Pour arrêter une tâche, envoyez {"job_id": "aij_…"} à /v1/audience-intelligence/jobs/cancel.
La réponse est 202 pendant l'arrêt de la tâche, ou 200 si elle est déjà annulée.
Télécharger le rapport
curl -sS https://llmapi.omev.be/v1/audience-intelligence/jobs/result \
-H "Authorization: Bearer $OMEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{"job_id": "aij_…"}'
Avant la fin de la tâche, l'appel renvoie 409 JOB_NOT_READY. Une tâche terminée sans
rapport (par exemple NO_DATA) renvoie {"job": {…}, "report": null}.
Le rapport :
| Champ | Contenu |
|---|---|
status, products | le statut final et les produits construits |
product_results | un objet par produit, avec le nom du produit comme clé ; chacun contient une liste items au format de ce produit |
product_readiness | par produit : sufficient, insufficient_sample ou no_evidence, avec la raison |
summary | un court résumé en langage clair |
research_question, scope | ce qui a été étudié : sujet, audience, période, plateformes demandées et réellement observées |
methodology | quelles opinions l'échantillon représente, comment les sources ont été choisies, limites |
coverage | commentaires collectés, acceptés et exclus, fils uniques, plateformes, la plus grande part d'une seule source |
signals | les constats sous-jacents : type (question, point de douleur, attente, objection, comparaison, tendance…), label, strength (anecdotal, emerging, recurring, strong), décomptes et evidence_ids |
evidence | les commentaires à l'origine des constats : plateforme, publication, texte du commentaire, pertinence |
contradictions, warnings | les constats qui se contredisent, et tout ce qui limite le rapport |
rendered_markdown | le même rapport en Markdown, lorsque output.include_markdown vaut true |
Les décomptes portent sur des fils de discussion uniques, pas sur des commentaires bruts :
un seul fil bruyant ne peut donc pas faire paraître un thème important. Considérez les
constats anecdotal comme des pistes, pas comme des faits.
Les rapports restent disponibles 90 jours après la fin de la tâche ; ensuite, l'appel renvoie
410 RESULT_EXPIRED.
Sujets de niche
Une tâche vise 500 commentaires acceptés, le maximum. Pour une niche où il n'en existe pas
autant, vous pouvez accepter un échantillon plus petit de 200–499 commentaires au même prix : définissez
sample_policy.mode sur narrow, sample_policy.target_accepted_comments sur l'objectif,
et ajoutez sample_policy.narrow_topic_consent avec le texte de consentement enregistré,
l'heure à laquelle il a été accepté et la version de la politique. Contactez
support@omev.be pour obtenir le texte exact avant de l'intégrer
dans un produit.
Erreurs
| Code | Quand |
|---|---|
401 | clé API absente ou invalide |
403 | la clé ne peut pas utiliser ce produit |
404 | tâche inconnue, ou tâche appartenant à un autre compte |
409 JOB_NOT_READY | le rapport a été demandé avant la fin de la tâche |
409 IDEMPOTENCY_CONFLICT | l'idempotency_key a déjà été utilisée avec un corps différent |
409 JOB_ALREADY_TERMINAL | une annulation a été envoyée pour une tâche déjà terminée |
410 RESULT_EXPIRED | le rapport a plus de 90 jours |
422 INVALID_ARGUMENT | un champ est manquant ou hors limites ; le corps indique le champ |
429 | trop de requêtes ou trop de tâches dans la file d'attente ; réessayez après une courte pause |
Pour 409, 410 et 422, le corps contient le code de service indiqué ci-dessus. Les
autres statuts renvoient le corps d'erreur commun, voir Erreurs.