{
  "id": "IkJONIl2C7anCsqu",
  "name": "Find accommodation partners on Booking.com with Apify and GoogleSheet",
  "tags": [],
  "nodes": [
    {
      "id": "3194106e-05b6-46e6-a575-a06a1d750b55",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        80,
        -128
      ],
      "parameters": {
        "width": 480,
        "height": 1152,
        "content": "## Find accommodation partners on Booking.com with Apify and Google Sheets\n\n### How it works\n\n1. Manually trigger the workflow to initialize configurations for data processing.\n2. Retrieve and process data from Booking using Apify.\n3. Integrate data from Google Maps and refine through multiple merging tiers.\n4. Further refine data from Google Search and Contact Details Scraper to complete missing fields.\n5. Perform final merging and store processed data in Google Sheets.\n\n### Setup steps\n\n- [ ] Configure Apify credentials for running Actors\n- [ ] Set up Google Sheets API with access to the target sheet\n- [ ] Define necessary configurations such as 'destination', 'maxItems', and 'propertyType' in the Config node\n\n### Customization\n\nAdjust the 'maxItems' and 'propertyType' in the **Set Destination and Parameters** node for different data processing requirements.\nIf you want to run the workflow on a schedule you can replace the **Manual Trigger** with a **Schedule Trigger**.\n\n### Who it's for\nThis template can help you find and contact hospitality providers. It is relevant for:\n- BD teams at OTAs\n- Travel platforms\n- Tour operators\n- Travel agencies\n\n### Apify Actors used:\n- [Booking Scraper](https://apify.com/voyager/booking-scraper) - properties by destination and type\n- [Google Maps Email Extractor](https://apify.com/lukaskrivka/google-maps-with-contact-details) - email, phone, and socials \u26a0\ufe0f verify Actor name\n- [Google Search Results Scraper](https://apify.com/apify/google-search-scraper) - finds the property website\n- [Contact Details Scraper](https://apify.com/vdrmota/contact-info-scraper) - pulls contacts from that website"
      },
      "typeVersion": 1
    },
    {
      "id": "0efad9a0-293b-4d71-a37e-e8d076c7184a",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        640,
        80
      ],
      "parameters": {
        "color": 7,
        "width": 384,
        "height": 304,
        "content": "## Trigger and configuration setup\n\nInitialize the workflow with manual trigger and set initial configurations."
      },
      "typeVersion": 1
    },
    {
      "id": "0053752d-d8df-421d-9ac3-567a2af44035",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1056,
        80
      ],
      "parameters": {
        "color": 7,
        "width": 368,
        "height": 304,
        "content": "## Booking data retrieval\n\nUse Apify to run actors and retrieve Booking data."
      },
      "typeVersion": 1
    },
    {
      "id": "7a644971-f8f0-4fed-a6a2-d847e111717f",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1456,
        -160
      ],
      "parameters": {
        "color": 7,
        "width": 448,
        "height": 544,
        "content": "## Initial data processing\n\nProcess Booking data into lead rows and begin Google Maps data integration."
      },
      "typeVersion": 1
    },
    {
      "id": "b1d4f652-ecd0-4ec6-b3c2-714c093dd2e1",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1840,
        512
      ],
      "parameters": {
        "color": 7,
        "width": 784,
        "height": 304,
        "content": "## Merge and search refinement\n\nRefine data through multiple merging tiers using Google Maps and Search."
      },
      "typeVersion": 1
    },
    {
      "id": "9136f939-e5bf-42ef-8038-509e370cf57b",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2480,
        -176
      ],
      "parameters": {
        "color": 7,
        "width": 864,
        "height": 560,
        "content": "## Final data processing and storage\n\nFinalize merging with contact details and store in Google Sheets."
      },
      "typeVersion": 1
    },
    {
      "id": "8b1933a9-64a4-415e-a0d7-45ffee1586b9",
      "name": "Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        688,
        208
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "ec442f74-62a2-46b8-944e-c02b863a1862",
      "name": "Set Destination and Parameters",
      "type": "n8n-nodes-base.set",
      "position": [
        880,
        208
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "dest",
              "name": "destination",
              "type": "string",
              "value": "Ho Chi Minh City"
            },
            {
              "id": "max",
              "name": "maxItems",
              "type": "number",
              "value": 100
            },
            {
              "id": "ptype",
              "name": "propertyType",
              "type": "string",
              "value": "Apartments"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "0b7671b9-7f96-4f76-ae0d-1727c46d8712",
      "name": "Execute Booking Actor",
      "type": "@apify/n8n-nodes-apify.apify",
      "position": [
        1104,
        208
      ],
      "parameters": {
        "actorId": {
          "__rl": true,
          "mode": "list",
          "value": "oeiQgfg5fsmIJB7Cn",
          "cachedResultName": "voyager/booking-scraper"
        },
        "customBody": "={\n  \"search\": \"{{ $('Set Destination and Parameters').first().json.destination }}\",\n  \"maxItems\": {{ $('Set Destination and Parameters').first().json.maxItems }},\n  \"propertyType\": \"{{ $('Set Destination and Parameters').first().json.propertyType }}\",\n  \"sortBy\": \"distance_from_search\",\n  \"currency\": \"USD\",\n  \"language\": \"en-us\",\n  \"checkIn\": \"2026-08-21\",\n  \"checkOut\": \"2026-08-31\",\n  \"rooms\": 1,\n  \"adults\": 2\n}"
      },
      "typeVersion": 1
    },
    {
      "id": "9017176d-ba5b-4c13-b70a-96c75be568d9",
      "name": "Retrieve Booking Data",
      "type": "@apify/n8n-nodes-apify.apify",
      "position": [
        1280,
        208
      ],
      "parameters": {
        "options": {},
        "resource": "Datasets",
        "datasetId": "={{ $json.defaultDatasetId }}"
      },
      "typeVersion": 1
    },
    {
      "id": "125781b9-1ff5-4dd3-b719-14fe70e11671",
      "name": "Execute Maps Actor",
      "type": "@apify/n8n-nodes-apify.apify",
      "onError": "continueRegularOutput",
      "position": [
        1552,
        208
      ],
      "parameters": {
        "actorId": {
          "__rl": true,
          "mode": "list",
          "value": "WnMxbsRLNbPeYL6ge",
          "cachedResultName": "lukaskrivka/google-maps-with-contact-details"
        },
        "customBody": "={{ { \"searchStringsArray\": $('Map Booking to Lead Rows').all().filter(i => !i.json.email).map(i => i.json.name + ', ' + i.json._dest), \"locationQuery\": $('Set Destination and Parameters').first().json.destination, \"maxCrawledPlacesPerSearch\": 1, \"language\": \"en\", \"countryCode\": \"us\" } }}"
      },
      "executeOnce": true,
      "typeVersion": 1
    },
    {
      "id": "50396127-4151-44d9-9994-04bc82d7b70c",
      "name": "Retrieve Maps Data",
      "type": "@apify/n8n-nodes-apify.apify",
      "onError": "continueRegularOutput",
      "position": [
        1744,
        208
      ],
      "parameters": {
        "options": {},
        "resource": "Datasets",
        "datasetId": "={{ $json[\"defaultDatasetId\"] }}"
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "id": "727106a5-7686-4c75-b909-307aade1b4b9",
      "name": "Merge Final Data",
      "type": "n8n-nodes-base.code",
      "position": [
        2976,
        32
      ],
      "parameters": {
        "jsCode": "// TIER 4 merge + finalize: fill email/phone/socials from the contact scraper, then output clean rows.\nconst norm = (s) => (s == null ? '' : String(s)).toLowerCase().replace(/\\s+/g, ' ').trim();\nconst joinArr = (a) => Array.isArray(a) ? a.filter(Boolean).join(', ') : (a || '');\nconst firstOf = (a) => (Array.isArray(a) && a[0]) ? a[0] : '';\nconst hostOf = (u) => { try { return new URL(u).hostname.replace(/^www\\./, ''); } catch (e) { return ''; } };\nlet contacts = [];\ntry { contacts = $('Retrieve Contact Data').all().map((i) => i.json); } catch (e) { contacts = []; }\nconst byHost = {};\nfor (const it of contacts) { const hh = it.domain || hostOf(it.originalStartUrl); if (hh) byHost[hh] = it; }\nreturn $('Assign Candidate Websites').all().map(({ json: l }) => {\n  if (!l.email && l.website) {\n    const it = byHost[hostOf(l.website)] || {};\n    const em = firstOf(it.emails);\n    if (em) { l.email = em; l.contactSource = 'website-contact'; }\n    if (!l.phone) l.phone = firstOf(it.phones) || '';\n    if (!l.socials) l.socials = [it.instagrams, it.facebooks, it.youtubes].map(joinArr).filter(Boolean).join(' | ');\n  }\n  const { _key, _dest, ...row } = l;\n  return { json: row };\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "b41a29e3-c54a-4115-8527-27a112cb074e",
      "name": "Append Leads to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        3152,
        32
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "type",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "type",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "address",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "address",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "phone",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "phone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "companyName",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "companyName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "hostName",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "hostName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "managedProperties",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "managedProperties",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "rating",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "rating",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "stars",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "stars",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "reviews",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "reviews",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "city",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "city",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "country",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "country",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "registrationNumber",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "registrationNumber",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "traderAddress",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "traderAddress",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "website",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "website",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "socials",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "socials",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "contactSource",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "contactSource",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "BookingURL",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "BookingURL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1EsDV0yLRHRah4uGBmqvV6aLrrLbKZVCfHhnm6sgKvB0/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1EsDV0yLRHRah4uGBmqvV6aLrrLbKZVCfHhnm6sgKvB0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1EsDV0yLRHRah4uGBmqvV6aLrrLbKZVCfHhnm6sgKvB0/edit?usp=drivesdk",
          "cachedResultName": "Booking lead n8n"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "2790fa15-165b-4877-ad65-f90120d011f2",
      "name": "Map Booking to Lead Rows",
      "type": "n8n-nodes-base.code",
      "position": [
        1504,
        0
      ],
      "parameters": {
        "jsCode": "// TIER 1: map Booking items -> lead rows; contact comes from traderInfo (region-gated).\nconst dest = $('Set Destination and Parameters').first().json.destination;\nconst norm = (s) => (s == null ? '' : String(s)).toLowerCase().replace(/\\s+/g, ' ').trim();\nreturn $('Retrieve Booking Data').all().map(({ json: b }) => {\n  const t = b.traderInfo || {}, h = b.hostInfo || {}, ta = t.address || {};\n  const traderAddress = [ta.street, [ta.postalCode, ta.city].filter(Boolean).join(' '), ta.state, ta.countryCode].filter(Boolean).join(', ');\n  return { json: {\n    name: b.name || '', type: b.type || '', address: (b.address && b.address.full) || '',\n    email: t.email || '', phone: t.phone || '',\n    companyName: t.companyName || '', hostName: h.name || '', managedProperties: h.managedProperties != null ? h.managedProperties : '',\n    rating: b.rating != null ? b.rating : '', stars: b.stars != null ? b.stars : '', reviews: b.reviews != null ? b.reviews : '',\n    city: (b.address && b.address.city) || '', country: ((b.address && b.address.country) || '').toUpperCase(),\n    registrationNumber: t.registrationNumber || '', traderAddress,\n    website: '', socials: '', contactFormUrl: '',\n    contactSource: t.email ? 'booking-trader' : 'none',\n    BookingURL: b.url || '', _key: norm(b.name), _dest: dest\n  } };\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "4c95d918-b786-4832-9dd4-f677df5b00aa",
      "name": "Merge Maps Data",
      "type": "n8n-nodes-base.code",
      "position": [
        1904,
        656
      ],
      "parameters": {
        "jsCode": "// TIER 2 merge: fill email/phone/website/socials from Google Maps for leads still missing email.\nconst norm = (s) => (s == null ? '' : String(s)).toLowerCase().replace(/\\s+/g, ' ').trim();\nconst joinArr = (a) => Array.isArray(a) ? a.filter(Boolean).join(', ') : (a || '');\nconst OTA = /booking\\.com|agoda|expedia|decolar|hotels\\.com|tripadvisor|airbnb|vrbo|trip\\.com|hostelworld|trivago|kayak|yelp\\.|google\\.|facebook\\.com|instagram\\.com|x\\.com|twitter\\.com|linkedin\\.com|youtube\\.com/i;\nconst cleanSite = (w) => (w && !OTA.test(String(w))) ? String(w) : '';\nconst firstOf = (a) => (Array.isArray(a) && a[0]) ? a[0] : '';\nlet maps = [];\ntry { maps = $('Retrieve Maps Data').all().map((i) => i.json); } catch (e) { maps = []; }\nconst byKey = {};\nfor (const c of maps) { if (c && c.searchString) byKey[norm(c.searchString)] = c; if (c && c.title && !byKey[norm(c.title)]) byKey[norm(c.title)] = c; }\nreturn $('Map Booking to Lead Rows').all().map(({ json: l }) => {\n  if (!l.email) {\n    const c = byKey[norm(l.name + ', ' + l._dest)] || byKey[l._key] || {};\n    const em = firstOf(c.emails); const ph = firstOf(c.phones) || c.phone || ''; const site = cleanSite(c.website);\n    if (site && !l.website) l.website = site;\n    if (!l.socials) l.socials = [c.linkedIns, c.instagrams, c.facebooks, c.twitters, c.youtubes, c.tiktoks].map(joinArr).filter(Boolean).join(' | ');\n    if (em) { l.email = em; l.contactSource = 'google-maps'; }\n    if (!l.phone && ph) l.phone = ph;\n  }\n  return { json: l };\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "da797cfe-954f-43d4-a4cd-cd4c28679240",
      "name": "Execute Search Actor",
      "type": "@apify/n8n-nodes-apify.apify",
      "onError": "continueRegularOutput",
      "position": [
        2128,
        656
      ],
      "parameters": {
        "actorId": {
          "__rl": true,
          "mode": "list",
          "value": "nFJndFXA5zjCTuudP",
          "cachedResultName": "apify/google-search-scraper"
        },
        "customBody": "={{ { \"queries\": $('Merge Maps Data').all().filter(i => !i.json.email && !i.json.website).map(i => i.json.name + ' ' + (i.json.city || i.json._dest) + ' official website').join(String.fromCharCode(10)), \"maxPagesPerQuery\": 1, \"resultsPerPage\": 5, \"countryCode\": \"us\", \"languageCode\": \"en\" } }}"
      },
      "executeOnce": true,
      "typeVersion": 1
    },
    {
      "id": "373b8732-0a97-48be-af8d-ac2adb077a8d",
      "name": "Retrieve Search Data",
      "type": "@apify/n8n-nodes-apify.apify",
      "onError": "continueRegularOutput",
      "position": [
        2320,
        656
      ],
      "parameters": {
        "options": {},
        "resource": "Datasets",
        "datasetId": "={{ $json[\"defaultDatasetId\"] }}"
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "id": "da2f55e3-68a5-44d1-8a1d-a5c57fb8a939",
      "name": "Assign Candidate Websites",
      "type": "n8n-nodes-base.code",
      "position": [
        2480,
        656
      ],
      "parameters": {
        "jsCode": "// TIER 3 merge: assign a candidate website (from Google Search) to leads still missing email AND website.\nconst norm = (s) => (s == null ? '' : String(s)).toLowerCase().replace(/\\s+/g, ' ').trim();\nconst OTA = /booking\\.com|agoda|expedia|decolar|hotels\\.com|tripadvisor|airbnb|vrbo|trip\\.com|hostelworld|trivago|kayak|yelp\\.|google\\.|facebook\\.com|instagram\\.com|x\\.com|twitter\\.com|linkedin\\.com|youtube\\.com/i;\nconst cleanSite = (w) => (w && !OTA.test(String(w))) ? String(w) : '';\nlet search = [];\ntry { search = $('Retrieve Search Data').all().map((i) => i.json); } catch (e) { search = []; }\nconst byTerm = {};\nfor (const p of search) { const term = p.searchQuery && p.searchQuery.term; if (!term) continue; const url = (p.organicResults || []).map((r) => cleanSite(r.url)).find(Boolean) || ''; if (url) byTerm[norm(term)] = url; }\nreturn $('Merge Maps Data').all().map(({ json: l }) => {\n  if (!l.email && !l.website) {\n    const q = norm(l.name + ' ' + (l.city || l._dest) + ' official website');\n    if (byTerm[q]) l.website = byTerm[q];\n  }\n  return { json: l };\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "f174dd50-22e1-430c-944a-9f8cb647e195",
      "name": "Execute Contact Actor",
      "type": "@apify/n8n-nodes-apify.apify",
      "onError": "continueRegularOutput",
      "position": [
        2592,
        32
      ],
      "parameters": {
        "actorId": {
          "__rl": true,
          "mode": "list",
          "value": "9Sk4JJhEma9vBKqrg",
          "cachedResultName": "vdrmota/contact-info-scraper"
        },
        "customBody": "={{ { \"startUrls\": $('Assign Candidate Websites').all().filter(i => !i.json.email && i.json.website).map(i => ({ url: i.json.website })), \"maxDepth\": 2, \"maxRequestsPerStartUrl\": 20, \"mergeContacts\": true, \"sameDomain\": true, \"considerChildFrames\": true, \"useBrowser\": false, \"proxyConfig\": { \"useApifyProxy\": true } } }}"
      },
      "executeOnce": true,
      "typeVersion": 1
    },
    {
      "id": "6b956f1a-413e-40aa-87e4-4b8dc99192bf",
      "name": "Retrieve Contact Data",
      "type": "@apify/n8n-nodes-apify.apify",
      "onError": "continueRegularOutput",
      "position": [
        2800,
        32
      ],
      "parameters": {
        "options": {},
        "resource": "Datasets",
        "datasetId": "={{ $json[\"defaultDatasetId\"] }}"
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "executionOrder": "v1"
  },
  "versionId": "f46d86d3-ac1b-4761-8963-e5cf0d4bb48e",
  "nodeGroups": [],
  "connections": {
    "Manual Trigger": {
      "main": [
        [
          {
            "node": "Set Destination and Parameters",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Maps Data": {
      "main": [
        [
          {
            "node": "Execute Search Actor",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Final Data": {
      "main": [
        [
          {
            "node": "Append Leads to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Execute Maps Actor": {
      "main": [
        [
          {
            "node": "Retrieve Maps Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Retrieve Maps Data": {
      "main": [
        [
          {
            "node": "Merge Maps Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Execute Search Actor": {
      "main": [
        [
          {
            "node": "Retrieve Search Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Retrieve Search Data": {
      "main": [
        [
          {
            "node": "Assign Candidate Websites",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Execute Booking Actor": {
      "main": [
        [
          {
            "node": "Retrieve Booking Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Execute Contact Actor": {
      "main": [
        [
          {
            "node": "Retrieve Contact Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Retrieve Booking Data": {
      "main": [
        [
          {
            "node": "Map Booking to Lead Rows",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Retrieve Contact Data": {
      "main": [
        [
          {
            "node": "Merge Final Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Map Booking to Lead Rows": {
      "main": [
        [
          {
            "node": "Execute Maps Actor",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Assign Candidate Websites": {
      "main": [
        [
          {
            "node": "Execute Contact Actor",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Destination and Parameters": {
      "main": [
        [
          {
            "node": "Execute Booking Actor",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}