Offres d'emploi Upwork vers Google Sheets

Intermédiaire

Ceci est unOtherworkflow d'automatisation du domainecontenant 8 nœuds.Utilise principalement des nœuds comme Set, HttpRequest, GoogleSheets, ScheduleTrigger. Suivi automatisé du marché de l'emploi : flux de travail de scraping Upwork vers Google Sheets

Prérequis
  • Peut nécessiter les informations d'identification d'authentification de l'API cible
  • Informations d'identification Google Sheets API

Catégorie

Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "id": "s1PkxgZZchk3npwR",
  "meta": {
    "instanceId": "84ad02d6104594179f43f1ce9cfe3a81637b2faedb57dafcb9e649b7542988db",
    "templateCredsSetupCompleted": true
  },
  "name": "Upwork Jobs to google sheets",
  "tags": [],
  "nodes": [
    {
      "id": "e08c753e-7d88-4f0b-889e-100291f0a3c7",
      "name": "Vérifier les emplois Upwork - Déclencheur",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        0,
        0
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "ffcc4ad0-7787-40a6-a78d-d3a03b1dc23b",
      "name": "Récupérer les emplois Upwork avec Apify",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        260,
        0
      ],
      "parameters": {
        "url": "https://api.apify.com/v2/actor-tasks/<TASK_ID>/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {}
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "4d0d8fb6-ad2e-4dff-8d04-b100721e33ee",
      "name": "Formatter les données scrapées",
      "type": "n8n-nodes-base.set",
      "position": [
        660,
        0
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "404d06e0-d3a0-448d-98f5-35fe87405e87",
              "name": "title",
              "type": "string",
              "value": "={{ $json.title }}"
            },
            {
              "id": "1d0e9a1d-e5f9-413b-9ab4-f20ae7260b65",
              "name": "description",
              "type": "string",
              "value": "={{ $json.description }}"
            },
            {
              "id": "c8d60809-8747-4321-ac97-a44a12ae91d5",
              "name": "postedDate",
              "type": "string",
              "value": "={{ $json.postedDate }}"
            },
            {
              "id": "e55fbecc-a984-49b7-80a7-8c7a6d10b32a",
              "name": "skills",
              "type": "array",
              "value": "={{ $json.skills }}"
            },
            {
              "id": "45f77f6b-c436-490c-8970-c9cb8b9949ea",
              "name": "link",
              "type": "string",
              "value": "={{ $json.link }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "c1f6c43c-f962-48f7-818b-638105720cad",
      "name": "Enregistrer les emplois dans Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        960,
        0
      ],
      "parameters": {
        "columns": {
          "value": {
            "link": "={{ $json.link }}",
            "title": "={{ $json.title }}",
            "skills": "={{ $json.skills }}",
            "postedDate": "={{ $json.postedDate }}",
            "description": "={{ $json.description }}"
          },
          "schema": [
            {
              "id": "title",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "description",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "description",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "postedDate",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "postedDate",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "skills",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "skills",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "link",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "link",
              "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/1u9TeIArgJPwLn-MV77-lwDwNiZ8qZscZnkuK1xev6YA/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1u9TeIArgJPwLn-MV77-lwDwNiZ8qZscZnkuK1xev6YA",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1u9TeIArgJPwLn-MV77-lwDwNiZ8qZscZnkuK1xev6YA/edit?usp=drivesdk",
          "cachedResultName": "Upwork job scraper"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "Rp7XiR3hxJfv03ZO",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "0e05d038-bb10-4cd2-847c-c38ecafe47f4",
      "name": "Note adhésive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -40,
        -1420
      ],
      "parameters": {
        "color": 5,
        "width": 480,
        "height": 1620,
        "content": "## 🌐 **Section 1: Data Scraping Automation**\n\n> 🧠 *“Tell me what’s trending!”*\n\n### 🔁 Nodes Combined:\n\n* 🕒 `Check Upwork Jobs - Trigger`\n* 🌐 `Fetch Upwork Jobs from Apify`\n\n---\n\n### ⚙️ What This Section Does:\n\nThis section automates the process of **scraping fresh job listings from Upwork** using Apify.\n\n### 🧩 Step-by-Step Breakdown:\n\n#### 🕒 1. `Check Upwork Jobs - Trigger`\n\n🕰 **Trigger Type**: Scheduled\nThis node automatically **starts the workflow at specific times** (e.g., every hour, daily, etc.).\n\n📌 **Why this matters**:\nYou don’t have to manually run anything! Just set it once, and n8n will check for new job listings on its own — like a robot assistant.\n\n---\n\n#### 🌐 2. `Fetch Upwork Jobs from Apify`\n\n📤 **HTTP Request** → **Apify API**\n\nThis node sends a `POST` request to [Apify](https://apify.com), where you've configured a **web scraping actor** to collect data from **Upwork job listings**.\n\n📥 **Response**: A JSON array of job data, including:\n\n* 📌 `title` – What the job is about\n* 📝 `description` – A short job overview\n* 🎯 `skills` – Required skills\n* 🗓 `postedDate` – When it was posted\n* 🔗 `link` – Direct link to the job\n\n✅ **Why Apify?**\nBecause Upwork’s API is **not public**, Apify acts as your friendly bot that **scrapes the job board safely and returns structured data**.\n\n💡 **Pro Tip**: You can customize your Apify actor to filter by keyword (e.g., `AI`, `Python`, `Design`, etc.).\n\n---\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "d5ef38cd-796c-48bf-ac16-7180b22dea39",
      "name": "Note adhésive1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        620,
        -1500
      ],
      "parameters": {
        "color": 6,
        "width": 480,
        "height": 1700,
        "content": "## 📊 **Section 2: Data Transformation & Logging**\n\n> 🧠 *“Let’s clean this up and put it somewhere useful.”*\n\n### 🔁 Nodes Combined:\n\n* ✏️ `Format Job Data`\n* 📄 `Log Jobs to Google Sheets`\n\n---\n\n### 🧩 Step-by-Step Breakdown:\n\n#### ✏️ 3. `Format Job Data`\n\n🧹 **Field Cleaner / Formatter**\n\nThis node helps you:\n\n* Extract only **relevant fields** from the Apify response\n* Optionally **rename or restructure fields** (like mapping `postedDate` to `Date Posted`)\n* Prepare the data in a clean format so it's ready for Google Sheets\n\n📌 Example Output:\n\n```json\n{\n  \"Job Title\": \"Build AI chatbot\",\n  \"Skills\": \"LangChain, Python\",\n  \"Posted Date\": \"2025-06-06\",\n  \"Link\": \"https://upwork.com/jobs/...\"\n}\n```\n\n💡 **Why This Matters**: Raw data isn’t always useful. This node ensures that what goes into Google Sheets is **clean, consistent, and human-readable**.\n\n---\n\n#### 📄 4. `Log Jobs to Google Sheets`\n\n📑 **Append Data to Sheet**\n\nThis node takes the formatted job data and **adds it to a Google Sheet** row by row.\n\n📌 Each job becomes a row with columns:\n\n| Job Title    | Skills            | Posted Date | Link                                                    |\n| ------------ | ----------------- | ----------- | ------------------------------------------------------- |\n| Build AI Bot | Python, LangChain | 2025-06-06  | [https://upwork.com/jobs/](https://upwork.com/jobs/)... |\n\n✅ **Why Use Google Sheets?**\n\n* You can **analyze market trends** easily\n* Share with your team\n* Build charts, dashboards, or even connect to Looker Studio\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "8af7a509-a4a9-480b-b687-49a3056e27e1",
      "name": "Note adhésive9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1920,
        -1400
      ],
      "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": "773ea8c5-702e-4080-818b-12f0dc93579f",
      "name": "Note adhésive4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1920,
        -1060
      ],
      "parameters": {
        "color": 4,
        "width": 1289,
        "height": 3058,
        "content": "## 🌐 **Section 1: Data Scraping Automation**\n\n> 🧠 *“Tell me what’s trending!”*\n\n### 🔁 Nodes Combined:\n\n* 🕒 `Check Upwork Jobs - Trigger`\n* 🌐 `Fetch Upwork Jobs from Apify`\n\n---\n\n### ⚙️ What This Section Does:\n\nThis section automates the process of **scraping fresh job listings from Upwork** using Apify.\n\n### 🧩 Step-by-Step Breakdown:\n\n#### 🕒 1. `Check Upwork Jobs - Trigger`\n\n🕰 **Trigger Type**: Scheduled\nThis node automatically **starts the workflow at specific times** (e.g., every hour, daily, etc.).\n\n📌 **Why this matters**:\nYou don’t have to manually run anything! Just set it once, and n8n will check for new job listings on its own — like a robot assistant.\n\n---\n\n#### 🌐 2. `Fetch Upwork Jobs from Apify`\n\n📤 **HTTP Request** → **Apify API**\n\nThis node sends a `POST` request to [Apify](https://apify.com), where you've configured a **web scraping actor** to collect data from **Upwork job listings**.\n\n📥 **Response**: A JSON array of job data, including:\n\n* 📌 `title` – What the job is about\n* 📝 `description` – A short job overview\n* 🎯 `skills` – Required skills\n* 🗓 `postedDate` – When it was posted\n* 🔗 `link` – Direct link to the job\n\n✅ **Why Apify?**\nBecause Upwork’s API is **not public**, Apify acts as your friendly bot that **scrapes the job board safely and returns structured data**.\n\n💡 **Pro Tip**: You can customize your Apify actor to filter by keyword (e.g., `AI`, `Python`, `Design`, etc.).\n\n---\n\n## 📊 **Section 2: Data Transformation & Logging**\n\n> 🧠 *“Let’s clean this up and put it somewhere useful.”*\n\n### 🔁 Nodes Combined:\n\n* ✏️ `Format Job Data`\n* 📄 `Log Jobs to Google Sheets`\n\n---\n\n### 🧩 Step-by-Step Breakdown:\n\n#### ✏️ 3. `Format Job Data`\n\n🧹 **Field Cleaner / Formatter**\n\nThis node helps you:\n\n* Extract only **relevant fields** from the Apify response\n* Optionally **rename or restructure fields** (like mapping `postedDate` to `Date Posted`)\n* Prepare the data in a clean format so it's ready for Google Sheets\n\n📌 Example Output:\n\n```json\n{\n  \"Job Title\": \"Build AI chatbot\",\n  \"Skills\": \"LangChain, Python\",\n  \"Posted Date\": \"2025-06-06\",\n  \"Link\": \"https://upwork.com/jobs/...\"\n}\n```\n\n💡 **Why This Matters**: Raw data isn’t always useful. This node ensures that what goes into Google Sheets is **clean, consistent, and human-readable**.\n\n---\n\n#### 📄 4. `Log Jobs to Google Sheets`\n\n📑 **Append Data to Sheet**\n\nThis node takes the formatted job data and **adds it to a Google Sheet** row by row.\n\n📌 Each job becomes a row with columns:\n\n| Job Title    | Skills            | Posted Date | Link                                                    |\n| ------------ | ----------------- | ----------- | ------------------------------------------------------- |\n| Build AI Bot | Python, LangChain | 2025-06-06  | [https://upwork.com/jobs/](https://upwork.com/jobs/)... |\n\n✅ **Why Use Google Sheets?**\n\n* You can **analyze market trends** easily\n* Share with your team\n* Build charts, dashboards, or even connect to Looker Studio\n\n💡 **Bonus Tip**: Add filters or conditional formatting to highlight certain keywords or top-paying jobs!\n\n---\n\n## 🎯 Why This Workflow is Powerful (Even for Beginners)\n\n✅ **No coding required** – You’re using no-code tools like n8n, Apify, and Google Sheets\n✅ **Automated** – Runs while you sleep 🌙\n✅ **Real-time market insights** – Know what clients are looking for (great for freelancers, agencies, product devs)\n✅ **Extendable** – Add Telegram alerts, Airtable dashboards, or link it with Notion or CRMs!\n\n---\n\n## 📌 What You Can Do Next:\n\n| Task                      | Tool                              | Outcome                                   |\n| ------------------------- | --------------------------------- | ----------------------------------------- |\n| ✅ Add deduplication logic | Google Sheets or n8n `IF` node    | Avoid storing duplicate jobs              |\n| ✅ Filter by skill/keyword | Apify task input                  | Focus on niche markets                    |\n| ✅ Connect to Airtable     | Replace Sheets with Airtable node | Richer dashboards and tagging             |\n| ✅ Set alerts              | Email/Telegram node               | Be the first to apply or inform your team |\n\n---\n\n\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {
    "Fetch Upwork Jobs using Apify": [
      {
        "json": {
          "link": "https://www.upwork.com/jobs/~01a2b3c4d5e6f7g8h9",
          "title": "Build AI-based chatbot with RAG",
          "skills": [
            "Python",
            "LangChain",
            "AI",
            "RAG",
            "LLM"
          ],
          "postedDate": "2025-06-05T12:00:00Z",
          "description": "Need a developer experienced in LangChain and vector DBs to build a chatbot..."
        }
      },
      {
        "json": {
          "link": "https://www.upwork.com/jobs/~09h8g7f6e5d4c3b2a1",
          "title": "Fine-tune Llama-3 for sentiment analysis",
          "skills": [
            "NLP",
            "Llama",
            "Fine-tuning",
            "Transformers"
          ],
          "postedDate": "2025-06-04T09:30:00Z",
          "description": "Looking for someone to fine-tune Meta’s Llama-3 model on our custom dataset..."
        }
      }
    ]
  },
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "ad7a638f-061a-4ab9-aa96-9d2b13f67c5c",
  "connections": {
    "4d0d8fb6-ad2e-4dff-8d04-b100721e33ee": {
      "main": [
        [
          {
            "node": "c1f6c43c-f962-48f7-818b-638105720cad",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e08c753e-7d88-4f0b-889e-100291f0a3c7": {
      "main": [
        [
          {
            "node": "ffcc4ad0-7787-40a6-a78d-d3a03b1dc23b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ffcc4ad0-7787-40a6-a78d-d3a03b1dc23b": {
      "main": [
        [
          {
            "node": "4d0d8fb6-ad2e-4dff-8d04-b100721e33ee",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Intermédiaire - Autres

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Informations sur le workflow
Niveau de difficulté
Intermédiaire
Nombre de nœuds8
Catégorie1
Types de nœuds5
Description de la difficulté

Adapté aux utilisateurs expérimentés, avec des workflows de complexité moyenne contenant 6-15 nœuds

Auteur
Yaron Been

Yaron Been

@yaron-nofluff

Building AI Agents and Automations | Growth Marketer | Entrepreneur | Book Author & Podcast Host If you need any help with Automations, feel free to reach out via linkedin: https://www.linkedin.com/in/yaronbeen/ And check out my Youtube channel: https://www.youtube.com/@YaronBeen/videos

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34