# 🏋️ Gym & Fitness Studio Leads Scraper - Emails & Phones (`renzomacar/gym-fitness-leads-scraper`) Actor

Turn any city into a list of gym leads: gyms, CrossFit boxes, yoga and pilates studios with phone, website, emails and social profiles extracted live from each studio's site. Perfect for fitness software, equipment vendors and marketing agencies. $8 per 1,000 leads.

- **URL**: https://apify.com/renzomacar/gym-fitness-leads-scraper.md
- **Developed by:** [Renzo Madueno](https://apify.com/renzomacar) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.44 / 1,000 leads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 🏋️ Gym & Fitness Studio Leads Scraper — Emails & Phones

The fitness industry churns like no other: boutique studios open, rebrand and close constantly, which is exactly why bought "gym email lists" bounce so hard. This Actor builds your list **live** — type a city, get every gym, CrossFit box, yoga, pilates and spin studio with phone, website, **emails and social profiles extracted from each studio's own site**, at $8 per 1,000 leads.

### The fields you get on every studio

- **Identity** — `name`, `category`, full `address` plus parsed `city` / `country`, `latitude` / `longitude`
- **Contact** — `phone` (front desk), `email` + `emails[]` from the studio's website, `websitePhones[]` (extra numbers found on the site), `contactPageUrl`
- **Social** — `socialProfiles.instagram` (the channel that matters in fitness), plus Facebook, LinkedIn, Twitter
- **Qualification** — `rating` and `reviewsCount` (size/health proxy), `priceLevel`, `techStack[]` (Mindbody? Wix? WordPress?), `placeUrl` for manual checks
- **Traceability** — `searchQuery` that found it, `scrapedAt` timestamp

### Three ways teams use it

**1. Fitness SaaS & booking platforms.** Gym management software, class booking apps, member apps: pull every studio in a target metro, filter by `reviewsCount` to size them, and hand your sales team a qualified territory list with direct emails.

**2. Equipment, supplements & B2B services.** Flooring, rigs, recovery tech, insurance, cleaning: the `category` field separates CrossFit boxes from yoga studios so each rep pitches the right product.

**3. Marketing agencies for fitness brands.** Prospect boutique studios whose `techStack` shows no analytics or an aging site — then reference their actual Instagram (already in the lead) in your first line.

### Getting started

Minimal input — just a city:

```json
{ "location": "Austin, TX" }
```

Targeted input:

```json
{
  "location": "Austin, TX",
  "keywords": ["crossfit gym", "yoga studio"],
  "maxResults": 80,
  "maxPagesPerSite": 2
}
```

Leave `keywords` empty to sweep all common facility types (gym, fitness studio, crossfit, yoga, pilates, personal trainer) in one run. Power users can pass raw `searchQueries` like `["boxing gym in Brooklyn, NY"]` to cover multiple cities at once. Export CSV/Excel/JSON from the dataset, or pipe into Instantly / Smartlead / your CRM through the Apify API.

### What it costs

**$0.008 per studio delivered** ($8 per 1,000) plus a $0.01 start fee per run. No subscription, no seats, no credits that expire. A full sweep of a mid-size city — usually 200–500 fitness businesses — runs about $2–4.

### FAQ

**Why not just buy a fitness industry email list?**
Static lists in this vertical decay within months — studios close, franchises change hands, emails die. This Actor reads the live map and the live websites at the moment you run it.

**Does it find the owner's email or just info@?**
Whatever the studio publishes: often info@/hello@, sometimes a named owner or manager address. Set `includeGenericEmails: false` to keep only non-generic addresses (you'll get fewer emails). Boutique studios are small businesses — info@ usually *is* the owner.

**Can I separate big-box gyms from boutique studios?**
Roughly, yes: chains (Planet Fitness, Gold's) carry recognizable names and very high `reviewsCount`; boutiques sit lower. Filter downstream on name and review count.

**Instagram matters more than email in fitness. Do I get it?**
Yes — `socialProfiles.instagram` is captured whenever the studio links it from their website, so you can run DM outreach alongside email.

**How many studios can one run return?**
Up to ~120 per search query. Six default keywords × one city ≈ several hundred candidates before deduplication; add more cities via `searchQueries` for thousands.

**Do martial arts schools, dance studios or climbing gyms work?**
Yes — put any facility type into `keywords` ("martial arts school", "climbing gym", "dance studio"). The engine is keyword-driven, not hard-coded.

**Is this compliant?**
It collects public business listings and contact details studios publish on their own sites, precisely so they can be contacted. How you use the list is on you: follow CAN-SPAM / GDPR rules for outreach and honor unsubscribes.

**What if my niche keyword returns zero studios?**
The run still succeeds (you pay only the $0.01 start fee). Try the broader term — "gym" instead of "hyrox training facility" — or a larger metro.

### More from this author

- [B2B Leads Finder](https://apify.com/renzomacar/b2b-leads-finder) — the general-purpose version for any industry.
- [Website Contact Finder](https://apify.com/renzomacar/website-contact-finder) — bulk-extract contacts from URLs you already have.
- [Email Verifier](https://apify.com/renzomacar/email-verifier) — cut bounces before your campaign.

### CrossFit boxes, martial arts schools and climbing gyms

"Gym" as a search term returns big-box chains and 24-hour access clubs — the ones least likely to have an owner who answers email. The independent segments that actually buy things are reached one query at a time:

```
crossfit gym in Charlotte, NC
functional fitness gym in Charlotte, NC
brazilian jiu jitsu academy in Charlotte, NC
martial arts school in Concord, NC
climbing gym in Charlotte, NC
swim school in Matthews, NC
```

Each line runs as its own Maps search and studios appearing in more than one are merged, so a facility listing itself as both a CrossFit box and a functional fitness gym is delivered once and billed once.

These are single-location, owner-operated businesses. The person whose email you find on the site is usually the person who signs the cheque — which is not true of the chain clubs sitting at the top of a generic "gym" search.

### Boutique studios: yoga, pilates, barre, recovery

```
yoga studio in Portland, OR
pilates studio in Portland, OR
barre studio in Beaverton, OR
cryotherapy and recovery studio in Portland, OR
personal training studio in Lake Oswego, OR
```

Boutique fitness has the highest Instagram density of any vertical in this fleet: `socialProfiles.instagram` is captured from the studio's own site and is populated far more often than LinkedIn. If your outreach is a DM rather than a cold email, that is the column to sort on.

`reviewsCount` separates a studio with a full schedule from one that opened three months ago. Under roughly 25 reviews, you are usually talking to a founder still teaching every class herself.

### What one run costs, in real numbers

Billing is per delivered row, so cost is predictable before you press start:

| Run | Charge |
|---|---|
| Start (2 GB) | $0.02 |
| 100 studios | $0.80 |
| 500 studios | $4.00 |
| 1,000 studios | $8.00 |

Rows dropped by `onlyWithWebsite` are never charged, and a studio found under three different search terms is charged once. There is no subscription, no seat, no credit that expires at the end of the month — a metro sweep you run twice a year costs you twice.

# Actor input Schema

## `location` (type: `string`):

City, region or country to search in, e.g. 'Austin, TX', 'San Diego, CA', 'London, UK'.

## `keywords` (type: `array`):

Which fitness business types to search for, one per line. Good options: 'gym', 'fitness studio', 'crossfit gym', 'yoga studio', 'pilates studio', 'personal trainer', 'boxing gym', 'martial arts school', 'spin studio'. Leave empty to search all common facility types at once.

## `searchQueries` (type: `array`):

Full searches, one per line (e.g. 'gym in Austin, TX'). When set, these override Location + facility types. Use several queries to cover multiple cities in one run.

## `maxResults` (type: `integer`):

Maximum number of companies to find per search. One search typically yields up to ~120 companies.

## `maxPagesPerSite` (type: `integer`):

How many pages to check on each company website when hunting for emails (homepage, /contact, /about...). More pages = more emails found, slightly slower run.

## `onlyWithWebsite` (type: `boolean`):

Drop companies that have no website (they can never have an email). You are not charged for dropped companies.

## `includeGenericEmails` (type: `boolean`):

Keep every published address, including shared inboxes like info@, hello@ and contact@. Disable to drop only non-deliverable system addresses (noreply@, no-reply@, donotreply@, mailer-daemon@, postmaster@, webmaster@, hostmaster@, abuse@).

## `language` (type: `string`):

Language code for the discovery search (e.g. 'en', 'es', 'fr', 'de').

## Actor input object example

```json
{
  "location": "Austin, TX",
  "keywords": [
    "gym"
  ],
  "maxResults": 5,
  "maxPagesPerSite": 1,
  "onlyWithWebsite": false,
  "includeGenericEmails": true,
  "language": "en"
}
```

# Actor output Schema

## `leads` (type: `string`):

Gym & Fitness Studio Leads Scraper results (business, website, phone, address, emails, social profiles), one item per lead in the default dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "location": "Austin, TX",
    "keywords": [
        "gym"
    ],
    "maxResults": 5,
    "maxPagesPerSite": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("renzomacar/gym-fitness-leads-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "location": "Austin, TX",
    "keywords": ["gym"],
    "maxResults": 5,
    "maxPagesPerSite": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("renzomacar/gym-fitness-leads-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "location": "Austin, TX",
  "keywords": [
    "gym"
  ],
  "maxResults": 5,
  "maxPagesPerSite": 1
}' |
apify call renzomacar/gym-fitness-leads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,renzomacar/gym-fitness-leads-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/ngnXyesaCyzOUM05s/builds/yecBC7GEpgCa5I0Iv/openapi.json
