Back to Catalog

Scrape Upwork job listings & generate daily email reports with Apify & Google Sheets

Oneclick AI SquadOneclick AI Squad
753 views
2/3/2026
Official Page

This automated n8n workflow scrapes job listings from Upwork using Apify, processes and cleans the data, and generates daily email reports with job summaries. The system uses Google Sheets for data storage and keyword management, providing a comprehensive solution for tracking relevant job opportunities and market trends.

What is Apify?

Apify is a web scraping and automation platform that provides reliable APIs for extracting data from websites like Upwork. It handles the complexities of web scraping including rate limiting, proxy management, and data extraction while maintaining compliance with website terms of service.

Good to Know

  • Apify API calls may incur costs based on usage; check Apify pricing for details
  • Google Sheets access must be properly authorized to avoid data sync issues
  • The workflow includes data cleaning and deduplication to ensure high-quality results
  • Email reports provide structured summaries for easy review and decision-making
  • Keyword management through Google Sheets allows for flexible job targeting

How It Works

The workflow is organized into three main phases:

Phase 1: Job Scraping & Initial Processing This phase handles the core data collection and initial storage:

  1. Trigger Manual Run - Manually starts the workflow for on-demand job scraping
  2. Fetch Keywords from Google Sheet - Reads the list of job-related keywords from the All Keywords sheet
  3. Loop Through Keywords - Iterates over each keyword to trigger Apify scraping
  4. Trigger Apify Scraper - Sends HTTP request to start Apify actor for job scraping
  5. Wait for Apify Completion - Waits for the Apify actor to finish execution
  6. Delay Before Dataset Read - Waits a few seconds to ensure dataset is ready for processing
  7. Fetch Scraped Job Dataset - Fetches the latest dataset from Apify
  8. Process Raw Job Data - Filters jobs posted in the last 24 hours and formats the data
  9. Save Jobs to Daily Sheet - Appends new job data to the daily Google Sheet
  10. Update Keyword Job Count - Updates job count in the All Keywords summary sheet

Phase 2: Data Cleaning & Deduplication This phase ensures data quality and removes duplicates:

  1. Load Today's Daily Jobs - Loads all jobs added in today's sheet for processing
  2. Remove Duplicates by Title/Desc - Removes duplicates based on title and description matching
  3. Save Clean Job Data - Saves the cleaned, unique entries back to the sheet
  4. Clear Old Daily Sheet Data - Deletes old or duplicate entries from the sheet
  5. Reload Clean Job Data - Loads clean data again after deletion for final processing

Phase 3: Daily Summary & Email Report This phase generates summaries and delivers the final report:

  1. Generate Keyword Summary Stats - Counts job totals per keyword for analysis
  2. Update Summary Sheet - Updates the summary sheet with keyword statistics
  3. Fetch Final Summary Data - Reads the summary sheet for reporting purposes
  4. Build Email Body - Formats email with statistics and sheet link
  5. Send Daily Report Email - Sends the structured daily summary email to recipients

Data Sources

The workflow utilizes Google Sheets for data management:

  1. AI Keywords Sheet - Contains keyword management data with columns:

    • Keyword (text) - Job search terms
    • Job Count (number) - Number of jobs found for each keyword
    • Status (text) - Active/Inactive status
    • Last Updated (timestamp) - When keyword was last processed
  2. Daily Jobs Sheet - Contains scraped job data with columns:

    • Job Title (text) - Title of the job posting
    • Description (text) - Job description content
    • Budget (text) - Job budget or hourly rate
    • Client Rating (number) - Client's rating on Upwork
    • Posted Date (timestamp) - When job was posted
    • Job URL (text) - Direct link to the job posting
    • Keyword (text) - Which keyword found this job
    • Scraped At (timestamp) - When data was collected
  3. Summary Sheet - Contains daily statistics with columns:

    • Date (date) - Report date
    • Total Jobs (number) - Total jobs found
    • Keywords Processed (number) - Number of keywords searched
    • Top Keyword (text) - Most productive keyword
    • Average Budget (currency) - Average job budget
    • Report Generated (timestamp) - When summary was created

How to Use

  • Import the workflow into n8n
  • Configure Apify API credentials and Google Sheets API access
  • Set up email credentials for daily report delivery
  • Create three Google Sheets with the specified column structures
  • Add relevant job keywords to the AI Keywords sheet
  • Test with sample keywords and adjust as needed

Requirements

  1. Apify API credentials and actor access
  2. Google Sheets API access
  3. Email service credentials (Gmail, SMTP, etc.)
  4. Upwork job search keywords for targeting

Customizing This Workflow

Modify the Process Raw Job Data node to filter jobs by additional criteria like budget range, client rating, or job type. Adjust the email report format to include more detailed statistics or add visual aids, such as charts. Customize the data cleaning logic to better handle duplicate detection based on your specific requirements, or add additional data sources beyond Upwork for comprehensive job market analysis.

n8n Workflow: Scrape Upwork Job Listings & Generate Daily Email Reports

This n8n workflow is designed to automate the process of scraping job listings from Upwork, processing the data, and generating a daily email report. It's ideal for freelancers, job seekers, or recruiters who want to stay updated on relevant opportunities without manual searching.

What it does

This workflow performs the following key steps:

  1. Manual Trigger: The workflow is initiated manually, allowing for on-demand execution.
  2. HTTP Request (Upwork Scrape): It makes an HTTP request to an external service (likely Apify or a similar web scraping API) to scrape Upwork job listings.
  3. Loop Over Items: The scraped job listings are then processed in batches. This is useful for handling a large number of results efficiently.
  4. Wait: A Wait node is included, likely to introduce a delay between processing batches or before sending the email, to prevent rate limiting or allow for data processing.
  5. Code (Data Transformation): A Code node is used to perform custom JavaScript logic. This could involve filtering, transforming, or enriching the job listing data before it's stored or reported.
  6. Google Sheets (Data Storage): The processed job listing data is then written to a Google Sheet, serving as a central repository for all scraped listings.
  7. Gmail (Email Report): Finally, the workflow compiles a report (likely based on the processed data) and sends it as an email via Gmail.

Prerequisites/Requirements

To use this workflow, you will need:

  • n8n Instance: A running instance of n8n.
  • Google Account: For Google Sheets and Gmail integration.
  • Google Sheets Credential: Configured in n8n to allow access to your Google Sheets.
  • Gmail Credential: Configured in n8n to allow sending emails from your Gmail account.
  • External Web Scraping Service: An API key or endpoint for a web scraping service (e.g., Apify) capable of scraping Upwork job listings. The HTTP Request node will need to be configured with this service's details.

Setup/Usage

  1. Import the workflow: Download the JSON provided and import it into your n8n instance.
  2. Configure Credentials:
    • Set up your Google Sheets credential in n8n.
    • Set up your Gmail credential in n8n.
  3. Configure HTTP Request Node:
    • Edit the HTTP Request node (named "HTTP Request").
    • Update the URL and any necessary Headers or Query Parameters to point to your chosen web scraping service for Upwork. Include any required API keys or authentication tokens.
  4. Configure Code Node:
    • Review and adjust the JavaScript code within the Code node as needed. This is where you can customize data filtering, transformation, or aggregation logic for your job listings.
  5. Configure Google Sheets Node:
    • Edit the Google Sheets node.
    • Specify the Spreadsheet ID and Sheet Name where you want to store the job listings.
    • Ensure the Operation is set to Append Row or Add Row (or similar) to continuously add new listings.
  6. Configure Gmail Node:
    • Edit the Gmail node.
    • Set the To email address for the daily report.
    • Customize the Subject and Body of the email report. You can use expressions to include data from previous nodes (e.g., a summary of new jobs).
  7. Activate the Workflow: Once configured, activate the workflow.
  8. Execute Manually: Click "Execute Workflow" on the Manual Trigger node to run the workflow. For daily reports, you might consider replacing the Manual Trigger with a Cron node for scheduled execution.

Related Templates

AI-powered code review with linting, red-marked corrections in Google Sheets & Slack

Advanced Code Review Automation (AI + Lint + Slack) Who’s it for For software engineers, QA teams, and tech leads who want to automate intelligent code reviews with both AI-driven suggestions and rule-based linting — all managed in Google Sheets with instant Slack summaries. How it works This workflow performs a two-layer review system: Lint Check: Runs a lightweight static analysis to find common issues (e.g., use of var, console.log, unbalanced braces). AI Review: Sends valid code to Gemini AI, which provides human-like review feedback with severity classification (Critical, Major, Minor) and visual highlights (red/orange tags). Formatter: Combines lint and AI results, calculating an overall score (0–10). Aggregator: Summarizes results for quick comparison. Google Sheets Writer: Appends results to your review log. Slack Notification: Posts a concise summary (e.g., number of issues and average score) to your team’s channel. How to set up Connect Google Sheets and Slack credentials in n8n. Replace placeholders (<YOURSPREADSHEETID>, <YOURSHEETGIDORNAME>, <YOURSLACKCHANNEL_ID>). Adjust the AI review prompt or lint rules as needed. Activate the workflow — reviews will start automatically whenever new code is added to the sheet. Requirements Google Sheets and Slack integrations enabled A configured AI node (Gemini, OpenAI, or compatible) Proper permissions to write to your target Google Sheet How to customize Add more linting rules (naming conventions, spacing, forbidden APIs) Extend the AI prompt for project-specific guidelines Customize the Slack message formatting Export analytics to a dashboard (e.g., Notion or Data Studio) Why it’s valuable This workflow brings realistic, team-oriented AI-assisted code review to n8n — combining the speed of automated linting with the nuance of human-style feedback. It saves time, improves code quality, and keeps your team’s review history transparent and centralized.

higashiyama By higashiyama
90

Generate Weather-Based Date Itineraries with Google Places, OpenRouter AI, and Slack

🧩 What this template does This workflow builds a 120-minute local date course around your starting point by querying Google Places for nearby spots, selecting the top candidates, fetching real-time weather data, letting an AI generate a matching emoji, and drafting a friendly itinerary summary with an LLM in both English and Japanese. It then posts the full bilingual plan with a walking route link and weather emoji to Slack. 👥 Who it’s for Makers and teams who want a plug-and-play bilingual local itinerary generator with weather awareness — no custom code required. ⚙️ How it works Trigger – Manual (or schedule/webhook). Discovery – Google Places nearby search within a configurable radius. Selection – Rank by rating and pick the top 3. Weather – Fetch current weather (via OpenWeatherMap). Emoji – Use an AI model to match the weather with an emoji 🌤️. Planning – An LLM writes the itinerary in Markdown (JP + EN). Route – Compose a Google Maps walking route URL. Share – Post the bilingual itinerary, route link, and weather emoji to Slack. 🧰 Requirements n8n (Cloud or self-hosted) Google Maps Platform (Places API) OpenWeatherMap API key Slack Bot (chat:write) LLM provider (e.g., OpenRouter or DeepL for translation) 🚀 Setup (quick) Open Set → Fields: Config and fill in coords/radius/time limit. Connect Credentials for Google, OpenWeatherMap, Slack, and your LLM. Test the workflow and confirm the bilingual plan + weather emoji appear in Slack. 🛠 Customize Adjust ranking filters (type, min rating). Modify translation settings (target language or tone). Change output layout (side-by-side vs separated). Tune emoji logic or travel mode. Add error handling, retries, or logging for production use.

nodaBy noda
52

AI-powered document search with Oracle and ONNX embeddings for recruiting

How it works Create a user for doing Hybrid Search. Clear Existing Data, if present. Add Documents into the table. Create a hybrid index. Run Semantic search on the Documents table for "prioritize teamwork and leadership experience". Run Hybrid search for the text input in the Chat interface on the Documents table. Setup Steps Download the ONNX model allMiniLML12v2augmented.zip Extract the ZIP file on the database server into a directory, for example /opt/oracle/onnx. After extraction, the folder contents should look like: bash bash-4.4$ pwd /opt/oracle/onnx bash-4.4$ ls allMiniLML12_v2.onnx Connect as SYSDBA and create the DBA user sql -- Create DBA user CREATE USER app_admin IDENTIFIED BY "StrongPassword123" DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA UNLIMITED ON users; -- Grant privileges GRANT DBA TO app_admin; GRANT CREATE TABLESPACE, ALTER TABLESPACE, DROP TABLESPACE TO app_admin; Create n8n Oracle DB credentials hybridsearchuser → for hybrid search operations dbadocuser → for DBA setup (user and tablespace creation) Run the workflow Click the manual Trigger It displays Pure semantic search results. Enter search text in Chat interface It displays results for vector and keyword search. Note The workflow currently creates the hybrid search user, docuser with the password visible in plain text inside the n8n Execute SQL node. For better security, consider performing the user creation manually outside n8n. Oracle 23ai or 26ai Database has to be used. Reference Hybrid Search End-End Example

sudarshanBy sudarshan
211