Multi-platform bidding monitor: scan 50+ sites and filter power/electric bidding notices only.
Documents
定制化招标信息采集
Try itAutomated government procurement bid discovery engine. Scans multiple Chinese procurement platforms, matches configurable keywords, tracks bid statuses, and delivers deadline-aware reports. Users configure their own keywords and monitoring targets; built-in adapters cover 5 major platforms with an extensible plugin model for adding more.
What it does
Automated government procurement bid discovery engine. Scans multiple Chinese procurement platforms, matches configurable keywords, tracks bid statuses, and delivers deadline-aware reports. Users configure their own keywords and monitoring targets; built-in adapters cover 5 major platforms with an extensible plugin model for adding more.
The skill document
Bidding Hunter — 投标发掘引擎
A config-driven, reusable bid discovery engine that automates the tedious process of monitoring Chinese government procurement platforms.
Compatible with any AI assistant that can execute CLI tools: OpenClaw, Claude Code, Codex CLI, Cursor Agent, and similar platforms. The skill is platform-agnostic — all operations are exposed through the bidding-hunter CLI and standard shell commands.
🚨 MANDATORY TOOL DISCIPLINE — READ FIRST
ANY bidding-hunter task MUST use the existing tools below. You are FORBIDDEN from writing ad-hoc scripts, inline Node.js, curl, web_fetch, or any other approach.
Existing Tools (the ONLY allowed tools for bidding-hunter work)
| Tool | Purpose | Command |
|---|---|---|
bidding-hunter CLI | All operations: scan, report, list, status, stats, export, remind, init, create-adapter, test-platform, config-validate | bidding-hunter |
scripts/explore-platform.js | Explore a new platform's structure before writing an adapter | node scripts/explore-platform.js --url [--recon] |
templates/platform-adapter.js | Template for creating new platform adapters | Used by bidding-hunter create-adapter |
| Platform adapters | src/platforms/*.js — scan() methods executed by the scanner | Called internally by bidding-hunter scan |
| Core modules | scanner, matcher, database, reporter, detail-fetcher, reminder, notifier | Called internally by the CLI |
Rules (ZERO EXCEPTIONS)
- Use tools, don't replace them. A bidding-hunter task is a tool-execution task, NOT a coding task.
- No ad-hoc scripts. Do NOT write
scrape_*.js,fetch_*.js,test_*.js, inlinenode -e "...",curl,web_fetch, or any one-off scraping code. - No browser shortcuts. Do NOT use Playwright/Selenium directly unless you are inside a platform adapter's
scan()method. All browser orchestration is handled by the scanner. - No manual dedup/matching. Do NOT copy-paste from the matcher or database modules. Use
bidding-hunter scan→bidding-hunter report.
Escalation Path (when something breaks)
Existing tool fails
→ Read the tool's source code
→ Fix the bug in the tool itself (edit src/*.js, bin/*.js, scripts/*.js, templates/*.js)
→ Run tests: node --test tests/*.test.js
→ Re-run the tool
→ If the tool is fundamentally broken beyond repair: refactor the tool, record in memory/YYYY-MM-DD.md
Key principle: Fix the tool, don't work around it. Every workaround creates technical debt that compounds across sessions.
Memory requirement: After ANY code change to the bidding-hunter project (including bug fixes, adapter changes, config schema updates), write a note to memory/YYYY-MM-DD.md recording what was changed and why.
When to Use This Skill
- You need to discover relevant bidding opportunities across multiple Chinese procurement platforms
- You want automated keyword matching against daily procurement announcements
- You need deadline tracking and reminders for approaching bid deadlines
- You want to add a new procurement platform and let the agent figure out the scraping
Quick Start
# Create initial config
bidding-hunter init
# Edit config with YOUR keywords
# vim ~/.bidding-hunter/config.yaml
# Run a scan
bidding-hunter scan
# View results
bidding-hunter report
Core Workflow
1. Configure Your Keywords
Edit ~/.bidding-hunter/config.yaml — this is where YOU define what to search for:
matching:
search_queries: # What to type into platform search boxes
- "建筑工程"
- "信息化"
tiers: # Multi-tier keyword matching
high:
label: "L1"
keywords: ["建筑工程", "土建施工", "信息系统"]
medium:
label: "L2"
keywords: ["系统集成", "运维服务"]
low:
label: "L3"
keywords: ["市政工程", "园林绿化"]
blacklist: # Filter these out
- "中标"
- "成交"
- "废标"
- "更正"
Important: The agent should NOT decide keywords — the user provides them via config.
2. Choose Your Platforms
platforms:
enabled:
- beijing # 北京公共资源交易平台
- hebei # 河北省招标投标公共服务平台
- liaoning # 辽宁省公共资源交易平台
- dalian # 大连市公共资源交易平台
- national # 全国公共资源交易平台 (6 data sources)
3. Run the Scan
bidding-hunter scan
This runs a deterministic pipeline: scan → match → ingest → detail fetch → reminders → report.
4. Review & Manage Matches
# List tracked entries
bidding-hunter list --status tracked
# Mark as tracked
bidding-hunter status --id 5 --status tracked
# Update bid progress
bidding-hunter status --id 5 --bid-status submitted
# Check reminders
bidding-hunter remind
Agent Usage Pattern
When a user asks you to run or manage bidding discovery:
- First time setup: Run
bidding-hunter init, then guide the user to configure keywords - Daily scan: Run
bidding-hunter scan— this is deterministic, no LLM needed - Review results: Run
bidding-hunter reportand present findings to the user - Status updates: When user says "track #5" or "discard #3", use
bidding-hunter status - Adding platforms: When user wants to monitor a new site:
# Let the agent explore node scripts/explore-platform.js --url https://new-site.ggzy.gov.cn/ --recon # Then create adapter from findings bidding-hunter create-adapter --name new-site # Implement extraction logic based on exploration results # Test it bidding-hunter test-platform --name new-site
Key Design Principles (For Agent)
- Deterministic core: Scanning, matching, and ingestion do not depend on LLM availability
- Config over code: All keywords, sites, and schedules are in user-editable YAML
- One adapter per platform: Adding a new site = writing one ~50-line adapter file
- Idempotent: Safe to re-run; URL-based dedup and checkpoint system
- Graceful degradation: One failing site doesn't block others
- No privacy leakage: All data stays local; no telemetry or cloud uploads
Built-in Platform Adapters
| ID | Platform | Strategy |
|---|---|---|
beijing | 北京公共资源交易平台 | URL pagination, extraction |
hebei | 河北省招标投标公共服务平台 | fullsearch.html URL search + filter |
liaoning | 辽宁省公共资源交易平台 | API-based extraction + session cookie |
dalian | 大连市公共资源交易平台 | URL pagination |
national | 全国公共资源交易平台 | 6 data sources via UI interaction |
Adding a New Platform
-
Explore the platform structure:
node scripts/explore-platform.js --url https://new-site.gov.cn/ --reconThis navigates to the site and captures structural hints.
-
Create adapter template:
bidding-hunter create-adapter --name new-site -
Implement the
scan()method with:- Navigation logic (URL-based or search-based)
extractItems()function with correct CSS selectors- Pagination handling
- Error handling for site-specific edge cases
-
Test:
bidding-hunter test-platform --name new-site -
Enable in config:
platforms: enabled: - new-site
Operations
Checking Status
# View database stats
bidding-hunter stats
# Export for analysis
bidding-hunter export --format csv > bids.csv
Scheduling
Add to crontab:
0 16 * * * bidding-hunter scan --config ~/.bidding-hunter/config.yaml
Or use OpenClaw cron with the bidding-hunter scan command.
Notifications
Configure webhook channels in config:
notifications:
channels:
- type: feishu
webhook: "${FEISHU_WEBHOOK_URL}"
- type: slack
webhook: "${SLACK_WEBHOOK_URL}"
Troubleshooting
| Problem | Solution |
|---|---|
| Platform returns no data | Site may have changed — run test-platform to debug selectors |
| Browser launch fails | Ensure Chromium is installed: npx playwright install chromium |
| Database locked | Another scan is running — wait or remove ~/.bidding-hunter/.lock |
| Network timeouts | Increase scan.retry_stairs timeouts in config |
Files
- Config:
~/.bidding-hunter/config.yaml - Database:
~/.bidding-hunter/data.db(SQLite) - Scan results:
~/.bidding-hunter/scan_results/YYYY-MM-DD/ - Custom adapters:
~/.bidding-hunter/platforms/*.js
See Also
- DESIGN.md — Full architecture and extension guide
- README.md — User-facing documentation
- CONTRIBUTING.md — How to contribute adapters
Related skills
国央企招投标信息监控与研判技能。自动采集多平台公告,按资质规则比对可投性(可投/不可投/需确认),生成带研判简报并多通道推送。v1.5 起新增:资质匹配度评分(0-100)、投标日历与开标倒计时、金额/地区/行业多维筛选、零代码规则编辑器、诊断中心、示例模式、集中FAQ、统一命令入口;v2.0 本地AI增强(招标文件AI速读+风险条款识别,零云成本);v2.5 投标策略建议生成;v3.0 本地开放API+签名webhook。边界感知智能匹配防子串误匹配,规则库健康检查,钉钉/企业微信/邮件推送。触发词:抓招投标、今日哪些能投、标讯监控、标书研判、招投标公告、央企招标、投标资质匹配、AI读标书、投标建议。
招投标商机采集 — 监控全网公开招投标信息,按业务赛道智能筛选高价值商机线索。能力与副作用完整披露:(1) 通过 WebSearch/WebFetch 向各级政府公共资源交易平台、国企采购平台、行业招投标网站及第三方聚合平台发起出站 HTTP 请求,仅采集公开信息,不读取用户环境变量/API Key/敏感配置;(2) scan/monitor 结果默认写入本地 leads-output/bid/ 目录(HTML/JSON/Markdown/log),不静默写入其他位置;(3) monitor 子命令通过 CronCreate 创建定时任务(会修改宿主调度),周期性发起出站请求并发送 PushN
全国采购与招标信息查询与分析助手。当用户涉及以下任何场景时,必须使用此SKILL:跨省份/跨行业全盘检索招标采购公告、查询招标/中标/采购意向/合同公告、综合企业画像分析、查询公司主营业务与上下游合作客户/供应商、分析竞争对手、查询Top采购单位/Top中标单位/Top中标品牌、招中标数据多维统计分析(按月/季/年/省份/行业/品牌等维度)、查询品牌型号历史中标单价、市场分析/采购寻源/渠道拓展等场景。即使用户没有提到「中国采购与招标网」,只要涉及招投标、采购、中标、供应商、竞争对手等关键词,都应使用本SKILL。
全国招标采购信息一站式查询与分析助手。当用户涉及以下任何场景时,必须使用此SKILL:搜索招标/中标/采购公告、查找临期/即将到期项目、商机预测、推荐潜在投标供应商、分析公司主营业务/历史中标、查询公司上下游合作客户与供应商、分析竞争对手、查询Top采购单位/Top中标单位/Top中标品牌、招中标数据统计分析、查询品牌型号历史中标单价、市场分析/采购寻源/渠道拓展等场景。即使用户没有提到「中国招标网」,只要涉及招投标、采购、中标、供应商、竞争对手等关键词,都应使用本SKILL。
企业级招标采购与供应商寻源助手。当用户涉及以下任何场景时,必须使用此SKILL:检索招标/采购/中标公告、查找企业集中采购项目、核验供应商资质与历史中标业绩、寻找潜在投标供应商、分析公司主营业务与上下游合作客户/供应商、查询竞争对手、查询Top采购单位/Top中标单位/Top中标品牌、招中标数据统计分析、查询品牌型号历史中标单价、采购寻源/渠道拓展/客户开发等采购与投标相关场景。即使用户没有提到「必联网」,只要涉及招投标、企业采购、中标、供应商寻源、客户开发等关键词,都应使用本SKILL。