Repérer et supprimer les fiches en double

Listez les fiches en double par établissement et compte, confirmez celles à supprimer, écartez les faux positifs et suivez leur résolution.

Un doublon est une deuxième entrée pour la même entreprise dans le même annuaire. Il répartit les avis et les signaux de classement entre plusieurs fiches et crée de la confusion chez les clients. La détection s’exécute automatiquement. Vous examinez ses résultats, confirmez les vrais doublons et écartez les entrées légitimes.

Chaque doublon possède un statut qui indique où il en est dans le processus de nettoyage :

StatutSignificationVotre action
POTENTIALDétecté, personne n’a encore agi dessus.Examinez-le (étapes 3 et 4).
PROCESSINGVous l’avez confirmé ; sa suppression est en cours auprès de la plateforme de publication.Patientez. Consultez-le à nouveau plus tard (étape 5).
FIXEDLa plateforme de publication l’a supprimé ou fusionné.Terminé.
FAILEDLa suppression n’a pas abouti.Vérifiez le lien vers la fiche en ligne ; signalez le problème à l’assistance si elle est toujours en ligne.

1. Répertorier les doublons d’un établissement

GET /locations/{locationId}/listings/duplicates renvoie un simple tableau de groupes de sites. Chaque groupe correspond à un annuaire avec un tableau listings de doublons présumés, et chaque entrée possède un listingItemId, une liveLink que vous pouvez ouvrir pour l’évaluer et un status.

Duplicates for a location
curl https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/listings/duplicates \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "duplicateListingsForLocation": [      {        "id": "U2l0ZToxNTA=",        "name": "City Squares",        "url": "citysquares.com",        "listings": [          {            "id": "RHVwbGljYXRlOjIzNTk4NDUw",            "listingItemId": "TGlzdGluZ0l0ZW06MjM1OTg0NTA=",            "name": "Woodbury Train Station",            "liveLink": "http://citysquares.com/b/woodbury-train-station-23598450",            "status": "POTENTIAL"          }        ]      }    ]  }}

Un tableau vide signifie qu’aucun doublon n’a été détecté. Conservez listingItemId : c’est la valeur acceptée par les deux endpoints de marquage. Le Node SDK aplatit les groupes en un tableau par doublon ; d.id y est donc la valeur à transmettre.

2. Regrouper les doublons de l’ensemble du compte

GET /locations/listings/duplicates fournit une vue à l’échelle du compte. Il s’agit d’une page avec pagination par décalage : page et perPage en entrée, records[] ainsi que pageInfo.totalRecords et pageInfo.totalPages en sortie. Par défaut, status vaut POTENTIAL et tag vaut all ; un appel sans paramètres renvoie donc tous les doublons ouverts auxquels la clé donne accès. Ajoutez siteId (un identifiant plan-sites) pour limiter les résultats à un seul annuaire.

Account rollup
curl "https://listingsapi.com/api/v4/locations/listings/duplicates?status=POTENTIAL&page=1&perPage=50" \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "duplicateListingsRollup": {      "pageInfo": { "hasNextPage": true, "totalPages": 34, "totalRecords": 1673 },      "records": [        {          "id": "3329229",          "name": "Woodbury Train Station",          "duplicateProcessingState": "POTENTIAL",          "liveLink": "http://citysquares.com/b/woodbury-train-station-23598450",          "locationId": "73451",          "siteName": "City Squares",          "siteUrl": "citysquares.com"        }      ]    }  }}

La vue d’ensemble vous indique où se trouvent les doublons ; duplicateProcessingState correspond au même statut de cycle de vie que ci-dessus. Pour agir sur un doublon, utilisez son locationId avec l’endpoint par établissement de l’étape 1 et consultez-y le listingItemId. Parcourez les pages une à une ; une boucle sans pause est le moyen le plus rapide d’obtenir un 429.

3. Confirmer un doublon pour le supprimer

Une fois qu’une personne chargée de la vérification confirme qu’une entrée est un doublon, appelez POST /locations/listings/mark-as-duplicate en plaçant les valeurs listingItemId sous input. Regroupez tous les identifiants confirmés pour un établissement dans un seul appel. locationId est facultatif et limite la requête à cet établissement.

Mark as duplicate
curl -X POST https://listingsapi.com/api/v4/locations/listings/mark-as-duplicate \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "input": {    "locationId": "TG9jYXRpb246MTgwMDI4OQ==",    "listingItemIds": ["TGlzdGluZ0l0ZW06MjM1OTg0NTA="]  }}'
JSON
{  "data": {    "markAsDuplicate": {      "success": true,      "errors": null    }  }}

success: true signifie que les éléments ont été acceptés et sont passés au statut PROCESSING. Un 200 avec success: false, ou un 400, s’accompagne d’un tableau errors dont les entrées contiennent code et message ; un identifiant inconnu ou mal formé en est généralement la cause. Les SDK lèvent ValidationError dans ce cas.

4. Écarter un faux positif

La détection est prudente. Un autre établissement de la même franchise, un deuxième profil légitime ou un établissement renommé peuvent tous sembler être des doublons. POST /locations/listings/mark-as-not-duplicate accepte un corps de requête identique et retire définitivement l’entrée des deux listes. C’est également ainsi que vous annulez une action effectuée par erreur à l’étape 3.

Mark as not duplicate
curl -X POST https://listingsapi.com/api/v4/locations/listings/mark-as-not-duplicate \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "input": {    "locationId": "TG9jYXRpb246MTgwMDI4OQ==",    "listingItemIds": ["TGlzdGluZ0l0ZW06MjM1OTg0NTA="]  }}'

La réponse est data.markAsNotDuplicate avec les mêmes champs success et errors qu’à l’étape 3.

5. Suivre l’avancement

Consultez à nouveau la vue d’ensemble avec status=PROCESSING pour voir ce qui est encore en cours de traitement auprès des plateformes de publication, et avec status=FIXED pour confirmer ce qui a été supprimé. Aucun des deux SDK n’expose encore le filtre status ; appelez donc directement l’endpoint avec le même en-tête Authorization.

Progress
curl "https://listingsapi.com/api/v4/locations/listings/duplicates?status=PROCESSING&page=1&perPage=50" \-H "Authorization: API $LISTINGSAPI_KEY" curl "https://listingsapi.com/api/v4/locations/listings/duplicates?status=FIXED&page=1&perPage=50" \-H "Authorization: API $LISTINGSAPI_KEY"

Demander perPage=1 et lire pageInfo.totalRecords permet d’obtenir le nombre de doublons pour chaque statut en quatre appels. Un enregistrement FAILED dont la liveLink est toujours accessible nécessite une vérification manuelle ; un enregistrement FAILED dont le lien ne fonctionne plus a été corrigé par la plateforme de publication de sa propre initiative et peut être écarté à l’étape 4.

Étapes suivantes