{
  "id": "HyNR7wCUHOWoSMB1",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Automated_Freelance_Gig_Scraper_via_Bright_data",
  "tags": [],
  "nodes": [
    {
      "id": "ca434966-ab56-4335-88ea-c066a3a33cf4",
      "name": "Run Scraper Daily",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        1720,
        1400
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 9
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "f5446f3e-3eaf-44ac-b363-1fd61da36512",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        0
      ],
      "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": "b7e24008-ca38-4d8a-b17c-57a979307618",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        340
      ],
      "parameters": {
        "color": 4,
        "width": 1289,
        "height": 3418,
        "content": "# \ud83d\ude80 **Automated Daily Job Scraper Workflow**\n\nThis automation scrapes new job gigs from **We Work Remotely (WWR)** daily based on your preferred skill, extracts job information, and appends it neatly into a **Google Sheet** \u2014 all without lifting a finger! Let\u2019s break it down into 3 easy-to-understand sections:\n\n---\n\n## \ud83d\udd39 **SECTION 1: Trigger + Set Your Filter**\n\n> *Automate and personalize your job search.*\n\n### \ud83d\udd52 1. Run Scraper Daily\n\n**Node Type**: Trigger\n**Purpose**: Automatically runs the workflow every 24 hours.\n**How it helps**:\nNo manual work needed! The automation ensures the job list is updated daily without you having to remember anything.\n\n\ud83d\udd27 **Icon Tip**:\n`\u26a1` = Trigger\n`\u23f0` = Time-based action\n\n---\n\n### \ud83d\udd8b\ufe0f 2. Set Skill Filter\n\n**Node Type**: Manual Input / Set Node\n**Purpose**: Define the specific skill (e.g., \u201cPython\u201d, \u201cUI/UX\u201d) you want to search gigs for.\n**How it helps**:\nYou control what kind of job gigs to track. Want only \"React\" jobs? Just set it once and forget.\n\n\ud83e\udde0 **Beginner Tip**:\nThink of this as setting the topic for your daily newsletter \u2014 you get exactly what you\u2019re interested in.\n\n\ud83d\udd27 **Icon Tip**:\n`\ud83d\udd8b\ufe0f` = Skill Input or Filter Logic\n\n---\n\n## \ud83c\udf10 **SECTION 2: Scraping & Extraction**\n\n> *Fetch real job listings based on your criteria.*\n\n### \ud83c\udf0d 3. Scrape WWR with Bright Data\n\n**Node Type**: HTTP Request\n**Purpose**: Uses the Bright Data Web Unlocker to visit the We Work Remotely website and fetch HTML data of job postings.\n**How it helps**:\nBy using Bright Data, you're bypassing bot detection and scraping like a pro without writing a single line of code.\n\n\ud83d\udd27 **Icon Tip**:\n`\ud83c\udf10` = API/Web scraper\n\n\ud83d\udd10 **Beginner Tip**:\nBright Data makes sure you're not blocked while scraping websites that usually don\u2019t allow bots.\n\n---\n\n### \ud83e\uddfe 4. Extract Jobs from HTML\n\n**Node Type**: Code / Extraction\n**Purpose**: Converts raw HTML into structured job information (like job title, company, and link).\n**How it helps**:\nNo need to look at complicated HTML. This step cleans and formats the data into something meaningful and usable.\n\n\ud83d\udd27 **Icon Tip**:\n`\ud83d\udda5\ufe0f\ud83d\udcc4` or `</>` = HTML parser\n\n\ud83e\udde0 **Beginner Tip**:\nThis is like taking a messy newspaper and extracting only the job ads you care about.\n\n---\n\n## \ud83d\udcca **SECTION 3: Save to Google Sheets**\n\n> *Turn your daily gigs into a growing list you can use and filter anytime.*\n\n### \ud83d\udcc4 5. Save Gigs to Google Sheets\n\n**Node Type**: Google Sheets\n**Purpose**: Appends each new gig to a Google Sheet in your Drive.\n**How it helps**:\nYou now have a daily updating list of remote jobs \u2014 ready to view, sort, and apply from one place.\n\n\ud83d\udccc **Icon Tip**:\n`\ud83d\udcc4\ud83d\udfe9` = Google Sheets\n\n\ud83e\udde0 **Beginner Tip**:\nThis becomes your personal remote job tracker that updates itself daily!\n\n---\n\n## \ud83d\udca1 **How Beginners Can Take Advantage**\n\n1. **Zero Code Needed**: All done visually in tools like n8n \u2013 no programming background required.\n2. **Customization Friendly**: Just change the skill filter to get different job types.\n3. **Scalable**: Add more job boards or filters in future.\n4. **Saves Hours**: No need to visit sites daily or manually copy job info.\n5. **Great for Freelancers, Students & Job Seekers**.\n\n---\n\n## \ud83c\udf1f Final Summary (With Emojis for Fun)\n\n| Step | Node           | Emoji | Description                           |\n| ---- | -------------- | ----- | ------------------------------------- |\n| 1    | Run Daily      | \u23f0     | Automatically starts every day        |\n| 2    | Set Skill      | \ud83d\udd8b\ufe0f   | Choose what skill to search jobs for  |\n| 3    | Scrape WWR     | \ud83c\udf10    | Uses Bright Data to grab job postings |\n| 4    | Extract HTML   | \ud83e\uddfe    | Converts raw HTML to structured data  |\n| 5    | Save to Sheets | \ud83d\udcca    | Appends new jobs to a Google Sheet    |\n\n---\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "a83a04d5-6bec-4c7e-8d8d-538c4957a9c8",
      "name": "Set Skill Filter",
      "type": "n8n-nodes-base.set",
      "position": [
        1960,
        1400
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "442d4787-7045-46e7-a86a-ccc522413ac9",
              "name": "Skills",
              "type": "string",
              "value": "AI"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "33e2c73b-41e4-4f60-9b6c-4c954cc7e856",
      "name": "Scrape WWR with Bright Data",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2200,
        1400
      ],
      "parameters": {
        "url": "https://api.brightdata.com/request",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "zone",
              "value": "n8n_unblocker"
            },
            {
              "name": "url",
              "value": "=https://weworkremotely.com/remote-jobs/search?term={{ $json.Skills }}"
            },
            {
              "name": "country",
              "value": "us"
            },
            {
              "name": "format",
              "value": "raw"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer YOUR_TOKEN_HERE"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "23709278-a9bb-4b46-a418-62a15c49f6ab",
      "name": "Extract Jobs from HTML",
      "type": "n8n-nodes-base.html",
      "position": [
        2420,
        1400
      ],
      "parameters": {
        "options": {},
        "operation": "extractHtmlContent",
        "extractionValues": {
          "values": [
            {
              "key": "Job",
              "cssSelector": "#category-18 > article > ul > li.new-listing-container.feature > a > div > div.new-listing__header > h4"
            },
            {
              "key": "Company",
              "cssSelector": "#category-18 > article > ul > li.new-listing-container.feature > a > div > p.new-listing__company-name"
            },
            {
              "key": "Country",
              "cssSelector": "#category-18 > article > ul > li.new-listing-container.feature > a > div > p.new-listing__company-headquarters"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "564c4101-2929-49fe-a651-134a0addfe35",
      "name": "Save Jobs to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2720,
        1400
      ],
      "parameters": {
        "columns": {
          "value": {
            "Job": "={{ $json.Job }}",
            "Company": "={{ $json.Company }}",
            "Location": "={{ $json.Country }}"
          },
          "schema": [
            {
              "id": "Job",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Job",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Company",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Location",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Location",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/14JmN5gkBRW6Vgevf2oNXXvEuZXPwBCk4JxQqEfJOHSw/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "14JmN5gkBRW6Vgevf2oNXXvEuZXPwBCk4JxQqEfJOHSw",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/14JmN5gkBRW6Vgevf2oNXXvEuZXPwBCk4JxQqEfJOHSw/edit?usp=drivesdk",
          "cachedResultName": "weworkremotely jobs"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "3354904f-1735-4e89-a0a8-1914f707ee8b",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1700,
        -20
      ],
      "parameters": {
        "color": 6,
        "width": 380,
        "height": 1640,
        "content": "## \ud83d\udd39 **SECTION 1: Trigger + Set Your Filter**\n\n> *Automate and personalize your job search.*\n\n### \ud83d\udd52 1. Run Scraper Daily\n\n**Node Type**: Trigger\n**Purpose**: Automatically runs the workflow every 24 hours.\n**How it helps**:\nNo manual work needed! The automation ensures the job list is updated daily without you having to remember anything.\n\n\ud83d\udd27 **Icon Tip**:\n`\u26a1` = Trigger\n`\u23f0` = Time-based action\n\n---\n\n### \ud83d\udd8b\ufe0f 2. Set Skill Filter\n\n**Node Type**: Manual Input / Set Node\n**Purpose**: Define the specific skill (e.g., \u201cPython\u201d, \u201cUI/UX\u201d) you want to search gigs for.\n**How it helps**:\nYou control what kind of job gigs to track. Want only \"React\" jobs? Just set it once and forget.\n\n\ud83e\udde0 **Beginner Tip**:\nThink of this as setting the topic for your daily newsletter \u2014 you get exactly what you\u2019re interested in.\n\n\ud83d\udd27 **Icon Tip**:\n`\ud83d\udd8b\ufe0f` = Skill Input or Filter Logic\n\n---\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "302ea26f-4b92-41c2-9859-17a937f7b141",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2140,
        -160
      ],
      "parameters": {
        "color": 5,
        "width": 420,
        "height": 1780,
        "content": "## \ud83c\udf10 **SECTION 2: Scraping & Extraction**\n\n> *Fetch real job listings based on your criteria.*\n\n### \ud83c\udf0d 3. Scrape WWR with Bright Data\n\n**Node Type**: HTTP Request\n**Purpose**: Uses the Bright Data Web Unlocker to visit the We Work Remotely website and fetch HTML data of job postings.\n**How it helps**:\nBy using Bright Data, you're bypassing bot detection and scraping like a pro without writing a single line of code.\n\n\ud83d\udd27 **Icon Tip**:\n`\ud83c\udf10` = API/Web scraper\n\n\ud83d\udd10 **Beginner Tip**:\nBright Data makes sure you're not blocked while scraping websites that usually don\u2019t allow bots.\n\n---\n\n### \ud83e\uddfe 4. Extract Jobs from HTML\n\n**Node Type**: Code / Extraction\n**Purpose**: Converts raw HTML into structured job information (like job title, company, and link).\n**How it helps**:\nNo need to look at complicated HTML. This step cleans and formats the data into something meaningful and usable.\n\n\ud83d\udd27 **Icon Tip**:\n`\ud83d\udda5\ufe0f\ud83d\udcc4` or `</>` = HTML parser\n\n\ud83e\udde0 **Beginner Tip**:\nThis is like taking a messy newspaper and extracting only the job ads you care about.\n\n---\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "a789140f-8006-4cae-ad40-0e595052b0d9",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2620,
        420
      ],
      "parameters": {
        "color": 3,
        "width": 300,
        "height": 1200,
        "content": "## \ud83d\udcca **SECTION 3: Save to Google Sheets**\n\n> *Turn your daily gigs into a growing list you can use and filter anytime.*\n\n### \ud83d\udcc4 5. Save Gigs to Google Sheets\n\n**Node Type**: Google Sheets\n**Purpose**: Appends each new gig to a Google Sheet in your Drive.\n**How it helps**:\nYou now have a daily updating list of remote jobs \u2014 ready to view, sort, and apply from one place.\n\n\ud83d\udccc **Icon Tip**:\n`\ud83d\udcc4\ud83d\udfe9` = Google Sheets\n\n\ud83e\udde0 **Beginner Tip**:\nThis becomes your personal remote job tracker that updates itself daily!\n\n---\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "1c541cd3-09f3-4534-b6cb-53027d87873b",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3020,
        420
      ],
      "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": "860467ec-cde7-45f3-aab5-814a1cab069f",
  "connections": {
    "Set Skill Filter": {
      "main": [
        [
          {
            "node": "Scrape WWR with Bright Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Run Scraper Daily": {
      "main": [
        [
          {
            "node": "Set Skill Filter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Jobs from HTML": {
      "main": [
        [
          {
            "node": "Save Jobs to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Scrape WWR with Bright Data": {
      "main": [
        [
          {
            "node": "Extract Jobs from HTML",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}