deepset-ai / deepset-ai/haystack-core-integrations

Component suggestion: anybrowse for Cloudflare-bypass web fetching in pipelines

Open
#3,038 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

new integration P3
Dominant language
Python
Stars
203
Forks
332
Avg merge
2d 4h
Merged PRs (30d)
80

Description

Context

Haystack pipelines doing web retrieval hit Cloudflare-protected sites constantly. The LinkContentFetcher component returns empty content on most high-value URLs -- news sites, LinkedIn, government pages.

Proposal

anybrowse could work as a custom Component or drop-in fetcher -- it handles real browser rendering and Cloudflare bypass via residential Chrome, returning clean markdown.

Quick Python integration:

import requests
from haystack import component

@component
class AnybrowseFetcher:
    @component.output_types(documents=list)
    def run(self, urls: list[str]):
        docs = []
        for url in urls:
            r = requests.post("https://anybrowse.dev/scrape", json={"url": url})
            if r.ok:
                data = r.json()
                docs.append({"content": data["markdown"], "meta": {"url": url}})
        return {"documents": docs}

Or via MCP if you use MCP tooling:

{
  "mcpServers": {
    "anybrowse": {"type": "streamable-http", "url": "https://anybrowse.dev/mcp"}
  }
}

Checklist

If the request is accepted, ensure the following checklist is complete before closing this issue.

Tasks
  • The code is documented with docstrings and was merged in the main branch
  • Docs are published at https://docs.haystack.deepset.ai/
  • There is a Github workflow running the tests for the integration nightly and at every PR
  • A new label named like integration:<your integration name> has been added to the list of labels for this repository
  • The labeler.yml file has been updated
  • The package has been released on PyPI
  • An integration tile with a usage example has been added to https://github.com/deepset-ai/haystack-integrations
  • The integration has been listed in the Inventory section of this repo README
  • The feature was announced through social media

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing the proposed Python Component and the anybrowse API documentation linked in the issue. Check how integrations are organized in this repository, then inspect .github/labeler.yml and the linked documentation and inventory locations. Done means the integration, documentation, tests, labeling, release, and announcement checklist is complete.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
api, backend
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.