# 💍 Wedding Vendor Leads Scraper - Photographer & Venue Emails (`renzomacar/wedding-vendor-leads-scraper`) Actor

Wedding photographers, planners, venues, florists and bridal shops for any market, with phone, website, emails and Instagram pulled live from each vendor's own site. For creative SaaS, suppliers, marketplaces and agencies. $8 per 1,000 leads.

- **URL**: https://apify.com/renzomacar/wedding-vendor-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 $8.00 / 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.

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

## 💍 Wedding Vendor Leads Scraper — Photographer & Venue Emails

A wedding is assembled from a dozen independent micro-businesses: a photographer, a planner, a venue, a florist, a videographer, a bridal shop. Almost all of them are owner-operated, almost all of them buy software, insurance, print, rentals and referrals — and almost none of them show up in a normal B2B database, because they are sole proprietors with an Instagram and a Squarespace site.

This Actor finds them on the live map for any market and enriches each one from its own website: **business name, phone, website, address, emails and social profiles**, at $8 per 1,000 vendors.

### Instagram is the real switchboard

Treat `socialProfiles` as a first-class field here, not a nice-to-have. Wedding vendors run their entire business on Instagram: it is where they post work, where couples reach them, and where they respond fastest. A photographer who ignores email for a week will reply to a DM in an hour. This Actor returns Instagram, Facebook, LinkedIn and Twitter handles alongside the email, which means a two-channel sequence — email first, IG follow-up on the non-openers — instead of the single dead channel most vendor lists give you.

### Categories you can select

`wedding photographer` · `wedding planner` · `wedding venue` · `wedding florist` · `bridal shop` · `wedding videographer`

Pick any combination from the dropdown, or leave it empty to sweep all six. Categories outside the list — DJs, cake bakeries, officiants, catering, hair and makeup, rentals — work perfectly as free text in `searchQueries`, e.g. `["wedding dj in Nashville, TN", "wedding cake bakery in Nashville, TN"]`.

### Fields on every vendor

| Field | Example |
|---|---|
| `name`, `category` | Rivergate Photography · Wedding photographer |
| `phone`, `websitePhones[]` | Booking line plus any number on the site |
| `email`, `emails[]`, `emailFound` | Addresses the vendor publishes for inquiries |
| `socialProfiles` | Instagram, Facebook, LinkedIn, Twitter |
| `website`, `techStack[]` | Site plus platform (Squarespace, Showit, WordPress…) |
| `address`, `city`, `country` | Parsed location, incl. service-area businesses |
| `rating`, `reviewsCount` | Volume proxy — a booked vendor accumulates reviews |
| `placeUrl`, `searchQuery` | Map link and the search that surfaced it |

### Who this is built for

- **Software for creatives** — CRMs, booking and contract tools, galleries, invoicing. `techStack` shows who is running a modern site and who is still on a builder from 2014.
- **Print, album and product suppliers** — photographers and planners reorder physical product constantly; a per-metro list is a route plan.
- **Insurance, financing and bookkeeping for sole proprietors** — an entire vertical of unincorporated businesses with real revenue and no back office.
- **Venue and vendor marketplaces** — recruit supply into a new city before you launch it there.
- **Rental, lighting and AV companies** — start from `wedding venue`, then work the planners who fill it.

### Pricing

$0.008 per vendor delivered ($8 per 1,000) plus a $0.01 start fee per run. A mid-size metro across all six categories typically yields 200–500 vendors: **under $4 for the market**. No subscription and no minimum spend; rows you exclude with `onlyWithWebsite` are never charged.

### Example input

```json
{
  "location": "Nashville, TN",
  "keywords": ["wedding photographer", "wedding planner", "wedding venue"],
  "maxResults": 120,
  "maxPagesPerSite": 2
}
```

### FAQ

**Do wedding vendors actually publish email addresses?**
More than most local niches — inquiries are their lifeblood, so a contact address is usually on the site or the contact page. Expect roughly 55–70% of vendors that have a website. The rest still carry a phone and, importantly, social handles.

**Why is `socialProfiles` so much more useful here?**
Because a large share of these businesses treat Instagram as their primary inbox. Vendors who never open a cold email will reply to a DM. Plan your sequence around that rather than fighting it.

**Photographers work regionally — will I miss the ones outside the city?**
Map listings tie to a base location, so a photographer serving three states still shows once, in their home market. To cover a region, run several city queries through `searchQueries` and dedupe on `website` afterwards.

**Can I target only high-volume vendors?**
Sort on `reviewsCount` after export. In this vertical review count tracks bookings closely — 100+ reviews means a full calendar and a real budget, single digits usually means a side hustle.

**What about seasonality?**
Engagement season runs Thanksgiving to Valentine's Day and vendors buy tooling in the quiet winter months, before spring bookings hit. Late fall and January are the windows where outreach lands.

**Are venues and vendors mixed together?**
Only if you select both. Venues are a different buyer (facilities, capex, event staff) than creatives — run them as separate lists if your pitch differs, since each row is tagged with its `searchQuery`.

**Is the data live?**
Yes, scraped at run time. This vertical has heavy churn — a lot of solo vendors open and close each year — so a fresh scrape beats any stored list by a wide margin.

**Is this legal to use?**
The Actor gathers publicly listed business information and the contact emails vendors publish on their own sites to receive inquiries. No couple, guest or consumer data is touched. Sending compliance — CAN-SPAM, GDPR where relevant, and platform rules if you DM — is your responsibility.

### Officiants, hair and makeup artists, and the vendors nobody lists

The six presets cover the vendors with the biggest budgets. The rest of the wedding-day roster is just as reachable, one search at a time:

```
wedding officiant in Charleston, SC
bridal hair and makeup artist in Charleston, SC
wedding calligrapher in Mount Pleasant, SC
wedding cake baker in Summerville, SC
wedding rentals company in Charleston, SC
```

Custom search queries replace the category picker and `location`, so every line carries its own city. Vendors appearing under several categories — the hair-and-makeup artist who also lists as a bridal salon — are merged before delivery, so you are never charged twice for the same business.

### DJs, bands, photo booths and entertainment

Entertainment vendors are the ones most likely to be booked through Instagram rather than email, and the data reflects that:

```
wedding dj in Nashville, TN
wedding band in Nashville, TN
photo booth rental in Franklin, TN
event lighting company in Brentwood, TN
live music booking in Nashville, TN
```

`socialProfiles.instagram` is captured from the vendor's own website and is populated far more often than LinkedIn across this vertical. If your first touch is a DM, that column is the deliverable; the email is the backup.

### Bridal shops, dress boutiques and retail

Retail is the odd one out in weddings — a fixed storefront, staff, inventory and a phone that gets answered during business hours:

```
bridal shop in Kansas City, MO
wedding dress boutique in Overland Park, KS
tuxedo rental shop in Kansas City, MO
bridal accessories store in Leawood, KS
```

Because these are shops rather than sole traders, `phone` and `address` are reliable on every row, `websitePhones` often adds a direct appointment line, and `reviewsCount` is a genuine proxy for volume — a boutique with 400 reviews is fitting several brides a day and buying inventory systems, not deciding whether to.

# Actor input Schema

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

City, region or country to search in, e.g. 'Nashville, TN', 'Austin, TX', 'London, UK'.

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

Which wedding vendor categories to search for. Pick one or several; leave empty to sweep all six at once. Need another category (e.g. 'wedding cake bakery', 'wedding dj')? Use Custom search queries below.

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

Full searches, one per line (e.g. 'wedding venue in Charleston, SC'). When set, these override Location + vendor categories, and any wording is allowed here — use it for segments outside the list above or to cover several 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": "Nashville, TN",
  "keywords": [
    "wedding photographer"
  ],
  "maxResults": 5,
  "maxPagesPerSite": 1,
  "onlyWithWebsite": false,
  "includeGenericEmails": true,
  "language": "en"
}
```

# Actor output Schema

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

Complete B2B leads (company, 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": "Nashville, TN",
    "keywords": [
        "wedding photographer"
    ],
    "maxResults": 5,
    "maxPagesPerSite": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("renzomacar/wedding-vendor-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": "Nashville, TN",
    "keywords": ["wedding photographer"],
    "maxResults": 5,
    "maxPagesPerSite": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("renzomacar/wedding-vendor-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": "Nashville, TN",
  "keywords": [
    "wedding photographer"
  ],
  "maxResults": 5,
  "maxPagesPerSite": 1
}' |
apify call renzomacar/wedding-vendor-leads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,renzomacar/wedding-vendor-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/pj4Z4NwMTqScifX7A/builds/aF1CEcwRxeCduD97x/openapi.json
