discover

raven discover #

Unified job search across ATS APIs, board feeds, and optional local index.

Architecture: How discovery works — tiers, reverse ATS scan, WebSearch status.

Usage #

raven discover [options]
raven discover --q "backend engineer" --loc Remote --since 7
raven discover --sources boards --since 7
raven discover --json

Behavior #

  • Not open-web search — fetches public JSON APIs and board feeds (see how it works)
  • Loads title/location filters from config/portals.yml by default
  • CLI flags (--q, --loc, …) extend config filters
  • Runs tiers in parallel
  • Deduplicates by canonical job URL
  • Auto-saves results to data/jobs.json (unless --no-save)
  • Prints Next: raven draft --max 25 when complete

Flags #

FlagDescriptionDefault
--q "keywords"Title must match (comma-separated)from portals.yml
--not "words"Title must not containfrom portals.yml
--loc Remote,EULocation allow-listfrom portals.yml
--noloc "X"Location block-listfrom portals.yml
--home "City"Location always-allow
--since NPostings from last N days7
--sourcesats, boards, index, hiringcafeats,boards,index
--atsSubset of ATS platformsall 12
--limit NMax companies per ATS150
--max NMax total results1000
--save PATHCustom save pathdata/jobs.json
--no-saveSkip writing JSON
--jsonMachine-readable stdout
--streamNDJSON stream (for tooling)
--verboseExtra tier/child logs
--quietSummary only
--no-logDisable data/logs/ file

Output JSON shape #

{
  "count": 42,
  "rawMatches": 120,
  "deduped": 78,
  "offers": [
    {
      "url": "https://…",
      "company": "Acme",
      "title": "Backend Engineer",
      "location": "Remote",
      "postedAt": "2026-07-04",
      "ats": "greenhouse",
      "source": "greenhouse-full"
    }
  ],
  "savedAt": "2026-07-04T08:47:54.000Z"
}

Tips #

  • Always set title filters in portals.yml — empty filters match every job
  • Use --sources boards for quick tests (~3s vs ~1min full scan)
  • Run raven sync-jobs before using --sources index

See Job sources for platform details.