{
  "schemaVersion": "1.0",
  "item": {
    "slug": "finviz-crawler",
    "name": "finviz-crawler",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/camopel/finviz-crawler",
    "canonicalUrl": "https://clawhub.ai/camopel/finviz-crawler",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/finviz-crawler",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=finviz-crawler",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "scripts/finviz_crawler.py",
      "scripts/finviz_query.py",
      "scripts/install.py"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/finviz-crawler"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/finviz-crawler",
    "agentPageUrl": "https://openagent3.xyz/skills/finviz-crawler/agent",
    "manifestUrl": "https://openagent3.xyz/skills/finviz-crawler/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/finviz-crawler/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Why This Skill?",
        "body": "📰 Your own financial news database — most finance skills just wrap an API for one-shot queries. This skill runs continuously, building a local archive of every headline and article from Finviz. Query your history anytime — no API limits, no missing data.\n\n🆓 No API key, no subscription — scrapes finviz.com directly using Crawl4AI + RSS. Bloomberg, Reuters, Yahoo Finance, CNBC articles extracted automatically. Zero cost.\n\n🤖 Built for AI summarization — the query tool outputs clean text/JSON optimized for LLM digests. Pair with an OpenClaw cron job for automated morning briefings, evening wrap-ups, or weekly investment summaries.\n\n💾 Auto-cleanup — configurable expiry automatically deletes old articles from both the database and disk. Set --expiry-days 30 to keep a month of history, or 0 to keep everything forever.\n\n🔄 Daemon architecture — runs as a background service that starts/stops with OpenClaw. No manual intervention needed after setup. Works with systemd (Linux) and launchd (macOS)."
      },
      {
        "title": "Install",
        "body": "python3 scripts/install.py\n\nWorks on macOS, Linux, and Windows. Installs Python packages (crawl4ai, feedparser), sets up Playwright browsers, creates data directories, and verifies everything."
      },
      {
        "title": "Manual install",
        "body": "pip install crawl4ai feedparser\ncrawl4ai-setup  # or: python -m playwright install chromium"
      },
      {
        "title": "Run the crawler",
        "body": "# Default: ~/workspace/finviz/, 7-day expiry\npython3 scripts/finviz_crawler.py\n\n# Custom paths and settings\npython3 scripts/finviz_crawler.py --db /path/to/finviz.db --articles-dir /path/to/articles/\n\n# Keep 30 days of articles\npython3 scripts/finviz_crawler.py --expiry-days 30\n\n# Never auto-delete (keep everything)\npython3 scripts/finviz_crawler.py --expiry-days 0\n\n# Custom crawl interval (default: 300s)\npython3 scripts/finviz_crawler.py --sleep 600"
      },
      {
        "title": "Query articles",
        "body": "# Last 24 hours of headlines\npython3 scripts/finviz_query.py --hours 24\n\n# Titles only (compact, good for LLM summarization)\npython3 scripts/finviz_query.py --hours 12 --titles-only\n\n# With full article content\npython3 scripts/finviz_query.py --hours 12 --with-content\n\n# List downloaded articles with content status\npython3 scripts/finviz_query.py --list-articles --hours 24\n\n# Database stats\npython3 scripts/finviz_query.py --stats"
      },
      {
        "title": "Manage tickers",
        "body": "# List all tracked tickers\npython3 scripts/finviz_query.py --list-tickers\n\n# Add single ticker (auto-generates keywords from symbol)\npython3 scripts/finviz_query.py --add-ticker NVDA\n\n# Add with custom keywords\npython3 scripts/finviz_query.py --add-ticker \"NVDA:nvidia,jensen huang\"\n\n# Add multiple tickers (batch)\npython3 scripts/finviz_query.py --add-ticker NVDA TSLA AAPL\npython3 scripts/finviz_query.py --add-ticker \"NVDA:nvidia,jensen\" \"TSLA:tesla,elon musk\"\n\n# Remove tickers (batch)\npython3 scripts/finviz_query.py --remove-ticker NVDA TSLA\n\n# Custom DB path\npython3 scripts/finviz_query.py --list-tickers --db /path/to/finviz.db\n\nTickers are stored in the tickers table inside finviz.db alongside articles. The crawler reads this table each cycle to know which ticker pages to scrape."
      },
      {
        "title": "Configuration",
        "body": "SettingCLI flagEnv varDefaultDatabase path--db—~/workspace/finviz/finviz.dbArticles directory--articles-dir—~/workspace/finviz/articles/Crawl interval--sleep—300 (5 min)Article expiry--expiry-daysFINVIZ_EXPIRY_DAYS7 daysTimezone—FINVIZ_TZ or TZSystem default"
      },
      {
        "title": "💬 Chat Commands (OpenClaw Agent)",
        "body": "When this skill is installed, the agent recognizes /finviz as a shortcut:\n\nCommandAction/finviz listShow tracked tickers/finviz add NVDA, TSLAAdd tickers to track/finviz remove NVDARemove a ticker/finviz statsShow article/ticker counts/finviz helpShow available commands\n\nThe agent runs these via the finviz_query.py CLI internally."
      },
      {
        "title": "📱 PrivateApp Dashboard",
        "body": "A companion mobile dashboard is available in PrivateApp — a personal PWA dashboard for your home server.\n\nThe Finviz app provides:\n\nHeadlines browser with time-range filters (12h / 24h / Week)\nTicker-specific news filtering\nLLM-powered summaries on demand\n\nInstall PrivateApp, and the Finviz dashboard is built-in — no extra setup needed."
      },
      {
        "title": "Architecture",
        "body": "Crawler daemon (finviz_crawler.py):\n\nCrawls finviz.com/news.ashx headlines every 5 minutes\nFetches article content via Crawl4AI (Playwright) or RSS (paywalled sites)\nBot/paywall detection rejects garbage content\nPer-domain rate limiting, user-agent rotation\nDeduplicates via SHA-256 title hash\nAuto-expires old articles (configurable)\nClean shutdown on SIGTERM/SIGINT\n\nQuery tool (finviz_query.py):\n\nRead-only SQLite queries (no HTTP, stdlib only)\nFilter by time window, export titles or full content\nDesigned for LLM summarization pipelines"
      },
      {
        "title": "systemd (Linux)",
        "body": "[Unit]\nDescription=Finviz News Crawler\n\n[Service]\nExecStart=python3 /path/to/scripts/finviz_crawler.py --expiry-days 30\nRestart=on-failure\nRestartSec=30\n\n[Install]\nWantedBy=default.target"
      },
      {
        "title": "launchd (macOS)",
        "body": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n    <key>Label</key><string>com.finviz.crawler</string>\n    <key>ProgramArguments</key>\n    <array>\n        <string>python3</string>\n        <string>/path/to/scripts/finviz_crawler.py</string>\n        <string>--expiry-days</string>\n        <string>30</string>\n    </array>\n    <key>RunAtLoad</key><true/>\n    <key>KeepAlive</key><true/>\n</dict>\n</plist>"
      },
      {
        "title": "Data layout",
        "body": "~/workspace/finviz/\n├── finviz.db          # SQLite: articles + tickers (single DB)\n├── articles/          # Full article content as .md files\n│   ├── market/        # General market headlines\n│   ├── nvda/          # Per-ticker articles\n│   └── tsla/\n└── summaries/         # LLM summary cache (.json)"
      },
      {
        "title": "Cron integration",
        "body": "Pair with an OpenClaw cron job for automated digests:\n\nSchedule: 0 6 * * * (6 AM daily)\nTask: Query last 24h → LLM summarize → deliver to Matrix/Telegram/Discord"
      }
    ],
    "body": "finviz-crawler\nWhy This Skill?\n\n📰 Your own financial news database — most finance skills just wrap an API for one-shot queries. This skill runs continuously, building a local archive of every headline and article from Finviz. Query your history anytime — no API limits, no missing data.\n\n🆓 No API key, no subscription — scrapes finviz.com directly using Crawl4AI + RSS. Bloomberg, Reuters, Yahoo Finance, CNBC articles extracted automatically. Zero cost.\n\n🤖 Built for AI summarization — the query tool outputs clean text/JSON optimized for LLM digests. Pair with an OpenClaw cron job for automated morning briefings, evening wrap-ups, or weekly investment summaries.\n\n💾 Auto-cleanup — configurable expiry automatically deletes old articles from both the database and disk. Set --expiry-days 30 to keep a month of history, or 0 to keep everything forever.\n\n🔄 Daemon architecture — runs as a background service that starts/stops with OpenClaw. No manual intervention needed after setup. Works with systemd (Linux) and launchd (macOS).\n\nInstall\npython3 scripts/install.py\n\n\nWorks on macOS, Linux, and Windows. Installs Python packages (crawl4ai, feedparser), sets up Playwright browsers, creates data directories, and verifies everything.\n\nManual install\npip install crawl4ai feedparser\ncrawl4ai-setup  # or: python -m playwright install chromium\n\nUsage\nRun the crawler\n# Default: ~/workspace/finviz/, 7-day expiry\npython3 scripts/finviz_crawler.py\n\n# Custom paths and settings\npython3 scripts/finviz_crawler.py --db /path/to/finviz.db --articles-dir /path/to/articles/\n\n# Keep 30 days of articles\npython3 scripts/finviz_crawler.py --expiry-days 30\n\n# Never auto-delete (keep everything)\npython3 scripts/finviz_crawler.py --expiry-days 0\n\n# Custom crawl interval (default: 300s)\npython3 scripts/finviz_crawler.py --sleep 600\n\nQuery articles\n# Last 24 hours of headlines\npython3 scripts/finviz_query.py --hours 24\n\n# Titles only (compact, good for LLM summarization)\npython3 scripts/finviz_query.py --hours 12 --titles-only\n\n# With full article content\npython3 scripts/finviz_query.py --hours 12 --with-content\n\n# List downloaded articles with content status\npython3 scripts/finviz_query.py --list-articles --hours 24\n\n# Database stats\npython3 scripts/finviz_query.py --stats\n\nManage tickers\n# List all tracked tickers\npython3 scripts/finviz_query.py --list-tickers\n\n# Add single ticker (auto-generates keywords from symbol)\npython3 scripts/finviz_query.py --add-ticker NVDA\n\n# Add with custom keywords\npython3 scripts/finviz_query.py --add-ticker \"NVDA:nvidia,jensen huang\"\n\n# Add multiple tickers (batch)\npython3 scripts/finviz_query.py --add-ticker NVDA TSLA AAPL\npython3 scripts/finviz_query.py --add-ticker \"NVDA:nvidia,jensen\" \"TSLA:tesla,elon musk\"\n\n# Remove tickers (batch)\npython3 scripts/finviz_query.py --remove-ticker NVDA TSLA\n\n# Custom DB path\npython3 scripts/finviz_query.py --list-tickers --db /path/to/finviz.db\n\n\nTickers are stored in the tickers table inside finviz.db alongside articles. The crawler reads this table each cycle to know which ticker pages to scrape.\n\nConfiguration\nSetting\tCLI flag\tEnv var\tDefault\nDatabase path\t--db\t—\t~/workspace/finviz/finviz.db\nArticles directory\t--articles-dir\t—\t~/workspace/finviz/articles/\nCrawl interval\t--sleep\t—\t300 (5 min)\nArticle expiry\t--expiry-days\tFINVIZ_EXPIRY_DAYS\t7 days\nTimezone\t—\tFINVIZ_TZ or TZ\tSystem default\n💬 Chat Commands (OpenClaw Agent)\n\nWhen this skill is installed, the agent recognizes /finviz as a shortcut:\n\nCommand\tAction\n/finviz list\tShow tracked tickers\n/finviz add NVDA, TSLA\tAdd tickers to track\n/finviz remove NVDA\tRemove a ticker\n/finviz stats\tShow article/ticker counts\n/finviz help\tShow available commands\n\nThe agent runs these via the finviz_query.py CLI internally.\n\n📱 PrivateApp Dashboard\n\nA companion mobile dashboard is available in PrivateApp — a personal PWA dashboard for your home server.\n\nThe Finviz app provides:\n\nHeadlines browser with time-range filters (12h / 24h / Week)\nTicker-specific news filtering\nLLM-powered summaries on demand\n\nInstall PrivateApp, and the Finviz dashboard is built-in — no extra setup needed.\n\nArchitecture\n\nCrawler daemon (finviz_crawler.py):\n\nCrawls finviz.com/news.ashx headlines every 5 minutes\nFetches article content via Crawl4AI (Playwright) or RSS (paywalled sites)\nBot/paywall detection rejects garbage content\nPer-domain rate limiting, user-agent rotation\nDeduplicates via SHA-256 title hash\nAuto-expires old articles (configurable)\nClean shutdown on SIGTERM/SIGINT\n\nQuery tool (finviz_query.py):\n\nRead-only SQLite queries (no HTTP, stdlib only)\nFilter by time window, export titles or full content\nDesigned for LLM summarization pipelines\nRun as a service (optional)\nsystemd (Linux)\n[Unit]\nDescription=Finviz News Crawler\n\n[Service]\nExecStart=python3 /path/to/scripts/finviz_crawler.py --expiry-days 30\nRestart=on-failure\nRestartSec=30\n\n[Install]\nWantedBy=default.target\n\nlaunchd (macOS)\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n    <key>Label</key><string>com.finviz.crawler</string>\n    <key>ProgramArguments</key>\n    <array>\n        <string>python3</string>\n        <string>/path/to/scripts/finviz_crawler.py</string>\n        <string>--expiry-days</string>\n        <string>30</string>\n    </array>\n    <key>RunAtLoad</key><true/>\n    <key>KeepAlive</key><true/>\n</dict>\n</plist>\n\nData layout\n~/workspace/finviz/\n├── finviz.db          # SQLite: articles + tickers (single DB)\n├── articles/          # Full article content as .md files\n│   ├── market/        # General market headlines\n│   ├── nvda/          # Per-ticker articles\n│   └── tsla/\n└── summaries/         # LLM summary cache (.json)\n\nCron integration\n\nPair with an OpenClaw cron job for automated digests:\n\nSchedule: 0 6 * * * (6 AM daily)\nTask: Query last 24h → LLM summarize → deliver to Matrix/Telegram/Discord"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/camopel/finviz-crawler",
    "publisherUrl": "https://clawhub.ai/camopel/finviz-crawler",
    "owner": "camopel",
    "version": "3.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/finviz-crawler",
    "downloadUrl": "https://openagent3.xyz/downloads/finviz-crawler",
    "agentUrl": "https://openagent3.xyz/skills/finviz-crawler/agent",
    "manifestUrl": "https://openagent3.xyz/skills/finviz-crawler/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/finviz-crawler/agent.md"
  }
}