# Travel Agency Contact Scraper (`scrapido/travel-agency-contact-scraper`) Actor

✈️ Travel Agency Contact Scraper collects travel agent and tour operator listings from Google Maps with name, full address, ZIP & phone. 📧 Site crawling adds emails and social links. 🌍 Ideal for travel tech vendors & tourism partnerships.

- **URL**: https://apify.com/scrapido/travel-agency-contact-scraper.md
- **Developed by:** [Scrapido](https://apify.com/scrapido) (community)
- **Categories:** Lead generation, Travel, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

### Travel Agency Contact Scraper

The **Travel Agency Contact Scraper** is an Apify actor for automated web scraping that helps marketers, sales teams, and data analysts build targeted lead lists fast. Instead of manual research, it extracts publicly available business contact information (including emails) across travel agency listings—so you can scale contact data enrichment with higher ROI.

***

### What is Travel Agency Contact Scraper? 🔍

**Travel Agency Contact Scraper** is an Apify actor designed to find travel agency businesses and extract their contact information from publicly available sources. It works by combining your travel agency lead generation search term with one or more geographic locations, then scrapes websites to collect contact details such as emails, phone numbers, and social media profiles. This actor solves the biggest problem in B2B travel agents email finder workflows: time-consuming manual lookup and spreadsheet copy-paste. With structured results saved straight into an Apify dataset, you can run scalable email scraping to generate thousands of contact rows in minutes—without needing to write code. Use it as a travel agency contact scraper, travel agency email extractor, or automated contact scraping tool.

***

### What Data Does a Travel Agency Contact Scraper Collect? 📊

This **Travel Agency Contact Scraper** outputs business identity, contact, and engagement signals per agency, including emails, phone numbers, and social profiles, plus basic listing metrics and geolocation fields.

| Data Category | Fields Extracted | Description |
|---|---|---|
| Contact | `scraped_emails`, `scraped_phones` | Public contact details found from business websites (emails and phone numbers). |
| Social & profiles | `scraped_social_media` | Social media profile links associated with the business. |
| Business identity | `name`, `website`, `place_id` | Business name and website, plus a `place_id` to help de-duplicate listings. |
| Location | `full_address`, `city`, `state`, `zip`, `country_code`, `lat`, `long` | Address components and coordinates for geotargeted agency contacts and CRM matching. |
| Credibility signals | `avg_rating`, `total_reviews` | Rating and review count when available from the listing data. |
| Process metadata | `pages_scraped`, `scrape_status` | How much website content was processed and whether the scrape succeeded. |

***

### What Do Results from Travel Agency Contact Scraper Look Like? 👀

Each result is a structured record saved to your Apify dataset. Here’s a real-looking example of a single dataset row:

```json
{
  "name": "Harbor View Travel Agency",
  "website": "https://harborviewtravel.com",
  "phone": "+1 212-555-0198",
  "full_address": "118 Madison Ave New York NY 10016 US",
  "city": "New York",
  "state": "NY",
  "zip": "10016",
  "country_code": "US",
  "scraped_emails": [
    "reservations@harborviewtravel.com",
    "sales@harborviewtravel.com"
  ],
  "scraped_phones": [
    "+1-212-555-0198",
    "+1-212-555-0137"
  ],
  "scraped_social_media": [
    "https://www.linkedin.com/company/harbor-view-travel-agency/",
    "https://www.facebook.com/harborviewtravel"
  ],
  "emails_found": 2,
  "pages_scraped": 7,
  "avg_rating": 4.6,
  "total_reviews": 219,
  "lat": "40.7503",
  "long": "-73.9936",
  "place_id": "ChIJwXk3z9m1wokR2GdK8nqYp3U",
  "scrape_status": "success"
}
```

The dataset is provided as JSON (the default). You can export it from the Apify Console.

***

#### Core Features: Travel Agency Contact Scraper ⚡

| Feature | Benefit |
|---|---|
| ✅ **Keyword-driven targeting** | Uses your travel agency lead generation search term to find relevant businesses. |
| ✅ **Location targeting** | Run geotargeted agency contacts by providing one or more locations. |
| ✅ **Configurable business caps** | Use `maxBusinesses` to control how many agencies you want to retrieve. |
| ✅ **Optional per-location limits** | Toggle `scrapeMaxBusinessesPerLocation` to control whether the cap is per city/region or global. |
| 🛡️ **Proxy support** | Includes built-in proxy support for more reliable large-scale scraping runs. |
| 🌐 **Website contact data extraction** | Extracts emails, phone numbers, and social media profiles from each business website. |
| 📊 **Structured dataset output** | Writes consistent fields into the Apify dataset for easy CRM contact enrichment and analysis. |
| 🔎 **De-duplication by place** | Uses `place_id` to keep results unique within a run. |
| 🚦 **Scrape status tracking** | Includes `scrape_status`, `pages_scraped`, and `emails_found` to help you triage results. |

***

### Getting Started with Travel Agency Contact Scraper 🚀

1. **Open Apify Store** — Go to [apify.com/store](https://apify.com/store) and search **Travel Agency Contact Scraper**
2. **Click Try for Free** — Sign in or create a free Apify account
3. **Open the Input tab** — Configure the actor settings below
4. **Set the search term** — Use `googleMapsSearchTerm` (default: `Travel Agency`)
5. **Add one or more locations** — Provide `googleMapsLocation` as a list (default prefill includes `New York`)
6. **Control how many agencies to collect** — Set `maxBusinesses` (default: `5`)
7. **Optional: per-location cap** — Enable `scrapeMaxBusinessesPerLocation` if you want the cap applied to each location
8. **Start the run** — Check logs, then export your dataset for automated contact scraping tool workflows

***

### Ways to Use Travel Agency Contact Scraper 💡

- 🎯 **Travel agency lead generation** — Build contact lists for outreach and pipeline sourcing.
- 📣 **CRM contact enrichment** — Add scraped\_emails, phone numbers, and social links to existing lead records.
- 🤝 **B2B travel agents email finder** — Identify agencies that match your niche and location requirements.
- 🧭 **Directory scraping workflows** — Use dataset output for business listing scraping and deduping by `place_id`.
- 📊 **Data mining for travel industry** — Combine ratings (`avg_rating`, `total_reviews`) with contact data for analysis.
- ⚙️ **Contact data normalization** — Standardize leads into a consistent dataset schema for downstream processing.

***

#### Input Parameters — Travel Agency Contact Scraper

Example input (using real defaults from the schema first):

```json
{
  "googleMapsSearchTerm": "Travel Agency",
  "googleMapsLocation": ["New York"],
  "maxBusinesses": 5,
  "scrapeMaxBusinessesPerLocation": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `googleMapsSearchTerm` | string | ✅ Yes | `Travel Agency` | Enter the business type or niche for the email scraper (example: “travel agency”, “boutique travel”, etc.). |
| `googleMapsLocation` | array | ✅ Yes | `["New York"]` | Target geographic location(s) to search in (e.g., city or region names). |
| `maxBusinesses` | integer | No | `5` | Target number of businesses to find (1–1000). The scraper stops when this target is reached. |
| `scrapeMaxBusinessesPerLocation` | boolean | No | `false` | If enabled, collect up to `maxBusinesses` results per location. If disabled, combine all locations up to a single total limit. |
| `proxyConfiguration` | object | No | `{ "proxy support": true }` | Proxy settings for scraping; recommended for large-scale runs to help reduce blocks and rate-limit issues. |

***

#### Output Parameters — Travel Agency Contact Scraper

Example output row (matches the dataset schema field order exactly):

```json
{
  "name": "Harbor View Travel Agency",
  "website": "https://harborviewtravel.com",
  "phone": "+1 212-555-0198",
  "full_address": "118 Madison Ave New York NY 10016 US",
  "city": "New York",
  "state": "NY",
  "zip": "10016",
  "country_code": "US",
  "scraped_emails": [
    "reservations@harborviewtravel.com",
    "sales@harborviewtravel.com"
  ],
  "scraped_phones": [
    "+1-212-555-0198",
    "+1-212-555-0137"
  ],
  "scraped_social_media": [
    "https://www.linkedin.com/company/harbor-view-travel-agency/",
    "https://www.facebook.com/harborviewtravel"
  ],
  "emails_found": 2,
  "pages_scraped": 7,
  "avg_rating": 4.6,
  "total_reviews": 219,
  "lat": "40.7503",
  "long": "-73.9936",
  "place_id": "ChIJwXk3z9m1wokR2GdK8nqYp3U",
  "scrape_status": "success"
}
```

| Field | Label | Format | Description |
|---|---|---|---|
| `name` | Business Name | text | The business name for the travel agency listing. |
| `website` | Website | link | The business website URL used for contact data extraction. |
| `phone` | Phone | text | The primary phone value associated with the listing. |
| `full_address` | Address | text | Combined address string built from the scraped location components. |
| `city` | City | text | City extracted from the listing. |
| `state` | State | text | State extracted from the listing. |
| `zip` | zip | text | Postal code extracted from the listing. |
| `country_code` | country\_code | text | Country code extracted from the listing. |
| `scraped_emails` | Emails Found | array | Emails discovered on the business website. |
| `scraped_phones` | Phone Numbers | array | Phone numbers discovered on the business website. |
| `scraped_social_media` | Social Media | array | Social profile links discovered on the business website. |
| `emails_found` | # Emails | number | Count of emails found for this business. |
| `pages_scraped` | Pages Scraped | number | How many pages were processed while extracting contacts from the website. |
| `avg_rating` | Rating | number | Average rating value for the business listing. |
| `total_reviews` | Reviews | number | Total review count for the business listing. |
| `lat` | lat | text | Latitude coordinate associated with the listing. |
| `long` | long | text | Longitude coordinate associated with the listing. |
| `place_id` | place\_id | text | Identifier used to help ensure uniqueness of scraped locations. |
| `scrape_status` | Status | text | Final status of the scrape for this business (for example, success or failure states). |

***

### Why Choose This Travel Agency Contact Scraper? 🏆

If you’re comparing tools for travel agency lead generation, the **Travel Agency Contact Scraper** stands out with structured, export-ready dataset output and practical controls like `maxBusinesses` and `scrapeMaxBusinessesPerLocation`. It also supports proxyConfiguration for more resilient large-scale scraping and includes accountability fields like `emails_found`, `pages_scraped`, and `scrape_status` so you can quickly validate quality. Instead of subscription-style guessing, it focuses on delivering results you can plug into CRM enrichment and outreach pipelines. Need help? Contact <scrapidocontact@gmail.com>.

***

### How Many Results Can You Scrape? 📈

Use `maxBusinesses` (1–1000) to cap how many agencies are collected for your run. Actual volume depends on how many travel agency listings and websites include publicly available contact emails. If you provide multiple locations, enabling `scrapeMaxBusinessesPerLocation` applies the cap per location; otherwise, results are combined up to a single total. Dataset exports stay flexible for later analysis and scalable email scraping workflows.

***

### Legal Guidelines for Scraping Travel Agency ⚖️

The **Travel Agency Contact Scraper** collects information only from **publicly available sources**. It does not access private or password-protected data. You’re responsible for following applicable laws and each website’s terms of service, including privacy and anti-spam requirements (for example, GDPR/CCPA where relevant). Use extracted data for legitimate business purposes only. For data removal requests, contact <scrapidocontact@gmail.com>.

***

### FAQ — Travel Agency Contact Scraper ❓

#### How does the Travel Agency Contact Scraper identify data?

The actor targets travel agency listings based on your `googleMapsSearchTerm` and `googleMapsLocation` inputs, then extracts contact details from the associated business websites. It saves the resulting contact data into your Apify dataset with fields such as `scraped_emails`, `scraped_phones`, and `scraped_social_media`.

#### What travel agency business types can I scrape?

You can scrape travel agency businesses that match the niche described in `googleMapsSearchTerm`. The actor is designed for travel industry data mining and directory scraping workflows, so broader terms may return more results, while narrower terms can improve relevance for B2B travel agents email finder use cases.

#### What does `scrape_status` mean in the results?

`scrape_status` reflects the outcome of the website scraping and contact extraction step for each business. Together with `emails_found` and `pages_scraped`, it helps you understand which rows are ready for outreach and which ones may need follow-up.

#### Why scrape travel agencies for contacts?

Travel agencies often list contact emails, phone numbers, and social profiles publicly on their websites. Scraping automates that “search and collect” work, enabling automated contact scraping tool workflows for marketers, analysts, and sales teams building CRM contact enrichment datasets.

#### How do I control how many agencies I get?

Set `maxBusinesses` to define the target number of businesses to find. If you enable `scrapeMaxBusinessesPerLocation`, the cap is applied per location; otherwise, the actor combines locations into one overall limit.

#### How should I export and use the dataset?

After the run, export the dataset from the Apify Console. Because the output schema is consistent—like `scraped_emails`, `full_address`, `avg_rating`, and `place_id`—you can quickly feed results into spreadsheets, CRMs, or other automation pipelines for scalable email scraping.

#### Can I get help if my run returns fewer emails than expected?

Email availability varies by website and niche. If `emails_found` is low, try adjusting `googleMapsSearchTerm`, add additional `googleMapsLocation` values, and make sure your `maxBusinesses` cap is appropriate. If you still need assistance, reach out at <scrapidocontact@gmail.com>.

***

### Conclusion 🏁

The **Travel Agency Contact Scraper** is a practical way to scale contact data extraction for travel agency lead generation. Run it with your niche and target locations, then export a clean dataset ready for CRM contact enrichment and outreach. Start your run on Apify and turn public web data into actionable leads.

***

### 🆘 Support & Feedback

Have questions or want improvements for the **Travel Agency Contact Scraper**? Please contact <scrapidocontact@gmail.com>.

### Multiple Email Type

**Email Types** keeps only the kinds of mailbox you want. Every row records what
it was classified as in `emailType`.

| Type | What it matches |
| --- | --- |
| Personal | Free webmail (Gmail, Outlook, Yahoo, iCloud, ...) |
| Business | Company domains — free webmail and institutions excluded |
| Education | `.edu`, `.ac.uk`, `.edu.au` and other academic suffixes |
| Government | `.gov`, `.mil`, `.gov.uk`, `.gc.ca`, ... |
| Non-profit | `.org`, `.ngo`, `.org.uk`, ... |

A business found with no email at all is unaffected — whether those rows are
wanted is already governed by the existing email-only setting.

### Multiple Phone Type

**Phone Types** does the same for numbers, checked against the line's *real*
type rather than a guess. Numbers on ranges where mobile and landline cannot be
told apart are kept rather than dropped, since discarding them would lose good
leads.

### Outreach links

| Field | Meaning |
| --- | --- |
| `telLink` | A clickable `tel:` link for the primary number |
| `whatsappLink` | A `wa.me` chat link, or empty for a landline or an invalid number |
| `whatsappCapable` | Whether the line could support WhatsApp |
| `phoneContacts` | Every kept number with its own type, links and validity |

`whatsappCapable` never claims the person uses WhatsApp — only that the number
is of a kind that could. Turn the links off with **Include WhatsApp links**; the
capability flag is still reported.

# Actor input Schema

## `googleMapsSearchTerm` (type: `string`):

Enter the business type or niche for email scraper (e.g., 'coffee shops', 'dentists').

## `googleMapsLocation` (type: `array`):

Target geographic location for the email scraper (e.g., 'Miami, Florida').

## `maxBusinesses` (type: `integer`):

Target number of businesses to find (1-1000). The scraper will stop when this target is reached.

## `scrapeMaxBusinessesPerLocation` (type: `boolean`):

If enabled, the scraper will collect up to `maxBusinesses` results per location. If disabled, it combines all locations up to a single total limit.

## `validateEmails` (type: `boolean`):

Run DNS/MX validation and confidence scoring on every email found, and include the results (confidence score, validation status, role-based/catch-all flags) in the output.

## `minRating` (type: `integer`):

Skip businesses rated below this (1-5 stars). Leave at 0 for no filter.

## `minReviews` (type: `integer`):

Skip businesses with fewer than this many Google reviews. Leave at 0 for no filter.

## `requireWebsite` (type: `boolean`):

Skip businesses with no website listed on Google Maps (they can't be crawled for contact info anyway).

## `leadMode` (type: `string`):

Business Contacts (default) returns the business's generic contact info (info@, main phone, socials). Decision-Maker Finder instead looks for a named person with a job title (e.g. "Jane Smith, Owner") on the business's team/about pages — a best-effort heuristic, not guaranteed on every site.

## `proxyConfiguration` (type: `object`):

Proxy settings for scraping. Recommended for large-scale scraping.

## `emailTypes` (type: `array`):

Which kinds of mailbox to keep. Pick as many as you like; leave empty for every type. A business with no email at all is unaffected by this - whether those rows are wanted is governed by the existing email-only setting.

## `phoneTypes` (type: `array`):

Which kinds of line to keep. Leave empty for every type. Numbers on ranges where mobile and landline cannot be told apart are always kept rather than silently dropped.

## `includeWhatsappLinks` (type: `boolean`):

Add a ready-made wa.me chat link for numbers on a line WhatsApp can run on. The link means the number is in a form WhatsApp accepts - not proof that an account exists.

## Actor input object example

```json
{
  "googleMapsSearchTerm": "Travel Agency",
  "googleMapsLocation": [
    "New York"
  ],
  "maxBusinesses": 5,
  "scrapeMaxBusinessesPerLocation": false,
  "validateEmails": false,
  "minRating": 0,
  "minReviews": 0,
  "requireWebsite": false,
  "leadMode": "Business Contacts",
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "emailTypes": [
    "Business"
  ],
  "phoneTypes": [
    "Mobile",
    "Landline"
  ],
  "includeWhatsappLinks": true
}
```

# Actor output Schema

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

No description

# 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 = {
    "googleMapsSearchTerm": "Travel Agency",
    "googleMapsLocation": [
        "New York"
    ],
    "maxBusinesses": 5,
    "proxyConfiguration": {
        "useApifyProxy": true
    },
    "emailTypes": [
        "Business"
    ],
    "phoneTypes": [
        "Mobile",
        "Landline"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapido/travel-agency-contact-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 = {
    "googleMapsSearchTerm": "Travel Agency",
    "googleMapsLocation": ["New York"],
    "maxBusinesses": 5,
    "proxyConfiguration": { "useApifyProxy": True },
    "emailTypes": ["Business"],
    "phoneTypes": [
        "Mobile",
        "Landline",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("scrapido/travel-agency-contact-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 '{
  "googleMapsSearchTerm": "Travel Agency",
  "googleMapsLocation": [
    "New York"
  ],
  "maxBusinesses": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "emailTypes": [
    "Business"
  ],
  "phoneTypes": [
    "Mobile",
    "Landline"
  ]
}' |
apify call scrapido/travel-agency-contact-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapido/travel-agency-contact-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/AFTDUveUDh6ymEUKw/builds/5ROwppGPuIrzHlYWY/openapi.json
