# US Marina Leads — Phone Numbers, Emails, Websites & Locations (`zapticx/us-marina-leads`) Actor

US marina leads with phone numbers, public emails, websites, addresses and GPS. Cleaned, deduplicated, emails checked on official sites.

- **URL**: https://apify.com/zapticx/us-marina-leads.md
- **Developed by:** [Zapticx](https://apify.com/zapticx) (community)
- **Categories:** Lead generation, Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$7.00 / 1,000 marina results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### US Marina Leads — Phone Numbers, Emails, Websites & Locations

Get a clean, ready-to-use list of **US marina leads** with **phone numbers, public business emails, official websites, street addresses and GPS coordinates**. Pick a state, a city or a point on the map, run the Actor, and download marina contact data as **CSV, Excel or JSON**, or pull it straight into your CRM, spreadsheet or automation through the Apify API.

This is not a raw data dump. Every marina record is **cleaned, deduplicated and classified** before you receive it: closed and non-marina places are filtered out, phone numbers are normalized, websites are labelled (official site, parent operator, government, directory…), and the Actor **visits each marina's own official website** to confirm it is live and to find publicly displayed business emails. When the website shows a marina-domain address such as `info@yourmarina.com`, it is preferred over a free-mail address, and you can always see where each email came from.

💰 **Simple pricing: $7.00 per 1,000 marina results.** Website checks and email enrichment are included. You pay only for marinas delivered to your dataset.

Data source: base place data from the [Overture Maps Foundation](https://overturemaps.org/) open Places dataset ([CDLA Permissive 2.0](https://cdla.dev/permissive-2-0/)), cleaned and enriched by this Actor with information from each marina's own public website.

### What can you do with this Actor?

- 📇 **Build targeted marina lead lists** for sales and outreach: name, phone, email, website and address in one row
- ✉️ **Find marina email addresses** that are publicly listed on official marina websites
- 📞 **Collect marina phone numbers** in a clean, dial-ready format (E.164 and display format)
- 🗺️ **Map marinas** by state, city or radius around any point, with latitude and longitude for every record
- 🏢 **Research the marina market** in a region: who operates where, which marinas belong to larger operators
- 🧹 **Clean an existing marina CRM list**: spot dead websites, parked domains and closed marinas
- 🔁 **Automate marina research** with scheduled runs, webhooks and integrations

**Who uses it:** marine-industry suppliers and service companies, boat and yacht brokers, marine insurance and finance teams, software vendors selling to marinas, agencies running outreach for marine businesses, and analysts building marine-industry datasets.

### How to use this Actor

- 👉 **Register for a free Apify account**: no credit card required.
- 🎉 Just click [**Sign up free on Apify →**](https://console.apify.com/sign-up?fpr=1h3gvi) and complete a quick signup.
- 💰 Apify's free plan includes $5 of usage every month, enough to try this Actor.
- ⚓ Open the Actor and choose **where to look**: states, cities, or a point with a radius.
- 🎯 Set **Maximum marinas** and, if you like, ask only for marinas with a phone, email or website.
- ▶️ Click **Start**. Most runs finish in a few minutes.
- 📥 **Export** the results to CSV, Excel or JSON, or use them through the API and integrations.

### Features

| Feature | Details |
|---|---|
| 📞 Phone numbers | Normalized to E.164 (`+13055550123`) and display format, plus the number as listed |
| ✉️ Public business emails | From the dataset and from each marina's official website (home, contact and about pages) |
| 🏷️ Email classification | `business_domain`, `parent_operator`, `government`, `free_mail` or `questionable` |
| 🔎 Email provenance | `emailSource` (dataset or official website) and the exact page where the email is shown |
| ⬆️ Email upgrades | A marina-domain email on the official site replaces a free-mail address as the main email |
| 🌐 Website classification | `official`, `parent_operator`, `government`, `directory`, `social`, `questionable` |
| 🩺 Website health check | `active`, `dead_domain`, `parked`, `suspended`, `http_error`, `blocked`, `redirected_unrelated`… |
| 📍 Addresses & GPS | Street, city, state, ZIP, one-line address, latitude and longitude |
| 🧹 Cleaning | Duplicates merged, closed marinas excluded by default, obvious non-marina places removed |
| ⭐ Lead quality | `high` / `medium` / `low` based on phone, email quality and a working official website |
| 🗺️ Location filters | States, cities, or a center point + radius (sorted by distance) |
| 🎯 Lead filters | Only marinas with a phone, an email or a website; keyword in the marina name |
| 🔗 Social links | Social media pages listed for the marina |
| 📦 Exports & API | CSV, Excel, JSON, XML, Apify API, webhooks, Make, Zapier, n8n |

### Data fields

| Field | Type | Description |
|---|---|---|
| `marinaId` | string | Stable marina identifier |
| `name` | string | Marina name |
| `phoneDisplay` | string | Phone, e.g. `(305) 294-1124` |
| `phoneE164` | string | Phone in E.164 format, e.g. `+13052941124` |
| `phoneRaw` | string | Phone as listed in the source data |
| `email` | string | Best public business email |
| `emailType` | string | `business_domain`, `parent_operator`, `government`, `free_mail`, `questionable` |
| `emailSource` | string | `overture` (base dataset) or `official_website` |
| `emailPageUrl` | string | Website page where the email is displayed |
| `datasetEmail` | string | Email from the base dataset (kept for traceability) |
| `datasetEmailType` | string | Type of the dataset email |
| `websiteEmails` | array | Business emails found on the official website, with type and page |
| `website` | string | Marina website |
| `websiteDomain` | string | Website domain |
| `websiteType` | string | `official`, `parent_operator`, `government`, `directory`, `social`, `questionable`, `unavailable` |
| `websiteStatus` | string | `active`, `dead_domain`, `http_error`, `suspended`, `parked`, `blocked`, `robots_disallowed`, `redirected_unrelated`, `not_checked`, `unavailable` |
| `websiteFinalUrl` | string | Where the website ends up after redirects |
| `address` | string | Street address |
| `city` | string | City |
| `state` / `stateName` | string | State code and name |
| `postalCode` | string | ZIP or ZIP+4 |
| `country` | string | `US` |
| `fullAddress` | string | One-line address |
| `latitude` / `longitude` | number | GPS coordinates |
| `socialLinks` | array | Social media pages |
| `operatingStatus` | string | `open`, `closed`, `temporarily_closed`, `unknown` |
| `leadQuality` | string | `high`, `medium`, `low` |
| `confidence` | number | Base-dataset confidence that the place exists as described (0–1) |
| `dataSource`, `overtureRelease`, `sourceDatasets`, `sourceLicenses`, `licenseNote` | — | Data source, release and license information |
| `checkedAt` | string | When the record was produced (UTC) |

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `states` | array | — | US states, e.g. `["FL", "MD"]`. Empty = all states |
| `cities` | array | — | Cities, e.g. `["Fort Lauderdale, FL", "Annapolis"]` |
| `centerPoint` | string | — | `"latitude, longitude"` to search around a point |
| `radiusMiles` | integer | 25 | Radius around the center point (1–500 miles) |
| `searchKeyword` | string | — | Marina name must contain all these words |
| `maxResults` | integer | 100 | Maximum marinas to return (and pay for) |
| `mustHavePhone` | boolean | false | Only marinas with a phone number |
| `mustHaveEmail` | boolean | false | Only marinas with an email (skipped marinas are never charged) |
| `mustHaveWebsite` | boolean | false | Only marinas with a website |
| `includeClosed` | boolean | false | Also return marinas marked closed |
| `enrichEmailsFromWebsite` | boolean | true | Check official websites for status and public emails |

**How filters combine:** every filter you set must match. Inside one list, any value can match: `["FL", "GA"]` means Florida *or* Georgia. A city entered with its state (`Miami, FL`) matches only that state. With a center point, results are limited to the radius and sorted by distance; otherwise the strongest leads (phone, official website, business email) come first.

#### Example 1: Florida marina lead list with emails

```json
{
  "states": ["FL"],
  "mustHavePhone": true,
  "mustHaveEmail": true,
  "maxResults": 500
}
```

#### Example 2: Marinas within 25 miles of Annapolis

```json
{
  "centerPoint": "38.9784, -76.4922",
  "radiusMiles": 25,
  "maxResults": 200
}
```

#### Example 3: Yacht clubs in several states

```json
{
  "states": ["MA", "RI", "CT", "NY"],
  "searchKeyword": "yacht club",
  "maxResults": 300
}
```

#### Example 4: Fast city export without website checks

```json
{
  "cities": ["Seattle, WA", "Tacoma, WA"],
  "enrichEmailsFromWebsite": false,
  "maxResults": 100
}
```

### Output

One dataset row per unique marina. This example is a real result: the marina's base record had no email, and the Actor found the business email on the marina's official website.

```json
{
  "marinaId": "4bff376b-8986-4eab-b721-70dd3a61e5c4",
  "name": "Robbie's Marina Of Key West",
  "phoneDisplay": "(305) 294-1124",
  "phoneE164": "+13052941124",
  "phoneRaw": "13052941124",
  "email": "frontdesk@robbies.com",
  "emailType": "business_domain",
  "emailSource": "official_website",
  "emailPageUrl": "https://robbieskw.com/",
  "datasetEmail": null,
  "datasetEmailType": null,
  "websiteEmails": [
    { "email": "frontdesk@robbies.com", "type": "business_domain", "pageUrl": "https://robbieskw.com/" },
    { "email": "booth@robbies.com", "type": "business_domain", "pageUrl": "https://robbieskw.com/" }
  ],
  "website": "https://www.robbieskw.com/",
  "websiteDomain": "robbieskw.com",
  "websiteType": "official",
  "websiteStatus": "active",
  "websiteFinalUrl": "https://robbieskw.com/",
  "address": "7281 Shrimp Rd",
  "city": "Key West",
  "state": "FL",
  "stateName": "Florida",
  "postalCode": "33040-5408",
  "country": "US",
  "fullAddress": "7281 Shrimp Rd, Key West, FL 33040-5408",
  "latitude": 24.561398,
  "longitude": -81.736572,
  "socialLinks": [],
  "operatingStatus": "open",
  "leadQuality": "high",
  "confidence": 0.996,
  "dataSource": "Overture Maps Foundation — Places",
  "overtureRelease": "2026-09-23.0",
  "sourceDatasets": ["BrightQuery"],
  "sourceLicenses": ["CDLA-Permissive-2.0"],
  "licenseNote": "Base place data: Overture Maps Foundation (overturemaps.org), licensed under CDLA Permissive 2.0 (https://cdla.dev/permissive-2-0/). Website status and website emails: checked by this Actor on each marina's public website.",
  "checkedAt": "2026-10-05T16:29:35Z"
}
```

Each run also saves a **RUN_SUMMARY** (marinas delivered, phones, emails, emails found on websites, website status counts, stop reason) and the **DATA_LICENSE** text in the run's key-value store.

### Pricing

**$7.00 per 1,000 marina results** ($0.007 per marina), all inclusive.

| Marinas | Price |
|---:|---:|
| 100 | $0.70 |
| 500 | $3.50 |
| 1,000 | $7.00 |
| 5,000 | $35.00 |

- **One delivered marina = one result.** You pay only for unique marina records saved to your dataset.
- **Included at no extra cost:** website health checks, email enrichment, cleaning and classification.
- **Never charged:** duplicates, filtered-out marinas (for example marinas skipped by "Only marinas with an email"), failed websites, retries.
- No subscription for this Actor. Set a **maximum cost per run** in Apify and the run stops cleanly when it is reached.
- Apify platform usage for running the Actor is included in the price.

### Use cases

#### Marine-industry lead generation

Export every marina in your sales territory with a phone number and a business email, then load the list into your CRM or outreach tool.

#### Competitor and market research

Map the marinas in a region, see which belong to larger operators (`websiteType: parent_operator`) and which are independent, and compare coverage between states.

#### CRM and list hygiene

Run your target region with `includeClosed: true` to flag closed marinas, dead websites, parked domains and websites that now redirect to unrelated businesses.

#### Territory planning

Use a center point and radius to list marinas around a dealership, service yard or sales rep, sorted by distance.

#### Marine data products

Feed clean marina locations and contacts into dashboards, maps and internal databases on a schedule.

### API & integrations

Run the Actor and fetch results with the [Apify API](https://docs.apify.com/api/v2), or connect it to your tools with [webhooks](https://docs.apify.com/platform/integrations/webhooks), [Make](https://apify.com/integrations/make), [Zapier](https://apify.com/integrations/zapier), [n8n](https://apify.com/integrations/n8n) and [Google Sheets](https://apify.com/integrations/google-sheets). Use [Schedules](https://docs.apify.com/platform/schedules) to refresh your lists automatically.

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("zapticx/us-marina-leads").call(run_input={
    "states": ["FL"],
    "mustHaveEmail": True,
    "maxResults": 200,
})
for marina in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(marina["name"], marina["phoneDisplay"], marina["email"], marina["website"])
```

**JavaScript**

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

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('zapticx/us-marina-leads').call({
    cities: ['Annapolis, MD'],
    maxResults: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Limitations

- Coverage is US marinas only, and depends on what the underlying open dataset contains. Some marinas are missing, and some details may be outdated.
- Not every marina publishes an email. Emails are returned only when they appear in the dataset or are publicly displayed on the marina's own website. The Actor never guesses or generates addresses.
- Free-mail addresses (Gmail, Yahoo…) are often the real contact for small marinas, so they are kept but clearly labelled `free_mail`.
- Website checks read at most 3 pages per site, respect robots.txt, and skip sites that block automated visitors (`websiteStatus: blocked`). Turning them on adds runtime.
- Marina-specific details such as slip counts, fuel prices and amenities are not included in this version.
- The base dataset is refreshed periodically (see `overtureRelease`); website checks are live at run time.

### About Zapticx

Built and maintained by [Zapticx](https://www.zapticx.com/). Need a field we don't cover yet, or a custom marina dataset? Open an issue on the Actor's Issues tab.

**Disclaimer:** This Actor is an independent tool. It is not affiliated with, endorsed by, or sponsored by the Overture Maps Foundation, its members, or any marina listed. Base place data comes from the Overture Maps Foundation and its data contributors and is available under [CDLA Permissive 2.0](https://cdla.dev/permissive-2-0/); the license text is included with every run (`DATA_LICENSE`).

# Actor input Schema

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

Only marinas in these US states. Pick one or more; leave empty for all states.

## `cities` (type: `array`):

Only marinas in these cities, e.g. <code>Fort Lauderdale, FL</code> or <code>Annapolis</code>. Adding the state code avoids same-named cities in other states.

## `centerPoint` (type: `string`):

Find marinas near a location, e.g. <code>24.5551, -81.7800</code> for Key West. Results are sorted by distance. Combine with <b>Radius</b>.

## `radiusMiles` (type: `integer`):

How far from the point to search. Used only with a center point (25 miles if left empty).

## `searchKeyword` (type: `string`):

Only marinas whose name contains all of these words, e.g. <code>yacht club</code> or <code>safe harbor</code>.

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

Stop after this many marinas. You pay only for marinas delivered to your dataset.

## `mustHavePhone` (type: `boolean`):

Skip marinas without a phone number.

## `mustHaveEmail` (type: `boolean`):

Skip marinas where no public email was found (after checking the official website). Skipped marinas are never charged.

## `mustHaveWebsite` (type: `boolean`):

Skip marinas that list no website.

## `includeClosed` (type: `boolean`):

Also return marinas marked as permanently or temporarily closed (useful for cleaning an existing CRM list). They are labelled in <code>operatingStatus</code>.

## `enrichEmailsFromWebsite` (type: `boolean`):

Visit each marina's own website (up to 3 pages: home, contact, about) to confirm it is live and to find publicly displayed business emails. Upgrades free-mail addresses to the marina's own domain when one is shown. Included in the price. Turn off for the fastest possible export.

## Actor input object example

```json
{
  "cities": [
    "Fort Lauderdale, FL"
  ],
  "maxResults": 15,
  "mustHavePhone": false,
  "mustHaveEmail": false,
  "mustHaveWebsite": false,
  "includeClosed": false,
  "enrichEmailsFromWebsite": true
}
```

# Actor output Schema

## `marinas` (type: `string`):

One row per unique marina.

## `contacts` (type: `string`):

Phones, emails with source and type, website status.

## `runSummary` (type: `string`):

Totals: marinas delivered, phones, emails, website checks, stop reason.

## `dataLicense` (type: `string`):

License text that accompanies the base place data.

# 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 = {
    "cities": [
        "Fort Lauderdale, FL"
    ],
    "maxResults": 15
};

// Run the Actor and wait for it to finish
const run = await client.actor("zapticx/us-marina-leads").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 = {
    "cities": ["Fort Lauderdale, FL"],
    "maxResults": 15,
}

# Run the Actor and wait for it to finish
run = client.actor("zapticx/us-marina-leads").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 '{
  "cities": [
    "Fort Lauderdale, FL"
  ],
  "maxResults": 15
}' |
apify call zapticx/us-marina-leads --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zapticx/us-marina-leads"
        }
    }
}
```

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/r7Xd3GjIjVYyu4P9l/builds/27OvhyQEqbNIv66nj/openapi.json
