---
name: Gmail Lead Extractor
slug: gmail-lead-extractor
category: Automation
description: Gmail Lead Extractor reads a Gmail label, extracts clean job URLs from authenticated emails, and passes them into the career-ops pipeline. Use it to ingest new job leads from a configured mailbox label.
github: "https://github.com/career-ops-hq/career-ops/tree/main/plugins/gmail"
language: JavaScript
stars: 69952
forks: 13232
install: "npx degit https://github.com/career-ops-hq/career-ops/tree/main/plugins/gmail ~/.claude/skills/gmail"
installs_to: ~/.claude/skills/gmail
source_path: plugins/gmail/skill.md
collection_size: 8
category_size: 1754
collection_url: "https://dirskills.com/collections/career-ops-hq/career-ops"
added: 2026-09-03T06:03:11.125Z
last_synced: 2026-09-03T06:03:11.125Z
canonical_url: "https://dirskills.com/skills/gmail-lead-extractor"
---

# Gmail Lead Extractor

Gmail Lead Extractor reads a Gmail label, extracts clean job URLs from authenticated emails, and passes them into the career-ops pipeline. Use it to ingest new job leads from a configured mailbox label.

**Install:**

```bash
npx degit https://github.com/career-ops-hq/career-ops/tree/main/plugins/gmail ~/.claude/skills/gmail
```

## README

# gmail plugin

Reads a Gmail label, extracts clean job URLs from authentic (DMARC-passing)
emails, and returns them as leads. The engine writes them to the pipeline.

## Command

- `node plugins.mjs run gmail` — ingest new leads from the configured label.

## Setup

Put `GMAIL_CLIENT_ID` + `GMAIL_CLIENT_SECRET` + `GMAIL_REFRESH_TOKEN` in `.env`
(an OAuth Desktop client + a refresh token from the consent flow). Configure the
label + lookback in `config/plugins.yml`:

```yaml
plugins:
  gmail: { enabled: true, label: "Job Leads", days_back: 7 }
```

## Data it produces

`Job[]` ({ title, url, company, location }) — the engine de-dups against the
pipeline and appends new ones. It maintains its own processed-message cursor in
`data/gmail-state.json` to avoid re-reading the same emails.
