yelp-search
Search Yelp for local businesses, get contact info, ratings, and hours. Use when finding services (cleaners, groomers, restaurants, etc.), looking up business phone numbers to text, or checking ratings before booking. Triggers on queries about finding businesses, restaurants, services, or "look up on Yelp".
What this skill does
# Yelp Search Integration Search for local businesses on Yelp to find services, get contact information, check ratings, and retrieve hours of operation. ## Setup ### 1. Yelp API Key (Required) 1. Go to https://www.yelp.com/developers 2. Create an account or sign in 3. Click "Create App" and fill out the form 4. Copy your API Key Add to your `.env` file: ``` YELP_API_KEY=your_api_key_here ``` ### 2. Browser-Use for Reviews (Optional) Only needed if you want to extract review text (slow, ~30-60s per request). **Install dependencies:** ```bash uv add browser-use playwright langchain-openai uv run playwright install chromium ``` **Add to `.env`:** ``` OPENAI_API_KEY=your_openai_key_here ``` Note: Review extraction uses browser-use to search DuckDuckGo (since Yelp blocks direct scraping). For most use cases, the rating + review_count from the API is sufficient. ## Scripts All scripts are in `tools/yelp-search/scripts/` and should be run with `uv run python`. ### search.py - Find Businesses (Primary Tool) ```bash uv run python tools/yelp-search/scripts/search.py "search term" --location "City, State" ``` **Options:** | Flag | Description | Example | |------|-------------|---------| | `--location`, `-l` | City, address, or zip | `"San Francisco"` or `"94123"` | | `--latitude/--longitude` | GPS coordinates | `--latitude 37.78 --longitude -122.41` | | `--limit`, `-n` | Number of results (default: 5) | `-n 10` | | `--sort-by` | Sort order | `rating`, `distance`, `review_count`, `best_match` | | `--price` | Price filter (1-4) | `--price 1,2` for $ and $$ only | | `--json` | Output raw JSON | | **Examples:** ```bash # Find top-rated dog groomers uv run python tools/yelp-search/scripts/search.py "dog groomer" -l "San Francisco" --sort-by rating # Find cheap restaurants nearby uv run python tools/yelp-search/scripts/search.py "restaurants" -l "94123" --price 1,2 --sort-by distance # Search near a specific address uv run python tools/yelp-search/scripts/search.py "laundry pickup" -l "123 Main St, San Francisco" ``` ### details.py - Get Business Hours & Info ```bash uv run python tools/yelp-search/scripts/details.py "business-alias" ``` The business alias is in the Yelp URL (e.g., `the-laundry-corner-san-francisco`). ### phone_search.py - Reverse Lookup ```bash uv run python tools/yelp-search/scripts/phone_search.py "+14155551234" ``` ### get_reviews.py - Extract Review Text (Slow) ```bash uv run python tools/yelp-search/scripts/get_reviews.py "Business Name" -l "City" -n 3 ``` **Note:** Uses browser-use which is slow (~30-60s). Yelp blocks direct scraping, so it searches DuckDuckGo for cached reviews as a workaround. ### scrape_reviews.py - Direct Yelp Scraping (Alternative) ```bash uv run python tools/yelp-search/scripts/scrape_reviews.py "https://www.yelp.com/biz/business-alias" -n 5 ``` **Requires Browserbase credentials:** ``` BROWSERBASE_API_KEY=your_key_here BROWSERBASE_PROJECT_ID=your_project_id ``` **Note:** Uses Browserbase with proxies to bypass Yelp's CAPTCHA. More reliable than `get_reviews.py` but requires a Browserbase account. ## Best Practices ### Evaluating Quality Without Review Text The API provides rating + review_count which is usually sufficient: | Rating | Review Count | Interpretation | |--------|--------------|----------------| | 4.5+ | 50+ | Excellent, reliable data | | 4.5+ | <20 | Promising but limited data | | 4.0-4.4 | 100+ | Good, well-established | | <4.0 | any | Proceed with caution | ### Finding Services with Specific Needs When looking for services with specific requirements (weekend hours, pickup/delivery, etc.): 1. **Search** with `--sort-by rating` to get best options 2. **Get details** on top candidates to check hours 3. **Filter** for businesses open when you need them 4. **Contact directly** to confirm specific services (pickup, delivery, etc.) since Yelp doesn't always have this info ### Search Tips - Use specific terms: `"laundry pickup"` not just `"laundry"` - Search near an address for accurate distance: `-l "123 Main St, City"` - Sort by `rating` first, then check `distance` on results - Check `review_count` - high ratings with few reviews may be unreliable ## Response Data Each business result includes: - **name** - Business name - **phone** - Phone number (use for texting/calling) - **rating** - Yelp rating (1-5 stars) - **review_count** - Number of reviews - **price** - Price level ($ to $$$$) - **location** - Full address - **hours** - Operating hours by day (in details) - **distance** - Distance from search location - **categories** - Business categories - **is_open_now** - Current open/closed status ## Limitations | Feature | Status | Notes | |---------|--------|-------| | Business search | ✅ Works | Fast, reliable | | Business details | ✅ Works | Includes hours | | Phone lookup | ✅ Works | Reverse search | | Review text (API) | ❌ Paid only | Requires enterprise tier | | Review text (scraping) | ⚠️ Slow | browser-use workaround via DuckDuckGo | - Free API tier: 500 calls/day - Results limited to 50 per request - Some business info (pickup/delivery) not in API - contact directly
Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.