Repository navigation
Choosing a job source
Find jobs is off until you pick a source in Settings → Job search. LinkedIn and Indeed don't let other apps read their job listings, so Dossier searches one of these instead:
| Source | What it covers | Key and cost |
|---|---|---|
| JSearch | Google for Jobs: postings from LinkedIn, Indeed, Glassdoor, Stepstone and company sites, in most countries, with their whole text. | A key from OpenWeb Ninja or RapidAPI. The free plan has 200 searches a month; each page of results is one. |
| Adzuna | Adzuna's own index in 19 countries. It only shares the start of each posting; Dossier fetches the rest from the posting's page. | A free app ID and key from Adzuna's developer site, about 250 searches a day. |
| Bundesagentur für Arbeit | Germany's federal job board, with whole postings. Germany only. | No key, free. It isn't an official API (it's the access the agency's own site uses), so it can change without notice. |
The search starts from your profile's city, country and current role; change the place, radius (10 to 200 km), how recent and Remote only as you like. Every search is kept with what it found until you remove it, under Past searches, so going back to one, or reloading, doesn't spend another search.
You can also set the source and its keys with the DOSSIER_JOBS_SOURCE, DOSSIER_JSEARCH_* and DOSSIER_ADZUNA_* environment variables; a choice saved in Settings wins.
The job agent is off until you turn it on in Settings → Job agent. Give it one search (the same fields as Find jobs), the hour it runs, and a minimum score. Once a day after that hour, in your time zone, it asks your job source for the first page of results, drops the postings you saved, dismissed or applied for and the ones it has seen before, and scores the newest of the rest against your profile with your AI provider. The ones at or above your minimum score wait on the Agent screen with why they fit and what gives pause.
From there, Prepare draft writes a tailored resume and cover letter the way New application does. With Prepare drafts on its own on (it's off by default), a run does that for its best postings. A draft waits on the Agent screen, out of Applications, until you Approve it; it's then an ordinary Draft application. Dismiss deletes the draft, if there is one, and the posting never comes back. Nothing is ever sent.
It stays within the limits of a free plan: one source request a run, never a second page, at most three runs in any 24 hours (Run now goes at most once an hour), and at most 15 postings scored and 3 drafts a run by default (up to 30 and 10). On JSearch's free plan, that's at most about 90 of your 200 searches a month. It runs in the app's process, so run one instance of Dossier.
On your own computer
On a server
After installing