Skip to main content

Automate job post expiry reminders with Google Sheets, HTTP checks & Gmail

Workflow preview

Workflow preview
100%
Automate job post expiry reminders with Google Sheets, HTTP checks & Gmail preview
Open on n8n.io

Important notice

This workflow is provided as-is. Please review and test before using in production.

1. Workflow Overview

Job post expiry & refresh reminders from Google Sheets using HTTP Last‑Modified checks This workflow checks each job URL in your Google Sheet and identifies listings that look stale based on the pa...

Best for

  • HR automation workflows
  • advanced n8n builders looking for reusable templates

Tools used

n8n-nodes-base.scheduletrigger, n8n-nodes-base.googlesheets, n8n-nodes-base.if, n8n-nodes-base.httprequest, n8n-nodes-base.wait, n8n-nodes-base.gmail, n8n-nodes-base.code, n8n-nodes-base.set

Source and attribution

This workflow is cataloged by N8N Workflows and links back to its original n8n.io source page by WeblineIndia.

Original n8n.io source

1.1 Workflow description

Title
Automate job post expiry reminders with Google Sheets, HTTP checks & Gmail
Workflow name
Automate job post expiry reminders with Google Sheets, HTTP checks & Gmail

Job post expiry & refresh reminders from Google Sheets using HTTP Last‑Modified checks

This workflow checks each job URL in your Google Sheet and identifies listings that look stale based on the page’s Last‑Modified date. At 10:00 Asia/Kolkata every day, it requests each URL (HEAD, then GET if needed), calculates the age in days, and sends a polite email reminder to the recruiter when age ≥ a configurable threshold (default 30 days). It includes a DRY_RUN mode to preview who would be emailed, and conservative rate limits for both HTTP requests and email sends.

Who’s it for

  • Recruitment teams maintaining job links on external boards/career sites.
  • Coordinators who want a daily, hands‑off nudge to refresh or unlist outdated posts.
  • Teams using Google Sheets to store job URLs and owner contacts.

How it works

  1. Cron (10:00 IST) triggers daily.
  2. Google Sheets reads the Job Posts tab (job_url, recruiter_name, recruiter_email).
  3. Validate rows (URL + email format, weekend rule via config).
  4. HTTP HEAD to fetch headers; if Last-Modified missing, HTTP GET and parse common meta tags (article:modified_time, og:updated_time, lastmod, dateModified).
  5. Compute age (days since last modified in your configured timezone). If age_days ≥ THRESHOLD_DAYS, prepare a personalized email using templates.
  6. DRY_RUN? If true, output a preview; if false, rate‑limit and send emails via SMTP.

How to set up

  1. Create the Sheet
    • Tab name: Job Posts
    • Columns: job_url, recruiter_name, recruiter_email
  2. Credentials in n8n
    • Google Sheets (OAuth)
    • SMTP (Gmail) (use an app password if 2FA)
  3. Open “Set: Config” and set:
    • SPREADSHEET_ID = your Sheet ID
    • SOURCE_SHEET = Job Posts
    • TIMEZONE = Asia/Kolkata
    • THRESHOLD_DAYS = 30 (change if needed)
    • USER_AGENT = n8n-job-checker/1.0
    • HTTP_TIMEOUT_SECONDS = 10
    • HTTP_RETRIES = 2
    • RATE_LIMIT_HTTP_SECONDS = 5
    • RATE_LIMIT_EMAIL_SECONDS = 2
    • SMTP_FROM = sender email (e.g., [email protected])
    • SUBJECT_TEMPLATE, HTML_TEMPLATE, TEXT_TEMPLATE (placeholders: {{recruiter_name}}, {{job_url}}, {{age_days}}, {{last_modified}})
    • INCLUDE_WEEKENDS = true
    • DRY_RUN = false (set true to preview)
  4. Activate the workflow.

Requirements

  • Google Sheet with Job Posts tab and required columns.
  • SMTP (Gmail) account to send emails.
  • n8n (cloud or self‑hosted) with Google Sheets + SMTP credentials.

How to customize

  • Threshold: Change THRESHOLD_DAYS (e.g., 15, 45).
  • Schedule: Adjust the Cron time from 10:00 IST to your preferred hour.
  • Templates: Edit SUBJECT_TEMPLATE, HTML_TEMPLATE, and TEXT_TEMPLATE.
  • Rate limits: Tune RATE_LIMIT_HTTP_SECONDS and RATE_LIMIT_EMAIL_SECONDS for your environment.
  • Weekend behavior: Toggle INCLUDE_WEEKENDS.
  • Preview runs: Use DRY_RUN=true to check recipients before real sends.

Add‑ons

  • Helper columns: Write back last_modified_http, age_days, reminder_sent_at, last_checked_at, notes to the sheet.
  • Per‑row override: Add threshold_days column to override the global threshold per job.
  • Slack notifications: DM the recruiter or a channel in addition to (or instead of) email.
  • One‑time reminders: Email only once until the page updates (track reminder_sent_at).
  • Robots/backoff: Respect robots.txt or add exponential backoff for high‑traffic sites.

Use Case Examples

  • Career site posts that haven’t been updated in 30+ days. Remind owners to refresh copy or close the listing.
  • Third‑party boards (e.g., niche communities) where Last‑Modified is available — automate hygiene checks.
  • Agency partnership links — ensure outdated roles aren’t left live, protecting brand experience.

Common troubleshooting

Issue Possible Cause Solution
No emails sent DRY_RUN is true Set DRY_RUN=false to actually send.
Rows skipped Invalid/missing job_url or recruiter_email Fix the row values; ensure valid URL and email.
“Stale” not detected Page has no Last-Modified header and no recognizable meta tags Add manual review; consider the Helper columns add‑on to log missing dates, or track first_seen_at.
Wrong time math Timezone mismatch Confirm TIMEZONE=Asia/Kolkata (or your TZ) in Set: Config.
Too many requests Sites rate‑limit frequent checks Increase RATE_LIMIT_HTTP_SECONDS; consider running less frequently.
Emails fail to send SMTP auth or quota issues Verify SMTP credentials, sender address, and provider limits; try a different sender or schedule.

Need Help?

If you’d like help tailoring the templates, adding Slack notifications or writing back helper columns for audit, just message us at WeblineIndia and we will be happy to help you get this running smoothly.

1.2 Logical Blocks

This catalog entry is organized from the workflow JSON. The node-level section below shows the executable blocks available for review before importing the template.

2. Block-by-Block Analysis

Block 1 - Schedule Trigger

Type / Role
n8n-nodes-base.scheduleTrigger - scheduleTrigger
Config choices
Version 1.2

Block 2 - Fetch Job URLs

Type / Role
n8n-nodes-base.googleSheets - googleSheets
Config choices
Version 4.6

Block 3 - Filter Invalid Rows

Type / Role
n8n-nodes-base.if - if
Config choices
Version 2.2

Block 4 - HTTP Request

Type / Role
n8n-nodes-base.httpRequest - httpRequest
Config choices
Version 4.2

Block 5 - Wait Before HTTP

Type / Role
n8n-nodes-base.wait - wait
Config choices
Version 1.1

Block 6 - Is Age ≥ THRESHOLD_DAYS?

Type / Role
n8n-nodes-base.if - if
Config choices
Version 2.2

Block 7 - Gmail

Type / Role
n8n-nodes-base.gmail - gmail
Config choices
Version 2.1

Block 8 - calculate Age

Type / Role
n8n-nodes-base.code - code
Config choices
Version 2

Block 9 - Log Invalid Rows

Type / Role
n8n-nodes-base.set - set
Config choices
Version 3.4

Block 10 - Check Weekend

Type / Role
n8n-nodes-base.code - code
Config choices
Version 2

Block 11 - Weekend Filter

Type / Role
n8n-nodes-base.if - if
Config choices
Version 2.2

Block 12 - Log weekend skip

Type / Role
n8n-nodes-base.code - code
Config choices
Version 2

Block 13 - Sticky Note

Type / Role
n8n-nodes-base.stickyNote - stickyNote
Config choices
Version 1

Block 14 - Sticky Note1

Type / Role
n8n-nodes-base.stickyNote - stickyNote
Config choices
Version 1

Block 15 - Sticky Note2

Type / Role
n8n-nodes-base.stickyNote - stickyNote
Config choices
Version 1

Block 16 - Sticky Note3

Type / Role
n8n-nodes-base.stickyNote - stickyNote
Config choices
Version 1

Block 17 - Sticky Note4

Type / Role
n8n-nodes-base.stickyNote - stickyNote
Config choices
Version 1

Block 18 - configuration sheet

Type / Role
n8n-nodes-base.set - set
Config choices
Version 3.4

Block 19 - configure mapping

Type / Role
n8n-nodes-base.set - set
Config choices
Version 3.4

3. Summary Table

Workflow Automate job post expiry reminders with Google Sheets, HTTP checks & Gmail
Complexity advanced
Nodes 19
Categories HR
Author WeblineIndia
Published 08 Sept 2025

4. Reproducing the Workflow from Scratch

  1. 1. Download the workflow JSON

    Use the JSON export at /data/workflows/8390/8390.json as the source template for this automation.

  2. 2. Import the template into n8n

    Open n8n, import the downloaded JSON, and review each node before activating the workflow.

  3. 3. Configure credentials and variables

    Replace placeholder credentials, API keys, webhook URLs, account IDs, and environment-specific values with your own settings.

  4. 4. Test with sample data

    Run the workflow manually or in a staging workspace, inspect node output, and confirm downstream systems receive the expected data.

  5. 5. Activate and monitor

    Enable the workflow only after testing, then monitor executions, errors, and rate limits during the first production runs.

5. General Notes & Resources

Review imported nodes carefully before activation. This catalog entry is intended to help you inspect the workflow structure, understand required services, and find related templates faster.

Node names, credentials, schedules, webhook paths, and external service limits may need adjustment for your workspace.

Frequently asked questions

What does Automate job post expiry reminders with Google Sheets, HTTP checks & Gmail do?

Job post expiry & refresh reminders from Google Sheets using HTTP Last‑Modified checks This workflow checks each job URL in your Google Sheet and identifies listings that look stale based on the pa...

What do I need before importing this workflow?

Review the workflow JSON, configure any required credentials in n8n, and test the automation in a safe workspace before using it in production.

Can I customize this workflow?

Yes. Use the block-by-block analysis and the downloadable JSON to inspect each node, then adjust credentials, prompts, schedules, filters, or destinations for your HR use case.