All skills
placesreddittwitterfacebook Market Research & Trends

Local Category Complaint Miner

Sweep one-star reviews — plus optional Reddit, X, and Facebook chatter — across a metro's category to surface the unmet needs nobody is solving

Run this skill with your agent
1. Connect the MCP server
https://apidirect.io/mcp?token=YOUR_API_KEY
2. Then ask your agent — name the skill so it runs this exact playbook
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
Naming the skill (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.

What it does

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

Inputs

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

How your agent runs it

  1. 1
    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. 2
    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.

  3. 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.

  4. 4
    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. 5
    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. 6
    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.

Delivers: 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.

Tools used

The full playbook

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.