---
title: "Comment by OnlineProxy on \"Build a Web Scraping API with FastAPI, Celery & Redis (2026)\" | Hashnode"
description: "Your compose setup won't run as written, cause tasks.py hardcodes localhost for redis instead of reading REDIS_URL. Also curl_cffi, playwright and playwright_st"
url: "https://hashnode.com/posts/build-a-web-scraping-api-with-fastapi-celery-redis-2026/6ab6a4aa51a337e585fc2bb1/comment/6abc8f74d0e962e34c7358b5"
---

[Discussion](https://hashnode.com/posts/build-a-web-scraping-api-with-fastapi-celery-redis-2026/6ab6a4aa51a337e585fc2bb1)

Comment [Build a Web Scraping API with FastAPI, Celery & Redis (2026)](https://hashnode.com/posts/build-a-web-scraping-api-with-fastapi-celery-redis-2026/6ab6a4aa51a337e585fc2bb1)

[OnlineProxy](https://hashnode.com/@onlineproxyio)

[Sep 30](https://hashnode.com/posts/build-a-web-scraping-api-with-fastapi-celery-redis-2026/6ab6a4aa51a337e585fc2bb1/comment/6abc8f74d0e962e34c7358b5)

Your compose setup won't run as written, cause tasks.py hardcodes localhost for redis instead of reading REDIS\_URL. Also curl\_cffi, playwright and playwright\_stealth are missing from requirements.txt, and there's no playwright install step

The browser task reports success when errors got swallowed, and its max\_retries never retries anything. Bulk drops task\_id, so revoke can't cancel those jobs.

Security is the worst part, since url is a read SSRF with no blocklist and GET /jobs hands out the api\_key column to anyone with no auth or ownership checks

[ZyVOP](https://hashnode.com/@zyvop)

[Sep 30](https://hashnode.com/posts/build-a-web-scraping-api-with-fastapi-celery-redis-2026/6ab6a4aa51a337e585fc2bb1/comment/6abc8f74d0e962e34c7358b5#reply-6abc9843e37c9a0c6448ba92)

Thank you, I will recheck
