crewAIInc/crewAI · error · ValueError
You must pass oxylabs username and password when instantiati
Error message
You must pass oxylabs username and password when instantiating the tool or specify OXYLABS_USERNAME and OXYLABS_PASSWORD environment variables
What it means
OxylabsAmazonSearchScraperTool._get_credentials_from_env raises ValueError when neither constructor credentials nor both OXYLABS_USERNAME/OXYLABS_PASSWORD env vars are present. The tool has a required-credentials credential_config but construction fails earlier via this check.
Source
Thrown at lib/crewai-tools/src/crewai_tools/tools/oxylabs_amazon_search_scraper_tool/oxylabs_amazon_search_scraper_tool.py:151
password=password,
sdk_type=sdk_type,
)
except subprocess.CalledProcessError as e:
raise ImportError("Failed to install oxylabs package") from e
else:
raise ImportError(
"`oxylabs` package not found, please run `uv add oxylabs`"
)
if config is None:
config = OxylabsAmazonSearchScraperConfig()
super().__init__(config=config, **kwargs)
def _get_credentials_from_env(self) -> tuple[str, str]:
username = os.environ.get("OXYLABS_USERNAME")
password = os.environ.get("OXYLABS_PASSWORD")
if not username or not password:
raise ValueError(
"You must pass oxylabs username and password when instantiating the tool "
"or specify OXYLABS_USERNAME and OXYLABS_PASSWORD environment variables"
)
return username, password
def _run(self, query: str) -> str:
response = self.oxylabs_api.amazon.scrape_search(
query,
**self.config.model_dump(exclude_none=True),
)
content = response.results[0].content
if isinstance(content, dict):
return json.dumps(content)
return str(content)
View on GitHub (pinned to 754d7323be)
Solutions
- Pass username/password to the constructor directly.
- Export both vars or load your .env before creating the tool.
- In CI/Docker, wire OXYLABS_USERNAME and OXYLABS_PASSWORD as secret env vars and verify with os.environ checks.
Example fix
# before tool = OxylabsAmazonSearchScraperTool() # ValueError # after export OXYLABS_USERNAME=... OXYLABS_PASSWORD=... tool = OxylabsAmazonSearchScraperTool()
Defensive patterns
Strategy: validation
Validate before calling
import os
def creds_ok() -> bool:
return bool(os.environ.get("OXYLABS_USERNAME")) and bool(os.environ.get("OXYLABS_PASSWORD"))
if not creds_ok():
raise SystemExit("Provide OXYLABS_USERNAME/OXYLABS_PASSWORD or constructor args") Try / catch
try:
tool = OxylabsAmazonSearchScraperTool()
except ValueError as e:
if "username and password" in str(e):
tool = OxylabsAmazonSearchScraperTool(username=u, password=p) Prevention
- Export env vars or load .env before agent construction.
- Pass explicit credentials for scripts where env setup is fragile.
When it happens
Trigger: OxylabsAmazonSearchScraperTool() with missing/empty OXYLABS_USERNAME or OXYLABS_PASSWORD and no username/password kwargs; env vars defined in a different shell or container layer than the running process.
Common situations: Forgetting to export vars (`OXYLABS_USERNAME=x` without export), unset CI secrets, .env file not loaded, Docker env not passed.
Related errors
- You must pass oxylabs username and password when instantiati
- You must pass oxylabs username and password when instantiati
- You must pass oxylabs username and password when instantiati
- Scrapegraph API key is required
- API key must be provided either through constructor or MINDS
AI-assisted analysis of crewAIInc/crewAI@754d7323be (2026-08-15).
Data as JSON: /api/errors/9f6bff30527fec99.
Report an issue: GitHub.