# Gmail Job Leads

Pulls job leads from a Gmail label into the career-ops pipeline.

- Repository: https://github.com/career-ops-hq/career-ops (79256 stars)
- Category: Business
- License: MIT
- Last updated: 2026-11-01
- Runs scripts: yes, review before use

## Install

Claude Code: `npx skills add career-ops-hq/career-ops --skill career-ops-plugin-gmail -g -a claude-code -y`
Codex: `npx skills add career-ops-hq/career-ops --skill career-ops-plugin-gmail -g -a codex -y`
Cursor: `npx skills add career-ops-hq/career-ops --skill career-ops-plugin-gmail -g -a cursor -y`
Gemini CLI: `npx skills add career-ops-hq/career-ops --skill career-ops-plugin-gmail -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add career-ops-hq/career-ops`

## Description

How to pull job leads from a Gmail label into the career-ops pipeline.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# 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`, under your data root, to avoid re-reading the same
emails.

