Profile configuration reference
This page lists every setting a Sweepy profile accepts. Keep it open while you edit your profile. For a guided walkthrough, see Setting up Sweepy instead.
Where profiles liveโ
Sweepy reads profiles from the profiles/ folder inside your Sweepy directory. Each profile uses YAML, a plain-text format organized by indentation and colons. Open one in Notepad, VS Code, or any text editor you already have.
Start from config.sample.yaml or a preset such as profiles/paralegal_nyc.yaml. Copy a template, rename it, and edit the values:
copy config.sample.yaml profiles\my_search.yaml
notepad profiles\my_search.yaml
Then point a sweep at that file:
sweepy --profile profiles/my_search.yaml
A profile holds your entire configuration. Create as many profiles as you want: one per city or role family. Sweepy keeps sweep state outside the profile, in the discovery cache, the history database, and the logs/ and results/ folders.
Indent with spaces, never with tabs. YAML rejects tabs, and one stray tab makes the whole profile unreadable.
Complete profile exampleโ
The example below shows Alex's complete profile. Lines that start with # act as comments, and Sweepy ignores them:
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# Sweepy โ Alex's Paralegal Profile (New York City)
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# Your name. It appears in the PDF report header.
name: "Alex Rivera"
# Set true to write rotating debug logs under logs/.
debug: false
# โโโ Job search โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
search:
# Every title Sweepy searches at the same time.
titles:
- "Paralegal"
- "Legal Assistant"
- "Litigation Support Specialist"
- "Legal Secretary"
# Your target market.
location: "New York, NY"
# true keeps remote roles only. false keeps remote, hybrid, and on-site roles.
remote_only: false
# false removes hybrid roles from every report.
include_hybrid: true
# Annual salary floor. Use 0 to skip salary filtering.
min_salary: 65000
# true reads pay from the posting text when a board omits structured pay.
salary_from_description: true
# โโโ Resume โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
resume:
# Path to a PDF or DOCX resume. Forward slashes work on Windows.
path: "Alex_Rivera_Resume.pdf"
# Terms that carry the most weight when Sweepy scores a posting.
must_have_skills:
- "Westlaw"
- "LexisNexis"
- "e-discovery"
- "Contract Review"
- "Legal Research"
# 1.0 is standard. Raise it to reward exact skill matches.
keywords_weight: 1.5
# Interchangeable terms. Sweepy matches every member of a group either way.
synonyms:
- ["e-discovery", "ediscovery", "electronic discovery"]
- ["legal research", "case law research"]
- ["docketing", "case calendaring"]
- ["legal assistant", "legal secretary"]
- ["contract review", "contract analysis", "agreement review"]
# Optional: one resume per role family. Sweepy picks the best fit for each posting.
tracks:
- name: "Paralegal Resume"
path: "C:/Users/Alex/Documents/Alex_Rivera_Paralegal.pdf"
color: "#1D4ED8"
route_keywords: ["paralegal", "litigation", "e-discovery"]
- name: "Legal Assistant Resume"
path: "C:/Users/Alex/Documents/Alex_Rivera_Legal_Assistant.pdf"
color: "#7E22CE"
route_keywords: ["legal assistant", "legal secretary", "scheduling"]
# โโโ Platforms โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
platforms:
greenhouse: true
ashby: true
lever: true
workable: true
aggregators: false
# Extra ATS domains. Sweepy labels matching postings with this name.
custom:
- name: "SmartRecruiters"
domain: "smartrecruiters.com"
enabled: true
- name: "Breezy HR"
domain: "breezy.hr"
enabled: true
# โโโ Sources โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
sources:
jobspy:
linkedin: true
indeed: true
glassdoor: true
zip_recruiter: true
# Leave a list empty to fall back to the seed lists in data/sources/.
ashby:
orgs:
- "crosby"
- "normlaw"
- "hargrove-firm"
- "lawhive"
workable:
slugs:
- "shegerianand-associates-1"
- "harper-james"
- "legalvision"
builtinnyc:
enabled: true
categories:
- "jobs/legal"
- "jobs/legal/search/paralegal"
# โโโ Cache and history โโโโโโโโโโโโโโโโโโโโโโโโโโโโ
cache:
enabled: true
ttl_seconds: 3600 # reuse discovery results for an hour
history:
enabled: true
retention_days: 4 # hide a reported posting for four days
match: "url+role" # "url" matches only an identical posting address
path: null # null uses ~/.sweepy/history.db
orchestrator:
timeout_per_source_seconds: 180
circuit_breaker:
failure_threshold: 5
cooldown_seconds: 30
# โโโ Report layout โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
report:
style: "cards" # "cards" (default) or "legacy"
cards_per_page: 6 # cards on each PDF page
max_cards: 24 # 0 or less shows every match
destinations: [] # extra folders for a copy of the PDF
assessment: "agent" # "keyword" accepts reports without agent judgments
# โโโ Exports โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
export:
format: "pdf,csv,json" # add "png" for page images
output_dir: "results"
tracking: true # job-tracking columns in the CSV
description_chars: 1000 # posting excerpt length in the CSV and JSON
Every settingโ
Sweepy falls back to the defaults below for any setting you leave out. Sweepy still needs search.titles, search.location, and resume.path to return useful matches.
| Section | Key | Required | Default | Description |
|---|---|---|---|---|
| Top level | name | No | "Job Seeker" | Your name. Appears in the PDF report header. |
| Top level | debug | No | false | Set true to write rotating debug logs in logs/. |
search | titles | Yes | [] | Job titles you target. Sweepy searches every title at once. |
search | location | Yes | "" | Your market, written as "City, State". |
search | remote_only | No | false | Set true to keep remote roles only. |
search | include_hybrid | No | true | Set false to drop hybrid roles. |
search | min_salary | No | 0 | Annual salary floor. 0 disables the filter. |
search | salary_from_description | No | true | Read pay ranges from the posting text when a board doesn't publish structured pay. Set false to use structured fields only. |
resume | path | Yes | "" | Path to your resume PDF or Word (DOCX) file. |
resume | must_have_skills | No | [] | Terms that receive the highest scoring weight. |
resume | keywords_weight | No | 1.0 | Multiplier for skill matches. Higher values reward overlap. |
resume | synonyms | No | [] | Groups of interchangeable terms. See Resume synonyms. |
resume | tracks | No | [] | One resume per role family. See Resume tracks. |
resume.tracks[] | name | Yes | n/a | Label shown on the report card and in the track badge. |
resume.tracks[] | path | Yes | n/a | Path to that track's resume PDF or DOCX file. |
resume.tracks[] | color | No | #1D4ED8 | Badge color as a hex code or a color name such as navy. |
resume.tracks[] | route_keywords | No | [] | Keywords that assign a posting to this track. |
platforms | greenhouse | No | true | Run Greenhouse searches. |
platforms | ashby | No | true | Run Ashby searches. |
platforms | lever | No | true | Run Lever searches. |
platforms | workable | No | true | Run Workable searches. |
platforms | aggregators | No | false | Run free aggregator feeds such as Remotive and Adzuna. |
platforms | custom | No | [] | Extra applicant tracking system (ATS) domains. Each entry takes name, domain, and enabled. |
sources | jobspy.linkedin | No | true | Query LinkedIn through python-jobspy. |
sources | jobspy.indeed | No | true | Query Indeed through python-jobspy. |
sources | jobspy.glassdoor | No | true | Query Glassdoor through python-jobspy. |
sources | jobspy.zip_recruiter | No | true | Query ZipRecruiter through python-jobspy. |
sources | greenhouse.enabled | No | true | Gate the Greenhouse source on or off. |
sources | greenhouse.boards | No | [] | Greenhouse board tokens. Empty falls back to data/sources/greenhouse_boards.txt. |
sources | ashby.enabled | No | true | Gate the Ashby source on or off. |
sources | ashby.orgs | No | [] | Ashby organization slugs. Empty falls back to data/sources/ashby_orgs.txt. |
sources | lever.enabled | No | true | Gate the Lever source on or off. |
sources | lever.companies | No | [] | Lever company tokens. Empty falls back to data/sources/lever_companies.txt. |
sources | workable.enabled | No | true | Gate the Workable source on or off. |
sources | workable.slugs | No | [] | Workable account slugs. Empty falls back to data/sources/workable_slugs.txt. |
sources | builtinnyc.enabled | No | true | Gate the Built In NYC source on or off. |
sources | builtinnyc.categories | No | [] | Built In NYC category paths such as jobs/legal. Empty falls back to data/sources/builtin_categories.txt. |
sources | builtinnyc.detail_pages | No | false | Read each posting's full text from its detail page. Built In challenges those pages after a few requests, so Sweepy fetches one at a time and stops at the first challenge. The listing still supplies company, location, and pay. |
sources | enabled | No | ["jobspy", "ats"] | Engines to run. Add hirehunt, openroles, jobdrop, or apify after you install each one. See Sources and platforms. |
sources | jobspy.sites | No | ["linkedin", "indeed", "glassdoor", "zip_recruiter"] | JobSpy boards as a list. Takes precedence over the jobspy.linkedin style booleans. |
sources | jobspy.fetch_descriptions | No | true | Fetch full posting text for scoring. Set false for faster sweeps with weaker scores. |
sources | jobspy.proxies | No | [] | Proxy targets written as user:pass@host:port. Proxy credentials stay on your machine. |
sources | jobspy.user_agent | No | null | User agent for JobSpy requests. Leave it out to use the built-in Chrome value. |
cache | enabled | No | true | Reuse discovery results between sweeps. |
cache | ttl_seconds | No | 3600 | Seconds Sweepy reuses a cached result. |
cache | path | No | null | Cache database location. null uses ~/.sweepy/cache.db, and SWEEPY_CACHE_PATH overrides both. |
history | enabled | No | true | Hide postings that earlier sweeps already reported. |
history | retention_days | No | 4 | Days Sweepy hides a reported posting before it can reappear. |
history | match | No | "url+role" | url matches only an identical posting address. url+role also matches the same title, company, and location on another board. |
history | path | No | null | History database location. null uses ~/.sweepy/history.db, and SWEEPY_HISTORY_PATH overrides both. |
orchestrator | timeout_per_source_seconds | No | 180 | Seconds one source may run before Sweepy stops it. |
orchestrator | circuit_breaker.failure_threshold | No | 5 | Failures in a row before Sweepy skips that source. |
orchestrator | circuit_breaker.cooldown_seconds | No | 30 | Seconds Sweepy waits before it retries a skipped source. |
report | style | No | "cards" | Report layout: cards or legacy. |
report | cards_per_page | No | 6 | Cards placed on each PDF page. |
report | max_cards | No | 24 | Highest number of cards. 0 or less shows every match. |
report | destinations | No | [] | Extra folders that receive a copy of the PDF and PNG files. |
report | assessment | No | "agent" | agent blocks a report while any card has keyword overlap alone. keyword permits reports without agent judgments. |
export | format | No | "pdf,csv" | Any mix of pdf, csv, json, and png, separated by commas. |
export | output_dir | No | "results" | Folder for your report files. Sweepy creates it when missing. |
export | tracking | No | true | Add the job-tracking columns to the CSV: date_applied, status, interview_stage, offer_amount, offer_date, follow_up_date, contact, and notes. Sweepy carries the values you enter into later sweeps of the same profile. Set false for raw data only. |
export | description_chars | No | 1000 | Characters of posting text saved in the CSV and JSON. Sweepy cuts on a sentence boundary. 0 saves the whole posting. |
Detail on sources and platform support appears in Sources and platforms. The gating rules there explain how platforms.* and sources.* work together. The optional hirehunt, openroles, jobdrop, and apify blocks live under sources as well, and the command reference lists the flags that set their keys.
Resume tracksโ
A track is a named resume. Use tracks when you target two different roles/titles and want each posting scored against the right document.
resume:
tracks:
- name: "Paralegal Resume"
path: "C:/Users/Alex/Documents/Alex_Rivera_Paralegal.pdf"
color: "#1D4ED8"
route_keywords: ["paralegal", "litigation", "e-discovery"]
- name: "Legal Assistant Resume"
path: "C:/Users/Alex/Documents/Alex_Rivera_Legal_Assistant.pdf"
color: "#7E22CE"
route_keywords: ["legal assistant", "legal secretary", "scheduling"]
Each entry takes four fields:
namelabels the track. The report card shows this label, so write one or two words.pathpoints at that track's resume PDF or DOCX file.colorsets the badge color. Use a hex code such as#1D4ED8, or a color name such asnavy.route_keywordsdecide which postings Sweepy assigns to this track.
Sweepy routes each posting by keyword overlap. It counts whole-word matches between the posting's title and description and each track's route_keywords. Sweepy assigns the posting to the track with the highest count. When two tracks tie, Sweepy uses the first one in your list.
route_keywords send a posting to a resume, and they never change the match percentage. Add the phrases each role family actually uses in its postings.
Leave tracks out and Sweepy uses resume.path as one implicit track.
Resume synonymsโ
resume.synonyms holds groups of words that mean the same thing. Sweepy treats every word in a group as equal to the others. Matching then works either way. See Adding industry-specific terms for the wider formatting checklist.
resume:
synonyms:
- ["e-discovery", "ediscovery", "electronic discovery"]
- ["legal research", "case law research"]
- ["docketing", "case calendaring"]
- ["legal assistant", "legal secretary"]
- ["contract review", "contract analysis", "agreement review"]
A group needs at least two terms, or Sweepy ignores it. Matching ignores case and handles regular singular and plural forms. The engine still matches whole phrases, so list legal research and legal researcher as separate terms when you want both to count.
Alex writes e-discovery on a resume. A posting that says electronic discovery now matches it, because both terms belong to the same group.
Add a group whenever you notice the same miss twice. Copy the posting's exact wording into the group beside your own term.
Common formatting mistakesโ
Most broken profiles trace back to a couple of common errors.
Windows paths need forward slashes or doubled backslashes. YAML reads one backslash as an escape character. A path such as C:\Users\Alex will break the file.
resume:
path: "C:/Users/Alex/Documents/Alex_Rivera_Resume.pdf" # โ
works
# path: "C:\\Users\\Alex\\Documents\\Alex_Rivera_Resume.pdf" # โ
also works
# path: "C:\Users\Alex\Documents\Alex_Rivera_Resume.pdf" # โ breaks YAML
One stray backslash in a path stops Sweepy from reading your profile. The setup wizard writes forward slashes for you, so copy that style when you edit by hand.
Comments start with #. Sweepy ignores everything after a # on that line. Use comments to note why a value matters, as the example profile does.
Indentation sets the structure. Indent each level by two spaces. One tab anywhere in the file breaks YAML.