Find local businesses whose own 1-star reviews — on Google and (optionally) Facebook — name the exact pain your product fixes, then hand you the owner to pitch
https://apidirect.io/mcp?token=YOUR_API_KEY
Use the unhappy-customer-winback-miner skill: Find {category} in {city} whose worst reviews complain about {pain_keyword}, and get me the owner's contact for each
unhappy-customer-winback-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
unhappy-customer-winback-miner, and any agent can call
get_skill(skill_id="unhappy-customer-winback-miner") directly.
A business's worst reviews name the exact problem you solve. Sentiment-filtering the lowest-rated reviews across Google Places and Facebook Pages for anger plus your keyword surfaces warm prospects and gives you their verbatim complaint to lead the pitch with — wherever they vent.
Who it's for: Founders selling a fix for a specific operational pain
| Input | Required | Description | Example |
|---|---|---|---|
category |
Yes | Type of business to scan | dentist |
city |
Yes | City and region to search | Phoenix, Arizona |
pain_keyword |
Yes | The pain your product solves, as customers phrase it | wait time |
platforms |
No | Comma-separated list of platforms to run — options: places, facebook. Omit to run all of them; name specific platforms to limit the run. | places, facebook |
scan_depth |
No | Optional. How many pages to pull per search and per review lookup, controlling result volume vs. speed. Maps to the pages param on every search/review step. Defaults to 3-5. | 5 |
country |
No | Optional. Two-letter country code passed to the Places search, reviews, and details calls to localize results for non-US markets. Defaults to us. | us |
translate_reviews |
No | Optional. When true, translates non-English Google reviews so the anger + pain_keyword filter works in any market. Maps to place_reviews.translate_reviews. Defaults to false. | true |
search_places(query="{category} {city}", pages=3)
Collect place_id, rating, and review_count for OPERATIONAL {category} businesses that have enough reviews to mine. Prioritize places with a low overall rating AND a high review_count, since those are the warmest, most-evidenced win-back targets.
place_reviews(place_id=<place_id>, sort_by=lowest_ranking, pages=3, get_sentiment=true)
Keep reviews where dominant_emotion is anger or disgust and the text mentions {pain_keyword}, capturing the exact quote and date to lead the pitch with.
place_details(place_id=<place_id>)
For businesses with matching painful reviews, pull owner_name, owner_link, and emails_and_contacts so you can send a tailored 'I can fix this' message.
search_facebook_pages(query="{category} {city}", pages=3)
Only run if {platforms} includes facebook: Find the official Facebook Pages for {category} businesses in {city}, capturing each page_id and page url. This widens the net to businesses that gather more complaints on Facebook than on Google.
facebook_page_reviews(page_id=<page_id>, get_sentiment=true, pages=3)
Only run if {platforms} includes facebook: Keep reviews/recommendations whose dominant_emotion is anger or disgust and whose text mentions {pain_keyword}, capturing the exact quote and date. Dedupe businesses already flagged via Google so each prospect appears once with the strongest complaint.
facebook_page_details(url=<page_url>)
Only run if {platforms} includes facebook: For pages with matching painful reviews, pull the listed phone, email, and website so you can reach the owner with the same tailored 'I can fix this' pitch.
search_places
place_reviews
place_details
search_facebook_pages
facebook_page_reviews
facebook_page_details
This is exactly what the MCP returns to your agent (via the unhappy-customer-winback-miner prompt or get_skill tool), with your inputs filled in.
SKILL: Unhappy-Customer Win-Back Miner
A business's worst reviews name the exact problem you solve. Sentiment-filtering the lowest-rated reviews across Google Places and Facebook Pages for anger plus your keyword surfaces warm prospects and gives you their verbatim complaint to lead the pitch with — wherever they vent.
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>
Type of business to scan
- city (required): <city — ASK THE USER>
City and region to search
- pain_keyword (required): <pain_keyword — ASK THE USER>
The pain your product solves, as customers phrase it
- platforms (optional): (optional — e.g. places, facebook)
Comma-separated list of platforms to run — options: places, facebook. Omit to run all of them; name specific platforms to limit the run.
- scan_depth (optional): 3 (default — override if you like)
Optional. How many pages to pull per search and per review lookup, controlling result volume vs. speed. Maps to the pages param on every search/review step. Defaults to 3-5.
- country (optional): (optional — e.g. us)
Optional. Two-letter country code passed to the Places search, reviews, and details calls to localize results for non-US markets. Defaults to us.
- translate_reviews (optional): (optional — e.g. true)
Optional. When true, translates non-English Google reviews so the anger + pain_keyword filter works in any market. Maps to place_reviews.translate_reviews. Defaults to false.
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} {city}", pages=3)
Collect place_id, rating, and review_count for OPERATIONAL {category} businesses that have enough reviews to mine. Prioritize places with a low overall rating AND a high review_count, since those are the warmest, most-evidenced win-back targets.
2. Tool `place_reviews` — place_reviews(place_id=<place_id>, sort_by=lowest_ranking, pages=3, get_sentiment=true)
Keep reviews where dominant_emotion is anger or disgust and the text mentions {pain_keyword}, capturing the exact quote and date to lead the pitch with.
3. Tool `place_details` — place_details(place_id=<place_id>)
For businesses with matching painful reviews, pull owner_name, owner_link, and emails_and_contacts so you can send a tailored 'I can fix this' message.
4. Tool `search_facebook_pages` — search_facebook_pages(query="{category} {city}", pages=3)
Only run if {platforms} includes facebook: Find the official Facebook Pages for {category} businesses in {city}, capturing each page_id and page url. This widens the net to businesses that gather more complaints on Facebook than on Google.
5. Tool `facebook_page_reviews` — facebook_page_reviews(page_id=<page_id>, get_sentiment=true, pages=3)
Only run if {platforms} includes facebook: Keep reviews/recommendations whose dominant_emotion is anger or disgust and whose text mentions {pain_keyword}, capturing the exact quote and date. Dedupe businesses already flagged via Google so each prospect appears once with the strongest complaint.
6. Tool `facebook_page_details` — facebook_page_details(url=<page_url>)
Only run if {platforms} includes facebook: For pages with matching painful reviews, pull the listed phone, email, and website so you can reach the owner with the same tailored 'I can fix this' pitch.
DELIVER: A deduped prospect list of {category} businesses in {city} with a verbatim complaint matching {pain_keyword} — mined from Google reviews and, when enabled, Facebook Page reviews — plus the owner's contact for a win-back pitch
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.
Turn a niche and a city into a deduped, CRM-ready list of every local business — across Google Maps and Facebook — with phones, emails, and social handles
Go from a map pin to the decision-maker, then open with a genuine hook pulled from their latest LinkedIn post, Google review, press mention, or Instagram
Reveal which local businesses get recommended for 'best X in city' across Google's AI and the community threads it cites — and which strong, well-reviewed ones stay invisible