AI Goofish Monitor: Playwright-based product filtering with multi-channel alerts
An AI monitor for Goofish shoppers that uses Playwright to collect listings, image models to filter them, and notifications to alert users.
GitHub Usagi-org/ai-goofish-monitor Updated 2026-11-04 Branch master Stars 16.4K Forks 2.8K
Python Vue Playwright SQLite Goofish monitoring Docker

🧭 Decision Guide

Try it if you

  • You already have OPENAI_API_KEY, OPENAI_BASE_URL, and an OPENAI_MODEL_NAME that supports image input.
    The README section “Minimum Configuration” lists all three variables as required.
  • You need a Web UI to manage multiple tasks with separate keywords, prices, regions, and AI Prompts.
    The README sections “Core Features” and “Task Management” describe multi-task concurrency and these filters.
  • You want to run it quickly with Docker and accept the default Web UI port 8000.
    The README section “Docker Deployment (Recommended)” provides docker compose up -d and sets the default address to http://127.0.0.1:8000.
  • You need Cron scheduling and result notifications through Telegram, Bark, or Webhook.
    The README sections “Core Features” and “Notifications” list Cron and these notification channels.

Skip it if you

  • You do not have an OpenAI-compatible endpoint, or your model does not support image input.
    The README “Minimum Configuration” requires OPENAI_BASE_URL and an image-input-capable OPENAI_MODEL_NAME.
  • You do not want to import Goofish login-state JSON or maintain the state/ directory.
    The README “First Use” requires exporting login state JSON with a Chrome extension and saving it under state/.
  • You need to bypass Goofish terms, robots.txt, or high-frequency request restrictions.
    The README “Notice” requires compliance with the user agreement and robots.txt and warns against overly frequent requests.
  • You require production deployment to use the default Web credentials admin/admin123.
    The README “Web Interface Authentication” explicitly requires changing the default credentials in production.

Requirements

  • Docker deployment requires access to the Docker image; the official image is ghcr.io/usagi-org/ai-goofish:latest.
  • AI configuration must include OPENAI_API_KEY, OPENAI_BASE_URL, and OPENAI_MODEL_NAME.
  • Local development requires Python 3.10+, Node.js + npm, the Playwright CLI, and Chromium.
  • Before the first local run, the README requires python3 -m pip install playwright and Chromium installation.
  • First use requires Goofish login-state JSON exported by a Chrome extension and stored under state/.
  • RUN_HEADLESS should remain true in Docker, and the default database path is /app/data/app.sqlite3.

First step (verbatim from README)

git clone https://github.com/Usagi-org/ai-goofish-monitor && cd ai-goofish-monitor

Watch out

  • After changing SERVER_PORT in .env, you must also update the port mapping in docker-compose.yaml.
    The port configuration note in the README section “Docker Deployment (Recommended)”.
  • Product images are first written to images/task_images_ and are cleaned up by default after the task ends.
    The README section “Data Storage and Migration” describes images/ and the temporary image directory.
  • Apart from the SQLite main database, state, prompts, logs, and images still depend on filesystem directories.
    The README section “Data Storage and Migration” explicitly says these directories are not stored in SQLite.
  • AI task creation returns 202 and a job, requiring progress polling through generate-jobs/{job_id}.
    The README section “Task Creation API” describes POST /api/tasks/generate and the GET endpoint.
  • If the frontend build artifact is missing, the absent root dist/ directory prevents the local page from opening.
    The README “FAQ” instructs users to run ./start.sh or npm run build and verify dist/.

Not stated in the README

  • The README does not list specific compatible multimodal model names or the API cost of each model.
  • The README does not state limits for concurrent tasks, account count, or proxy-pool size in Playwright.
  • The README does not quantify Goofish login-state lifetime, risk-control thresholds, or account recovery procedures.
  • The README does not describe SQLite capacity, query performance, or backup procedures for large result histories.
  • The README does not describe a unified retry policy for ntfy.sh, Telegram, Webhook, or other notification failures.
  • The README does not provide the image size or resource requirements for ghcr.io/usagi-org/ai-goofish:latest.

💡 Deep Analysis

6
No I plan to deploy the Web UI on my own server behind a reverse proxy while storing Goofish login states, prompts, logs, and product images; does this project directly satisfy my security constraints?
For: An operator exposing the Web UI beyond localhost who must store Goofish login states and product images while protecting the interface with HTTPS and custom credentials

No, not directly, because the README only provides basic authentication and directory persistence, explicitly warns about default credentials, and does not document HTTPS, secret management, encryption at rest, or fine-grained permissions.

  • The default Web username and password are admin/admin123, and the README requires changing them in production.
  • state/ stores login-state cookies, while prompts/, logs/, and images/ remain filesystem directories; product images are normally removed after a task ends.
  • The Web UI validates credentials through the login page and POST /auth/status, with login state stored locally in the browser.
  • The README recommends a reverse proxy, HTTPS, and restricting port 8000, but does not describe built-in TLS, RBAC, auditing, or database encryption.

It can serve as a controlled internal tool, but the README does not establish that it meets complete security requirements for public exposure or sensitive-data environments.

  • Web 界面认证: default credentials are admin/admin123 and must be changed in production
  • 数据存储与迁移: state, prompts, logs, and images remain filesystem directories
  • Web 界面认证: credentials are checked through POST /auth/status and login state is stored locally in the browser
  • 最佳实践: restrict public exposure of port 8000 and use a reverse proxy with HTTPS
cp .env.example .env
Not stated in the README:The README does not say whether login cookies, API keys, notification tokens, or the database file are encrypted at rest.;It does not document multi-user support, role-based permissions, login auditing, CSRF protection, or session expiration.
It depends I need to bind multiple Goofish accounts, rotate a proxy pool with retries, and send new-item notifications to Telegram or a Webhook; can this project support that operating model?
For: A high-frequency user who needs multiple Goofish accounts, a proxy pool, Cron tasks, and Telegram or Webhook notifications for new listings

It depends, because the project provides multiple accounts, proxy rotation, failure protection, and multi-channel notifications, but these mechanisms do not guarantee bypassing Goofish risk controls or make high-frequency, large-scale collection suitable.

  • Account management supports importing, updating, and deleting login states; each task can bind an account or let the system select one.
  • Configuration includes PROXY_POOL, rotation mode, retry limit, blacklist TTL, task failure threshold, and pause duration.
  • Notifications support Telegram Bot Token and Chat ID, as well as generic Webhooks.
  • The README explicitly requires compliance with the user agreement and robots.txt and warns against excessive requests; high concurrency or frequent account/proxy switching can cause login invalidation or account restrictions.

Thus, it can match several low-frequency monitoring tasks, but it is unsuitable for bulk collection or bypassing platform restrictions.

  • 核心特性: account and proxy rotation with multiple accounts, task binding, proxy pools, and retries
  • 配置说明: PROXY_ROTATION_ENABLED, PROXY_POOL, PROXY_ROTATION_RETRY_LIMIT, and PROXY_BLACKLIST_TTL
  • 通知: TELEGRAM_BOT_TOKEN / TELEGRAM_CHAT_ID / WEBHOOK_*
  • 注意事项: avoid overly frequent requests to prevent account restrictions
docker compose up -d
Not stated in the README:The README does not provide safe request rates per account, per proxy, or for a proxy pool, nor recommended concurrency limits.;It does not describe proxy health checks, account-to-proxy binding rules, or message retries after Telegram/Webhook failures.
Yes I track specific brands and models, need to judge condition, accessories, and image content, and do not want to write complex keyword rules; is the multimodal AI mode suitable for my filtering needs?
For: A digital-goods collector who wants to describe brand, model, condition, and accessory requirements in natural language and use product images for Goofish screening

Yes, because the project can generate analysis criteria from natural language and send both product text and images to an image-capable model; however, the output should be treated as screening rather than authentication.

  • The AI mode accepts detailed requirements, and a background job generates analysis criteria before creating the task.
  • The workflow fetches product and seller details, downloads images, calls the AI, and stores results, matching unstructured judgments about condition and accessories.
  • Keyword, price, publication-time, and regional filters can still be combined to reduce the result set first.
  • The README requires an image-capable model and notes that image quality, incomplete descriptions, and prompts can cause false positives or negatives.

It is therefore suitable for discovering and ranking candidates, but original details, seller information, and authenticity still require verification before a transaction.

  • 核心特性: AI-driven natural-language task creation and deep multimodal product analysis
  • 创建第一个任务: AI mode accepts detailed requirements and asynchronously generates analysis criteria
  • 工作流程: fetch details and seller information, download images, and call AI analysis
  • 使用限制: AI results should not be treated as absolute transaction, authentication, or price conclusions
docker compose up -d
Not stated in the README:The README does not specify model accuracy for Chinese listings, obstructed images, low-resolution images, or missing accessories.;It does not specify confidence fields, an explanation format, or a dedicated human-review interface for AI results.
Yes I plan to run multiple Goofish tasks in Docker, use an OpenAI-compatible endpoint with an image-capable model, and schedule monitoring with Cron; is this project suitable for me?
For: A self-hosting user who plans to run Docker, an OpenAI-compatible API, and an image-capable model for multiple long-running Goofish monitoring tasks

Yes, because the documented deployment model, API requirements, and scheduling features match your constraints, although it is primarily intended for single-machine or small-to-medium self-hosting.

  • The Docker image includes Chromium, so no extra browser installation is required on the host.
  • AI configuration explicitly requires OPENAI_API_KEY, OPENAI_BASE_URL, and an OPENAI_MODEL_NAME that supports image input.
  • Tasks support Cron, keyword, price, publication-time, and province/city/district filters, helping reduce irrelevant results and AI calls.
  • SQLite stores tasks, results, and price history, with ./data:/app/data mounted by default; limits under high concurrency or large historical datasets are not documented.

It can therefore provide a complete scheduled monitoring pipeline, but the README does not describe distributed scheduling or high availability for larger deployments.

  • Docker 部署: the Docker image includes Chromium
  • 最少配置: OPENAI_API_KEY, OPENAI_BASE_URL, and OPENAI_MODEL_NAME
  • 核心特性: scheduled execution supports Cron rules
  • 数据存储与迁移: SQLite is the current primary online storage
git clone https://github.com/Usagi-org/ai-goofish-monitor && cd ai-goofish-monitor
cp .env.example .env
vim .env # 填写相关配置项
docker compose up -d
Not stated in the README:The README does not specify the maximum stable task count, write throughput, or disk growth rate for SQLite under concurrent tasks.;It does not specify per-item cost, rate limits, or context-length requirements for the selected vision model.
Yes I only need Cron monitoring on one machine, want to retain task results and price history, and need querying and export from the results page; is the SQLite design suitable for my scale?
For: An individual procurement user who needs SQLite results, price history, and long-running scheduled tasks but accepts single-machine deployment

Yes, provided your constraint is a single machine and small-to-medium scale, because the project has migrated tasks, results, and price history to SQLite and the results page queries the database directly.

  • The default database is data/app.sqlite3, and Docker mounts ./data to /app/data.
  • On startup, the application creates the database and tables and attempts to import legacy data from config.json, jsonl/, and price_history/.
  • The README states that result viewing and export now query SQLite rather than scanning JSONL files.
  • Images are normally stored under images/task_images_/ and cleaned after a task ends, so a complete image archive is not created automatically.

The design matches result and price-history retention, but the README provides no strong guarantee for long-term image review or high-concurrency multi-user operation.

  • Docker 部署: the SQLite database is mounted through ./data:/app/data and defaults to data/app.sqlite3
  • 数据存储与迁移: the application creates tables and imports legacy data at startup
  • 结果查看与运行日志: result viewing and export query SQLite
  • 数据存储与迁移: product images are cleaned after tasks by default
docker compose up -d
Not stated in the README:The README does not specify the supported task count, result-row volume, price-history size, or query latency for single-machine SQLite use.;It does not describe rollback, duplicate-import handling, or error reporting when legacy JSON, JSONL, or price-history migration fails.
Yes I already have Python 3.10+, Node.js v20.18.3, and Chromium, and want to modify Playwright collection logic while debugging the Vue frontend; is this project suitable for local development?
For: A developer maintaining a local Python 3.10+, Node.js v20.18.3, and Playwright/Chromium environment who wants to modify scraping or task logic

Yes, because the README documents the backend, frontend, browser prerequisites, and test commands, while the FastAPI and Vue/TypeScript boundaries are clear enough for separate debugging.

  • The development requirements include Python 3.10+, Node.js with npm, Playwright CLI, and Chromium.
  • The backend can run with python -m src.app or Uvicorn; the frontend runs npm run dev in web-ui, with Vite proxying /api, /auth, and /ws to port 8000.
  • start.sh checks browser prerequisites, installs dependencies, builds the frontend, and starts the backend for end-to-end verification.
  • Validation includes both Python pytest and the frontend npm run build.

However, scraping changes still depend on Goofish page structure and login state. The README does not describe end-to-end fixtures, mock pages, or a stable scraping abstraction.

  • 开发者开发: Python 3.10+, Node.js + npm, Playwright CLI, and Chromium
  • 手动启动: python -m src.app; cd web-ui && npm install && npm run dev
  • 开发者开发: Vite proxies /api, /auth, and /ws
  • 测试与校验: pytest and cd web-ui && npm run build
git clone https://github.com/Usagi-org/ai-goofish-monitor
cd ai-goofish-monitor
cp .env.example .env
Not stated in the README:The README does not say whether the scraper has isolated unit tests, page snapshots, or a replaceable browser adapter.;It does not specify which Goofish login, detail, and image flows must be covered after changing Playwright logic.

✨ Highlights

  • Playwright collects products for multimodal AI analysis
  • Web UI manages tasks, accounts, and runtime logs
  • SQLite stores tasks, results, and price history
  • Supports Cron scheduling and ntfy.sh notifications
  • Docker includes Chromium but still requires AI API configuration

🔧 Engineering

  • The Web UI creates AI or keyword tasks and binds accounts
  • Tasks support price, region, publish-time, and AI Prompt filters
  • Results and logs are queried from SQLite and can be exported
  • Accounts and proxy pools support rotation, retries, and failure pauses

⚠️ Risks

  • OPENAI_MODEL_NAME must support image input
  • Initial use requires importing Goofish login-state JSON via a Chrome extension
  • The README requires respecting Goofish terms and robots.txt; frequent requests may restrict accounts
  • The default Web credentials are admin/admin123 and must be changed in production
  • Changing SERVER_PORT also requires updating docker-compose.yaml port mapping

👥 For who?

  • Developers monitoring Goofish products with Python and Playwright
  • Individuals or small teams needing a Vue Web UI for multi-task and multi-account management
  • AI application users who already have an OpenAI-compatible image model endpoint
  • Deployers able to run Docker and Chromium and manage login-state files