Bot-Detect API

Επαληθεύστε αν μια IP και ένας User-Agent ανήκουν πραγματικά στο Googlebot, Bingbot, OpenAI SearchBot, Yahoo, Seznam, Meta (Facebook), Qwant, DuckDuckGo και άλλους μεγάλους crawlers.

Τι μπορείτε να κάνετε;
7 πάροχοι bots αναζήτησης

Google, Bing, OpenAI, Yandex, DuckDuckGo, Qwant & Seznam.

Έλεγχος IP βάσει CIDR

Τα εύρη IPv4/IPv6 των παρόχων ανακτώνται και αποθηκεύονται προσωρινά κάθε 12 ώρες.

Έλεγχος Flood vs Bot

Εντοπίζει αν ένα αίτημα είναι νόμιμος crawler ή flood/scraper.

Δοκιμή ζωντανά
99.9 % Διαθεσιμότητα
369.5ms Απάντηση
20 req/s
0.003 Πιστωτικές μονάδες / αίτημα

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
}

Κωδικοί απάντησης

ΚωδικόςΠεριγραφή
200 SuccessΤο αίτημα επεξεργάστηκε επιτυχώς.
400 Bad RequestΗ επικύρωση εισόδου απέτυχε.
401 UnauthorizedΚλειδί API λείπει ή είναι λάθος.
403 ForbiddenΚλειδί ανενεργό ή μη επιτρεπόμενο.
429 Rate LimitΠάρα πολλά αιτήματα.
500 Server ErrorΜη αναμενόμενο σφάλμα.

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 }
}

Κωδικοί απάντησης

ΚωδικόςΠεριγραφή
200 SuccessΤο αίτημα επεξεργάστηκε επιτυχώς.
400 Bad RequestΗ επικύρωση εισόδου απέτυχε.
401 UnauthorizedΚλειδί API λείπει ή είναι λάθος.
403 ForbiddenΚλειδί ανενεργό ή μη επιτρεπόμενο.
429 Rate LimitΠάρα πολλά αιτήματα.
500 Server ErrorΜη αναμενόμενο σφάλμα.

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 }
}

Κωδικοί απάντησης

ΚωδικόςΠεριγραφή
200 SuccessΤο αίτημα επεξεργάστηκε επιτυχώς.
400 Bad RequestΗ επικύρωση εισόδου απέτυχε.
401 UnauthorizedΚλειδί API λείπει ή είναι λάθος.
403 ForbiddenΚλειδί ανενεργό ή μη επιτρεπόμενο.
429 Rate LimitΠάρα πολλά αιτήματα.
500 Server ErrorΜη αναμενόμενο σφάλμα.

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 }
}

Κωδικοί απάντησης

ΚωδικόςΠεριγραφή
200 SuccessΤο αίτημα επεξεργάστηκε επιτυχώς.
400 Bad RequestΗ επικύρωση εισόδου απέτυχε.
401 UnauthorizedΚλειδί API λείπει ή είναι λάθος.
403 ForbiddenΚλειδί ανενεργό ή μη επιτρεπόμενο.
429 Rate LimitΠάρα πολλά αιτήματα.
500 Server ErrorΜη αναμενόμενο σφάλμα.

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 }
}

Κωδικοί απάντησης

ΚωδικόςΠεριγραφή
200 SuccessΤο αίτημα επεξεργάστηκε επιτυχώς.
400 Bad RequestΗ επικύρωση εισόδου απέτυχε.
401 UnauthorizedΚλειδί API λείπει ή είναι λάθος.
403 ForbiddenΚλειδί ανενεργό ή μη επιτρεπόμενο.
429 Rate LimitΠάρα πολλά αιτήματα.
500 Server ErrorΜη αναμενόμενο σφάλμα.

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 }
}

Κωδικοί απάντησης

ΚωδικόςΠεριγραφή
200 SuccessΤο αίτημα επεξεργάστηκε επιτυχώς.
400 Bad RequestΗ επικύρωση εισόδου απέτυχε.
401 UnauthorizedΚλειδί API λείπει ή είναι λάθος.
403 ForbiddenΚλειδί ανενεργό ή μη επιτρεπόμενο.
429 Rate LimitΠάρα πολλά αιτήματα.
500 Server ErrorΜη αναμενόμενο σφάλμα.

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 }
}

Κωδικοί απάντησης

ΚωδικόςΠεριγραφή
200 SuccessΤο αίτημα επεξεργάστηκε επιτυχώς.
400 Bad RequestΗ επικύρωση εισόδου απέτυχε.
401 UnauthorizedΚλειδί API λείπει ή είναι λάθος.
403 ForbiddenΚλειδί ανενεργό ή μη επιτρεπόμενο.
429 Rate LimitΠάρα πολλά αιτήματα.
500 Server ErrorΜη αναμενόμενο σφάλμα.

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 }
}

Κωδικοί απάντησης

ΚωδικόςΠεριγραφή
200 SuccessΤο αίτημα επεξεργάστηκε επιτυχώς.
400 Bad RequestΗ επικύρωση εισόδου απέτυχε.
401 UnauthorizedΚλειδί API λείπει ή είναι λάθος.
403 ForbiddenΚλειδί ανενεργό ή μη επιτρεπόμενο.
429 Rate LimitΠάρα πολλά αιτήματα.
500 Server ErrorΜη αναμενόμενο σφάλμα.

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 — Practical Guide

A hands-on guide to using Bot-Detect API 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.

Συχνές Ερωτήσεις

Τα JSON feeds των παρόχων αποθηκεύονται προσωρινά για 12 ώρες· Yandex & Seznam χρησιμοποιούν στατικά επίσημα CIDR.

Η πραγματική απόδειξη είναι η διεύθυνση IP: ένας crawler θεωρείται αξιόπιστος μόνο όταν η IP του εμπίπτει στα επίσημα εύρη CIDR που δημοσιεύονται από τον πάροχο. Ο User-Agent μπορεί να βοηθήσει, αλλά είναι εύκολο να παραποιηθεί· οι scrapers συχνά αντιγράφουν συμβολοσειρές UA ενώ έρχονται από τυχαία δίκτυα. Αν η IP δεν είναι στο εύρος του παρόχου, σημαδεύουμε το αίτημα ανεξάρτητα από το τι λέει ο UA.

Ναι, τα δίκτυα IPv4 και IPv6 υποστηρίζονται πλήρως.

Ναι. Κάθε αίτημα, ακόμα και αυτά που καταλήγουν σε σφάλμα, καταναλώνει πιστωτικές μονάδες. Οι πιστωτικές μονάδες σας συνδέονται με τον αριθμό αιτημάτων, ανεξάρτητα από επιτυχία ή αποτυχία. Εάν το σφάλμα οφείλεται σαφώς σε πρόβλημα της πλατφόρμας από τη δική μας πλευρά, θα αποκαταστήσουμε τις επηρεαζόμενες πιστωτικές μονάδες (χωρίς επιστροφή χρημάτων).

Επικοινωνήστε μαζί μας στο [email protected]. Λαμβάνουμε τα σχόλια σοβαρά—εάν η αναφορά σφάλματος ή το αίτημα λειτουργίας είναι ουσιαστικό, μπορούμε να διορθώσουμε ή να βελτιώσουμε το API γρήγορα και να σας χορηγήσουμε 50 δωρεάν πιστωτικές μονάδες ως ευχαριστώ.

Εξαρτάται από το API και μερικές φορές ακόμα και από το endpoint. Ορισμένα endpoints χρησιμοποιούν δεδομένα από εξωτερικές πηγές, που μπορεί να έχουν αυστηρότερα όρια. Επιβάλλουμε επίσης όρια για να αποτρέψουμε κατάχρηση και να διατηρήσουμε την πλατφόρμα μας σταθερή. Ελέγξτε την τεκμηρίωση για το συγκεκριμένο όριο κάθε endpoint.

Λειτουργούμε με σύστημα πιστωτικών μονάδων. Οι πιστωτικές μονάδες είναι προπληρωμένες, μη επιστρέψιμες μονάδες που ξοδεύετε σε κλήσεις API και εργαλεία. Καταναλώνονται με τη μέθοδο FIFO (παλαιότερες πρώτα) και ισχύουν για 12 μήνες από την ημερομηνία αγοράς. Ο πίνακας ελέγχου δείχνει κάθε ημερομηνία αγοράς και τη λήξη της.

Ναι. Όλες οι αγορασμένες πιστωτικές μονάδες (συμπεριλαμβανομένων κλασματικών υπολοίπων) ισχύουν για 12 μήνες από την αγορά. Οι αχρησιμοποίητες πιστωτικές μονάδες λήγουν αυτόματα και διαγράφονται μόνιμα στο τέλος της περιόδου ισχύος. Οι ληγμένες πιστωτικές μονάδες δεν μπορούν να αποκατασταθούν ή να μετατραπούν σε μετρητά ή άλλη αξία. Μεταβατικός κανόνας: πιστωτικές μονάδες που αγοράστηκαν πριν τις 22 Σεπ. 2025 θεωρούνται αγορασμένες στις 22 Σεπ. 2025 και λήγουν στις 22 Σεπ. 2026 (εκτός αν αναφέρθηκε νωρίτερη λήξη κατά την αγορά).

Ναι—εντός της περιόδου ισχύος τους. Οι αχρησιμοποίητες πιστωτικές μονάδες παραμένουν διαθέσιμες και μεταφέρονται από μήνα σε μήνα μέχρι να λήξουν 12 μήνες μετά την αγορά.

Οι πιστωτικές μονάδες είναι μη επιστρέψιμες. Αγοράστε μόνο ό,τι χρειάζεστε—μπορείτε πάντα να αναπληρώσετε αργότερα. Εάν ένα σφάλμα πλατφόρμας προκαλέσει αποτυχημένη χρέωση, μπορούμε να αποκαταστήσουμε τις επηρεαζόμενες πιστωτικές μονάδες μετά από έρευνα. Καμία επιστροφή χρημάτων.

Οι τιμές ορίζονται σε πιστωτικές μονάδες, όχι σε δολάρια. Κάθε endpoint έχει το δικό του κόστος—δείτε το σήμα «Πιστωτικές μονάδες / αίτημα» παραπάνω. Θα ξέρετε πάντα ακριβώς τι ξοδεύετε.
← Πίσω στα API