/api/v4/listings/scansCrea un listings scan
Avvia una verifica delle schede di qualsiasi attività nella rete di directory e restituisce subito la scansione per attendere il webhook di completamento.
Parametri
Corpo
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| input | object | obbligatorio | Wrapper object. The entire request body must be nested under `input`. |
| input.name | string | obbligatorio | Business name, up to 150 characters. |
| input.street | string | obbligatorio | Street address, up to 200 characters. |
| input.city | string | obbligatorio | City, up to 100 characters. |
| input.stateIso | string | facoltativo | State or province code, up to 50 characters. Required for every country except `GB`. |
| input.postalCode | string | facoltativo | Postal code, up to 20 characters. Required for every country except `NG` and `AE`. |
| input.countryIso | string | obbligatorio | Two-letter ISO 3166-1 country code, for example `US`. |
| input.phone | string | obbligatorio | Business phone number with 6 to 15 digits. Local formats are read in the context of `countryIso`, and an international format with a leading `+` works too. |
Richiesta di esempio
Corpo pronto da incollare. Sostituisci gli ID e i valori segnaposto con i tuoi.
{ "input": { "name": "Franklin Barbecue", "street": "900 E 11th St", "city": "Austin", "stateIso": "TX", "postalCode": "78702", "countryIso": "US", "phone": "+15126531187" }}Risposte
200The scan was accepted and is `QUEUED`. `reused` is `false` and `results` is empty until directories are checked. Wait for the `listing_scan.completed` webhook, or poll the scan.
{ "data": { "createListingScan": { "reused": false, "scan": { "id": "TGlzdGluZ1NjYW46N2MxZTRmNTItOWEzYi00ZDY4LWIwZTEtNWYyYThjOWQzZTQ3", "status": "QUEUED", "source": "DIRECTORY_SEARCH", "locationId": null, "resultsAsOf": null, "createdAt": "2026-11-05T07:00:41Z", "startedAt": null, "completedAt": null, "business": { "name": "Franklin Barbecue", "street": "900 E 11th St", "city": "Austin", "stateIso": "TX", "postalCode": "78702", "countryIso": "US", "phone": "+15126531187" }, "summary": { "total": 0, "found": 0, "accurate": 0, "inaccurate": 0, "notFound": 0, "pending": 0, "unavailable": 0 }, "failure": null, "results": [] }, "quota": { "limit": 50, "used": 6, "remaining": 44, "resetsAt": "2026-11-23T12:38:03Z" }, "errors": [] } }}200The request was rejected, so **no scan was created**. The error is reported in `errors[]` on an `HTTP 200`, `scan` is `null`, and `quota` still returns the current allowance. This example is a phone number with too few digits.
{ "data": { "createListingScan": { "reused": false, "scan": null, "quota": { "limit": 50, "used": 5, "remaining": 45, "resetsAt": "2026-11-23T12:38:03Z" }, "errors": [ { "code": "SY83003", "message": "SY83003: Invalid value for phone", "contextInfo": [ { "key": "field", "value": "phone" } ] } ] } }}400A read-only key was used on this write (`SY90016`). Use a Write key.
401Unauthenticated, missing or invalid API key.
429Rate limit exceeded. Retry after the `Retry-After` header value.
Avvia una scansione di un'attività. La scansione verifica se l'attività è presente nella rete di directory e quanto sono accurati i suoi dati: mappe e motori di ricerca come Google, Bing, Apple Maps, Yelp, Facebook e MapQuest, aggregatori di dati e directory locali, e assistenti AI come ChatGPT e Gemini. A seconda del paese, una scansione controlla fino a circa 60 directory. L'attività non deve necessariamente essere una sede nel tuo account, quindi puoi verificare un potenziale cliente o un cliente prima dell'onboarding.
La chiamata restituisce immediatamente la scansione nello stato QUEUED. I controlli delle directory vengono eseguiti in background e il risultato si legge con GET /listings/scans/{scanId}.
Caso d'uso: una verifica delle schede di un potenziale cliente. Il tuo strumento di vendita raccoglie il nome, l'indirizzo e il numero di telefono di un'attività. Crea una scansione, salva il valore scan.id restituito e leggi la scansione completata da data.scan quando arriva l'evento listing_scan.completed. summary fornisce il riepilogo (quante directory hanno trovato l'attività e quante di queste riportano dati accurati), mentre results[] fornisce i dettagli per ciascuna directory da mostrare nel report.
Caso d'uso: un controllo dello stato di un'attività che gestisci già. Esegui una scansione dei dati di una delle tue sedi. La scansione la riconosce e genera i risultati a partire dalle schede effettive di quella sede, anziché eseguire una nuova ricerca (vedi Riutilizzo e scansioni gratuite).
Come termina una scansione
Una scansione passa attraverso gli stati QUEUED e IN_PROGRESS e termina nello stato COMPLETED o FAILED. La maggior parte delle scansioni si completa in un intervallo compreso tra 1 e 7 minuti. Se una directory non ha risposto dopo circa 15 minuti, il suo risultato viene impostato su UNAVAILABLE e la scansione si completa con gli altri risultati.
- Preferisci il webhook. Gli eventi
listing_scan.completedelisting_scan.failedvengono inviati una volta per scansione, con lo stesso oggetto di scansione restituito daGET /listings/scans/{scanId}, risultati inclusi. Vengono inviati agli account che hanno i webhook abilitati e un URL del webhook verificato, e sono firmati come tutti gli altri eventi. Vedilisting_scan.completed. - Usa il polling come alternativa. Se non puoi ricevere webhook, leggi la scansione ogni 15 secondi finché
statusnon èCOMPLETEDoFAILED. Un polling più frequente non offre alcun vantaggio e consuma la tua quota di richieste.
Campi obbligatori
name, street, city, countryIso e phone sono sempre obbligatori. L'obbligatorietà di 2 campi dipende dal paese:
Un valore mancante o non valido viene rifiutato con SY83003 e l'errore indica il nome del campo. phone deve contenere da 6 a 15 cifre e countryIso deve essere composto da 2 lettere.
Riutilizzo e scansioni gratuite
Una scansione non esegue sempre una nuova ricerca. Il campo source della scansione restituita indica la provenienza dei risultati:
Se esegui di nuovo una scansione della stessa attività entro 7 giorni, viene restituita la scansione esistente nel tuo account anziché una nuova, con reused: true nella risposta. Non viene avviata alcuna nuova scansione e non viene inviato alcun nuovo webhook, quindi leggi la scansione restituita (potrebbe essere ancora in corso) anziché attendere un altro evento. Lo stesso comportamento si applica quando esegui di nuovo una scansione di una delle tue sedi entro il periodo di riutilizzo.
Quota mensile
Le Listings scans sono incluse nei piani a pagamento con una quota mensile che dipende dal tuo piano. Non sono disponibili con un pass giornaliero gratuito per la sandbox. Solo una nuova scansione DIRECTORY_SEARCH viene conteggiata nella quota. Sono gratuite:
- una scansione ripetuta della stessa attività entro 7 giorni (
reused: true), - una copia
RECENT_SCAN, - una scansione
LOCATION_LISTINGS, - una scansione non riuscita, che non viene conteggiata.
La quota si rinnova in base al periodo di fatturazione del tuo account. Ogni risposta a una richiesta di creazione include quota con limit, used, remaining e resetsAt, anche quando la richiesta viene rifiutata. Consulta Piani e componenti aggiuntivi.
Errori
Una richiesta di creazione rifiutata restituisce HTTP 200 con scan: null e il motivo in errors[], quindi controlla errors e non solo il codice di stato. Le chiavi di sola lettura non possono creare scansioni: questo è l'unico errore a livello di richiesta e restituisce HTTP 400 con SY90016.
L'elenco completo dei codici è disponibile in Codici di errore.
Note.
- Il corpo della richiesta deve essere racchiuso in un oggetto
input. - Controlla
errors, non lo stato HTTP. Una richiesta di creazione rifiutata restituisceHTTP 200. - I numeri di telefono vengono normalizzati prima dell'esecuzione della scansione e due richieste che differiscono solo per formattazione, maiuscole e minuscole o spazi vengono considerate relative alla stessa attività.
- Una richiesta di creazione conta come una richiesta ai fini del tuo limite di frequenza, indipendentemente dal numero di directory controllate dalla scansione.
- Una scansione viene conservata per 90 giorni. Trascorso questo periodo, la sua lettura restituisce
404conSY83005. - Questa chiamata richiede una chiave Write (scrittura).
curl -X POST 'https://listingsapi.com/api/v4/listings/scans' \ -H "Authorization: API $LISTINGSAPI_KEY" \ -H 'Content-Type: application/json' \ -d '{ "input": { "name": "Franklin Barbecue", "street": "900 E 11th St", "city": "Austin", "stateIso": "TX", "postalCode": "78702", "countryIso": "US", "phone": "+15126531187" } }'