voc-analysis — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited voc-analysis (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Senior market research analyst workflow for comprehensive, data-driven VOC (Voice of Customer) analysis and competitive intelligence. Covers the full pipeline: multi-platform data collection (Reddit, Twitter, Amazon, App Store, YouTube, etc.) via Apify Agent Skills and web search, LLM semantic tagging, Python statistical counting, and Chinese report generation with English quotes preserved.
Apify is the core dependency of this Skill. VOC analysis cannot be performed without Apify.
Before starting ANY research, you MUST verify Apify is configured:
APIFY_TOKEN environment variable: echo $APIFY_TOKEN.env file for APIFY_TOKEN=...If no API key is found, STOP IMMEDIATELY. Do NOT proceed. Tell the user:
"This Skill requires Apify for multi-platform data collection. Research cannot begin without an API Key.
>
Please follow these steps: 1. Contact an admin to obtain an APIFY_TOKEN 2. Install Apify Agent Skills:npx skills add apify/agent-skills3. Configure environment variable: addAPIFY_TOKEN=<your-token>to the.envfile 4. Come back to start the research after configuration is complete."
Apify is not optional. Web Search alone cannot complete a full VOC analysis (insufficient data volume, no structured collection, unable to cover multiple platforms). Apify must be available before work can begin.
Read references/apify-setup.md for detailed installation and configuration steps.
connectivity_issue + setup_difficult). Python is ONLY used to count those tags statistically.Step 0: Check existing Apify runs (cache-first)
→ Evaluate relevance of each run's input parameters
→ Download only relevant datasets
Step 0.5: Gap analysis (MANDATORY)
→ Map existing data to 5-layer query strategy
→ Identify missing platforms, angles, competitors, time ranges
→ Build 5-10+ new queries to fill gaps
Step 1: Plan query strategy (5 layers)
→ Direct → Problem-space → Competitor → Use-case → Long-tail
Step 2: Collect data (Apify + Web Search fallback)
→ Store in reference/<scraper>/dataset/<id>.json
Step 3: LLM analyzes ALL raw data
→ Reads every item, tags semantically, extracts quotes with URLs
→ Tags feature-level data: features_mentioned, feature_sentiment, is_noise
→ Saves tagged data to reference/tagged/
Step 4: Python counts tags (ONLY statistical counting)
→ Frequencies, percentages, cross-tabs, visualizations
Step 4.5: Feature-Level Analysis (for product comparison)
→ Per-feature metrics: mention rate, positive rate, negative rate, avg rating
→ Noise filtering: exclude subscription/pricing complaints from quality metrics
→ Competitive benchmarking tables with pp differences
Step 5: Generate report in Chinese (English quotes preserved)
→ Save as .md in docs/Each step is detailed in the reference files below.
Read the relevant reference file when you reach that phase of the workflow:
| File | When to Read | Content |
|---|---|---|
references/apify-setup.md | Before starting | MCP installation, verification, troubleshooting |
references/data-collection.md | Steps 0–2 | Cache management, Python scripts, run checking, dataset download, gap analysis |
references/query-strategy.md | Step 1 | 5-layer query design, platform selection, query examples |
references/analysis-methodology.md | Steps 3–4 | LLM tagging workflow, Python counting, analysis pipeline |
references/report-template.md | Step 5 | Complete report template with all sections |
references/failure-recovery.md | When runs fail | Failure analysis, alternative actors, web search fallback |
references/amazon-guide.md | When scraping Amazon | ASIN search methods, review scraper input formats |
reference/
├── apify_runs_cache.json # Central cache (keep updated)
├── scripts/ # Automation scripts
│ ├── build_apify_cache.py # Fetch all runs + details
│ └── download_datasets.py # Batch download relevant datasets
├── tagged/ # LLM-tagged datasets
│ └── <platform>_<id>_tagged.json
├── reddit_scraper/dataset/
├── twitter_scraper/dataset/
├── amazon_reviews/dataset/
├── appstore_reviews/dataset/
├── google_play_reviews/dataset/
├── youtube_scraper/dataset/
└── ...other platforms.../dataset/Apify provides AI-native agent skills for web scraping and data extraction. Source: https://github.com/apify/agent-skills
Installation options (choose one):
npx skills add apify/agent-skills # Claude Code
/plugin marketplace add https://github.com/apify/agent-skills
/plugin install apify-ultimate-scraper@apify-agent-skillsAvailable Skills include:
Environment requirements:
APIFY_TOKEN environment variable (set in .env file or shell environment)Decision tree:
Need data? → Apify skill available?
YES → Try Apify first → Failed? → Web Search fallback
NO → Web Search (primary)See references/failure-recovery.md for detailed fallback strategies.
| Layer | Purpose | Example |
|---|---|---|
| 1. Direct | Brand/product mentions | "<product_name>" review |
| 2. Problem-space | Pain points (no brand) | "smart device not connecting" |
| 3. Competitor | Competitive products | "<product_name> vs <competitor>" |
| 4. Use-case | Target users/scenarios | r/<community> smart device |
| 5. Long-tail | Seasonal, niche, integrations | "<product_name> winter setup" |
Full details in references/query-strategy.md.
reference/*/dataset/*.json)reference/tagged/Python does NOT: read raw data, find patterns, extract quotes, or do sentiment analysis.
positive_rate = positive_count / (valid_mentions - noise_count), negative_rate = quality_negative_count / (valid_mentions - noise_count)Full details in references/analysis-methodology.md.
.md in docs/Full template in references/report-template.md.
references/failure-recovery.md).md in docs/Good Example — Semantic tagging by LLM: User review: "I gave up trying to connect it after 2 hours" → LLM tags: connectivity_issue, setup_difficult, sentiment: negative → Python counts: connectivity_issue appears 47 times (23% of total)
Bad Example — Python keyword matching: User review: "I gave up trying to connect it after 2 hours" → Python: if "connect" in text: tag = "connectivity" ← misses context, no sentiment, no semantic understanding → Misses nuance: "gave up" signals frustration; "2 hours" signals severity
Good Example — Multi-platform gap analysis: After initial Reddit scrape (Layer 1), analyst identifies: no Amazon reviews (Layer 1), no competitor data (Layer 3), no problem-space queries (Layer 2). Builds 8 new queries to fill gaps before proceeding to analysis.
Bad Example — Single-source analysis: Analyst scrapes one Reddit thread, finds 15 comments, writes a report claiming "users love the product" — no gap analysis, no cross-platform validation, insufficient sample size.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.