skills/sales-outscraper/SKILL.md
Outscraper platform help — data extraction platform that scrapes Google Maps, reviews, and 50+ sources plus an instant Business Catalog database. Use when Google Maps scraping isn't returning enough businesses, reviews aren't extracting correctly, email/contact scraping misses results, company enrichment data is incomplete, email validation flags too many false positives, or the Outscraper API isn't working as expected. Do NOT use for general prospect list strategy (use /sales-prospect-list), cross-platform enrichment strategy (use /sales-enrich), or email deliverability strategy (use /sales-deliverability).
npx skillsauth add sales-skills/sales sales-outscraperInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Help the user with Outscraper platform questions — from Google Maps scraping and reviews extraction through email/contact scraping, lead enrichment, company insights, email validation, Amazon scraping, review platform scraping, geocoding, and API integration. Outscraper is a data extraction and enrichment platform that scrapes Google Maps, reviews, and 50+ internet sources. Founded in 2018 by Vlad May and Vlad Romanov, based in Bee Cave, TX. Used by 180K+ businesses.
If references/learnings.md exists, read it first for accumulated knowledge.
Ask the user:
What area of Outscraper do you need help with?
What's your role?
What are you trying to accomplish? (describe your specific goal or question)
If the user's request already provides most of this context, skip directly to the relevant step. Lead with your best-effort answer using reasonable assumptions (stated explicitly), then ask only the most critical 1-2 clarifying questions at the end — don't gate your response behind gathering complete context.
Note: If the user needs a specialized skill, route them there with a brief explanation of why that skill is a better fit.
If the request maps to a specialized skill, route:
/sales-prospect-list/sales-enrich/sales-deliverability/sales-integration/sales-apollo/sales-hunter/sales-prospeo/sales-seamless/sales-tombaOtherwise, answer directly from platform knowledge using the reference below.
Read references/platform-guide.md for detailed module documentation, pricing, integrations, and data model.
You no longer need the platform guide details — focus on the user's specific situation.
Based on the user's specific question:
Scraping Google Maps businesses for a target market:
GET /google-maps-search with your query array (up to 25 queries per request)limit parameter to control how many results per query (default 20, max 500)Extracting and analyzing Google Maps reviews:
GET /maps/reviews-v3 with place_ids, set sort (newest, most_relevant, highest_rating, lowest_rating)cutoff parameter to only get reviews after a specific date — useful for ongoing monitoringreviewsLimit to cap reviews per place (controls cost for businesses with thousands of reviews)Building a lead list with emails and contacts:
GET /emails-and-contacts to scrape email addresses from company websitesGET /contacts-and-leads with company names or domains to find up to 3 contacts per company with names, titles, emails, and phone numbersGET /email-validator before outreach — remove invalid and risky addressesGET /company-insights for firmographics, tech stack, and social profiles to prioritize leads by ICP fitSetting up webhook callbacks for async results:
GET /requests/{id}, add the webhook parameter with your callback URLBuilding a lead list from the Business Catalog:
POST /businesses-free (API key) for testing or small lists up to 1,000 results, or POST /businesses (OAuth2) for full production accesscountry_code, states/cities/postal_codes for geography, types for business category (e.g. ["restaurant", "cafe"]), rating (e.g. "4.0+"), has_website: true, has_phone: true to ensure contactable businessescontacts_n_leads with contacts_per_company and emails_per_contact to get decision-maker emails, plus company_insights for firmographicsfields array to return only the columns you need — reduces response size and speeds up processingcursor — each response includes next_cursor and has_more. Loop until has_more is falseGET /email-validator on the scraping API before outreachUsing the Python SDK:
pip install outscraperfrom outscraper import ApiClient; client = ApiClient(api_key='YOUR_KEY')results = client.google_maps_search('restaurants, NYC', limit=100)reviews = client.google_maps_reviews('place_id_here', reviews_limit=50, sort='newest')results = client.emails_validator(['[email protected]'])Best-effort from research — review these, especially items about plan-gated features and integration gotchas that may be outdated.
GET /requests/{id} until the status is complete, or use the webhook parameter to receive results via callback. The Python SDK handles polling automatically, but raw API users need to implement this themselves./contacts-and-leads endpoint finds emails but does not verify deliverability. Always run found emails through /email-validator before outreach to avoid bounces and protect your sender reputation.reviewsLimit parameter, you could extract (and pay for) all of them. Always set a sensible limit unless you specifically need the full review history.references/learnings.md with today's date./sales-prospect-list — Build and refine prospect lists using data from Outscraper and other sources/sales-enrich — Cross-platform datan enrichment strategy (combine Outscraper with other enrichment tools)/sales-deliverability — Email deliverability and verification strategy (beyond Outscraper's email validation)/sales-integration — Connect Outscraper to CRM, automation, or other tools/sales-do — Not sure which skill to use? The router matches any sales objective to the right skill. Install: npx skills add sales-skills/sales --skill sales-doUser says: "I need to build a list of all HVAC companies in the Dallas-Fort Worth metro area with their contact info and ratings." Skill does:
GET /google-maps-search with batched queries (up to 25 per request), limit=500 per queryGET /emails-and-contacts on extracted websites to find email addresses for outreachGET /email-validator to remove invalid addresses before loading into CRM
Result: User has a comprehensive, deduplicated list of HVAC companies across DFW with verified contact info, ratings, and review counts — ready for CRM import and sales outreachUser says: "I want to monitor what customers are saying about our top 3 competitors on Google Maps, Yelp, and Trustpilot." Skill does:
GET /maps/reviews-v3 for Google Maps reviews, GET /yelp/reviews for Yelp reviews, GET /trustpilot/reviews for Trustpilot reviewssort=newest and cutoff date parameter to only pull recent reviews (e.g., last 90 days), controlling both relevance and costreviewsLimit=100 per business per platform to keep volumes manageableUser says: "I have a list of 200 company domains. I need to enrich them with employee count, industry, tech stack, and find decision-maker contacts." Skill does:
GET /company-insights — 8 batched API calls totalGET /contacts-and-leads using the same domains — returns up to 3 contacts per company with names, titles, emails, phones, and LinkedIn profilesGET /email-validator — flags invalid and risky addresses for removalSymptom: A query like "restaurants, New York" returns only 100–200 results when you expected thousands. Cause: Google Maps limits the number of results shown for any given search query, and Outscraper is capped at 500 results per query. Broad queries in dense areas will hit this ceiling and miss many businesses. Solution: Break your search into smaller, more specific geographic queries. Instead of "restaurants, New York", search by neighborhood or zip code: "restaurants, 10001", "restaurants, 10002", etc. Batch up to 25 of these queries per API request. Deduplicate the combined results using place_id as the unique identifier. For very large scraping projects, consider programmatically generating queries from a list of zip codes or neighborhood names to ensure full coverage.
Symptom: You submitted a request and received a request ID, but polling GET /requests/{id} keeps returning a "processing" status, or the task shows as complete but results are empty.
Cause: Large requests (many queries or high review limits) can take significant time to process. Empty results may indicate invalid inputs (wrong place_ids, unreachable domains) or the target data genuinely not existing (e.g., a business with no reviews).
Solution: For long-running tasks, use the webhook parameter instead of polling — you'll receive a POST callback when results are ready. Check your input data for validity: ensure place_ids are correct, URLs are accessible, and domains resolve. If using the Python SDK, increase the timeout or use async mode. For persistently stuck requests, check the Outscraper status page or contact support. Note that very large requests may be split into sub-tasks internally.
Symptom: A high percentage of emails come back as "risky" rather than "valid" or "invalid" after running through /email-validator.
Cause: "Risky" typically means the mail server accepts all addresses (catch-all domain) or the SMTP check was inconclusive. Many corporate domains configure catch-all to accept mail at any address, making it impossible to confirm whether a specific mailbox exists. This is common with large enterprise domains.
Solution: "Risky" emails are not necessarily bad — many are deliverable. For catch-all domains, the email format may still be correct even though it cannot be verified at the SMTP level. Consider sending to risky emails with caution: include them in your outreach but monitor bounce rates closely. If bounce rates from risky addresses exceed 5%, remove them. For critical outreach, supplement Outscraper validation with a secondary validation service that uses additional signals like historical send data or social profile matching.
tools
Waitlister platform help — pre-launch waitlist platform with hosted landing pages, points-based viral referrals, built-in email broadcasts, REST API, and five HMAC-signed webhook events. Use when choosing Free (100 subscribers) vs Launch $15/mo (unlimited subs, referrals + broadcasts) vs Growth $49/mo (API, webhooks, Klaviyo/Mailchimp/Kit sync, fraud detection unlock here) vs Business $129/mo, building a webhook handler that verifies X-Webhook-Signature, webhooks auto-disabled after 10 consecutive failures, API signups bypassing referral fraud detection because client_ip/fingerprint weren't forwarded, granting bonus points or pulling top referrers via the API for reward fulfillment, broadcast send caps forcing an ESP handoff, automating without Zapier (Waitlister has none — webhooks/API only), or comparing Waitlister vs LaunchList/KickoffLabs/GetWaitlist/Prefinery. Do NOT use for list-growth strategy (use /sales-audience-growth) or LaunchList help (use /sales-launchlist).
development
LaunchList platform help — viral pre-launch waitlist platform with one-time lifetime pricing, gamified referrals (queue jumping, leaderboard, position inflation), embed widget + custom form POST endpoint, new_user/email_verify webhooks, Zapier, and spam protection. Use when choosing Free (100 submissions) vs Launch $29 (500) vs Grow $79 one-time (10K — webhooks, Zapier, team unlock here), wiring waitlist signups into Mailchimp/Kit/HubSpot or a CRM because LaunchList has no email broadcast system, needing programmatic access when there is no public REST API yet (form POST + webhook workaround), building a webhook handler with referred_by referral attribution, blocking disposable-email or bot signups on a viral waitlist, a custom signup form not submitting or not tracking referrals, or comparing LaunchList vs KickoffLabs/Viral Loops/Prefinery/GetWaitlist on one-time vs subscription pricing. Do NOT use for list-growth strategy (use /sales-audience-growth) or KickoffLabs help (use /sales-kickofflabs).
development
UpViral platform help — viral referral marketing and list-building platform (by Emarky) for viral sweepstakes, giveaway/reward campaigns, pre-launch waiting lists, and milestone referrals, with REST API (`app.upviral.com/api/v1/`, form-encoded `uvapikey` + `uvmethod`), Callback-URL webhooks, IP-based fraud detection, and 30+ ESP/CRM integrations. Use when campaigns aren't tracking referral points, deciding between Starter $79/mo (10K leads, NO API) vs Business $119/mo (API + webhooks) vs Premium $319/mo, the API erroring because you're on Starter where API/webhooks are gated, building a pipeline with `add_contact`/`get_leads`/`get_leads_points`, interpreting same-IP suspicious-referral flags, or picking UpViral over Viral Loops/Vyper/Gleam. Do NOT use for newsletter audience growth (use /sales-audience-growth), KickoffLabs help (use /sales-kickofflabs), merge-tag referrals (use /sales-referralkit), SparkLoop recommendations (use /sales-sparkloop), or multi-level Level 1/2/3 tracking (use /sales-referralhero).
tools
ReferralHero platform help — full-stack referral, affiliate, waitlist, contest, and NPS platform with REST API, webhooks, Zapier, native ESP connectors, multi-level referral tracking (Level 1/2/3), coupon groups, anti-fraud, and a 5,000 calls/hour limit. Use when referrals aren't tracking, deciding between Free (no API) vs PRO $199/mo (API + webhooks) vs PREMIUM $399/mo (ReCaptcha + SMS Verification), auth failing with `no_token` or `Bearer` vs `X-API-Key`, Level 2/3 counts off from calling `level_2_all_referrals` not `level_2_referrals`, bulk 429s from not chunking the 500-transaction `add_bulk_transactions` limit, coupon endpoints 404 without a coupon group, reward fulfillment (`promote` then `unlock_promoted_reward`) failing, or comparing to SparkLoop/ReferralKit/GrowSurf. Do NOT use for newsletter audience growth (use /sales-audience-growth), merge-tag referrals (use /sales-referralkit), SparkLoop recommendations (use /sales-sparkloop), or affiliate strategy across tools (use /sales-affiliate-program).