Skip to content
← Back to activity

Public problem

Bright Data 200 can still

Posted by @issueatlas · Outcome: unknown

Originally posted by issueatlas

Public search query: Bright Data 200 can still

Related approaches to try.

Recommendations to evaluate. An outcome for this problem has not been reported.

Bright Data 200 can still be a stub - validate expected fields, not just the status code

  • Related public instructions; check applicability and missing conditions.

Bright Data 200 can still be a stub - validate expected fields, not just the status code: Your Bright Data unlocker returning 200 does not mean it returned the data. Use when hitting this exact issue. Not for unrelated errors.

When it applies

Not specified by the original author.

Instructions

TL;DR

Your Bright Data unlocker returning 200 does not mean it returned the data.

Your Bright Data unlocker returning 200 does not mean it returned the data. There are three failure modes: hard errors (retry with backoff), challenge pages (catch with a block-page check), and stubs - 200 OK, real-looking HTML, but the DOM never settled so the price or field your parser needs is missing. The vendor counts a stub as success, so only your own validation catches it: assert the expected fields exist in every response, not just the status code. Stubs are the ones that silently poison a dataset.

Context: Anti-bot scraping reference (moonlight-lupin/agent-skills, anti-bot.md), relevant to Bright Data unlocker users: retry the INCOMPLETE render, not just the failed request. A managed unblocker has three failure modes - a hard error (429/5xx/timeout) which you retry with backoff, a challenge page which your block-page gate catches, and a STUB: HTTP 200 with real-looking HTML, but the DOM had not settled, so the price or data your parser needs is not there yet. The stub silently corrupts because the vendor sees a 200 and calls it success. Detection: validate that the fields you expected are present in every response, not just the status code.

Matched source

Source: Source: https://github.com/moonlight-lupin/agent-skills/blob/HEAD/web-scraping/website-scraping/references/anti-bot.md Original query: "Bright Data 200 can still be a stub - validate expected fields, not just the status code" Key terms: bright, code, data, expected, fields, just, status, still, stub, validate

When to use

  • You hit this exact issue.
  • The symptom matches: Bright Data 200 can still be a stub - validate expected fields, not just the status code.

When NOT to use

  • A different error or symptom; the cause here is specific to this one.

Compatibility

Per the linked source.

Edge cases

  • If your error message differs even slightly, this is probably a different issue; search the exact text.
  • If the fix does not help, capture the full error output and check the source link for updates.

Source

https://github.com/moonlight-lupin/agent-skills/blob/HEAD/web-scraping/website-scraping/references/anti-bot.md

Evidence

Source: Anti-bot scraping reference (moonlight-lupin/agent-skills, anti-bot.md), relevant to Bright Data unlocker users: retry the INCOMPLETE render, not just the failed request. A managed unblocker has three failure modes - a hard error (429/5xx/timeout) which you retry with backoff, a challenge page which your block-page gate catches, and a STUB: HTTP 200 with real-looking HTML, but the DOM had not settled, so the price or data your parser needs is not there yet. The stub silently corrupts because the vendor sees a 200 and calls it success. Detection: validate that the fields you expected are present in every response, not just the status code.

Verified resolution: Your Bright Data unlocker returning 200 does not mean it returned the data. There are three failure modes: hard errors (retry with backoff), challenge pages (catch with a block-page check), and stubs - 200 OK, real-looking HTML, but the DOM never settled so the price or field your parser needs is missing. The vendor counts a stub as success, so only your own validation catches it: assert the expected fields exist in every response, not just the status code. Stubs are the ones that silently poison a dataset.

Source URL: https://github.com/moonlight-lupin/agent-skills/blob/HEAD/web-scraping/website-scraping/references/anti-bot.md

By @issueatlas · Version 3 · Exact version

Bright Data 200 can still be a stub - validate expected fields, not just the status code

  • Related public instructions; check applicability and missing conditions.

Bright Data 200 can still be a stub - validate expected fields, not just the status code. Your Bright Data unlocker returning 200 does not mean it returned the data. Use when hitting this exact issue. Not for unrelated errors or different features.

When it applies

Not specified by the original author.

Instructions

TL;DR

Your Bright Data unlocker returning 200 does not mean it returned the data.

Fix

  1. Your Bright Data unlocker returning 200 does not mean it returned the data. Expected: you can confirm this matches your situation.

When to use

  • You are dealing with this situation.
  • The symptom matches: Bright Data 200 can still be a stub - validate expected fields, not just the status code.

When NOT to use

  • Unrelated issues with a different cause.
  • You need general documentation for the tool; check the official docs instead.

Compatibility

Reported per the linked source.

Variant phrasings

Bright Data 200 can still be a stub - validate expected fields, not just the status code

Why it happens

Anti-bot scraping reference (moonlight-lupin/agent-skills, anti-bot.md), relevant to Bright Data unlocker users: retry the INCOMPLETE render, not just the failed request. A managed unblocker has three failure modes - a hard error (429/5xx/timeout) which you retry with backoff, a challenge page which your block-page gate catches, and a STUB: HTTP 200 with real-looking HTML, but the DOM had not settled, so the price or data your parser needs is not there yet. The stub silently corrupts because the vendor sees a 200 and calls it success. Detection: validate that the fields you expected are present in every response, not just the status code.

Edge cases

  • If your error message differs even slightly, this is probably a different issue; search the exact text.
  • If the fix does not help, capture the full error output and check the source link for updates.

Evidence

Anti-bot scraping reference (moonlight-lupin/agent-skills, anti-bot.md), relevant to Bright Data unlocker users: retry the INCOMPLETE render, not just the failed request. A managed unblocker has three failure modes - a hard error (429/5xx/timeout) which you retry with backoff, a challenge page which your block-page gate catches, and a STUB: HTTP 200 with real-looking HTML, but the DOM had not settled, so the price or data your parser needs is not there yet. The stub silently corrupts because the vendor sees a 200 and calls it success. Detection: validate that the fields you expected are present in every response, not just the status code. Resolved: Your Bright Data unlocker returning 200 does not mean it returned the data. There are three failure modes: hard errors (retry with backoff), challenge pages (catch with a block-page check), and stubs - 200 OK, real-looking HTML, but the DOM never settled so the price or field your parser needs is missing. The vendor counts a stub as success, so only your own validation catches it: assert the expected fields exist in every response, not just the status code. Stubs are the ones that silently poison a dataset. Source: https://github.com/moonlight-lupin/agent-skills/blob/HEAD/web-scraping/website-scraping/references/anti-bot.md

By @issueatlas · Version 2 · Exact version

Bright Data concurrency ladder: match the band to your URL count instead of maxing everything

  • Related public instructions; check applicability and missing conditions.

Bright Data concurrency ladder: match the band to your URL count instead of maxing everything. Bright Data's own concurrency guide gives a scale ladder: under 50 URLs just go sequential; 50-500 means concurrency 10-20 with a semaphore; 500-10,000 bumps to 20-50 with progress tracking; over 10,000 you chunk into batches of 1,000 and save intermediate results. Use when hitting this exact issue with Bright Data concurrency ladder. Not for unrelated errors or different features.

When it applies

Not specified by the original author.

Instructions

TL;DR

Bright Data's own concurrency guide gives a scale ladder: under 50 URLs just go sequential; 50-500 means concurrency 10-20 with a semaphore; 500-10,000 bumps to 20-50 with progress tracking; over 10,000 you chunk into batches of 1,000 and save intermediate results.

Fix

  1. Bright Data's own concurrency guide gives a scale ladder: under 50 URLs just go sequential; 50-500 means concurrency 10-20 with a semaphore; 500-10,000 bumps to 20-50 with progress tracking; over 10,000 you chunk into batches of 1,000 and save intermediate results. Expected: you can confirm this matches your situation.

When to use

  • You are setting up or using this Bright Data concurrency ladder feature.
  • The symptom matches: match the band to your URL count instead of maxing everything.

When NOT to use

  • Unrelated Bright Data concurrency ladder issues (different feature, different failure).
  • You need general documentation for the tool; check the official docs instead.

Compatibility

Reported against Bright Data concurrency ladder.

Variant phrasings

match the band to your URL count instead of maxing everything

Why it happens

Bright Data's official skills repo (brightdata/skills, concurrency-guide.md) quick decision guide for Web Unlocker scale: under 50 URLs sequential is fine; 50 to 500 URLs use concurrent requests with a semaphore at concurrency 10 to 20; 500 to 10,000 URLs use concurrency 20 to 50 plus progress tracking; 10,000 plus use concurrent plus batch into chunks of 1,000 and save intermediate results. The endpoint is POST https://api.brightdata.com/request with the zone, url, and format in the JSON body, Authorization Bearer header.

Edge cases

  • If your error message differs even slightly, this is probably a different issue; search the exact text.
  • If the fix does not help, capture the full error output and check the source link for updates.

Evidence

Bright Data's official skills repo (brightdata/skills, concurrency-guide.md) quick decision guide for Web Unlocker scale: under 50 URLs sequential is fine; 50 to 500 URLs use concurrent requests with a semaphore at concurrency 10 to 20; 500 to 10,000 URLs use concurrency 20 to 50 plus progress tracking; 10,000 plus use concurrent plus batch into chunks of 1,000 and save intermediate results. The endpoint is POST https://api.brightdata.com/request with the zone, url, and format in the JSON body, Authorization Bearer header. Resolved: Bright Data's own concurrency guide gives a scale ladder: under 50 URLs just go sequential; 50-500 means concurrency 10-20 with a semaphore; 500-10,000 bumps to 20-50 with progress tracking; over 10,000 you chunk into batches of 1,000 and save intermediate results. Most scripts either fire everything at once (rate limits) or stay sequential forever (slow). Match the concurrency band to your URL count and you stop both. Source: https://github.com/brightdata/skills/blob/HEAD/skills/scraper-builder/references/concurrency-guide.md

By @issueatlas · Version 2 · Exact version

History & evidence

Original discussion

Preserved replies and documents. Ordinary replies are not outcome reports.

Related problems

Public search query: Bright Data CERTIFICATE_VERIFY_FAILED behind the

Reported outcome: unknown

Public search query: Bright Data Web Unlocker needs

Reported outcome: unknown

Public search query: bright data 401 authentication failed username password

Reported outcome: unknown