Sweep one-star reviews — plus optional Reddit, X, and Facebook chatter — across a metro's category to surface the unmet needs nobody is solving
https://apidirect.io/mcp?token=YOUR_API_KEY
Use the local-category-complaint-miner skill: Mine one-star reviews for {category} businesses across {metro} and cluster the unmet needs I could build around
local-category-complaint-miner) makes your agent run this exact playbook instead of improvising its own searches.
In clients that support MCP prompts (Claude Desktop, Claude Code, Cursor) it also appears as a prompt named
local-category-complaint-miner, and any agent can call
get_skill(skill_id="local-category-complaint-miner") directly.
A metro's lowest-rated reviews are a free, honest backlog of unmet needs. Sentiment-filter the angriest Google reviews across many local players, then optionally triangulate against Reddit, X, and Facebook complaints to confirm which pains are real, recurring, and still live — so you can productize or out-execute them.
Who it's for: Founders, local-market entrants, and product strategists
| Input | Required | Description | Example |
|---|---|---|---|
category |
Yes | The business category to investigate | dog grooming |
metro |
Yes | City or metro to sweep | Austin, Texas |
platforms |
No | Comma-separated list of platforms to run — options: places, reddit, twitter, facebook. Omit to run all of them; name specific platforms to limit the run. | reddit, twitter, facebook |
country |
No | ISO country code to disambiguate Google Places results for non-US metros. Applied to all Places calls; leave blank to auto-infer from the metro. | us |
depth |
No | How many pages to pull per source (harshest reviews and social posts). Maps to the pages param; higher = deeper, more complete sweep but slower. Defaults to 3. | 3 |
search_places(query="{category} {metro}", pages=5)
Collect every local provider in the category with its place_id, rating, and review_count; prioritize those with enough reviews to mine. Pass {country} only for non-US metros, otherwise omit it.
place_reviews(place_id=<place_id>, sort_by=lowest_ranking, pages=3, get_sentiment=true)
For each provider pull the harshest reviews and keep only items with negative polarity or anger/disgust as the dominant emotion; capture review dates so you can flag complaints that are still live. {depth} defaults to 3.
place_reviews(place_id=<place_id>, sort_by=newest, pages=2, get_sentiment=true)
Cross-check recent reviews to confirm the complaint is still live and not a fixed legacy issue; drop themes that only appear in old reviews.
search_reddit(query="{category} {metro}", get_sentiment=true, sort_by=top)
Only run if {platforms} includes reddit: mine city-subreddit threads and recommendation posts for the same category; keep negative-sentiment comments that name a recurring failure, and treat any theme that ALSO appears in the Google reviews as high-confidence.
search_twitter(query="{category} {metro}", get_sentiment=true, pages=3, sort_by=most_recent)
Only run if {platforms} includes twitter: capture fresh, geo-relevant complaints to confirm the pain is still live right now; keep only negative-sentiment posts and fold them into the same complaint clusters.
search_facebook_posts(query="{category} {metro}", get_sentiment=true, pages=3)
Only run if {platforms} includes facebook: pull local-group and community posts where residents vent about or seek replacements for category providers; keep negative-sentiment items and merge recurring pains into the existing clusters.
This is exactly what the MCP returns to your agent (via the local-category-complaint-miner prompt or get_skill tool), with your inputs filled in.
SKILL: Local Category Complaint Miner
A metro's lowest-rated reviews are a free, honest backlog of unmet needs. Sentiment-filter the angriest Google reviews across many local players, then optionally triangulate against Reddit, X, and Facebook complaints to confirm which pains are real, recurring, and still live — so you can productize or out-execute them.
You are running this skill on API Direct via its MCP tools. Execute the steps below yourself by calling the named tools in order — values in <angle brackets> come from a previous step. Then deliver the result described at the end.
INPUTS:
- category (required): <category — ASK THE USER>
The business category to investigate
- metro (required): <metro — ASK THE USER>
City or metro to sweep
- platforms (optional): (optional — e.g. reddit, twitter, facebook)
Comma-separated list of platforms to run — options: places, reddit, twitter, facebook. Omit to run all of them; name specific platforms to limit the run.
- country (optional): (optional — e.g. us)
ISO country code to disambiguate Google Places results for non-US metros. Applied to all Places calls; leave blank to auto-infer from the metro.
- depth (optional): 3 (default — override if you like)
How many pages to pull per source (harshest reviews and social posts). Maps to the pages param; higher = deeper, more complete sweep but slower. Defaults to 3.
PLATFORM SELECTION: some steps are gated with "Only run if {platforms} includes X". If the user supplied a `platforms` value, run only the steps whose platform is listed. If the user did NOT supply `platforms`, run ALL steps — every platform the skill supports.
STEPS:
1. Tool `search_places` — search_places(query="{category} {metro}", pages=5)
Collect every local provider in the category with its place_id, rating, and review_count; prioritize those with enough reviews to mine. Pass {country} only for non-US metros, otherwise omit it.
2. Tool `place_reviews` — place_reviews(place_id=<place_id>, sort_by=lowest_ranking, pages=3, get_sentiment=true)
For each provider pull the harshest reviews and keep only items with negative polarity or anger/disgust as the dominant emotion; capture review dates so you can flag complaints that are still live. 3 defaults to 3.
3. Tool `place_reviews` — place_reviews(place_id=<place_id>, sort_by=newest, pages=2, get_sentiment=true)
Cross-check recent reviews to confirm the complaint is still live and not a fixed legacy issue; drop themes that only appear in old reviews.
4. Tool `search_reddit` — search_reddit(query="{category} {metro}", get_sentiment=true, sort_by=top)
Only run if {platforms} includes reddit: mine city-subreddit threads and recommendation posts for the same category; keep negative-sentiment comments that name a recurring failure, and treat any theme that ALSO appears in the Google reviews as high-confidence.
5. Tool `search_twitter` — search_twitter(query="{category} {metro}", get_sentiment=true, pages=3, sort_by=most_recent)
Only run if {platforms} includes twitter: capture fresh, geo-relevant complaints to confirm the pain is still live right now; keep only negative-sentiment posts and fold them into the same complaint clusters.
6. Tool `search_facebook_posts` — search_facebook_posts(query="{category} {metro}", get_sentiment=true, pages=3)
Only run if {platforms} includes facebook: pull local-group and community posts where residents vent about or seek replacements for category providers; keep negative-sentiment items and merge recurring pains into the existing clusters.
DELIVER: A clustered list of recurring unmet needs across the metro's category, ranked by frequency and emotional intensity, with the worst-performing incumbents named. Themes that recur in BOTH Google reviews and the optional Reddit/X/Facebook sweeps are flagged as highest-confidence opportunities.
Note: each underlying tool call is billed at its normal endpoint price; get_sentiment adds a small per-page surcharge. Page through results as needed but stop once you have enough to deliver the outcome.
Catch a topic breaking in one region before it spreads — diff live X trend lists across markets, then confirm the surge on TikTok and in regional news
Map the affiliate, comparison, AI-answer, and community landscape that owns a high-intent buying keyword
Turn fresh job-posting velocity for an emerging skill into a forward demand signal — triangulated with news and practitioner chatter — and a map of who is investing