Skip to content

Antibot Detection
PRO

Know exactly who blocked your request and why. Microlink detects antibot and CAPTCHA challenges from 30+ providers using response signals — then you can decide what to do next.

Why

When a request fails, know who stopped it.

Microlink handles +700M requests every month. When you build infrastructure that takes a URL as input, you are constantly interacting with defenses designed to stop you.

A request can experience

Followed by a challenge page. A captcha. A JavaScript puzzle.

Modern antibot systems operate at multiple layers, often before your request even reaches application code. Detection does something fundamental: it tells you when a non-success resolution happens and who triggered it, so you can make a better decision about what to do next.
Illustrative distribution of blocked antibot providersblockedprovidersrecaptchacloudflarecloudflare-turnstileaws-wafakamaihcaptcha
Common signals include:
  • IP reputation: Data-center IPs are flagged by default. Residential traffic behaves differently.
  • HTTP consistency: Headers must match a real browser profile — not just User-Agent, but the full set.
  • TLS fingerprints (JA3): The way a client negotiates TLS leaks whether it is a browser or a script.
  • Behavioral heuristics: Timing, navigation order, and interaction patterns matter.
  • JavaScript fingerprinting: Canvas, WebGL, fonts, screen size — small inconsistencies are enough.
Based on these signals, a request is either:
  • Allowed: Heuristics indicate a legitimate visitor — the request passes through to the target.
  • Blocked: The request looks highly suspicious and is refused immediately with 403 or 429.
  • Challenged: The system is unsure and serves a CAPTCHA or JavaScript interstitial before content.
How it works

Classify the challenge. Name the provider.

At a high level, Microlink classifies challenge responses using the HTTP response itself — no headless browser required for detection. Each provider leaves a distinct combination of signals. Providers are checked in priority order; the first match wins.
How Microlink names an antibot challengeThe HTTP response is classified from status, headers, and body markers. Providers are checked in order and the first match wins.HTTP statusHeadersBodyFirst matchProvider
  • HTTP status patterns — LinkedIn can return 999; Reddit can return 403 on challenge flows
  • Known challenge signatures — CAPTCHA widgets, interstitial templates, verification scripts
  • Response headers and body markers — mitigation headers, challenge tokens, provider script references
  • Provider-specific fingerprints — for example Cloudflare commonly surfaces cf-mitigated: challenge
Providers

30+ providers across antibot, CAPTCHA, and platforms.

Use this coverage map when building retry logic, escalation rules, or provider-specific analytics in your scraping pipeline.
  • Akamai
    Antibot · 3 signals
    HeadersCookiesHTML
  • AliExpress CAPTCHA
    CAPTCHA · 2 signals
    HTMLURL
  • Amazon
    Platform-specific · 2 signals
    HeadersHTML
  • Anubis
    Antibot · 1 signal
    HTML
  • AWS WAF
    Antibot · 3 signals
    HeadersCookiesHTML
  • Captcha.eu
    CAPTCHA · 2 signals
    HTMLURL
  • Cheq
    Antibot · 2 signals
    HTMLURL
  • Cloudflare
    Antibot · 3 signals
    HeadersCookiesHTML
  • Cloudflare Turnstile
    CAPTCHA · 2 signals
    HTMLURL
  • CloudFront
    Antibot · 2 signals
    HeadersHTML
  • DataDome
    Antibot · 3 signals
    HeadersCookiesHTML
  • Douban
    Platform-specific · 1 signal
    Status Code
  • Dribbble
    Platform-specific · 1 signal
    Status Code
  • Friendly Captcha
    CAPTCHA · 2 signals
    HTMLURL
  • FullStory Challenge
    Antibot · 2 signals
    CookiesHTML
  • FunCaptcha (Arkose Labs)
    CAPTCHA · 2 signals
    HTMLURL
  • GeeTest
    CAPTCHA · 2 signals
    HTMLURL
  • Google
    Platform-specific · 1 signal
    URL
  • hCaptcha
    CAPTCHA · 2 signals
    HTMLURL
  • Hostinger
    Antibot · 2 signals
    HeadersHTML
  • Houzz
    Platform-specific · 1 signal
    Status Code
  • Imperva / Incapsula
    Antibot · 3 signals
    HeadersCookiesHTML
  • Instagram
    Platform-specific · 3 signals
    HTMLURLStatus Code
  • Kasada
    Antibot · 2 signals
    HeadersHTML
  • LinkedIn
    Platform-specific · 1 signal
    Status Code
  • Meetrics
    Antibot · 2 signals
    HTMLURL
  • Ocule
    Antibot · 2 signals
    HTMLURL
  • PerimeterX
    Antibot · 4 signals
    HeadersCookiesHTMLURL
  • QCloud Captcha
    CAPTCHA · 2 signals
    HTMLURL
  • Reblaze
    Antibot · 2 signals
    CookiesHTML
  • reCAPTCHA
    CAPTCHA · 2 signals
    HTMLURL
  • Reddit
    Platform-specific · 2 signals
    HTMLStatus Code
  • Shape Security
    Antibot · 2 signals
    HeadersHTML
  • Sucuri
    Antibot · 1 signal
    HTML
  • ThreatMetrix
    Antibot · 2 signals
    HTMLURL
  • Vercel
    Antibot · 1 signal
    Headers
  • Weibo
    Platform-specific · 1 signal
    HTML
  • YouTube
    Platform-specific · 1 signal
    HTML
ProviderCategorySignalsDetection methods
AkamaiAntibot3
HeadersCookiesHTML
AliExpress CAPTCHACAPTCHA2
HTMLURL
AmazonPlatform-specific2
HeadersHTML
AnubisAntibot1
HTML
AWS WAFAntibot3
HeadersCookiesHTML
Captcha.euCAPTCHA2
HTMLURL
CheqAntibot2
HTMLURL
CloudflareAntibot3
HeadersCookiesHTML
Cloudflare TurnstileCAPTCHA2
HTMLURL
CloudFrontAntibot2
HeadersHTML
DataDomeAntibot3
HeadersCookiesHTML
DoubanPlatform-specific1
Status Code
DribbblePlatform-specific1
Status Code
Friendly CaptchaCAPTCHA2
HTMLURL
FullStory ChallengeAntibot2
CookiesHTML
FunCaptcha (Arkose Labs)CAPTCHA2
HTMLURL
GeeTestCAPTCHA2
HTMLURL
GooglePlatform-specific1
URL
hCaptchaCAPTCHA2
HTMLURL
HostingerAntibot2
HeadersHTML
HouzzPlatform-specific1
Status Code
Imperva / IncapsulaAntibot3
HeadersCookiesHTML
InstagramPlatform-specific3
HTMLURLStatus Code
KasadaAntibot2
HeadersHTML
LinkedInPlatform-specific1
Status Code
MeetricsAntibot2
HTMLURL
OculeAntibot2
HTMLURL
PerimeterXAntibot4
HeadersCookiesHTMLURL
QCloud CaptchaCAPTCHA2
HTMLURL
ReblazeAntibot2
CookiesHTML
reCAPTCHACAPTCHA2
HTMLURL
RedditPlatform-specific2
HTMLStatus Code
Shape SecurityAntibot2
HeadersHTML
SucuriAntibot1
HTML
ThreatMetrixAntibot2
HTMLURL
VercelAntibot1
Headers
WeiboPlatform-specific1
HTML
YouTubePlatform-specific1
HTML
Examples
On Pro, a named block is retried through a residential IP — no extra option.
Resolved automatically
import createClient from 'microlink.io'

const microlink = createClient({
  apiKey: process.env.MICROLINK_API_KEY
})

const { title } = await microlink.metadata(url)
Use cases