Bot-Detect API — Verificarea crawlerelor motoarelor de c\u0103utare | YEB

Verifica\u021bi dac\u0103 un IP \u0219i User-Agent apar\u021bin cu adev\u0103rat Googlebot, Bingbot, OpenAI, Yandex, DuckDuckGo, Qwant, Seznam sau Meta. Verific\u0103ri bazate pe CIDR actualizate la fiecare 12 ore.

Ce puteți face?
7 furnizori de boți de căutare

Google, Bing, OpenAI, Yandex, DuckDuckGo, Qwant și Seznam.

Verificare IP bazată pe CIDR

Intervalele IPv4/IPv6 ale furnizorilor sunt preluate și stocate în cache la fiecare 12 ore.

Verificare Flood vs Bot

Determină dacă o cerere este un crawler legitim sau un flood/scraper.

Încercați live
99.9 % Disponibilitate
369.5ms Răspuns
20 req/s
0.003 Credite / cerere

Auto Detect – Which crawler is it?

POST https://api.yeb.to/v1/bot/detect/detect
Parameter Type Required Description
api_keystringyesYour API key
ipstringyesIPv4 / IPv6 to verify (defaults to caller IP)
uastringoptUser-Agent header (defaults to caller UA)

Example

curl -X POST https://api.yeb.to/v1/bot/detect/detect \
  -H "Content-Type: application/json" \
  -d '{"api_key":"YOUR_KEY","ip":"66.249.66.1","ua":"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"}'

Response Example

{
  "result": { "vendor": "google", "ip_match": true }
}
{
  "error": "Unknown action 'foo'",
  "code": 422
}

Coduri de răspuns

CodDescriere
200 SuccessCerere procesată OK.
400 Bad RequestValidarea intrării a eșuat.
401 UnauthorizedCheie API lipsă sau incorectă.
403 ForbiddenCheie inactivă sau nepermisă.
429 Rate LimitPrea multe cereri.
500 Server ErrorEroare neașteptată.

Detect (auto)

bot/detect/detect 0.0030 credits

Parameters

API Key
query · string · required
IP address
query · string
User-Agent
query · string
Verify rDNS (FCrDNS)
query · boolean

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

Check Googlebot

POST https://api.yeb.to/v1/bot/detect/google
ParameterTypeRequiredDescription
api_keystringyesYour API key
ipstringyesIP to verify
uastringoptUser-Agent header

Example

curl -X POST https://api.yeb.to/v1/bot/detect/google \
  -H "Content-Type: application/json" \
  -d '{"api_key":"YOUR_KEY","ip":"66.249.66.1","ua":"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"}'

Response

{
  "result": { "vendor": "google", "ip_match": true }
}
{
  "result": { "vendor": "google", "ip_match": false }
}

Coduri de răspuns

CodDescriere
200 SuccessCerere procesată OK.
400 Bad RequestValidarea intrării a eșuat.
401 UnauthorizedCheie API lipsă sau incorectă.
403 ForbiddenCheie inactivă sau nepermisă.
429 Rate LimitPrea multe cereri.
500 Server ErrorEroare neașteptată.

Is Googlebot?

bot/detect/google 0.0010 credits

Parameters

API Key
query · string · required
IP address
query · string · required
User-Agent
query · string

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

Check Bingbot

POST https://api.yeb.to/v1/bot/detect/bing
ParameterTypeRequiredDescription
api_keystringyesYour API key
ipstringyesIP to verify
uastringoptUser-Agent header

Example

curl -X POST https://api.yeb.to/v1/bot/detect/bing \
  -H "Content-Type: application/json" \
  -d '{"api_key":"YOUR_KEY","ip":"157.55.39.250","ua":"Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"}'

Response

{
  "result": { "vendor": "bing", "ip_match": true }
}
{
  "result": { "vendor": "bing", "ip_match": false }
}

Coduri de răspuns

CodDescriere
200 SuccessCerere procesată OK.
400 Bad RequestValidarea intrării a eșuat.
401 UnauthorizedCheie API lipsă sau incorectă.
403 ForbiddenCheie inactivă sau nepermisă.
429 Rate LimitPrea multe cereri.
500 Server ErrorEroare neașteptată.

Is Bingbot?

bot/detect/bing 0.0010 credits

Parameters

API Key
query · string · required
IP address
query · string · required
User-Agent
query · string

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

Check OpenAI Search Bot

POST https://api.yeb.to/v1/bot/detect/openai
ParameterTypeRequiredDescription
api_keystringyesYour API key
ipstringyesIP to verify
uastringoptUser-Agent header

Example

curl -X POST https://api.yeb.to/v1/bot/detect/openai \
  -H "Content-Type: application/json" \
  -d '{"api_key":"YOUR_KEY","ip":"20.15.240.186","ua":"Mozilla/5.0 (compatible; ChatGPT-User/1.0; +https://openai.com/bot)"}'

Response

{
  "result": { "vendor": "openai", "ip_match": true }
}
{
  "result": { "vendor": "openai", "ip_match": false }
}

Coduri de răspuns

CodDescriere
200 SuccessCerere procesată OK.
400 Bad RequestValidarea intrării a eșuat.
401 UnauthorizedCheie API lipsă sau incorectă.
403 ForbiddenCheie inactivă sau nepermisă.
429 Rate LimitPrea multe cereri.
500 Server ErrorEroare neașteptată.

Is OpenAI bot?

bot/detect/openai 0.0010 credits

Parameters

API Key
query · string · required
IP address
query · string · required
User-Agent
query · string

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

Check YandexBot

POST https://api.yeb.to/v1/bot/detect/yandex
ParameterTypeRequiredDescription
api_keystringyesYour API key
ipstringyesIP to verify
uastringoptUser-Agent header

Example

curl -X POST https://api.yeb.to/v1/bot/detect/yandex \
  -H "Content-Type: application/json" \
  -d '{"api_key":"YOUR_KEY","ip":"5.45.207.1","ua":"Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)"}'

Response

{
  "result": { "vendor": "yandex", "ip_match": true }
}
{
  "result": { "vendor": "yandex", "ip_match": false }
}

Coduri de răspuns

CodDescriere
200 SuccessCerere procesată OK.
400 Bad RequestValidarea intrării a eșuat.
401 UnauthorizedCheie API lipsă sau incorectă.
403 ForbiddenCheie inactivă sau nepermisă.
429 Rate LimitPrea multe cereri.
500 Server ErrorEroare neașteptată.

Is YandexBot?

bot/detect/yandex 0.0010 credits

Parameters

API Key
query · string · required
IP address
query · string · required
User-Agent
query · string

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

Check DuckDuckBot

POST https://api.yeb.to/v1/bot/detect/duck
ParameterTypeRequiredDescription
api_keystringyesYour API key
ipstringyesIP to verify
uastringoptUser-Agent header

Example

curl -X POST https://api.yeb.to/v1/bot/detect/duck \
  -H "Content-Type: application/json" \
  -d '{"api_key":"YOUR_KEY","ip":"20.191.45.1","ua":"DuckDuckBot/1.0; (+http://duckduckgo.com/duckduckbot.html)"}'

Response

{
  "result": { "vendor": "duck", "ip_match": true }
}
{
  "result": { "vendor": "duck", "ip_match": false }
}

Coduri de răspuns

CodDescriere
200 SuccessCerere procesată OK.
400 Bad RequestValidarea intrării a eșuat.
401 UnauthorizedCheie API lipsă sau incorectă.
403 ForbiddenCheie inactivă sau nepermisă.
429 Rate LimitPrea multe cereri.
500 Server ErrorEroare neașteptată.

Is DuckDuckBot?

bot/detect/duck 0.0010 credits

Parameters

API Key
query · string · required
IP address
query · string · required
User-Agent
query · string

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

Check QwantBot

POST https://api.yeb.to/v1/bot/detect/qwant
ParameterTypeRequiredDescription
api_keystringyesYour API key
ipstringyesIP to verify
uastringoptUser-Agent header

Example

curl -X POST https://api.yeb.to/v1/bot/detect/qwant \
  -H "Content-Type: application/json" \
  -d '{"api_key":"YOUR_KEY","ip":"51.158.38.1","ua":"Mozilla/5.0 (compatible; QwantBot/2.1; +https://help.qwant.com/bot)"}'

Response

{
  "result": { "vendor": "qwant", "ip_match": true }
}
{
  "result": { "vendor": "qwant", "ip_match": false }
}

Coduri de răspuns

CodDescriere
200 SuccessCerere procesată OK.
400 Bad RequestValidarea intrării a eșuat.
401 UnauthorizedCheie API lipsă sau incorectă.
403 ForbiddenCheie inactivă sau nepermisă.
429 Rate LimitPrea multe cereri.
500 Server ErrorEroare neașteptată.

Is QwantBot?

bot/detect/qwant 0.0010 credits

Parameters

API Key
query · string · required
IP address
query · string · required
User-Agent
query · string

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

Check SeznamBot

POST https://api.yeb.to/v1/bot/detect/seznam
ParameterTypeRequiredDescription
api_keystringyesYour API key
ipstringyesIP to verify
uastringoptUser-Agent header

Example

curl -X POST https://api.yeb.to/v1/bot/detect/seznam \
  -H "Content-Type: application/json" \
  -d '{"api_key":"YOUR_KEY","ip":"77.75.76.3","ua":"Mozilla/5.0 (compatible; SeznamBot/4.0; +https://napoveda.seznam.cz/cz/search/bot/)"}'

Response

{
  "result": { "vendor": "seznam", "ip_match": true }
}
{
  "result": { "vendor": "seznam", "ip_match": false }
}

Coduri de răspuns

CodDescriere
200 SuccessCerere procesată OK.
400 Bad RequestValidarea intrării a eșuat.
401 UnauthorizedCheie API lipsă sau incorectă.
403 ForbiddenCheie inactivă sau nepermisă.
429 Rate LimitPrea multe cereri.
500 Server ErrorEroare neașteptată.

Is SeznamBot?

bot/detect/seznam 0.0010 credits

Parameters

API Key
query · string · required
IP address
query · string · required
User-Agent
query · string

Code Samples


                
                
                
            

Response

Status:
Headers

                
Body

                

Bot-Detect API — Verificarea crawlerelor motoarelor de c\u0103utare | YEB — Practical Guide

A hands-on guide to using Bot-Detect API — Verificarea crawlerelor motoarelor de c\u0103utare | YEB in production: what each endpoint does, when to use it, the parameters that truly matter, and how to interpret responses to make the right decision.

#What Bot-Detect solves

This API verifies whether an IP truly belongs to an official crawler (e.g., Googlebot, Bingbot) instead of someone claiming to be a bot via User-Agent. It’s designed for abuse prevention, SEO safety (don’t block real bots), and traffic classification (bill bots differently, slow them down, or allow them).

#Endpoints and when to use them

#POST /v1/bot/detect — Auto-detect

  • Best for: General checks when you don’t know the vendor in advance.
  • How it works: If a ua is provided, we try to infer a vendor from it; otherwise we test your IP against all supported vendors’ ranges.
  • Typical use: Single integration point for all traffic (edge/middleware).

#POST /v1/bot/detect/{vendor} — Vendor-specific

  • Best for: When routing already knows a suspected vendor (e.g., URLs dedicated to Google).
  • Vendors: google, bing, duck, qwant, meta, yandex, seznam, openai.
  • Note: UA is informative; the final decision is IP-based (with optional reverse-DNS/ASN checks).

#Quick start

curl -X POST "https://api.yeb.to/v1/bot/detect" \
  -H "Authorization: Bearer <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{ "ip": "66.249.66.1", "ua": "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" }'
# Vendor-specific (Google)
curl -X POST "https://api.yeb.to/v1/bot/detect/google" \
  -H "Authorization: Bearer <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{ "ip": "66.249.66.1" }'
// JS Fetch example
fetch('https://api.yeb.to/v1/bot/detect/bing', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <YOUR_API_KEY>',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ ip: '40.77.167.129' })
})
.then(r => r.json())
.then(console.log)
.catch(console.error);

#Parameters that actually matter

ParamRequiredWhat to pass in practiceWhy it matters
ip Yes Client IPv4/IPv6 you’re checking (edge-extracted, not X-Forwarded-For if you’re not sure). Final decision is IP-based. UA can be spoofed; IP ranges aren’t.
ua No Send it if you have it. We'll infer vendor and annotate ua_match, but IP stays decisive. Helps explain “why” (was the UA consistent with the result?).
verify_rdns No true if you want reverse-DNS → forward match (Google/Bing). Extra safety when you need to be 100% sure even if IP is inside a large range.
strict_rdns No true to fail if rDNS check doesn’t pass (only effective when verify_rdns is true). Force “OK = false” unless DNS proves it.
verify_asn No true to cross-check by ASN (if enabled server-side). Useful for vendors without official JSON ranges (e.g., Meta).
strict_asn No true to fail if ASN check doesn’t confirm. Pairs with verify_asn for stricter policies.
asn No Override vendor ASN when you know it (e.g., 32934 for Meta). Handy for custom policies or fast vendor updates.

#Reading and acting on responses

You mostly care about result.ok, result.vendor, and result.reason.

{
  "result": {
    "vendor": "google",
    "ok": true,
    "reason": "ip_match",                // or "ip_and_ua_match", etc.
    "ua_present": true,                  // UA was sent explicitly as param
    "ua_source": "param",                // "param" | "header" | null
    "ua_match": true,                    // UA pattern fit the vendor
    "ip_match": true,                    // IP fell inside vendor ranges
    "dns_verified": false,               // set true if verify_rdns passed
    "rdns_checked": false,
    "asn_verified": false,
    "asn_checked": false,
    "cidr_empty": false,                 // true if no ranges were available
    "ip_kind": "search_bot",             // Google only: search_bot | special_crawler | user_triggered_google | user_triggered_user | cdn_proxy | unknown
    "ip_kind_source": "json",            // "json" | "dns_ptr" | null
    "ptr": "crawl-66-249-66-1.googlebot.com"
  }
}

#Typical reason values

  • ip_and_ua_match — Best case: UA matched the vendor pattern and IP belongs to the vendor.
  • ip_match — Good: IP belongs to vendor ranges; UA was missing or didn’t match (still OK to treat as vendor).
  • ip_match_but_ua_not_matched — Likely a legitimate bot with a non-standard UA; don’t block.
  • ua_not_matched — UA said “I’m X”, but we couldn’t confirm it; check ip_match.
  • ip_not_in_vendor_ranges — Treat as non-vendor; consider bot throttling or block rules.

#Recommended actions

  • ok = true → Allow, skip WAF challenges, crawl-budget friendly rate-limit.
  • ok = false and UA claims vendor → 403 or serve simplified page; log for audit.
  • Need absolute certainty → Call with verify_rdns=true (+ strict_rdns=true if you want hard fail).

#Troubleshooting & field notes

  1. “UA says Googlebot but ok=false” → You saw a spoofed UA. Key is ip_match. Consider returning 403 or a lightweight page.
  2. Rapid vendor changes → Prefer vendor JSON ranges (handled automatically). If you need hard proof, enable verify_rdns.
  3. IPv6 traffic → Fully supported. If your edge strips IPv6, fix that first.
  4. False negatives for Meta → Use verify_asn=true (and asn=32934 if relevant) for stronger confirmation.
  5. Rate-limits → Respect 429 with exponential backoff. Keep request IDs in your logs.

#API Changelog

2025-10-20
Added Google IP classification (ip_kind, ip_kind_source, ptr) and improved vendor JSON ingestion (Google “special crawlers” and user-triggered fetchers).
2025-10-15
Introduced verify_rdns/strict_rdns and verify_asn/strict_asn flags for stricter verification flows.
2025-10-05
Vendor-specific endpoints stabilized (/google, /bing, /meta, /yandex, etc.). Response schema unified across vendors.

Întrebări frecvente

Feed-urile JSON ale furnizorilor sunt stocate în cache 12 ore; Yandex și Seznam folosesc CIDR-uri oficiale statice.

Dovada reală este adresa IP: un crawler este de încredere doar când IP-ul său se încadrează în intervalele CIDR oficiale publicate de furnizor. User-Agent poate ajuta, dar este ușor de falsificat; scraperele copiază adesea șiruri UA în timp ce vin din rețele aleatorii. Dacă IP-ul nu este în intervalul furnizorului, marcăm cererea indiferent de ce spune UA.

Da, rețelele IPv4 și IPv6 sunt complet suportate.

Da. Fiecare cerere, chiar și cele care rezultă în erori, consumă credite. Creditele tale sunt legate de numărul de cereri, indiferent de succes sau eșec. Dacă eroarea este clar cauzată de o problemă a platformei din partea noastră, vom restaura creditele afectate (fără rambursări în numerar).

Contactați-ne la [email protected]. Luăm feedback-ul în serios—dacă raportul de bug sau cererea de funcționalitate este semnificativă, putem repara sau îmbunătăți API-ul rapid și vă acordăm 50 de credite gratuite ca mulțumire.

Depinde de API și uneori chiar de endpoint. Unele endpoint-uri folosesc date din surse externe, care pot avea limite mai stricte. De asemenea, aplicăm limite pentru a preveni abuzul și a menține platforma stabilă. Verificați documentația pentru limita specifică a fiecărui endpoint.

Funcționăm pe un sistem de credite. Creditele sunt unități preplătite, nerambursabile, pe care le cheltuiți pe apeluri API și instrumente. Creditele sunt consumate FIFO (cele mai vechi mai întâi) și sunt valabile 12 luni de la data achiziției. Panoul de control afișează fiecare dată de achiziție și expirarea sa.

Da. Toate creditele achiziționate (inclusiv soldurile fracționare) sunt valabile 12 luni de la achiziție. Creditele neutilizate expiră automat și sunt șterse permanent la sfârșitul perioadei de valabilitate. Creditele expirate nu pot fi restaurate sau convertite în numerar sau altă valoare. Regulă tranzitorie: creditele cumpărate înainte de 22 sept. 2025 sunt tratate ca achiziționate pe 22 sept. 2025 și expiră pe 22 sept. 2026 (cu excepția cazului în care a fost indicată o expirare anterioară la achiziție).

Da—în cadrul perioadei de valabilitate. Creditele neutilizate rămân disponibile și se transferă din lună în lună până expiră la 12 luni de la achiziție.

Creditele sunt nerambursabile. Cumpărați doar ce aveți nevoie—puteți oricând reîncărca mai târziu. Dacă o eroare a platformei cauzează o debitare eșuată, putem restaura creditele afectate după investigare. Fără rambursări în numerar.

Prețurile sunt stabilite în credite, nu în dolari. Fiecare endpoint are propriul cost—vedeți insigna „Credite / cerere" de mai sus. Veți ști întotdeauna exact cât cheltuiți.
← Înapoi la API-uri