# Hotel Direct Website Finder (`esrok/hotel-direct-website-finder`) Actor

Find official hotel websites, contact pages, public emails, public phone numbers, social links, and confidence scores from hotel names, listing URLs, or known hotel websites.

- **URL**: https://apify.com/esrok/hotel-direct-website-finder.md
- **Developed by:** [Esrok](https://apify.com/esrok) (community)
- **Categories:** Lead generation, Travel, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 hotel contact records

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Hotel Direct Website Finder

Extract official hotel websites, contact pages, public emails, public phone numbers, social links, and confidence scores from hotel names, hotel listing URLs, or known hotel websites.

Best for hotel marketers, travel agencies, B2B lead generators, tourism researchers, and automation teams that need clean public hotel contact data without manual copying.

### What this Actor does

Hotel Direct Website Finder helps turn public hotel names and listing URLs into structured hotel website and contact records. It searches public web results, filters out common travel agency pages, scans likely official hotel websites, and returns spreadsheet-ready data.

The Actor is built for public data extraction only. It does not log in, bypass restrictions, guess private emails, or access private hotel systems.

### Why use it

This Actor focuses on accuracy over noisy volume. Every record includes a `confidenceScore`, source fields, and public contact fields when visible, so teams can quickly decide which hotel matches are reliable enough for outreach, enrichment, or review.

### Who it is for

- Hotel marketers building outreach lists
- Travel agencies researching accommodation partners
- B2B lead generation teams
- Hospitality data providers
- Tourism researchers
- Automation builders using Apify, Make, Zapier, n8n, Google Sheets, or custom APIs

### Use cases

- Find official websites for hotel names
- Enrich hotel databases with public contact pages
- Collect public hotel emails and phone numbers where visible
- Find public hotel social profiles
- Research hotels from travel platform exports
- Prepare clean CSV, JSON, or Excel files for outreach workflows

### Input

- `hotelNames` - hotel names to research
- `listingUrls` - public hotel listing URLs to inspect
- `websiteUrls` - known hotel websites to scan directly
- `location` - optional city/country to improve matching
- `maxResults` - maximum hotel records to return
- `findContactPage` - scan for a public contact page
- `findEmails` - extract publicly visible emails
- `findPhones` - extract publicly visible phone numbers
- `findSocials` - extract publicly linked social profiles
- `deduplicateResults` - remove duplicate hotel/website records
- `proxyConfiguration` - optional Apify proxy support
- `debugMode` - save extra debugging data for troubleshooting

### Output

Each dataset item can include:

- `hotelName`
- `inputUrl`
- `sourceType`
- `officialWebsite`
- `confidenceScore`
- `contactPage`
- `email`
- `phone`
- `instagram`
- `facebook`
- `linkedin`
- `twitterX`
- `address`
- `city`
- `country`
- `sourceSearchUrl`
- `pagesScanned`
- `scrapedAt`

### Example input

```json
{
  "hotelNames": ["The Hoxton Amsterdam", "Hotel Pulitzer Amsterdam"],
  "location": "Amsterdam, Netherlands",
  "maxResults": 25,
  "findContactPage": true,
  "findEmails": true,
  "findPhones": true,
  "findSocials": true,
  "deduplicateResults": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
````

### Example output

```json
{
  "hotelName": "The Hoxton Amsterdam",
  "inputUrl": null,
  "sourceType": "hotelName",
  "officialWebsite": "https://thehoxton.com/amsterdam/",
  "confidenceScore": 92,
  "contactPage": "https://thehoxton.com/amsterdam/contact/",
  "email": "hello.amsterdam@thehox.com",
  "phone": "+31 20 888 5555",
  "instagram": "https://www.instagram.com/thehoxtonhotel/",
  "facebook": "https://www.facebook.com/thehoxton",
  "linkedin": "https://www.linkedin.com/company/the-hoxton",
  "twitterX": "https://twitter.com/thehoxtonhotel",
  "address": "Herengracht 255, Amsterdam",
  "city": "Amsterdam",
  "country": "Netherlands",
  "sourceSearchUrl": "https://duckduckgo.com/html/?q=The%20Hoxton%20Amsterdam%20official%20hotel%20website",
  "pagesScanned": 2,
  "scrapedAt": "2026-05-30T12:00:00.000Z"
}
```

### How to run

1. Open the Actor on Apify.
2. Add hotel names, hotel listing URLs, or known hotel website URLs.
3. Choose contact fields to extract.
4. Run the Actor.
5. Open the dataset and export the results.

### Export and integrations

You can export results from Apify as CSV, JSON, JSONL, XML, RSS, or Excel. You can also connect the dataset to Make, Zapier, n8n, Google Sheets, webhooks, or your own API workflow.

### API usage

Start a run with the Apify API:

```bash
curl "https://api.apify.com/v2/acts/esrok~hotel-direct-website-finder/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"hotelNames":["The Hoxton Amsterdam"],"location":"Amsterdam, Netherlands","maxResults":10}'
```

Fetch dataset items:

```bash
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?format=json&clean=true&token=YOUR_APIFY_TOKEN"
```

### Responsible use

Use this Actor only for lawful public web research. Do not use it to collect private data, bypass logins, scrape hidden data, or spam hotels. The Actor only extracts publicly visible information from public pages.

### Limitations

- Search results can vary by region, language, and availability.
- Some hotel websites hide emails behind forms or scripts.
- The Actor does not guess private email addresses.
- A confidence score is a quality signal, not a legal or commercial guarantee.
- Websites that block automated traffic may require proxy settings or may not return results.

### FAQ

#### Does this scrape private hotel data?

No. It only collects publicly visible website and contact information.

#### Can it find emails for every hotel?

No. It only returns emails that are publicly visible on the scanned website or contact page.

#### Does it work with travel platform listing URLs?

Yes. It can inspect public listing pages and look for likely official hotel website links, but support depends on what the listing page exposes publicly.

#### Why is there a confidence score?

Hotel names can be ambiguous. The confidence score helps you prioritize strong official website matches and review weak ones.

# Actor input Schema

## `hotelNames` (type: `array`):

Hotel names to research. Add city/country in the location field for better matching.

## `listingUrls` (type: `array`):

Public hotel listing URLs from travel platforms. The Actor will look for hotel names and public outbound website/contact links.

## `websiteUrls` (type: `array`):

Optional known hotel websites to scan directly for contact pages, emails, phones, and social links.

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

Optional city, region, or country used to improve search accuracy.

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

Maximum hotel records to return.

## `findContactPage` (type: `boolean`):

Scan the official website for a public contact page.

## `findEmails` (type: `boolean`):

Extract only publicly visible email addresses from hotel websites/contact pages.

## `findPhones` (type: `boolean`):

Extract only publicly visible phone numbers from hotel websites/contact pages.

## `findSocials` (type: `boolean`):

Extract publicly linked social profiles from hotel pages.

## `deduplicateResults` (type: `boolean`):

Remove duplicate hotels/websites from the output.

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

Optional Apify proxy configuration. Useful for reliable public web requests.

## `debugMode` (type: `boolean`):

Save extra request/debug information to the key-value store.

## Actor input object example

```json
{
  "hotelNames": [
    "The Hoxton Amsterdam",
    "Hotel Pulitzer Amsterdam"
  ],
  "listingUrls": [],
  "websiteUrls": [],
  "location": "Amsterdam, Netherlands",
  "maxResults": 25,
  "findContactPage": true,
  "findEmails": true,
  "findPhones": true,
  "findSocials": true,
  "deduplicateResults": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "debugMode": false
}
```

# Actor output Schema

## `hotelWebsiteMatches` (type: `string`):

Clean public hotel website and contact records for lead generation, enrichment, and research workflows.

# 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 = {
    "hotelNames": [
        "The Hoxton Amsterdam",
        "Hotel Pulitzer Amsterdam"
    ],
    "listingUrls": [],
    "websiteUrls": [],
    "location": "Amsterdam, Netherlands",
    "maxResults": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("esrok/hotel-direct-website-finder").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 = {
    "hotelNames": [
        "The Hoxton Amsterdam",
        "Hotel Pulitzer Amsterdam",
    ],
    "listingUrls": [],
    "websiteUrls": [],
    "location": "Amsterdam, Netherlands",
    "maxResults": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("esrok/hotel-direct-website-finder").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "hotelNames": [
    "The Hoxton Amsterdam",
    "Hotel Pulitzer Amsterdam"
  ],
  "listingUrls": [],
  "websiteUrls": [],
  "location": "Amsterdam, Netherlands",
  "maxResults": 25
}' |
apify call esrok/hotel-direct-website-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=esrok/hotel-direct-website-finder",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Hotel Direct Website Finder",
        "description": "Find official hotel websites, contact pages, public emails, public phone numbers, social links, and confidence scores from hotel names, listing URLs, or known hotel websites.",
        "version": "1.0",
        "x-build-id": "NhkLsduUoWZvfZH47"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/esrok~hotel-direct-website-finder/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-esrok-hotel-direct-website-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/esrok~hotel-direct-website-finder/runs": {
            "post": {
                "operationId": "runs-sync-esrok-hotel-direct-website-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/esrok~hotel-direct-website-finder/run-sync": {
            "post": {
                "operationId": "run-sync-esrok-hotel-direct-website-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "hotelNames": {
                        "title": "Hotel names",
                        "type": "array",
                        "description": "Hotel names to research. Add city/country in the location field for better matching.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "listingUrls": {
                        "title": "Hotel listing URLs",
                        "type": "array",
                        "description": "Public hotel listing URLs from travel platforms. The Actor will look for hotel names and public outbound website/contact links.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "websiteUrls": {
                        "title": "Known hotel website URLs",
                        "type": "array",
                        "description": "Optional known hotel websites to scan directly for contact pages, emails, phones, and social links.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Optional city, region, or country used to improve search accuracy."
                    },
                    "maxResults": {
                        "title": "Maximum results",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum hotel records to return.",
                        "default": 50
                    },
                    "findContactPage": {
                        "title": "Find contact page",
                        "type": "boolean",
                        "description": "Scan the official website for a public contact page.",
                        "default": true
                    },
                    "findEmails": {
                        "title": "Find public emails",
                        "type": "boolean",
                        "description": "Extract only publicly visible email addresses from hotel websites/contact pages.",
                        "default": true
                    },
                    "findPhones": {
                        "title": "Find public phones",
                        "type": "boolean",
                        "description": "Extract only publicly visible phone numbers from hotel websites/contact pages.",
                        "default": true
                    },
                    "findSocials": {
                        "title": "Find social links",
                        "type": "boolean",
                        "description": "Extract publicly linked social profiles from hotel pages.",
                        "default": true
                    },
                    "deduplicateResults": {
                        "title": "Deduplicate results",
                        "type": "boolean",
                        "description": "Remove duplicate hotels/websites from the output.",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional Apify proxy configuration. Useful for reliable public web requests.",
                        "default": {
                            "useApifyProxy": true
                        }
                    },
                    "debugMode": {
                        "title": "Debug mode",
                        "type": "boolean",
                        "description": "Save extra request/debug information to the key-value store.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
