Harvest fragmented local operators across Google, Facebook, LinkedIn and news — with owner contacts plus live sale and succession signals — for acquisition outreach.
https://apidirect.io/mcp?token=YOUR_API_KEY
Use the pe-roll-up-target-finder skill: Build me an acquisition list of {vertical} in {metro} with owner contact details.
pe-roll-up-target-finder) 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
pe-roll-up-target-finder, and any agent can call
get_skill(skill_id="pe-roll-up-target-finder") directly.
Maps every operator in a fragmented local vertical across Google Maps and, optionally, Facebook; qualifies them as real established businesses via reviews and LinkedIn company size; scrapes owner contacts; and flags sale/retirement/distress signals from news — producing a ranked, ready acquisition pipeline you control by platform.
Who it's for: Search funds, PE roll-ups and acquisition entrepreneurs.
| Input | Required | Description | Example |
|---|---|---|---|
vertical |
Yes | The local business category to roll up. | HVAC contractors |
metro |
Yes | The metro/area to target. | Phoenix, AZ |
platforms |
No | Comma-separated list of platforms to run — options: places, facebook, news, linkedin. Omit to run all of them; name specific platforms to limit the run. | facebook, news, linkedin |
search_depth |
No | How many result pages to pull when discovering operators (maps to the pages param on search_places and search_facebook_pages). Higher = more targets, slower. | 20 |
country |
No | Two-letter country code to scope Places, place details, and news results to the right market. | us |
news_window |
No | How far back to scan for sale/retirement/distress signals (maps to search_news time_published; allowed values 1h, 1d, 7d, 1y, anytime). Use a wider window for slow-moving succession news. | 1y |
search_places(query="{vertical} {metro}", pages=20)
Core, always runs. Pull up to ~200 operators (default pages=20). Keep business_status=OPERATIONAL with a real review_count to filter out shells and dead listings.
place_details(place_id=<place_id>)
Core, always runs. Read emails_and_contacts (emails, phones, socials) and owner_name/owner_link for each target — this is the contact backbone of the acquisition list.
place_reviews(place_id=<place_id>, sort_by=lowest_ranking, get_sentiment=true)
Optional analysis (Places). Skim the worst reviews to judge operational quality, owner fatigue, and succession risk — strong tells that an owner may be ready to exit.
search_facebook_pages(query="{vertical} {metro}", pages=20)
Only run if {platforms} includes facebook: discover additional local operators with Facebook pages that are thin or absent on Google Maps, then merge into the same target list and dedupe against the Places results by name. (For full phone/website, follow up per page with facebook_page_details if needed.)
search_news(query="<business_name> for sale OR owner retiring OR acquired OR closing", time_published=1y)
Only run if {platforms} includes news: scan recent local news for each top target for explicit sale, retirement, succession, or distress signals (default news_window=1y). Use hits to rank targets by seller readiness, not just contactability.
search_linkedin_companies(query="<business_name>", page=1)
Only run if {platforms} includes linkedin: confirm the operator is a real, established company and read its size to qualify roll-up fit (skip one-person gigs), and use the company page as a route to the named owner/decision-maker. (Pull linkedin_company_details on the matched company if employee_count is not present in search results.)
search_places
place_details
place_reviews
search_facebook_pages
search_news
search_linkedin_companies
This is exactly what the MCP returns to your agent (via the pe-roll-up-target-finder prompt or get_skill tool), with your inputs filled in.
SKILL: PE Roll-Up Target Finder
Maps every operator in a fragmented local vertical across Google Maps and, optionally, Facebook; qualifies them as real established businesses via reviews and LinkedIn company size; scrapes owner contacts; and flags sale/retirement/distress signals from news — producing a ranked, ready acquisition pipeline you control by platform.
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:
- vertical (required): <vertical — ASK THE USER>
The local business category to roll up.
- metro (required): <metro — ASK THE USER>
The metro/area to target.
- platforms (optional): (optional — e.g. facebook, news, linkedin)
Comma-separated list of platforms to run — options: places, facebook, news, linkedin. Omit to run all of them; name specific platforms to limit the run.
- search_depth (optional): 20 (default — override if you like)
How many result pages to pull when discovering operators (maps to the pages param on search_places and search_facebook_pages). Higher = more targets, slower.
- country (optional): (optional — e.g. us)
Two-letter country code to scope Places, place details, and news results to the right market.
- news_window (optional): 1y (default — override if you like)
How far back to scan for sale/retirement/distress signals (maps to search_news time_published; allowed values 1h, 1d, 7d, 1y, anytime). Use a wider window for slow-moving succession news.
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="{vertical} {metro}", pages=20)
Core, always runs. Pull up to ~200 operators (default pages=20). Keep business_status=OPERATIONAL with a real review_count to filter out shells and dead listings.
2. Tool `place_details` — place_details(place_id=<place_id>)
Core, always runs. Read emails_and_contacts (emails, phones, socials) and owner_name/owner_link for each target — this is the contact backbone of the acquisition list.
3. Tool `place_reviews` — place_reviews(place_id=<place_id>, sort_by=lowest_ranking, get_sentiment=true)
Optional analysis (Places). Skim the worst reviews to judge operational quality, owner fatigue, and succession risk — strong tells that an owner may be ready to exit.
4. Tool `search_facebook_pages` — search_facebook_pages(query="{vertical} {metro}", pages=20)
Only run if {platforms} includes facebook: discover additional local operators with Facebook pages that are thin or absent on Google Maps, then merge into the same target list and dedupe against the Places results by name. (For full phone/website, follow up per page with facebook_page_details if needed.)
5. Tool `search_news` — search_news(query="<business_name> for sale OR owner retiring OR acquired OR closing", time_published=1y)
Only run if {platforms} includes news: scan recent local news for each top target for explicit sale, retirement, succession, or distress signals (default news_window=1y). Use hits to rank targets by seller readiness, not just contactability.
6. Tool `search_linkedin_companies` — search_linkedin_companies(query="<business_name>", page=1)
Only run if {platforms} includes linkedin: confirm the operator is a real, established company and read its size to qualify roll-up fit (skip one-person gigs), and use the company page as a route to the named owner/decision-maker. (Pull linkedin_company_details on the matched company if employee_count is not present in search results.)
DELIVER: A CRM-ready table — business, owner, email, phone, rating, review count, plus a sale/succession-signal flag and (optional) LinkedIn company size — ranked by acquisition attractiveness and seller readiness.
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.
Find startups hiring their first GTM/finance exec — then confirm the raise across news and X.
Surface founders announcing launches across LinkedIn, X, and Reddit — filtered to founders, then graded for conviction and traction.
Find established local businesses with proven demand but failing management — the owner's direct line, plus cross-platform proof the reputation is broken