Salon & Spa Lead Finder - Vagaro, Boulevard, Booksy, Fresha avatar

Salon & Spa Lead Finder - Vagaro, Boulevard, Booksy, Fresha

Pricing

from $4.00 / 1,000 base lead records

Go to Apify Store
Salon & Spa Lead Finder - Vagaro, Boulevard, Booksy, Fresha

Salon & Spa Lead Finder - Vagaro, Boulevard, Booksy, Fresha

Enriched Google Maps leads for US independent hair salons, barbershops, nail salons, day spas, med spas, and lash/brow studios. Detects booking/POS (Vagaro, Boulevard, Booksy, Fresha, GlossGenius, Phorest, Mindbody, Square). Major franchises pre-blocked.

Pricing

from $4.00 / 1,000 base lead records

Rating

0.0

(0)

Developer

Seibs.co

Seibs.co

Maintained by Community

Actor stats

1

Bookmarked

7

Total users

4

Monthly active users

8 days ago

Last modified

Share

Salon & Spa Lead Finder

TL;DR for B2B SaaS, beauty supply, and salon-tech sales reps selling INTO independent salons, spas, barbershops, and nail salons: Pulls US independent salons, spas, barbershops, nail salons, lash studios, and med-spas from Google Maps with detected booking and PMS software (Boulevard, Vagaro, Mindbody, Booker, Square Appointments, Booksy, GlossGenius, Phorest, Mangomint, Fresha). Compared to compass/crawler-google-places, you get vertical booking-software detection plus chains and franchises (Great Clips, Supercuts, Sport Clips, Massage Envy, European Wax Center, Hand and Stone, Drybar, Ulta, Sephora) pre-blocked. Free Apify plan returns about 1,000 leads per month on your $5 platform credit, then demo samples plus an upgrade message. Upgrade to Apify Starter ($49/mo) for unlimited volume.

Run it in 30 seconds

# Via the Apify Python SDK
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("seibs.co/salon-spa-lead-finder").call(run_input={
"search_terms": [
"hair salon",
"nail salon"
],
"locations": [
"Los Angeles, CA"
],
"enrichment_tier": "premium",
"max_results_per_query": 50
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

Or via curl:

curl -X POST "https://api.apify.com/v2/acts/seibs.co~salon-spa-lead-finder/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"search_terms": ["hair salon", "nail salon"], "locations": ["Los Angeles, CA"], "enrichment_tier": "premium", "max_results_per_query": 50}'

Or click "Try for free" on this page if you prefer the no-code UI.

What you get

Each run produces:

  • A clean dataset, filterable in the Apify console and downloadable as CSV or JSON
  • An OUTPUT.html dashboard preview of your top records
  • A sample-output preview at ./.actor/sample-output.json

Per-archetype custom artifacts shipped with this actor:

  • top-leads.csv (HubSpot-ready columns, sorted by confidence_score)
  • cold-email-templates.html (per-booking-software pitch with copy-to-clipboard buttons)
  • stack-breakdown.csv (booking, payments, retail POS per record)

What does Salon & Spa Lead Finder do?

Pulls Google Maps listings for US independent hair salons, barbershops, nail salons, day spas, med spas, and lash/brow studios, then enriches each record with website-derived signals: emails, social profiles, booking and POS platforms (Vagaro, Boulevard, Booksy, Fresha, GlossGenius, Phorest, Mindbody, Square), online booking embeds, owner names, year founded, and certifications. Major franchises are pre-blocked so the dataset stays focused on independent operators.

Features

  • Google Maps lead extraction across 8 salon / spa types
  • Major franchises pre-blocked
  • Three pay-as-you-go enrichment tiers (base, email, premium)
  • Booking / POS detection (Vagaro, Boulevard, Booksy, Fresha, GlossGenius, Phorest, Mindbody, Square Appointments)
  • Online booking embed detection (Calendly, Acuity, Vagaro, Mindbody, Schedulicity, etc.)
  • Role-bucketed emails (sales, support, billing, hr, executive, marketing)
  • Owner names, employee count, year founded, certifications
  • Schema.org JSON-LD parsing
  • Confidence score per record for quality filtering

What you get

Real production output from a sample run on Smooshine (Austin, Texas):

{
"name": "Smooshine",
"service_line": "hair_salon",
"address": {
"city": "Austin",
"state": "Texas",
"zip": "78705",
"lat": 30.2973862,
"lng": -97.7417076
},
"phone": "(512) 585-6919",
"website": "http://www.smooshine.com/",
"rating": 4.9,
"reviews_count": 666,
"enrichment": {
"tier": "premium",
"social": {
"instagram": "https://www.instagram.com/mastercam.austin"
},
"tech_stack": [
"fresha",
"wix",
"google_tag_manager"
],
"year_founded": 1999,
"homepage_title": "The X Team | Smooshine",
"homepage_status": 200
}
}

Preview (real production data)

Single-record snapshot from the same run, rendered as a table:

FieldValue
NameSmooshine
Service linehair_salon
LocationAustin, Texas
Phone(512) 585-6919
Websitehttp://www.smooshine.com/
Rating4.9 (666 reviews)
Tech stack detectedfresha, wix, google_tag_manager
Year founded1999
Social channelsinstagram

Pricing â€" Pay Per Event

EventPriceWhen charged
Base record$0.004Always
Email enrichment+ $0.004Email scraped from website
Premium signals+ $0.007Booking/pos (vagaro, boulevard, booksy, fresha, glossgenius, phorest, mindbody) or marketplace presence detected

Effective: $0.004 base / $0.008 with email / $0.015 fully enriched.


Use cases

Find indie salons in a metro on no detected booking platform â€" that's your no-stack outbound for Vagaro, Boulevard, Booksy. Filter by city + salon type for hyper-targeted lists.

Buyers include: Vagaro, Boulevard, Booksy, Fresha, GlossGenius, Phorest, Mindbody competitors; beauty-PE rollups; product distributors.


FAQ

Q: Is this legal? A: Yes. Every field is sourced from publicly accessible Google Maps listings and public salon / spa websites. No logged-in scraping, no booking-platform back-end access, no data the business did not publish itself.

Q: Why might a run fail or return zero records? A: The most common cause is the Apify free-plan compute / proxy credit ceiling on large premium runs. The actor soft-fails by default â€" it writes whatever was already enriched and exits cleanly rather than throwing. If a paid run errors, check the log for rate-limit or proxy-bandwidth messages.

Q: Why are Sport Clips, Great Clips, Supercuts, Massage Envy etc excluded? A: We target boutique independents and small chains because that is where the booking, POS, and marketing-SaaS TAM lives. National chains run enterprise contracts at the brand level â€" individual locations cannot adopt Vagaro / Boulevard / Booksy on their own. They are pre-blocked when exclude_chains: true.

Q: How fresh is the data? A: Live at run time. Google Maps listings reflect the current snapshot; website enrichment reflects the homepage as of scraped_at. No stale cache.

Q: Can I schedule daily or weekly runs? A: Yes. Apify Schedules can run this actor on any cron interval. Pair with a webhook to push only new salons or changed booking platforms into your CRM.

Q: Does it integrate with my CRM? A: Yes â€" via Zapier, Make, n8n, or direct webhook. Records map cleanly into HubSpot, Salesforce, Pipedrive, Clay, Apollo, and Instantly. See Integrations below.

Q: What does it cost in practice? A: $0.004 base, $0.008 with email, $0.015 fully enriched. A statewide independent-salon run typically lands in the $20-50 range.


Pair this actor with adjacent SEIB intelligence for richer beauty / wellness outbound:


Integrations

- Zapier â€" push to HubSpot/Salesforce/Pipedrive/Apollo
- Make.com (formerly Integromat) â€" workflow automation
- n8n â€" self-hosted automation
- Apify webhooks â€" POST to your endpoint
- API + dataset export (JSON/CSV/Excel/XML)
- MCP / AI agents â€" call from Claude/GPT/LangChain

Salon / spa types covered

hair_salon | barbershop | nail_salon | day_spa | med_spa | lash_brow | tanning_salon | wellness_massage


What this actor does NOT do (v1)

  • No SMTP-level email validation
  • No phone validation
  • No screenshots
  • No non-US geographies
  • No data the source business didn't make public

Example: 1,000 records across major Texas metros

{
"search_terms": ["hair salon"],
"locations": ["Austin, TX", "Dallas, TX", "Houston, TX", "San Antonio, TX", "Fort Worth, TX"],
"max_results_per_query": 100,
"enrichment_tier": "premium",
"service_lines": [],
"exclude_chains": true
}

Cost ceiling: 5 cities Ã- 100 = 500 raw records â†' 350 after chain filter â†' at $0.015 fully enriched = **$5-8 for a metro-wide independent salon / spa types list with platform stack mapped**.


Input

Configure the run from the Apify Console form or via the API. Key fields:

FieldTypeDescription
search_termsarrayGoogle Maps queries, e.g. ["hair salon", "barbershop", "nail salon"]
locationsarrayUS locations, e.g. ["Austin, TX", "78701"]
max_results_per_queryintCap per (term * location) tuple, max 500
enrichment_tierstringbase, email, or premium
service_linesarrayFilter to: hair_salon, barbershop, nail_salon, day_spa, med_spa, lash_brow, tanning_salon, wellness_massage
exclude_chainsbooleanDrop major franchises (Supercuts, Great Clips, etc.) (default true)
max_concurrent_enrichmentsintParallel website fetches, default 8

Sample input:

{
"search_terms": ["hair salon"],
"locations": ["Austin, TX"],
"max_results_per_query": 25,
"enrichment_tier": "premium",
"service_lines": ["hair_salon"],
"exclude_chains": true
}

Output

Sample output: ./.actor/sample-output.json â€" copy-paste-ready preview of real-looking records.

First record inline:

{
"place_id": "ChIJY2W0UySwQuOsMqKoImGkEiCgAe8",
"name": "Velvet Petal Salon & Spa",
"category": "Hair salon",
"vertical": "salon_spa",
"service_line": "hair_salon",
"address": {
"street": "6534 Main St",
"city": "Scottsdale",
"state": "AZ",
"zip": "85251",
"country": "US",
"lat": 33.5272,
"lng": -111.9381
},
"phone": "(480) 555-1069",
"phone_e164": "+14805550169",
"website": "https://velvetpetalsalon.com/",
"google_maps_url": "https://www.google.com/maps/place/?q=place_id:ChIJY2W0UySwQuOsMqKoImGkEiCgAe8",
"rating": 4.9,
"reviews_count": 184,
"hours": {
"mon": "8:00 AM - 6:00 PM",
"tue": "8:00 AM - 6:00 PM",
"wed": "8:00 AM - 6:00 PM",
"thu": "8:00 AM - 6:00 PM",
"fri": "8:00 AM - 5:00 PM",
"sat": "Closed",
"sun": "Closed"
},
"claimed": true,
"scraped_at": "2026-05-10T10:23:10Z",
"confidence_score": 0.62,
"enrichment": {
"tier": "premium",
"emails": [
"info@velvetpetalsalon.com",
"hello@velvetpetalsalon.com"
],
"social": {
"facebook": "https://www.facebook.com/velvetpetalsalon",
"instagram": "https://www.instagram.com/velvetpetalsalon",
"linkedin": "https://www.linkedin.com/company/velvetpetalsalon"
},
"tech_stack": [
"vagaro",
"google_tag_manager",
"boulevard_studio",
"stripe"
],
"license_numbers": [
"AZ-100960"
],
"service_area_mentions": [
"Scottsdale",
"Phoenix",
"Tempe"
],
"year_founded": 2014,
"fleet_hints": [],
"homepage_title": "Velvet Petal Salon & Spa | Scottsdale, AZ",
"homepage_status": 200,
"bbb": {
"accredited": true,
"rating": "A+"
},
"open_24_7": false,
"licensed_bonded_insured": false,
"locations_count": 2,
"spanish_speaking": false,
"linkedin_company": "https://www.linkedin.com/company/velvetpetalsalon",
"yelp_url": "https://www.yelp.com/biz/velvetpetalsalon-scottsdale",
"third_party_reviews": [],
"press_mentions": [],
"awards": [],
"team_size_hints": [
"5 team members"
],
"owner_names": [
"Maria Chen"
],
"employee_count": 8,
"role_emails": {
"executive": [
"mchen@velvetpetalsalon.com"
],
"billing": [
"billing@velvetpetalsalon.com"
],
"support": [
"support@velvetpetalsalon.com"
],
"generic": [
"info@velvetpetalsalon.com"
]
},
"financing_processors": [
"affirm",
"klarna"
],
"payment_processors": [
"stripe"
],
"hiring_signals": {
"actively_hiring": true,
"indicators": [
"careers page link",
"we're hiring banner"
]
},
"insurance_carriers_accepted": [],
"languages_offered": [],
"online_booking_platforms": [
"calendly",
"vagaro",
"boulevard_studio"
],
"customer_count_signals": {
"customers_served": 1500,
"reviews_count": 184,
"projects_completed": null,
"locations_served": null,
"raw_matches": [
"Trusted by 1500+ clients"
]
},
"chatbot_platforms": [
"intercom"
],
"email_marketing_platforms": [
"mailchimp"
],
"lead_capture_ctas": {
"has_free_quote_cta": true,
"has_get_started_cta": true,
"has_appointment_booking": true,
"has_callback_request": true,
"has_contact_form": true,
"cta_count": 3
},
"mobile_app_links": {
"has_ios_app": false,
"has_android_app": false,
"ios_app_id": null,
"android_app_id": null
},
"certifications_credentials": [
"State Cosmetology License"
],
"financing_accepted": [
"credit_card",
"cash",
"bnpl"
],
"growth_signals": {
"growth_score": 0.4,
"components": {
"hiring": 0.6,
"employee_scale": 0.4,
"multi_location": 0.5
},
"indicators_count": 2
},
"jsonld": {
"name": "Velvet Petal Salon & Spa",
"phone": "(480) 555-1069",
"email": "info@velvetpetalsalon.com",
"address": {
"street": "6534 Main St",
"city": "Scottsdale",
"region": "AZ",
"zip": "85251"
},
"opening_hours": [
"Mo-Fr 08:00-18:00"
],
"social_urls": [
"https://www.facebook.com/velvetpetalsalon",
"https://www.instagram.com/velvetpetalsalon"
],
"aggregate_rating": {
"rating": 4.9,
"count": 184
},
"employee_count": 8,
"founders": [
"Maria Chen"
]
}
}
}

Each dataset item is a single salon or spa with the structure shown above in What you get. The Apify Console renders two views: Overview for a quick scan of name, location, phone, rating, and key enrichment signals, and Detailed for every field on every record. Records can also be downloaded as CSV, JSON, Excel, or HTML from the Storage tab.

FAQ

Q: Where does the data come from? A: Public Google Maps listings plus public salon/spa website content (homepage, services, contact, about pages). No logged-in scraping.

Q: Are the emails verified? A: Format-validated and TLD-filtered, but not SMTP-verified. Pipe through NeverBounce or ZeroBounce before cold outreach.

Q: Why are some records missing enrichment fields? A: Enrichment is best-effort and depends on what the salon publishes on its public website. Use the confidence_score to filter for richer records.

Q: What is the rate limit? A: Throttled by Google Maps response time and the max_concurrent_enrichments setting (default 8). Plan ~1-2 records per second per concurrent worker.

Q: Can I include franchise locations? A: Yes, set exclude_chains: false. Default is true.

Save your input as an Apify Task

Apify Tasks let you save a configured input once and re-run it with a single click - no need to re-type search terms, locations, filters, or tier settings every time. Tasks are the foundation for everything that comes next: schedules, monitor mode, and webhook routing all attach to a saved Task, not to the raw actor.

Steps to save your current input as a Task:

  1. On this actor's Apify Store page, click Run with your input fully configured.
  2. Click the Save as task button at the top of the run page.
  3. Name the task something memorable (e.g. Salons in Brooklyn, NY - weekly).
  4. Reload the task page and click Start anytime to re-run with the same inputs.

Tasks unlock the next two features below: scheduling and monitor mode.

Run this weekly with Apify Schedules

Apify Schedules cron-run any saved Task automatically. Pair this with the saved Task above and you get hands-off recurring runs with no manual clicks, no missed weeks, and a steady stream of fresh data into your CRM or warehouse.

Steps to schedule a Task:

  1. Save your input as a Task (see above).
  2. Go to https://console.apify.com/schedules and click Create new schedule.
  3. Pick your Task and set the cron expression. Common patterns:
    • Daily at 9am UTC: 0 9 * * *
    • Weekly on Mondays at 9am: 0 9 * * 1
    • Monthly on the 1st: 0 9 1 * *
  4. Save. Apify will run your Task on that schedule automatically, push the dataset to whatever integrations you have wired up, and fire run-completion webhooks for downstream automation.

Run weekly to keep your prospect list fresh and catch newly-opened salons and spas in your service area.

Monitor mode (v2, beta)

Monitor mode is the v2 evolution of this actor and is currently in BETA. It turns a recurring schedule into a true change-feed instead of a firehose of duplicate records.

How it works:

  • When this actor runs under an Apify Schedule, monitor mode is enabled automatically.
  • Instead of emitting ALL records every run, it emits ONLY records that are NEW or CHANGED since the last scheduled run.
  • A digest record summarizes the delta (X new, Y changed, Z removed) at the top of every run.
  • Optional: provide a Slack or email webhook URL in the monitor_webhook_url input field and the digest fires there too, so your team gets the delta in their inbox or channel without polling the dataset.
  • Cost: a single scheduled_delta_run event ($0.05) per scheduled run, plus standard PPE on emitted delta records only. Predictable monthly cost, no surprise bills from re-charging for unchanged records.

Monitor mode is rolling out to the top 3 actors first (this one included if it's hotel-motel-lead-finder, google-maps-reviews-pro, or mcp-accounting-firm-leads). Full portfolio coverage by end of June.

Support

Open an issue on this actor's GitHub or reach out via the Apify support page.


More from the SEIB portfolio

Same data engine, different vertical â€" pick the one that matches your buyer:

All 12 actors share the same Pay-Per-Event pricing ($0.004 base / $0.008 with email / $0.015 with premium signals) and output schema. Mix-and-match across verticals without translation logic. Built by Seibs Management LLC.

Found this useful?

If this actor saved you time or money, please consider leaving a quick review on the Apify Store. Reviews help other buyers find work that solves their problem and let me prioritize the features paying customers actually use. Leave a review: https://apify.com/seibs.co/salon-spa-lead-finder#reviews