Quick Overview This workflow uses Apify and Google Sheets to find accommodation leads from Booking.com, enrich them with Google Maps contact details, discover official websites via Google Search, scrape additional contacts from those sites, and then append the finalized partner list to a Google Sheets spreadsheet. How it works Manually triggers and sets the destination, maximum number of results, and property type to search. Runs the Apify Booking Scraper actor for the configured destination and retrieves the Booking.com dataset results. Maps each Booking.com result into a normalized lead record, using Booking trader details (when available) for initial email and phone fields. Runs the Apify Google Maps with Contact Details actor for leads missing email and merges any найден emails, phones, websites, and social links into the lead records. For leads still missing both email and website, runs the Apify Google Search Scraper actor to find an “official website” candidate and assigns the best non-OTA domain. Scrapes those candidate websites with the Apify Contact Info Scraper actor to extract emails/phones/socials and merges the results into the final lead rows.
Tags
Related workflows
See all Google Sheets→Generate and vet ad creative with OpenAI, Spendict, Google Sheets, and Slack
Quick overview This workflow collects a product brief via an n8n form, uses OpenAI to generate ad variants, gates each one with Spendict run/fix/kill scoring, auto-rewrites fixable ads, logs approved results to Google Sheets, and posts an approval count to Slack. How it works Receives a product brief from an n8n form submission with product, platform, audience, and desired variant count. Sends the brief to OpenAI Chat Completions to generate multiple ad variants (headline + primary text) in JSON. Splits the OpenAI response into individual variants and submits each one to Spendict’s /assess endpoint for a launch recommendation and score. Routes variants by Spendict verdict: “run” is accepted, “fix_first” is rewritten with the prioritized fixes and re-scored by Spendict, and “kill” is collected as rejected output. Combines accepted and auto-fixed variants and appends them as rows in Google Sheets with status, copy, platform, verdict, and score. Aggregates the logged approved variants and posts a summary message to Slack via an incoming webhook. Setup Add HTTP Header Auth credentials for OpenAI (Authorization: Bearer ) in both OpenAI HTTP Request steps. Add HTTP Header Auth credential
Audit YouTube video metadata changes with Google Sheets and Slack
Quick Overview This workflow runs daily to fetch all videos from a YouTube channel, compare key metadata fields against a prior snapshot stored in Google Sheets, log any differences, and optionally post a summary to Slack. How it works Runs every day at 08:00 on a schedule. Reads your YouTube channel’s uploads playlist and retrieves each video’s current title, description, tags, privacy status, and category. Loads the previous snapshot from Google Sheets and compares the tracked fields to detect added, removed/hidden, or changed metadata. When changes are found, appends each changed field (old value vs new value) to a Google Sheets change log. Clears and rewrites the snapshot in Google Sheets with the latest metadata so the next run compares against today’s baseline. Posts a summary to a Slack channel when changes are detected (or when alwaysNotify is enabled). Setup Add a YouTube (Google) OAuth2 credential and set your target channel ID in the audit options. Add a Google Sheets credential, set the spreadsheet ID, and ensure your spreadsheet has a Snapshot tab and a Change Log tab mapped in the Google Sheets steps. Add a Slack credential and set the target Slack channel ID for the
Unpublish expired YouTube videos using Google Sheets and Slack
Quick Overview This workflow runs daily and checks a Google Sheets embargo schedule for YouTube videos whose unpublish date has passed, then updates their privacy status on YouTube and logs the result back to the sheet while sending a recap (or “nothing due”) message to Slack. How it works Runs every day at 6am on a schedule trigger. Reads your embargo control spreadsheet from Google Sheets. Selects videos whose “Unpublish Date” is today or earlier (using a configured timezone), skips rows already marked Expired, and defaults the target privacy status to private when missing. For each due video, fetches the current video snippet and status from YouTube. If the video is not already at the target privacy status, updates the video on YouTube to private or unlisted while preserving its existing title and category. Updates the matching row in Google Sheets to Status = Expired and writes an “Unpublished At” timestamp, then posts a Slack recap of the processed videos. If no videos are due, posts a “nothing due” notice to the configured Slack channel. Setup Add a YouTube (Google) OAuth2 credential with permission to read and update videos, and select it in both YouTube steps. Add a Google