How to find accommodation partners on Booking.com with Apify and n8n

Build an n8n workflow that turns any Booking.com destination into an outreach-ready list of host contacts.

Recruiting accommodation partners in a new destination usually means stitching together data from several sources. Booking.com shows you every property in the area, but not a way to reach the host. B2B contact databases like ZoomInfo and Apollo cover the hotel chains, not the independent apartments, guest houses, and B&Bs. To build a list of potential partners, you end up pasting property names into Google and hunting for an email one listing at a time, which doesn’t scale when a destination has thousands of them.

In this tutorial, we'll build a single n8n workflow using two Apify Actors to:

  • Discover every property in a destination on Booking.com
  • Enrich each property with contact details: email, website, phone, and social profiles
  • Export a clean, outreach-ready partner list straight to Google Sheets

By the end, you'll have a workflow that turns a destination into a spreadsheet of properties, addresses, websites, and contact emails, ready for outreach, CRM import, or scheduled refreshes.

n8n workflow scraping Booking.com and enriching data with emails
n8n workflow pulling data from Booking.com and enriching the datasets with contact information
Screenshot 2026-06-17 at 9.59.36.png
Cleaned spreadsheet with host contact details

How to build the partner discovery workflow with n8n

We'll use Booking Scraper to get a property list from Booking.com and enrich each property with contact details using Google Maps Email Extractor. We’ll then send everything to Google Sheets. Before you begin, make sure you have:

ℹ️
Apify tools are called Actors. They can perform simple actions, like filling out web forms or sending emails, and complex ones, such as crawling millions of web pages or transforming large datasets.

Actors come with built-in proxy management, anti-bot evasion, integrated storage with structured CSV, Excel, and JSON exports, and standardized input parameters (locations, keywords, limits, and so on). They also integrate with third-party apps and can be configured from tools such as n8n using the Apify nodes.

Step 1: Set up the Apify node to discover properties on Booking.com

Open n8n to create a new workflow and choose a manual trigger as the first step. Next, search for the Apify node in your canvas, and install it if you haven't already.

Select the Run an Actor and get dataset operation as the second step. Once the node opens, connect n8n to your Apify account. Click Create new credential to get started.

Next, you'll be asked for your Apify API token. Find it in Apify Console under Settings → API & Integrations, then copy the token.

Paste the token into n8n and save the credential. Your Apify connection is ready to use.

Now pick the Actor and grab its JSON input so n8n can run it. Go to Booking Scraper and configure the run in the UI. The scraper takes a destination as its search input. We'll use Cusco, Peru to find short-term rentals and guest houses for a tour operator expanding there.

This is also where you target the right partners. Booking Scraper lets you filter by property type (apartments, guest houses, bed and breakfasts, holiday homes, and villas, not only hotel chains), star rating, and price range, and sort by distance from your search. For this run, we keep the filters broad and cap results at 50 items.

Once you're happy with the configuration, switch to the JSON view and copy the input. Back in the n8n node, set the Actor source to Apify Store Actors, choose Booking Scraper from the list, and paste the JSON:

{
  "currency": "USD",
  "extractAdditionalHotelData": false,
  "language": "en-gb",
  "maxItems": 50,
  "minMaxPrice": "0-999999",
  "search": "Cusco, Peru",
  "sortBy": "distance_from_search",
  "starsCountFilter": "any"
}
n8n Booking Scraper input JSON

Test it by clicking Execute step at the top. You can also open Runs in Apify Console to watch the Actor scrape. When it finishes, the output appears next to the node as JSON: a list of properties, each with a name, an address (including city), a rating, review counts, and more.

For many properties in the EU and US, Booking Scraper returns a phone number and email directly. Outside those regions, contact details are often missing, which is exactly the case for Cusco. That gap is what the next two steps close.

Step 2: Aggregate property names and location for enrichment

The next Actor, Google Maps Email Extractor, looks up each property on Google Maps and pulls its contact details. To feed it, we need two inputs: the list of property names to search for, and the destination to search in. The Aggregate node builds both. Add it to the workflow.

Aggregate two fields from the Booking Scraper output:

  • Drag the name field to Input Field Name, switch on the Rename Field toggle, and set Output Field Name to searchStringsArray.
  • Add a second field, drag address.city to Input Field Name, switch on Rename Field, and set Output Field Name to locationQuery.

When you execute the step, the output holds one searchStringsArray (every property name) and one locationQuery (the city), ready for the enrichment Actor.

n8n Aggregate node configured

Step 3: Enrich each property with contact details

Add another Apify node, select Run an Actor and get dataset, and choose Google Maps Email Extractor. This Actor searches Google Maps for each property name in the destination, then scrapes the property's website and Google profile for an email, phone number, website, and social profiles.

Set the input to Expression and use the following:

{{ JSON.stringify({
  searchStringsArray: $json.searchStringsArray,
  locationQuery: $json.locationQuery[0],
  maxCrawledPlacesPerSearch: 10,
  website: "withWebsite",
  maximumLeadsEnrichmentRecords: 5,
  verifyLeadsEnrichmentEmails: true,
  scrapeSocialMediaProfiles: {
    facebooks: true,
    instagrams: true,
    youtubes: false,
    tiktoks: false,
    twitters: false
  }
}) }}

A quick read of the input:

  • searchStringsArray and locationQuery come straight from the Aggregate step. We take locationQuery[0] because Aggregate returns it as an array.
  • maxCrawledPlacesPerSearch caps how many Google Maps matches to check per property.
  • website: "withWebsite" keeps only places that have a website, which is where most emails live.
  • verifyLeadsEnrichmentEmails validates the emails it finds.
  • scrapeSocialMediaProfiles pulls Facebook and Instagram profiles, with the other networks switched off.

Execute the step. The output is structured contact data per property: title, website, address, emails, phone, and socials.

Google Maps Email Extractor output

One note on coverage: properties without a public website or email, often platform-managed rentals, come back blank. The contactable list is smaller than the full scrape. In practice, that's still the difference between a handful of contacts copied by hand and hundreds pulled in one run.

Step 4: Send the partner list to Google Sheets

Add one final node. Find the Google Sheets node, select it, and create a credential to connect your Google account.

Create a spreadsheet in Google Drive and prepare the columns for your data. We use four: Name, URL, Address, and Email.

Now configure the data flow. Set the operation to Append or update row in sheet, select your spreadsheet from Google Drive, pick the sheet, and set the mapping mode to Map Each Column Manually.

Map each column to a field from the enriched output:

  • title → Name
  • website → URL
  • address → Address
  • emails → Email

Set Name as the matching column. On re-runs, n8n then updates existing rows instead of creating duplicates, which keeps the list clean when you refresh it.

Once your columns are mapped, execute the whole workflow and watch the output flow into Google Sheets. Filter out properties with available email addresses.

That's it. You've built a workflow that scrapes Booking.com for properties in any destination, enriches each one with host contact details, and writes a clean partner list to a spreadsheet. It runs with a single click, can run as often as you need with the Schedule Trigger in n8n, and adapts to every market you expand into.

Prefer plain English? Run it with Claude and an Apify skill

If you'd rather skip building the workflow, there's a faster route: an Apify skill that does the same job through Claude. You describe what you want in plain language, and Claude runs the Actors for you in the right order, then hands back an enriched lead list as a CSV, JSON, or any other format.

Instead of two Actors and a Google Maps lookup, the skill runs a four-tier waterfall that always tries the cheapest, already-scraped data first and only pays for enrichment when a lead is still missing contact details:

  1. Booking Scraper pulls the properties matching your search and reads the host's email, phone, and company.
  2. Google Maps Email Extractor runs only for leads still missing an email, looking them up by property name and location to find contact details and a website.
  3. Google Search Results Scraper runs only for leads still without a website, searching for the official site.
  4. Contact Details Scraper runs only for leads that now have a website but no email, scraping the site for contact info.

Each row comes back with the property's rating, review count, and Booking URL, so you can rank and prioritize leads without reopening Booking.com.

Set up the skill

You need two things: the Apify connector (for Claude Desktop) or the Apify CLI, plus the skill itself.

Claude Desktop (connector):

  1. Make sure you have an Apify account.
  2. Add the Apify connector in Claude. Search "Apify" in the connector directory and install it, or add a custom connector pointing to https://mcp.apify.com.
Apify MCP connector in Claude

3. Sign in once. The first time Claude connects, it opens your browser to log in to Apify and authorize the connection. No tokens to copy or paste.

4. Install the skill by asking Claude to run:npx skills add apify/awesome-skills -s apify-booking-host-leads

The connector lets Claude run Apify Actors as tools, and the skill tells it which ones to use and in what order.

Claude Code (CLI):

If you're working in Claude Code or another coding agent, skip the connector and use the Apify CLI instead. Authenticate with apify login (or set the APIFY_TOKEN environment variable in your project settings), then install the same skill.

Run it

Once setup is done, just ask in plain English what you need. Example:

Give me a lead list of apartments in Paris from Booking.com, starting with the 20 highest-rated ones.

Claude runs Booking Scraper, reads host emails and company details from the results, fills the gaps with Google Maps and website enrichment, and hands you back a ready-to-use lead list.

Turn a destination into a partner pipeline

A property on Booking.com tells you the supply exists. A contact tells you how to recruit it. This workflow turns any destination into a contactable list, inclusive of independent hosts: the apartments, guest houses, and B&Bs that B2B databases miss.

With it in place, host outreach stops being slow manual research and becomes a repeatable system you can point at any market.

Apify logo
Try Apify today
Get $5 monthly usage and try Booking Scraper for free
Find partners
On this page

Publish and earn on Apify Store

The largest marketplace of tools for AI

Start here