All skills
placesfacebooknewslinkedin Investing & Deal Sourcing

PE Roll-Up Target Finder

Harvest fragmented local operators across Google, Facebook, LinkedIn and news — with owner contacts plus live sale and succession signals — for acquisition outreach.

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 pe-roll-up-target-finder skill: Build me an acquisition list of {vertical} in {metro} with owner contact details.
Naming the skill (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.

What it does

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.

Inputs

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

How your agent runs it

  1. 1
    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. 2
    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. 3
    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. 4
    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. 5
    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. 6
    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.)

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

Tools used

The full playbook

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.