{
  "id": "YhwckWo4y8FNZ4v4",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Cheapest_Flight_Finder_via_Bright_Data",
  "tags": [],
  "nodes": [
    {
      "id": "6da8e17f-3448-4195-b812-43564470d376",
      "name": "Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -480,
        2340
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "6e92c67b-3e06-4de8-ac8f-f09d33bc6115",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2460,
        500
      ],
      "parameters": {
        "color": 4,
        "width": 1300,
        "height": 320,
        "content": "=======================================\n            WORKFLOW ASSISTANCE\n=======================================\nFor any questions or support, please contact:\n    Yaron@nofluff.online\n\nExplore more tips and tutorials here:\n   - YouTube: https://www.youtube.com/@YaronBeen/videos\n   - LinkedIn: https://www.linkedin.com/in/yaronbeen/\n=======================================\n"
      },
      "typeVersion": 1
    },
    {
      "id": "ffb0ba94-e697-409d-9190-1e6f8656c775",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2460,
        840
      ],
      "parameters": {
        "color": 4,
        "width": 1289,
        "height": 2458,
        "content": "# \ud83e\uddf3 \u2708\ufe0f **Flight Price Scraper from Skiplagged using Bright Data**\n\nThis automation helps you extract **cheap flight prices** from [Skiplagged.com](https://skiplagged.com) using **Bright Data** and automatically logs those prices into a **Google Sheet** for review and tracking.\n\n---\n\n## \ud83d\udd39 **SECTION 1: Getting the Flight Prices**\n\n*Combining: Manual Trigger + HTTP Request (Bright Data)*\n\n### \ud83c\udf29\ufe0f 1. **Manual Trigger**\n\n* **\ud83e\udde0 What it does**: Starts the workflow when you click **Execute Workflow** in n8n.\n* **\ud83d\udc68\u200d\ud83c\udfeb For beginners**: Think of it like a **start button**. No schedule, just run it manually whenever you want to check for deals.\n\n---\n\n### \ud83c\udf10 2. **Fetch Flight Details from Skiplagged via Bright Data**\n\n* **\ud83d\udd27 Node Type**: `HTTP Request` (POST)\n\n* **\ud83c\udf0d What's happening**:\n\n  * Uses Bright Data Web Unlocker to **bypass bot protection** and fetch HTML content from Skiplagged.\n  * You\u2019re sending a POST request to `https://api.brightdata.com/request`, asking Bright Data to open:\n    `https://skiplagged.com/flights/DUB/LON/2024-06-30` (or a dynamic route).\n  * Headers & proxy make it **look like a real browser**.\n\n* **\ud83d\udca1 Why it\u2019s useful**:\n\n  * **Skiplagged is tricky to scrape** directly, but Bright Data makes it easy.\n  * You get the **entire HTML** of the search results page, ready to extract price info.\n\n* \u2705 **Returns**: HTML of the page (not yet structured \u2014 we handle that next)\n\n---\n\n## \ud83d\udd39 **SECTION 2: Extracting & Storing Flight Prices**\n\n*Combining: HTML Node + Google Sheets*\n\n### \ud83d\udda5\ufe0f 3. **HTML Extract (extractHtmlContent)**\n\n* **\ud83d\udd27 Node Type**: `HTML Extract`\n\n* **\ud83c\udfaf Goal**: Pull out **all flight prices** from the raw HTML.\n\n* **How it works**:\n\n  * Uses a selector like `.flights-landing__flight-price` to find every element that matches.\n  * **Returns multiple values** if \"Return All Matches\" is enabled.\n\n* \ud83e\udde0 **Beginner Note**: Imagine your browser looking for all `<div class=\"flights-landing__flight-price\">`. This is like **copying all price tags off the screen**.\n\n* \u2705 **Returns**:\n\n  ```json\n  [\n    \"$104\", \"$117\", \"$99\", \"$88\"\n  ]\n  ```\n\n---\n\n### \ud83d\udcca 4. **Google Sheets (append: sheet)**\n\n* **\ud83d\udd27 Node Type**: `Google Sheets Append`\n\n* **\ud83d\udccb What it does**: Appends each flight price as a new row in your spreadsheet.\n\n* **\ud83d\udee0\ufe0f Tip**: Make sure your sheet has one column titled something like `Price` and authentication is set up.\n\n* \u274c **Error Warning**: If this node is red, likely issues are:\n\n  * Missing Google credentials\n  * Sheet name doesn\u2019t match\n  * Field mapping mismatch\n\n* \u2705 **Returns**: New rows in your sheet like:\n\n| Price |\n| ----- |\n| \\$88  |\n| \\$99  |\n| \\$104 |\n\n---\n\n## \ud83c\udf1f Final Thoughts: Why This Is Powerful\n\n\u2705 **Perfect for spontaneous travelers** who want to grab last-minute deals.\n\u2705 **Low-cost** thanks to free tools (n8n + Google Sheets) and flexible Bright Data usage.\n\u2705 **Easy to expand**: Add logic to filter cheapest flight, add Telegram/email alert, or schedule it daily.\n\n---\n\n## \ud83e\udded Next Steps You Could Add\n\n* \ud83d\udcc5 Add a **Cron node** to automate daily checks.\n* \ud83d\udcec Add **Telegram or Email node** to notify when price < \\$100.\n* \ud83d\udd27 Use **Set node** to make route and date dynamic.\n\n---\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "3e3a26e0-eeed-4a0f-85bb-ac49e438eb43",
      "name": "HTML",
      "type": "n8n-nodes-base.html",
      "position": [
        20,
        2340
      ],
      "parameters": {
        "options": {},
        "operation": "extractHtmlContent",
        "extractionValues": {
          "values": [
            {
              "key": "Title",
              "cssSelector": "<span class=\"flights-landing__flight-logo-txt\" data-translate=\"false\">United</span>"
            },
            {
              "key": "Price",
              "cssSelector": "<div class=\"flights-landing__flight-price\">$114</div>"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "4213760f-1d00-4d4c-b918-5b46728c78e8",
      "name": "Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        240,
        2340
      ],
      "parameters": {
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "c1bda948-e9f0-4539-ba18-fa37ac431d91",
      "name": "Fetch flight details from skiplegged via bright data",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -260,
        2340
      ],
      "parameters": {
        "url": "https://api.brightdata.com/request",
        "method": "POST",
        "options": {},
        "jsonBody": "{\n  \"zone\": \"n8n_unblocker\",\n  \"url\": \"https://skiplagged.com/flights/NYC/LAX/2024-07-01\",\n  \"country\": \"ie\",\n  \"format\": \"raw\",\n  \"headers\": {\n    \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/0.0.0.0 Safari/537.36\",\n    \"Accept-Language\": \"en-US,en;q=0.9\",\n    \"Accept\": \"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\"\n  }\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer YOUR_TOKEN_HERE"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "6f4009d4-bd47-4bda-a4b1-cd6bdfa59821",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -500,
        1340
      ],
      "parameters": {
        "color": 3,
        "width": 400,
        "height": 1200,
        "content": "## \ud83d\udd39 **SECTION 1: Getting the Flight Prices**\n\n*Combining: Manual Trigger + HTTP Request (Bright Data)*\n\n### \ud83c\udf29\ufe0f 1. **Manual Trigger**\n\n* **\ud83e\udde0 What it does**: Starts the workflow when you click **Execute Workflow** in n8n.\n* **\ud83d\udc68\u200d\ud83c\udfeb For beginners**: Think of it like a **start button**. No schedule, just run it manually whenever you want to check for deals.\n\n---\n\n### \ud83c\udf10 2. **Fetch Flight Details from Skiplagged via Bright Data**\n\n* **\ud83d\udd27 Node Type**: `HTTP Request` (POST)\n\n* **\ud83c\udf0d What's happening**:\n\n  * Uses Bright Data Web Unlocker to **bypass bot protection** and fetch HTML content from Skiplagged.\n  * You\u2019re sending a POST request to `https://api.brightdata.com/request`, asking Bright Data to open:\n    `https://skiplagged.com/flights/DUB/LON/2024-06-30` (or a dynamic route).\n  * Headers & proxy make it **look like a real browser**.\n\n* **\ud83d\udca1 Why it\u2019s useful**:\n\n  * **Skiplagged is tricky to scrape** directly, but Bright Data makes it easy.\n  * You get the **entire HTML** of the search results page, ready to extract price info.\n\n* \u2705 **Returns**: HTML of the page (not yet structured \u2014 we handle that next)\n\n---\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "15115b20-c08a-4953-be0b-8e7a7f2a4030",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -20,
        1080
      ],
      "parameters": {
        "color": 5,
        "width": 400,
        "height": 1460,
        "content": "## \ud83d\udd39 **SECTION 2: Extracting & Storing Flight Prices**\n\n*Combining: HTML Node + Google Sheets*\n\n### \ud83d\udda5\ufe0f 3. **HTML Extract (extractHtmlContent)**\n\n* **\ud83d\udd27 Node Type**: `HTML Extract`\n\n* **\ud83c\udfaf Goal**: Pull out **all flight prices** from the raw HTML.\n\n* **How it works**:\n\n  * Uses a selector like `.flights-landing__flight-price` to find every element that matches.\n  * **Returns multiple values** if \"Return All Matches\" is enabled.\n\n* \ud83e\udde0 **Beginner Note**: Imagine your browser looking for all `<div class=\"flights-landing__flight-price\">`. This is like **copying all price tags off the screen**.\n\n* \u2705 **Returns**:\n\n  ```json\n  [\n    \"$104\", \"$117\", \"$99\", \"$88\"\n  ]\n  ```\n\n---\n\n### \ud83d\udcca 4. **Google Sheets (append: sheet)**\n\n* **\ud83d\udd27 Node Type**: `Google Sheets Append`\n\n* **\ud83d\udccb What it does**: Appends each flight price as a new row in your spreadsheet.\n\n* **\ud83d\udee0\ufe0f Tip**: Make sure your sheet has one column titled something like `Price` and authentication is set up.\n\n* \u274c **Error Warning**: If this node is red, likely issues are:\n\n  * Missing Google credentials\n  * Sheet name doesn\u2019t match\n  * Field mapping mismatch\n\n* \u2705 **Returns**: New rows in your sheet like:\n\n| Price |\n| ----- |\n| \\$88  |\n| \\$99  |\n| \\$104 |\n\n---\n"
      },
      "typeVersion": 1
    },
    {
      "id": "b151fc17-d628-4e38-a5e7-91b2555b8e1f",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        460,
        1080
      ],
      "parameters": {
        "color": 7,
        "width": 380,
        "height": 240,
        "content": "## I\u2019ll receive a tiny commission if you join Bright Data through this link\u2014thanks for fueling more free content!\n\n### https://get.brightdata.com/1tndi4600b25"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "d966578d-4e22-4067-b7b6-1b310276ba5a",
  "connections": {
    "HTML": {
      "main": [
        [
          {
            "node": "Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Manual Trigger": {
      "main": [
        [
          {
            "node": "Fetch flight details from skiplegged via bright data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch flight details from skiplegged via bright data": {
      "main": [
        [
          {
            "node": "HTML",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}