Envoyez l’URL d’une page à GEO Score et recevez la part de la page que ChatGPT search conserve, ce que ChatGPT reçoit quand il ouvre la page, ainsi que la cause et la correction de chaque élément manquant.
Ce que vous obtenez
POST /v1/geo-score : une tâche note une page. Envoyez son url et le country du lecteur, US ou KR.
score : la part de ce qu’une personne lit sur la page, texte des images compris, que ChatGPT search conserve, de 0 à 100. direct donne la même part pour ce que ChatGPT reçoit quand il ouvre lui-même la page.
reading.items : chaque élément de la page, l’endroit où il se trouve et la raison pour laquelle ChatGPT search le manque : blocked, javascript_only, structured_data_only ou image_only.
analysis : les problèmes classés par points retirés, chacun avec sa cause et sa correction, et potential, le score une fois les problèmes confirmés corrigés.
markdown et screenshot : la page telle qu’une personne la voit, chaque élément manquant étant signalé à sa place. rendering donne la part que contiendrait une copie rendue pour les agents IA.
Dans le tableau de bord, l’onglet GEO Score du Playground affiche la vue humaine à côté de la vue du bot.
Fonctionnement
GEO Score lit robots.txt pour OAI-SearchBot, ChatGPT-User et GPTBot et récupère la page sous chacune de ces identités et comme un navigateur. Un navigateur situé dans country affiche la page, la fait défiler jusqu’au bout et lit le texte de ses grandes images. Les lignes qui portent sur le sujet de la page deviennent des éléments ; menus, pieds de page, autres produits, avis, boutons et publicités restent hors du score.
La copie de ChatGPT search est la page rendue comme OAI-SearchBot depuis une adresse aux États-Unis : le texte du HTML et ce que les scripts en dessinent, sans le texte des images ni le contenu chargé après l’ouverture de la page. direct lit le HTML que reçoit ChatGPT-User comme le fait le lecteur de ChatGPT, et on demande deux fois au ChatGPT de production d’ouvrir la page pour voir s’il y parvient.
Le code place chaque élément, donc une page inchangée obtient le même score. Sur 15 pages notées trois fois chacune, 10 ont varié de 3 points ou moins.
Cas d’usage
Notez une page produit ou une page d’atterrissage avant le lancement et corrigez ce que ChatGPT ne voit pas, comme des prix chargés par script ou des caractéristiques écrites dans des images.
Notez, à côté de votre page, celle d’un concurrent que ChatGPT cite dans votre catégorie.
Transmettez les corrections d’analysis à votre équipe web et notez de nouveau la page une fois le changement en ligne.
Vérifiez si votre site refuse ChatGPT : access.verdict et blockedBy indiquent qui l’empêche d’ouvrir la page.
Envoyer la requête
Envoyez la requête avec votre clé API dans l’en-tête Authorization.
La page à noter : une URL http ou https sur un hôte public et le port par défaut, jusqu’à 2 048 caractères.
countrystring
Le pays du lecteur : US (par défaut) ou KR. La page est ouverte depuis une adresse de ce pays, dans sa langue et son fuseau horaire.
webhook.urlstring
Une adresse HTTPS de votre serveur. La tâche terminée y est envoyée dès qu’elle se termine.
idempotencyKeystring
Votre identifiant pour la requête. Chaque clé crée une seule tâche par compte : un envoi répété reste une seule tâche.
Réponse
Voici une tâche terminée, raccourcie pour la lecture.
JSON
{
"success": true,
"task": {
"id": "bcb7e1a2-26eb-422f-9f60-31a5e39ee400",
"taskType": "GEO_SCORE",
"status": "COMPLETED",
"createdAt": "2026-10-23T00:02:42.974Z"
},
"credits": { "creditsToCharge": 60, "creditsCharged": 60 },
"response": {
"url": "https://global.oliveyoung.com/product/detail?prdtNo=GA240322874",
"pageType": "product",
"score": 29,
"direct": { "score": 29, "read": 16 },
"rendering": { "score": 100, "read": 55 },
"access": {
"verdict": "open",
"chatgpt": { "opened": true, "lines": 819 }
},
"reading": {
"facts": 55,
"read": 16,
"locations": { "html": 16, "rendered_only": 13, "image": 26 },
"items": [
{
"label": "COSRX Vitamin E Vitalizing Sunscreen SPF 50+",
"where": "html",
"status": "read"
},
{
"label": "US$16.80",
"where": "rendered_only",
"status": "missing",
"reason": "javascript_only"
},
{
"label": "Key Ingredients",
"where": "image",
"status": "missing",
"reason": "image_only"
},
"…"
]
},
"analysis": {
"summary": "ChatGPT search keeps 16 of 55 facts of the page. The biggest issue: 26 facts are written only inside an image, among them Strong and effective sun protection; Key Ingredients; Tocopherol (Vitamin E) (47 points). Fixing the confirmed issues could raise the score to about 100.",
"potential": 100,
"issues": [
{
"code": "image_only",
"points": 47,
"title": "26 facts are written only inside an image",
"fix": "Write this content as text in the page's HTML, next to the image or in place of it …"
},
{
"code": "javascript_only",
"points": 24,
"title": "13 facts are loaded only after the page opens",
"…": "…"
}
]
},
"images": { "read": 10, "reused": 0, "unread": 0 },
"markdown": "…",
"screenshot": { "status": "ok", "url": "…", "expiresAt": "…" }
}
}
task.statusstring
QUEUED, PROCESSING, puis COMPLETED avec la réponse ou FAILED avec error.
credits.creditsChargedinteger
Crédits facturés pour la tâche terminée. Une tâche en échec facture 0.
response.scorenumber
La part de ce qu’une personne lit sur la page, texte des images compris, que ChatGPT search conserve dans sa copie de la page, de 0 à 100. Elle vaut 0 quand robots.txt ou le site refuse le robot de ChatGPT search.
response.directobject
Ce que ChatGPT reçoit quand il ouvre lui-même la page, comme quand on lui donne l’URL : son score et le nombre d’éléments dans read. Le score vaut 0 quand ChatGPT n’a pas pu ouvrir la page.
response.renderingobject
La part des éléments que contient dans son texte une copie de la page rendue pour les agents IA : le HTML dessiné par un navigateur, sans scripts, avec le texte de chaque image dans son texte alt.
response.reading.itemsarray
Une entrée par élément de la page : son label, where il se trouve (html, rendered_only, image, etc.), statusread ou missing, et la reason pour laquelle ChatGPT search le manque : blocked, javascript_only, structured_data_only ou image_only.
response.analysisobject
summary, potential (le score une fois les problèmes confirmés corrigés) et issues, classés par points retirés, chacun avec sa cause (detail), son fix et les éléments concernés. Le texte est en anglais.
Recevoir le résultat
La requête renvoie aussitôt la tâche avec statusQUEUED. Interrogez GET /v1/async/task/{id} jusqu’à ce que status vaille COMPLETED ou FAILED, ou ajoutez webhook.url pour recevoir la tâche terminée sur votre serveur, avec les mêmes task, credits et response. Les résultats restent disponibles 24 heures après la fin de la tâche.
url manque, n’est pas en http ou https, ou désigne un hôte ou un port privé. details indique le champ.
USE_DEDICATED_ENDPOINTHTTP 400
GEO_SCORE a été envoyé à /v1/async/task. Envoyez-le à /v1/geo-score.
REGION_UNSUPPORTEDHTTP 422
country n’est ni US ni KR.
MISSING_API_KEYHTTP 401
L’en-tête Authorization manque, ou sa clé est inconnue, expirée ou révoquée.
INSUFFICIENT_CREDITSHTTP 402
Le solde est inférieur à 70 crédits, le coût maximal d’une page. Ajoutez des crédits ou changez de plan, puis renvoyez-la.
Tarif
Un score terminé utilise 10 crédits pour la page et 5 pour chaque image dont le texte est lu, au plus 12 images. Une image que votre compte a lue au cours des 90 derniers jours coûte 2 crédits, et une image illisible est gratuite. L’envoi réserve 70 crédits, le coût maximal d’une page, et la fin de la tâche facture ce qu’elle a utilisé.
Une tâche échouée n’est pas facturée. Quand aucun navigateur ne peut afficher la page, la tâche échoue avec PAGE_UNAVAILABLE et la raison.
Passez l’URL d’une page produit d’Amazon, Walmart, Sephora, Olive Young, Rakuten, Zalando ou de 11 autres boutiques, et recevez son prix, son stock, ses images de galerie et de description, ses caractéristiques et ses options dans le même format.
Interrogez Amazon, Walmart, Coupang, Olive Young, Rakuten, Flipkart, Zalando et 13 autres boutiques dans cinq pays, et recevez le classement des produits de chacune avec prix, notes et nombre d’avis dans le même format.