Add X/Twitter scraper support and generic Web Scraper API access with discovery parameters #38

Description

@Ashish-Soni08

Summary

The Python SDK advertises broad scraper and dataset coverage, but version
2.3.1 has no client.scrape.x or client.scrape.twitter namespace.

The repository's ScrapeService exposes Amazon, LinkedIn, ChatGPT, Facebook,
Instagram, Perplexity, TikTok, YouTube, DigiKey, and Reddit, but not X.
The generated dataset catalog also does not expose an X/Twitter module.

As a result, a working X Web Scraper API job cannot be represented through the
SDK. I had to use httpx directly against /datasets/v3/trigger.

Use case

Collect public X posts for verified profiles with:

  • type=discover_new
  • discover_by=profile_url
  • start_date
  • end_date
  • asynchronous polling
  • error inclusion
  • raw JSONL output

The corresponding dataset is:

gd_lwxkxvnf1cynvib9co

Equivalent jobs submitted through direct REST and the Control Panel returned
the same 454 records across six profiles, confirming that the REST integration
was correct.

Current gap

There is no supported equivalent to:

awaitclient.scrape.x.posts_by_profile(
url="https://x.com/sama",
start_date="2022-11-30T00:00:00Z",
end_date="2026-06-08T23:59:59Z",
)

There is also no clearly documented generic Web Scraper API method such as:

awaitclient.web_scraper.trigger(
dataset_id="gd_lwxkxvnf1cynvib9co",
discovery={"type": "discover_new", "discover_by": "profile_url"},
inputs=[...],
include_errors=True,
)

The generic dataset catalog API is not a replacement for triggering a current
Web Scraper API collector with discovery inputs.

Requested improvement

Please add:

  1. An X/Twitter scraper namespace generated from the available X scraper
    endpoints.
  2. A generic typed Web Scraper API client that accepts dataset_id, query
    parameters, structured inputs, and asynchronous trigger/poll/fetch.
  3. Introspection for supported discovery modes and their distinct input
    schemas.
  4. Access to snapshot ID, submitted input, status, error rows, delivered
    record count, and cost when available.
  5. JSONL/NDJSON streaming or file export for large jobs.
  6. Documentation that distinguishes:
    • ready-made scraper methods;
    • marketplace/pre-collected datasets;
    • Scraper Studio collectors; and
    • generic Web Scraper API jobs.

Related documentation concern

The documentation describes hundreds of available scrapers, while the
high-level Python namespace exposes a much smaller platform set. Please clarify
whether the SDK intends to provide full catalog parity or only selected
first-class wrappers.

Expected outcome

Users should not need to leave the SDK and write a separate REST client to
access a Bright Data Web Scraper API collector already available in their
account.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
       blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
      }
      } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
      })();
      (function(){
      try {
      var __m = "github.com";
      var __re = new RegExp('^' + "github\\.com" + '
      
      Skip to content

      Add X/Twitter scraper support and generic Web Scraper API access with discovery parameters #38

      Description

      @Ashish-Soni08

      Summary

      The Python SDK advertises broad scraper and dataset coverage, but version
      2.3.1 has no client.scrape.x or client.scrape.twitter namespace.

      The repository's ScrapeService exposes Amazon, LinkedIn, ChatGPT, Facebook,
      Instagram, Perplexity, TikTok, YouTube, DigiKey, and Reddit, but not X.
      The generated dataset catalog also does not expose an X/Twitter module.

      As a result, a working X Web Scraper API job cannot be represented through the
      SDK. I had to use httpx directly against /datasets/v3/trigger.

      Use case

      Collect public X posts for verified profiles with:

      • type=discover_new
      • discover_by=profile_url
      • start_date
      • end_date
      • asynchronous polling
      • error inclusion
      • raw JSONL output

      The corresponding dataset is:

      gd_lwxkxvnf1cynvib9co
      

      Equivalent jobs submitted through direct REST and the Control Panel returned
      the same 454 records across six profiles, confirming that the REST integration
      was correct.

      Current gap

      There is no supported equivalent to:

      awaitclient.scrape.x.posts_by_profile(
      url="https://x.com/sama",
      start_date="2022-11-30T00:00:00Z",
      end_date="2026-06-08T23:59:59Z",
      )

      There is also no clearly documented generic Web Scraper API method such as:

      awaitclient.web_scraper.trigger(
      dataset_id="gd_lwxkxvnf1cynvib9co",
      discovery={"type": "discover_new", "discover_by": "profile_url"},
      inputs=[...],
      include_errors=True,
      )

      The generic dataset catalog API is not a replacement for triggering a current
      Web Scraper API collector with discovery inputs.

      Requested improvement

      Please add:

      1. An X/Twitter scraper namespace generated from the available X scraper
        endpoints.
      2. A generic typed Web Scraper API client that accepts dataset_id, query
        parameters, structured inputs, and asynchronous trigger/poll/fetch.
      3. Introspection for supported discovery modes and their distinct input
        schemas.
      4. Access to snapshot ID, submitted input, status, error rows, delivered
        record count, and cost when available.
      5. JSONL/NDJSON streaming or file export for large jobs.
      6. Documentation that distinguishes:
        • ready-made scraper methods;
        • marketplace/pre-collected datasets;
        • Scraper Studio collectors; and
        • generic Web Scraper API jobs.

      Related documentation concern

      The documentation describes hundreds of available scrapers, while the
      high-level Python namespace exposes a much smaller platform set. Please clarify
      whether the SDK intends to provide full catalog parity or only selected
      first-class wrappers.

      Expected outcome

      Users should not need to leave the SDK and write a separate REST client to
      access a Bright Data Web Scraper API collector already available in their
      account.

      Activity

      Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

      Metadata

      Metadata

      Assignees

      No one assigned

        Labels

        No labels
        No labels

        Type

        No type

        Projects

        No projects

          Milestone

          No milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
          Skip to content

          Add X/Twitter scraper support and generic Web Scraper API access with discovery parameters #38

          Description

          @Ashish-Soni08

          Summary

          The Python SDK advertises broad scraper and dataset coverage, but version
          2.3.1 has no client.scrape.x or client.scrape.twitter namespace.

          The repository's ScrapeService exposes Amazon, LinkedIn, ChatGPT, Facebook,
          Instagram, Perplexity, TikTok, YouTube, DigiKey, and Reddit, but not X.
          The generated dataset catalog also does not expose an X/Twitter module.

          As a result, a working X Web Scraper API job cannot be represented through the
          SDK. I had to use httpx directly against /datasets/v3/trigger.

          Use case

          Collect public X posts for verified profiles with:

          • type=discover_new
          • discover_by=profile_url
          • start_date
          • end_date
          • asynchronous polling
          • error inclusion
          • raw JSONL output

          The corresponding dataset is:

          gd_lwxkxvnf1cynvib9co
          

          Equivalent jobs submitted through direct REST and the Control Panel returned
          the same 454 records across six profiles, confirming that the REST integration
          was correct.

          Current gap

          There is no supported equivalent to:

          awaitclient.scrape.x.posts_by_profile(
          url="https://x.com/sama",
          start_date="2022-11-30T00:00:00Z",
          end_date="2026-06-08T23:59:59Z",
          )

          There is also no clearly documented generic Web Scraper API method such as:

          awaitclient.web_scraper.trigger(
          dataset_id="gd_lwxkxvnf1cynvib9co",
          discovery={"type": "discover_new", "discover_by": "profile_url"},
          inputs=[...],
          include_errors=True,
          )

          The generic dataset catalog API is not a replacement for triggering a current
          Web Scraper API collector with discovery inputs.

          Requested improvement

          Please add:

          1. An X/Twitter scraper namespace generated from the available X scraper
            endpoints.
          2. A generic typed Web Scraper API client that accepts dataset_id, query
            parameters, structured inputs, and asynchronous trigger/poll/fetch.
          3. Introspection for supported discovery modes and their distinct input
            schemas.
          4. Access to snapshot ID, submitted input, status, error rows, delivered
            record count, and cost when available.
          5. JSONL/NDJSON streaming or file export for large jobs.
          6. Documentation that distinguishes:
            • ready-made scraper methods;
            • marketplace/pre-collected datasets;
            • Scraper Studio collectors; and
            • generic Web Scraper API jobs.

          Related documentation concern

          The documentation describes hundreds of available scrapers, while the
          high-level Python namespace exposes a much smaller platform set. Please clarify
          whether the SDK intends to provide full catalog parity or only selected
          first-class wrappers.

          Expected outcome

          Users should not need to leave the SDK and write a separate REST client to
          access a Bright Data Web Scraper API collector already available in their
          account.

          Activity

          Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

          Metadata

          Metadata

          Assignees

          No one assigned

            Labels

            No labels
            No labels

            Type

            No type

            Projects

            No projects

              Milestone

              No milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              Add X/Twitter scraper support and generic Web Scraper API access with discovery parameters #38

              Description

              @Ashish-Soni08

              Summary

              The Python SDK advertises broad scraper and dataset coverage, but version
              2.3.1 has no client.scrape.x or client.scrape.twitter namespace.

              The repository's ScrapeService exposes Amazon, LinkedIn, ChatGPT, Facebook,
              Instagram, Perplexity, TikTok, YouTube, DigiKey, and Reddit, but not X.
              The generated dataset catalog also does not expose an X/Twitter module.

              As a result, a working X Web Scraper API job cannot be represented through the
              SDK. I had to use httpx directly against /datasets/v3/trigger.

              Use case

              Collect public X posts for verified profiles with:

              • type=discover_new
              • discover_by=profile_url
              • start_date
              • end_date
              • asynchronous polling
              • error inclusion
              • raw JSONL output

              The corresponding dataset is:

              gd_lwxkxvnf1cynvib9co
              

              Equivalent jobs submitted through direct REST and the Control Panel returned
              the same 454 records across six profiles, confirming that the REST integration
              was correct.

              Current gap

              There is no supported equivalent to:

              awaitclient.scrape.x.posts_by_profile(
              url="https://x.com/sama",
              start_date="2022-11-30T00:00:00Z",
              end_date="2026-06-08T23:59:59Z",
              )

              There is also no clearly documented generic Web Scraper API method such as:

              awaitclient.web_scraper.trigger(
              dataset_id="gd_lwxkxvnf1cynvib9co",
              discovery={"type": "discover_new", "discover_by": "profile_url"},
              inputs=[...],
              include_errors=True,
              )

              The generic dataset catalog API is not a replacement for triggering a current
              Web Scraper API collector with discovery inputs.

              Requested improvement

              Please add:

              1. An X/Twitter scraper namespace generated from the available X scraper
                endpoints.
              2. A generic typed Web Scraper API client that accepts dataset_id, query
                parameters, structured inputs, and asynchronous trigger/poll/fetch.
              3. Introspection for supported discovery modes and their distinct input
                schemas.
              4. Access to snapshot ID, submitted input, status, error rows, delivered
                record count, and cost when available.
              5. JSONL/NDJSON streaming or file export for large jobs.
              6. Documentation that distinguishes:
                • ready-made scraper methods;
                • marketplace/pre-collected datasets;
                • Scraper Studio collectors; and
                • generic Web Scraper API jobs.

              Related documentation concern

              The documentation describes hundreds of available scrapers, while the
              high-level Python namespace exposes a much smaller platform set. Please clarify
              whether the SDK intends to provide full catalog parity or only selected
              first-class wrappers.

              Expected outcome

              Users should not need to leave the SDK and write a separate REST client to
              access a Bright Data Web Scraper API collector already available in their
              account.

              Activity

              Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

              Metadata

              Metadata

              Assignees

              No one assigned

                Labels

                No labels
                No labels

                Type

                No type

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions

                  , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
                  Skip to content

                  Add X/Twitter scraper support and generic Web Scraper API access with discovery parameters #38

                  Description

                  @Ashish-Soni08

                  Summary

                  The Python SDK advertises broad scraper and dataset coverage, but version
                  2.3.1 has no client.scrape.x or client.scrape.twitter namespace.

                  The repository's ScrapeService exposes Amazon, LinkedIn, ChatGPT, Facebook,
                  Instagram, Perplexity, TikTok, YouTube, DigiKey, and Reddit, but not X.
                  The generated dataset catalog also does not expose an X/Twitter module.

                  As a result, a working X Web Scraper API job cannot be represented through the
                  SDK. I had to use httpx directly against /datasets/v3/trigger.

                  Use case

                  Collect public X posts for verified profiles with:

                  • type=discover_new
                  • discover_by=profile_url
                  • start_date
                  • end_date
                  • asynchronous polling
                  • error inclusion
                  • raw JSONL output

                  The corresponding dataset is:

                  gd_lwxkxvnf1cynvib9co
                  

                  Equivalent jobs submitted through direct REST and the Control Panel returned
                  the same 454 records across six profiles, confirming that the REST integration
                  was correct.

                  Current gap

                  There is no supported equivalent to:

                  awaitclient.scrape.x.posts_by_profile(
                  url="https://x.com/sama",
                  start_date="2022-11-30T00:00:00Z",
                  end_date="2026-06-08T23:59:59Z",
                  )

                  There is also no clearly documented generic Web Scraper API method such as:

                  awaitclient.web_scraper.trigger(
                  dataset_id="gd_lwxkxvnf1cynvib9co",
                  discovery={"type": "discover_new", "discover_by": "profile_url"},
                  inputs=[...],
                  include_errors=True,
                  )

                  The generic dataset catalog API is not a replacement for triggering a current
                  Web Scraper API collector with discovery inputs.

                  Requested improvement

                  Please add:

                  1. An X/Twitter scraper namespace generated from the available X scraper
                    endpoints.
                  2. A generic typed Web Scraper API client that accepts dataset_id, query
                    parameters, structured inputs, and asynchronous trigger/poll/fetch.
                  3. Introspection for supported discovery modes and their distinct input
                    schemas.
                  4. Access to snapshot ID, submitted input, status, error rows, delivered
                    record count, and cost when available.
                  5. JSONL/NDJSON streaming or file export for large jobs.
                  6. Documentation that distinguishes:
                    • ready-made scraper methods;
                    • marketplace/pre-collected datasets;
                    • Scraper Studio collectors; and
                    • generic Web Scraper API jobs.

                  Related documentation concern

                  The documentation describes hundreds of available scrapers, while the
                  high-level Python namespace exposes a much smaller platform set. Please clarify
                  whether the SDK intends to provide full catalog parity or only selected
                  first-class wrappers.

                  Expected outcome

                  Users should not need to leave the SDK and write a separate REST client to
                  access a Bright Data Web Scraper API collector already available in their
                  account.

                  Activity

                  Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

                  Metadata

                  Metadata

                  Assignees

                  No one assigned

                    Labels

                    No labels
                    No labels

                    Type

                    No type

                    Projects

                    No projects

                      Milestone

                      No milestone

                      Relationships

                      None yet

                      Development

                      No branches or pull requests

                      Issue actions

                      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                      Skip to content

                      Add X/Twitter scraper support and generic Web Scraper API access with discovery parameters #38

                      Description

                      @Ashish-Soni08

                      Summary

                      The Python SDK advertises broad scraper and dataset coverage, but version
                      2.3.1 has no client.scrape.x or client.scrape.twitter namespace.

                      The repository's ScrapeService exposes Amazon, LinkedIn, ChatGPT, Facebook,
                      Instagram, Perplexity, TikTok, YouTube, DigiKey, and Reddit, but not X.
                      The generated dataset catalog also does not expose an X/Twitter module.

                      As a result, a working X Web Scraper API job cannot be represented through the
                      SDK. I had to use httpx directly against /datasets/v3/trigger.

                      Use case

                      Collect public X posts for verified profiles with:

                      • type=discover_new
                      • discover_by=profile_url
                      • start_date
                      • end_date
                      • asynchronous polling
                      • error inclusion
                      • raw JSONL output

                      The corresponding dataset is:

                      gd_lwxkxvnf1cynvib9co
                      

                      Equivalent jobs submitted through direct REST and the Control Panel returned
                      the same 454 records across six profiles, confirming that the REST integration
                      was correct.

                      Current gap

                      There is no supported equivalent to:

                      awaitclient.scrape.x.posts_by_profile(
                      url="https://x.com/sama",
                      start_date="2022-11-30T00:00:00Z",
                      end_date="2026-06-08T23:59:59Z",
                      )

                      There is also no clearly documented generic Web Scraper API method such as:

                      awaitclient.web_scraper.trigger(
                      dataset_id="gd_lwxkxvnf1cynvib9co",
                      discovery={"type": "discover_new", "discover_by": "profile_url"},
                      inputs=[...],
                      include_errors=True,
                      )

                      The generic dataset catalog API is not a replacement for triggering a current
                      Web Scraper API collector with discovery inputs.

                      Requested improvement

                      Please add:

                      1. An X/Twitter scraper namespace generated from the available X scraper
                        endpoints.
                      2. A generic typed Web Scraper API client that accepts dataset_id, query
                        parameters, structured inputs, and asynchronous trigger/poll/fetch.
                      3. Introspection for supported discovery modes and their distinct input
                        schemas.
                      4. Access to snapshot ID, submitted input, status, error rows, delivered
                        record count, and cost when available.
                      5. JSONL/NDJSON streaming or file export for large jobs.
                      6. Documentation that distinguishes:
                        • ready-made scraper methods;
                        • marketplace/pre-collected datasets;
                        • Scraper Studio collectors; and
                        • generic Web Scraper API jobs.

                      Related documentation concern

                      The documentation describes hundreds of available scrapers, while the
                      high-level Python namespace exposes a much smaller platform set. Please clarify
                      whether the SDK intends to provide full catalog parity or only selected
                      first-class wrappers.

                      Expected outcome

                      Users should not need to leave the SDK and write a separate REST client to
                      access a Bright Data Web Scraper API collector already available in their
                      account.

                      Activity

                      Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

                      Metadata

                      Metadata

                      Assignees

                      No one assigned

                        Labels

                        No labels
                        No labels

                        Type

                        No type

                        Projects

                        No projects

                          Milestone

                          No milestone

                          Relationships

                          None yet

                          Development

                          No branches or pull requests

                          Issue actions

                          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                          Skip to content

                          Add X/Twitter scraper support and generic Web Scraper API access with discovery parameters #38

                          Description

                          @Ashish-Soni08

                          Summary

                          The Python SDK advertises broad scraper and dataset coverage, but version
                          2.3.1 has no client.scrape.x or client.scrape.twitter namespace.

                          The repository's ScrapeService exposes Amazon, LinkedIn, ChatGPT, Facebook,
                          Instagram, Perplexity, TikTok, YouTube, DigiKey, and Reddit, but not X.
                          The generated dataset catalog also does not expose an X/Twitter module.

                          As a result, a working X Web Scraper API job cannot be represented through the
                          SDK. I had to use httpx directly against /datasets/v3/trigger.

                          Use case

                          Collect public X posts for verified profiles with:

                          • type=discover_new
                          • discover_by=profile_url
                          • start_date
                          • end_date
                          • asynchronous polling
                          • error inclusion
                          • raw JSONL output

                          The corresponding dataset is:

                          gd_lwxkxvnf1cynvib9co
                          

                          Equivalent jobs submitted through direct REST and the Control Panel returned
                          the same 454 records across six profiles, confirming that the REST integration
                          was correct.

                          Current gap

                          There is no supported equivalent to:

                          awaitclient.scrape.x.posts_by_profile(
                          url="https://x.com/sama",
                          start_date="2022-11-30T00:00:00Z",
                          end_date="2026-06-08T23:59:59Z",
                          )

                          There is also no clearly documented generic Web Scraper API method such as:

                          awaitclient.web_scraper.trigger(
                          dataset_id="gd_lwxkxvnf1cynvib9co",
                          discovery={"type": "discover_new", "discover_by": "profile_url"},
                          inputs=[...],
                          include_errors=True,
                          )

                          The generic dataset catalog API is not a replacement for triggering a current
                          Web Scraper API collector with discovery inputs.

                          Requested improvement

                          Please add:

                          1. An X/Twitter scraper namespace generated from the available X scraper
                            endpoints.
                          2. A generic typed Web Scraper API client that accepts dataset_id, query
                            parameters, structured inputs, and asynchronous trigger/poll/fetch.
                          3. Introspection for supported discovery modes and their distinct input
                            schemas.
                          4. Access to snapshot ID, submitted input, status, error rows, delivered
                            record count, and cost when available.
                          5. JSONL/NDJSON streaming or file export for large jobs.
                          6. Documentation that distinguishes:
                            • ready-made scraper methods;
                            • marketplace/pre-collected datasets;
                            • Scraper Studio collectors; and
                            • generic Web Scraper API jobs.

                          Related documentation concern

                          The documentation describes hundreds of available scrapers, while the
                          high-level Python namespace exposes a much smaller platform set. Please clarify
                          whether the SDK intends to provide full catalog parity or only selected
                          first-class wrappers.

                          Expected outcome

                          Users should not need to leave the SDK and write a separate REST client to
                          access a Bright Data Web Scraper API collector already available in their
                          account.

                          Activity

                          Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

                          Metadata

                          Metadata

                          Assignees

                          No one assigned

                            Labels

                            No labels
                            No labels

                            Type

                            No type

                            Projects

                            No projects

                              Milestone

                              No milestone

                              Relationships

                              None yet

                              Development

                              No branches or pull requests

                              Issue actions

                              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                              Skip to content

                              Add X/Twitter scraper support and generic Web Scraper API access with discovery parameters #38

                              Description

                              @Ashish-Soni08

                              Summary

                              The Python SDK advertises broad scraper and dataset coverage, but version
                              2.3.1 has no client.scrape.x or client.scrape.twitter namespace.

                              The repository's ScrapeService exposes Amazon, LinkedIn, ChatGPT, Facebook,
                              Instagram, Perplexity, TikTok, YouTube, DigiKey, and Reddit, but not X.
                              The generated dataset catalog also does not expose an X/Twitter module.

                              As a result, a working X Web Scraper API job cannot be represented through the
                              SDK. I had to use httpx directly against /datasets/v3/trigger.

                              Use case

                              Collect public X posts for verified profiles with:

                              • type=discover_new
                              • discover_by=profile_url
                              • start_date
                              • end_date
                              • asynchronous polling
                              • error inclusion
                              • raw JSONL output

                              The corresponding dataset is:

                              gd_lwxkxvnf1cynvib9co
                              

                              Equivalent jobs submitted through direct REST and the Control Panel returned
                              the same 454 records across six profiles, confirming that the REST integration
                              was correct.

                              Current gap

                              There is no supported equivalent to:

                              awaitclient.scrape.x.posts_by_profile(
                              url="https://x.com/sama",
                              start_date="2022-11-30T00:00:00Z",
                              end_date="2026-06-08T23:59:59Z",
                              )

                              There is also no clearly documented generic Web Scraper API method such as:

                              awaitclient.web_scraper.trigger(
                              dataset_id="gd_lwxkxvnf1cynvib9co",
                              discovery={"type": "discover_new", "discover_by": "profile_url"},
                              inputs=[...],
                              include_errors=True,
                              )

                              The generic dataset catalog API is not a replacement for triggering a current
                              Web Scraper API collector with discovery inputs.

                              Requested improvement

                              Please add:

                              1. An X/Twitter scraper namespace generated from the available X scraper
                                endpoints.
                              2. A generic typed Web Scraper API client that accepts dataset_id, query
                                parameters, structured inputs, and asynchronous trigger/poll/fetch.
                              3. Introspection for supported discovery modes and their distinct input
                                schemas.
                              4. Access to snapshot ID, submitted input, status, error rows, delivered
                                record count, and cost when available.
                              5. JSONL/NDJSON streaming or file export for large jobs.
                              6. Documentation that distinguishes:
                                • ready-made scraper methods;
                                • marketplace/pre-collected datasets;
                                • Scraper Studio collectors; and
                                • generic Web Scraper API jobs.

                              Related documentation concern

                              The documentation describes hundreds of available scrapers, while the
                              high-level Python namespace exposes a much smaller platform set. Please clarify
                              whether the SDK intends to provide full catalog parity or only selected
                              first-class wrappers.

                              Expected outcome

                              Users should not need to leave the SDK and write a separate REST client to
                              access a Bright Data Web Scraper API collector already available in their
                              account.

                              Activity

                              Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

                              Metadata

                              Metadata

                              Assignees

                              No one assigned

                                Labels

                                No labels
                                No labels

                                Type

                                No type

                                Projects

                                No projects

                                  Milestone

                                  No milestone

                                  Relationships

                                  None yet

                                  Development

                                  No branches or pull requests

                                  Issue actions