Dependencies
The Web Crawler connects to standard FlowX infrastructure services that should already be configured in your environment:- Kafka — async job processing for crawl requests from Integration Designer
- Identity provider (Keycloak or Azure AD) — authentication and Kafka OAuth
- CMS Core — content management integration
- Document Plugin — file upload for downloaded documents
- S3-compatible storage (MinIO or AWS S3) — storing crawl results and offloaded Kafka payloads
- AI provider (OpenAI, Anthropic, Ollama, Azure OpenAI, or GCP) — required only for browser automation features
Capabilities
What it can do
- Single-page crawling: Extract content from individual web pages as Markdown
- Deep crawling: Breadth-first crawling with configurable depth, concurrency, and rate limiting
- PDF processing: Dedicated scraping strategy for linked PDF documents
- File downloads: Automatic detection and upload of downloadable files (.docx, .xlsx, .pdf) to the Document Plugin
- AI browser automation: Multi-step browser interactions using Claude or GPT-4o via the browser-use library
- Session management: Persistent browser sessions for multi-step automation workflows
- Per-level URL caps: Configurable maximum pages per depth level during deep crawls
- Multiple URL filters: Configure up to 20 URL filter patterns per crawler from the URL Filters modal on the Web Crawler node to restrict deep crawls to matching URLs
What it cannot do
- Cannot crawl pages that require JavaScript-based authentication (unless using browser automation)
- Cannot process audio or video content
- Cannot bypass CAPTCHAs or bot protection without proxy configuration
API endpoints
All endpoints are prefixed with theURL_PREFIX value (default: /web-crawler).
Configuration
Server configuration
Authentication configuration
Keycloak / OAuth2
Service account
The Web Crawler uses a service account for platform API calls (CMS, Document Plugin).Kafka configuration
The Web Crawler uses Kafka for async job processing. Integration Designer sends crawl requests, and the Web Crawler returns results through Kafka topics.Core Kafka settings
Consumer tuning
OAuth authentication
When usingKAFKA_SECURITY_ENABLED=1, the Web Crawler authenticates to Kafka using SASL/OAUTHBEARER via Keycloak.
Topic configuration
The Web Crawler uses the FlowX async job-processing library (
flx-job-lib). On startup, the service verifies Kafka connectivity and starts a background consumer.Kafka payload offloading
When crawl results exceed the size limit, payloads are offloaded to S3-compatible storage.Storage configuration
The Web Crawler stores crawl results in S3-compatible storage. Configure one of the following storage backends.- MinIO / S3
- AWS S3
- Azure Blob Storage
Platform service URLs
AI model configuration
Required only for the browser automation feature (/interact endpoints). The Web Crawler uses LLM models to drive browser interactions.
All model types support the same providers:
OPENAI, AZURE, OLLAMA, ANTHROPIC, GCP, CUSTOM_OPENAI.Provider-specific variables
- OpenAI
- Anthropic
- Ollama
- Other providers
PostgreSQL configuration
The Web Crawler uses PostgreSQL for embedding storage, memory, and chat history.- Embedding database
- Memory store
- Chat history
Observability (optional)
FlowX Observatory
Langfuse
LLM Guard
CORS configuration
MCP server configuration
Kafka job processing
The Web Crawler processes crawl requests asynchronously via Kafka. Integration Designer sends requests to the job request topic, and the Web Crawler writes results to S3 and sends a response to the job response topic.Request payload
Response flow
- Integration Designer publishes a crawl request to
ai.flowx.web-crawler.job.request - Web Crawler processes the request and stores the result (Markdown content) in S3
- Web Crawler publishes a response with the result path to
ai.flowx.web-crawler.job.response - Integration Designer retrieves the result from S3
Deployment and sizing
Docker
- Base image: Python 3.13-slim-bookworm
- Runs as non-root user (
aiservices) - Port:
8080 - Health check:
/web-crawler/api/v1/web-crawler/info/health
Kubernetes configuration
Verify your setup
The Web Crawler pod is running:
kubectl get pods -l app=web-crawlerThe health endpoint returns HTTP 200:
curl http://web-crawler:8080/web-crawler/api/v1/web-crawler/info/healthKafka consumer is connected — check pod logs for
Kafka consumer started message at startupIntegration Designer can reach the Web Crawler — verify
FLOWX_WEBCRAWLER_BASEURL is set in Integration Designer setupTroubleshooting
Pod fails to start or crashes
Pod fails to start or crashes
Symptoms: Pod stays in CrashLoopBackOff or never becomes ready.Solutions:
- Verify Chromium/Playwright dependencies are available (included in Docker image)
- Check that Kafka broker addresses are reachable
- Ensure the Keycloak server URL is correct and accessible
- Review pod logs for specific startup errors
Crawl jobs not being processed
Crawl jobs not being processed
Symptoms: Integration Designer sends crawl requests but no results are returned.Solutions:
- Verify
KAFKA_CONSUMER_ENABLEDis set to1 - Check that
KAFKA_JOB_REQUEST_TOPICmatches the topic Integration Designer publishes to - Ensure the Kafka consumer group (
KAFKA_CONSUMER_GROUPID) has no conflicting consumers - Review pod logs for Kafka connection or authentication errors
Crawl results are empty or incomplete
Crawl results are empty or incomplete
Symptoms: Pages return no content or partial Markdown.Solutions:
- Increase
pageTimeoutin the crawl request for slow-loading pages - Check if the target site blocks headless browsers (try configuring a
proxyUrl) - Verify network connectivity from the pod to the target URLs
- Review verbose logs (
VERBOSE=1) for page-level errors
File downloads not uploading
File downloads not uploading
Symptoms:
acceptDownloads is enabled but files are not appearing in the Document Plugin.Solutions:- Verify
DOCUMENT_PLUGIN_URLis set and reachable - Ensure
applicationIdis provided in the crawl request payload - Check service account credentials (
SERVICE_OAUTH_CLIENT_ID/SERVICE_OAUTH_CLIENT_SECRET) - Review pod logs for upload errors or authentication failures
OOM kills during deep crawls
OOM kills during deep crawls
Symptoms: Pods restart with OOMKilled status during multi-page crawls.Solutions:
- Increase memory limits (try 4 Gi)
- Reduce
maxPagesandmaxPagesPerLevelin crawl requests - Reduce
GUNICORN_WORKERSto limit concurrent browser instances - Scale horizontally with more pods instead of larger pods
Related resources
Integration Designer setup
Configure Integration Designer, which orchestrates Web Crawler jobs
Integration Designer
Learn about building integration workflows
Kafka Authentication
Configure Kafka security and authentication
Document Plugin setup
Configure the Document Plugin for file storage

