All skills
facebooktwitterplaceslinkedinreddit Cross-Platform Power Plays

City Market-Entry Scan

Get a 360-degree read on one city before you expand — local chatter on Facebook and Reddit, trending hooks, competitor density, and hiring momentum — running only the lenses you choose.

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 city-market-entry-scan skill: Should I open a {niche} in {city}? Run a full market-entry scan.
Naming the skill (city-market-entry-scan) 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 city-market-entry-scan, and any agent can call get_skill(skill_id="city-market-entry-scan") directly.

What it does

Expanding into a new metro is guesswork until you layer independent lenses: what locals post on Facebook, what they discuss on Reddit, what's trending on Twitter, how saturated the map is with competitors on Google Places, and whether rivals are staffing up there on LinkedIn. Each lens resolves a different unknown, and you decide which to run via the platforms input — from a fast two-lens spot-check to the full five-lens scan.

Who it's for: Operators and franchise or expansion teams evaluating a new city

Inputs

Input Required Description Example
niche Yes Your business category boutique fitness studio
city Yes The target metro to evaluate Nashville, Tennessee, United States
platforms No Comma-separated list of platforms to run — options: facebook, twitter, places, linkedin, reddit. Omit to run all of them; name specific platforms to limit the run. facebook, places, reddit
woeid No Twitter WOEID for the metro, used to pull its local trends. Required only when 'twitter' is included in platforms. 2457170
job_window No How recent LinkedIn job posts must be when gauging hiring momentum. One of 1h, 24h, 7d, 30d. Defaults to 30d. 7d
result_depth No How many pages of Google Places results to map for competitor density. Higher = wider coverage. Defaults to 10. 20

How your agent runs it

  1. 1
    search_facebook_locations(query="{city}")

    Only run if {platforms} includes facebook: Resolve the city to a numeric location_id so the Facebook post search is geo-scoped to that metro.

  2. 2
    search_facebook_posts(query="{niche}", location_id=<location_id>, get_sentiment=true)

    Only run if {platforms} includes facebook: Read how locals actually talk about this category in-market — demand, complaints, and gaps surfaced by real residents.

  3. 3
    twitter_trends(woeid={woeid})

    Only run if {platforms} includes twitter: Pull what's trending in the metro right now to spot local events, sentiment, and hooks to localize the launch. Requires the woeid input.

  4. 4
    search_places(query="{niche} {city}", zoom=12, pages=10)

    Only run if {platforms} includes places: Map competitor density and ratings to judge saturation and find under-served pockets of the city. Set result_depth higher for wider coverage (default 10).

  5. 5
    search_linkedin_jobs(query="{niche} {city}", sort_by=most_recent, posted_ago=30d)

    Only run if {platforms} includes linkedin: Gauge whether rivals are staffing up locally; active job posts signal a growing, competitive market and reveal pay benchmarks. Tighten job_window (default 30d) for only the freshest reqs.

  6. 6
    search_reddit(query="{niche} {city}", get_sentiment=true, sort_by=relevance)

    Only run if {platforms} includes reddit: Surface organic local demand from city and niche threads — recommendation requests, complaints about incumbents, and unmet needs — a second, unprompted read on whether residents actually want this category.

Delivers: A multi-lens market-entry brief for the city — local demand sentiment (Facebook and Reddit), trending hooks, competitor saturation, and hiring momentum — limited to the lenses you selected and capped with a go / no-go recommendation.

Tools used

The full playbook

This is exactly what the MCP returns to your agent (via the city-market-entry-scan prompt or get_skill tool), with your inputs filled in.

SKILL: City Market-Entry Scan
Expanding into a new metro is guesswork until you layer independent lenses: what locals post on Facebook, what they discuss on Reddit, what's trending on Twitter, how saturated the map is with competitors on Google Places, and whether rivals are staffing up there on LinkedIn. Each lens resolves a different unknown, and you decide which to run via the platforms input — from a fast two-lens spot-check to the full five-lens scan.

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:
  - niche (required): <niche — ASK THE USER>
      Your business category
  - city (required): <city — ASK THE USER>
      The target metro to evaluate
  - platforms (optional): (optional — e.g. facebook, places, reddit)
      Comma-separated list of platforms to run — options: facebook, twitter, places, linkedin, reddit. Omit to run all of them; name specific platforms to limit the run.
  - woeid (optional): (optional — e.g. 2457170)
      Twitter WOEID for the metro, used to pull its local trends. Required only when 'twitter' is included in platforms.
  - job_window (optional): 30d (default — override if you like)
      How recent LinkedIn job posts must be when gauging hiring momentum. One of 1h, 24h, 7d, 30d. Defaults to 30d.
  - result_depth (optional): 10 (default — override if you like)
      How many pages of Google Places results to map for competitor density. Higher = wider coverage. Defaults to 10.

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_facebook_locations` — search_facebook_locations(query="{city}")
     Only run if {platforms} includes facebook: Resolve the city to a numeric location_id so the Facebook post search is geo-scoped to that metro.
  2. Tool `search_facebook_posts` — search_facebook_posts(query="{niche}", location_id=<location_id>, get_sentiment=true)
     Only run if {platforms} includes facebook: Read how locals actually talk about this category in-market — demand, complaints, and gaps surfaced by real residents.
  3. Tool `twitter_trends` — twitter_trends(woeid={woeid})
     Only run if {platforms} includes twitter: Pull what's trending in the metro right now to spot local events, sentiment, and hooks to localize the launch. Requires the woeid input.
  4. Tool `search_places` — search_places(query="{niche} {city}", zoom=12, pages=10)
     Only run if {platforms} includes places: Map competitor density and ratings to judge saturation and find under-served pockets of the city. Set result_depth higher for wider coverage (default 10).
  5. Tool `search_linkedin_jobs` — search_linkedin_jobs(query="{niche} {city}", sort_by=most_recent, posted_ago=30d)
     Only run if {platforms} includes linkedin: Gauge whether rivals are staffing up locally; active job posts signal a growing, competitive market and reveal pay benchmarks. Tighten job_window (default 30d) for only the freshest reqs.
  6. Tool `search_reddit` — search_reddit(query="{niche} {city}", get_sentiment=true, sort_by=relevance)
     Only run if {platforms} includes reddit: Surface organic local demand from city and niche threads — recommendation requests, complaints about incumbents, and unmet needs — a second, unprompted read on whether residents actually want this category.

DELIVER: A multi-lens market-entry brief for the city — local demand sentiment (Facebook and Reddit), trending hooks, competitor saturation, and hiring momentum — limited to the lenses you selected and capped with a go / no-go recommendation.

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.