# USA Swimming Clubs · Emails & Phones by State (`corent1robert/usa-swimming-clubs-scraper`) Actor

Export USA Swimming club contacts from the public Find a Team directory. Name, email, phone, website, city and state — one row per club. Public listing. No login. No API key.

- **URL**: https://apify.com/corent1robert/usa-swimming-clubs-scraper.md
- **Developed by:** [Corentin Robert](https://apify.com/corent1robert) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 club rows

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

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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

## USA Swimming Clubs · Emails & Phones by State

Export **USA Swimming club contacts** from the public [Find a Team](https://www.usaswimming.org/home/find-a-team) directory. Pick a state (or nationwide) and get **one row per club**: name, published email, phone, website, city, ZIP and pool address.

**No login. No API key. No USA Swimming account.**

### Who is this for?

| You are… | Typical goal | Suggested setup |
|----------|--------------|-----------------|
| Swimwear, timing or pool-equipment brand | Prospect list of competitive clubs | Florida or Texas first, then **All states** |
| League / team-management SaaS | Clubs that can buy software | One large state + Outreach CRM view |
| Insurer or Safe Sport vendor | Territory map of recognized clubs | Filter later on `safeSportRecognized` |
| Agency / outbound | CRM feed with email and phone | **Only rows with email or phone** on |
| Data / ops | Scheduled master table | `states: ["ALL"]`, `maxItems: 0` on a paid plan |

**What you get by default.** Club name, city, state, finder URL and, when the directory published them, contact name, email, phone, website, Club Excellence level and Safe Sport flag. This Actor never invents a mailbox.

**Facilities vs clubs.** Find a Team lists pools. The export **deduplicates to one row per club**, keeping the listing with the best published contacts.

### How to use

1. Open the Actor in [Apify Console](https://console.apify.com).
2. Keep **USA Swimming clubs** unless you want Learn to Swim providers.
3. Pick one or more **states**, or **All states**.
4. Keep **Max clubs** at 20 for a first run (Free plan is always 20 per run). Set **0** on a paid plan for a full export of the selection.
5. Click **Start**.

### Ready-made examples (published tasks)

| Example | Best for |
|---------|----------|
| [Find Florida USA Swimming clubs with emails](https://apify.com/corent1robert/usa-swimming-clubs-scraper/examples/florida-swim-club-emails) | First run / high-volume state |
| [Texas swim club phones and websites for CRM](https://apify.com/corent1robert/usa-swimming-clubs-scraper/examples/texas-swim-club-contacts) | CRM import |
| [California USA Swimming clubs, outreach sheet](https://apify.com/corent1robert/usa-swimming-clubs-scraper/examples/california-swim-clubs-crm) | West Coast outbound |
| [Nationwide USA Swimming sample (20 clubs)](https://apify.com/corent1robert/usa-swimming-clubs-scraper/examples/nationwide-usa-swimming-sample) | Try the full map without a huge run |

### What it extracts

| Category | Fields |
|----------|--------|
| Identity | Club name, club key, listing key, finder kind |
| Location | City, state, ZIP, street, GPS, facility name |
| Contact | Contact name, email and phone when published |
| Web | Club website when published |
| Quality | Club size, Club Excellence level, Safe Sport recognized |
| Finder | Link to the public Find a Team card |

### Typical coverage

On a nationwide clubs export the public directory lists about **2,500 unique clubs**. Almost every club card publishes an email and a phone. Empty fields mean the club did not publish that value — they are not guessed.

### Input

| Field | Type | Default | Notes |
|-------|------|---------|--------|
| `finderType` | string | `clubs` | `clubs`, `lessons`, or `both` |
| `states` | array | `["FL"]` | State codes, or `ALL` for nationwide. Omitted = Florida. |
| `onlyWithContact` | boolean | `false` | Skip clubs with no published email or phone. Console Try prefills **on**. |
| `maxItems` | integer | `20` | **0** = no row ceiling. **Free plan: 20 / run.** |

#### Examples

Florida (Try):

```json
{ "finderType": "clubs", "states": ["FL"], "onlyWithContact": true, "maxItems": 20 }
```

Nationwide, paid plan, no row ceiling:

```json
{ "finderType": "clubs", "states": ["ALL"], "maxItems": 0 }
```

### Output sample

Download in JSON, CSV, Excel, or HTML from the Dataset tab.

```json
{
  "clubKey": "5551",
  "listingKey": "5884519088554135782",
  "structureName": "Nation's Capital Swim Club",
  "facilityName": "Claude Moore",
  "finderKind": "USA Swimming Club",
  "contactName": "Thomas Ugast",
  "contactEmail": "tugast@nationscapitalswimming.com",
  "contactPhone": "(703) 709-8274",
  "website": "http://www.ncapswim.com",
  "address": "46105 Loudoun Park Ln",
  "city": "Sterling",
  "stateCode": "VA",
  "postalCode": "20164",
  "latitude": 39,
  "longitude": -77.4,
  "clubSize": 1970,
  "clubExcellenceLevel": "Gold",
  "safeSportRecognized": true,
  "url": "https://www.usaswimming.org/home/find-a-team?findATeamKey=5884519088554135782"
}
```

### How much does it cost to scrape USA Swimming clubs?

HTTP-only (no browser). Pay-per-event on each exported club, plus a ~$0.00005 start. Compute on 512 MB is typically cents.

| | Free | Bronze | Silver | Gold | Platinum | Diamond |
|---|---|---|---|---|---|---|
| Club with email | $0.00399 | $0.00349 | $0.00299 | $0.00249 | $0.00249 | $0.00249 |
| Club with phone only | $0.00249 | $0.00219 | $0.00189 | $0.00169 | $0.00169 | $0.00169 |
| Club without contact | $0.00149 | $0.00129 | $0.00109 | $0.00099 | $0.00099 | $0.00099 |
| 20 emails (Try) | **$0.08** | $0.07 | $0.06 | $0.05 | $0.05 | $0.05 |
| 1,000 with email | **$3.99** | $3.49 | $2.99 | $2.49 | $2.49 | $2.49 |
| Full US map (~2,500, almost all with email) | **~$10** | ~$8.70 | ~$7.50 | ~$6.20 | ~$6.20 | ~$6.20 |

**Free plan: 20 clubs per run.** Paid plans follow PPE and your max charge. On a public Actor, a price change is scheduled ~14 days out; until then every row still bills as the current club-row event.

### Is it legal to scrape USA Swimming Find a Team?

This Actor only copies data that USA Swimming publishes on the public Find a Team map for parents looking for a club. As with any file that contains personal contact details, make sure your use complies with US law, CAN-SPAM, and your own compliance rules. Do not use the export for harassment.

### Also available

**[USA Fencing Clubs · Emails & Phones by State](https://apify.com/corent1robert/usa-fencing-clubs-scraper)** — same job for USA Fencing clubs.

**[FFN Swimming Clubs · French Directory](https://apify.com/corent1robert/ffn-clubs-scraper)** — same job for French swimming clubs.

### Local development

```bash
cd usa-swimming-clubs-scraper
npm install
apify run
```

`storage/key_value_stores/default/INPUT.json` (or `.actor/INPUT.json`) must include the schema fields. Local `storage/` is not uploaded to Apify Console.

### Support

Contact <corentin@outreacher.fr> if you need a custom scraper or tailored automation.

# Actor input Schema

## `finderType` (type: `string`):

Which public Find a Team listing to copy.

## `states` (type: `array`):

One or more US states, or **All states** for a nationwide export. Try starts on Florida.

## `onlyWithContact` (type: `boolean`):

Skip clubs that do not publish a mailbox or phone on Find a Team.

## `maxItems` (type: `integer`):

Stop after this many matching clubs. **0 = no numerical cap**.

## Actor input object example

```json
{
  "finderType": "clubs",
  "states": [
    "FL"
  ],
  "onlyWithContact": true,
  "maxItems": 20
}
```

# Actor output Schema

## `dataset` (type: `string`):

All exported swimming clubs.

## `overview` (type: `string`):

Club name, location and published contacts.

## `outreachCrm` (type: `string`):

Email, phone and website for CRM import.

## `runLog` (type: `string`):

Plain-text progress for this run.

# 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 = {
    "finderType": "clubs",
    "states": [
        "FL"
    ],
    "onlyWithContact": true,
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("corent1robert/usa-swimming-clubs-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 = {
    "finderType": "clubs",
    "states": ["FL"],
    "onlyWithContact": True,
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("corent1robert/usa-swimming-clubs-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 '{
  "finderType": "clubs",
  "states": [
    "FL"
  ],
  "onlyWithContact": true,
  "maxItems": 20
}' |
apify call corent1robert/usa-swimming-clubs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,corent1robert/usa-swimming-clubs-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/AKNVAt9grkjAhadNT/builds/I0HqqzlWB9HunMOIK/openapi.json
