Your next steps — today
Your hunt — where you stand
Tune your search — fit map
↖ Widen · ↗ Strong · ↙ Focus · ↘ Strengthen
Add manually — by URL + text (for a posting JobScout can't read)
Fetch options — location, titles, radius, saved searches
Library & source health
Response — tailored application
Select a job on the left. Claude will score it and draft an editable resume + cover letter tuned to the posting.
Your field
Roles posted per week, pooled and anonymous.
Outreach — who to contact
Everything due across your tracked jobs — cadence steps and any task with a due date — grouped by past due, today, and the window below. Cadence steps open a pre-filled Gmail draft; mark anything done when handled.
Loading…
Keep-warm network
Referral sources & contacts you're nurturing over time. Each can run a keep-warm cadence; its next touch also appears in the due list above.
Outreach log
Every outreach touch you've logged, tied to its job and company. Log outreach from a tracker card (open a card → Outreach drafts → Log outreach) so each entry carries the job automatically.
People — everyone across your jobs & contacts
One row per person, merged across every card they appear on (matched by email, or name + company). Shows which jobs each person is linked to. Edit a person from any card via ✎ Edit; add a new one here or in Outreach → Keep-warm network.
Developments — your wins, projects & credentials
A running record of your career developments. Each one is a reason to reconnect — log it, then notify the right keep-warm contacts with a ready-made note. (Feeding your job search and résumé comes in later phases.)
Résumé bullet bank — reusable achievement lines, drawn from your wins
A library you build from developments (📄 Résumé bullet). Copy them into a tailored résumé when applying — they're never auto-inserted.
- Extension — recommended. One click on “Send to JobScout” saves a posting or a person from job boards and LinkedIn, and it helps fill out applications. Set it up in the card below.
- Bookmarklet — no-install backup (this card). For a locked-down or borrowed computer where you can’t add an extension. Same capture, one manual click.
Bookmarklet capture
The no-install option — works on the same hard-to-read sites (login-walled, bot-blocked, or heavy JavaScript). It reads from your own logged-in browser; no password is stored. If you can install the extension, use that instead — it’s in the card below and does everything this does, plus applications.
1. Install the bookmarklet (one time)
Drag this button to your bookmarks bar — it handles both jobs and contacts, choosing what to save based on the page you’re on:
2. Capture from any site
Open a search or page, then click the bookmarklet. It detects whether the page has jobs or people and asks you to confirm before sending. On a job board or careers page it saves the postings; on a LinkedIn profile it saves that one person (name, headline, company); on a search or leadership/team page it saves the people listed. Captured jobs show up in Search; captured contacts appear under a tracker card → Contacts → Import captured contacts.
Importing your own LinkedIn profile (to fill your résumé) is separate — it lives in My Profile → LinkedIn (upload your PDF, paste it, or one-click with the extension). The capture tools here save other people as contacts and jobs, never your own profile.
To paste a single posting — or a page JobScout can’t read — use the Add anything box at the top of the Search panel. It detects links, careers pages, gated sites, and pasted text in one place.
Assisted Apply extension
Fills job-application forms in your own browser from your validated profile — it never invents data, and you approve every submission. Tester install is through Chrome’s Developer mode; a one-click Web Store version will come later.
Step 1 — Install (first time only)
- Download the file with the button below — it saves to your Downloads folder as
jobscout-assisted-apply.zip. - Unzip it. Open your Downloads folder, then right-click
jobscout-assisted-apply.zip→ Extract All… → Extract (Windows), or double-click it (Mac). You now have a folder namedextension— note where it is (you’ll point Chrome at it and keep it there). - Open the extensions page. In Chrome (or Edge), click the address bar, type
chrome://extensions, and press Enter. - Turn on Developer mode — the toggle at the top-right of that page.
- Load it. Click Load unpacked (top-left), select the unzipped
extensionfolder, and click Select Folder. “JobScout Assisted Apply” now appears in your extensions list. - Find it & pin it. Click the puzzle-piece Extensions icon at the top-right of the Chrome toolbar. In the drop-down, find JobScout Assisted Apply and click the pin icon next to it — its icon now stays on your toolbar for one-click access.
- Come back to this page and do Step 2 below.
Step 2 — Connect it to your account
The extension connects automatically while you're signed in here — nothing to paste. This button is just a manual backup if it doesn't pick up on its own. (It does not update the extension itself.)
Updating to a new version
Important: the ↻ Reload icon on chrome://extensions does not download anything — it only re-runs the files already on your disk. To actually update you must replace those files first:
- Click ⬇ Download extension (.zip) (in Step 1 above) to get the new version.
- Unzip it (right-click → Extract All, or double-click) — you get a fresh
extensionfolder. - Replace the old files: copy everything from the new
extensionfolder into the same folder you originally loaded, choosing Replace when asked. (Or delete the old folder and re-add the new one with Load unpacked.) - Go to
chrome://extensionsand click the ↻ reload icon on the JobScout Assisted Apply card — now it picks up the new files. - Reopen this page; the status line above should read up to date ✓.
Pipeline analytics
Loading…
Does the score predict anything?
Loading…
Fitted weights
Loading…
Add an employer job board
Pulls straight from the employer (recruiter-free). The board is validated live before saving.
Add several companies at once
Advanced — add a board by URL
Only needed when Find board can't reach the company. Paste the board URL — every field below is read off it automatically, so you never have to look these values up.
Fields read from that URL (edit only if you know the board)
Current employers
Where each board's jobs went
Four stages, from what the board handed back to what reached your list. Every drop is one of your own settings doing its job — the button next to it changes that setting. Nothing here changes on its own.
What each board is buying you
Board postings vs. how many jobs from the same company reached you only through an aggregator. A high “via middleman” count next to a healthy board usually means the board is a subset — a second Workday career site, or a second ATS.
Where your jobs came from
Sources are chosen for you from the categories in Profile. This page shows what ran on your last search, what each returned, and why it was on. You can override any of it below.
Advanced — turn individual sources on or off
An override here sticks until you reset it, and it wins over the automatic choice. Reset to baseline clears your overrides.
Capture-only sources are gated sites with no public feed — they don't run automatically; use Browser capture on their results pages.
Boards for your field
JobScout ships specialist boards for ten fields. If yours isn't one of them, it can look up the boards your field actually uses, check each one is live, and add the ones you choose. Nothing is searched until you include it.
Relevance calibration (embeddings)
Semantic-fit (Voyage embeddings) distribution across your jobs, for tuning the blend window in scoring.py. Shows "off" until VOYAGE_API_KEY is set and a fetch has run.
Where the time goes
Milliseconds and queries per endpoint, since the last reset. Both, because either alone misleads: 2s over 400 queries is a per-row loop, 2s over 3 queries is one slow query — opposite fixes. Ranked by total time contributed, so an endpoint the page calls twelve times can outrank a single slow one. To read a page load: press Reset, hard-reload the app, come back and Refresh.
Retention schema
Whether the event, sightings and fetch logs actually exist on this database, and whether anything is writing to them. Reads of these tables return empty rather than erroring, so a failed migration otherwise looks exactly like a quiet week.
Give the event log a past
Reconstructs submitted and stage events from applications and tracker cards you already have, so response rate, silence and the funnel can see history from before the log existed. Imported rows are marked source=import — a reconstruction, not an observation — and can be removed again exactly. Nothing is written until you pick accounts.
User activity
Who's signed in and how much they've used JobScout. Online = active in the last 5 minutes; presence and “last active” only track from when this shipped, so they're blank for earlier activity. Jobs = postings added to that user's list; AI = assistant calls and estimated cost.
User feedback
Feedback from evaluators and users, with the auto diagnostic and any screenshot. Set a status and reply — the submitter sees your reply in their own feedback panel.
Users & access
Grant admin, allow sign-in, and control who may use the shared API keys. Shared keys are off by default — a user without their own key and without a grant simply gets no AI features (they never spend on your token).
Loading…
Allow a new email
Allowing an email lets that person sign in. They appear in the users table above (and in group pickers) only after their first sign-in.
Groups
Named groups let you share an employer board with a specific subset of users (Employers tab → a board's share ▾ → pick a group).
Tracker flows
Define the kanban stage vocabularies. Edit the built-ins or add your own (e.g. Board seats, Consulting). Stages are in funnel order — the last stage is treated as the closed/negative end. You can't remove a stage that still has cards on it.
Maintenance
Assign any legacy unowned data rows (jobs, tracker, tasks…) to your account. Shared employer boards and global config are left untouched.
Recent admin activity
Employer boards — all users (site-wide)
Every tracked board across all users, worst health first. Dead boards (no response for 3 fetches) auto-disable themselves; use this to prune the rest — disable or remove boards site-wide. Contribution = jobs the board added on its last fetch.
AI usage & cost — all users (global)
Estimated spend across all users (token‑based estimates), including everyone running on the shared operator key. Admin only — individual users see only their own cost in their Profile.
Learned form adapters — global
Structure-only mappings the Assisted-Apply engine learned: which form field on a host maps to which profile key — never a value. A mapping auto-confirms after 3 agreeing AI observations or one user correction (the user's own fill matching their validated value), then is reused for everyone. Confirm, reject, or delete to curate.
Board coverage — which fields have a verified board set
A board set is global — built once, read by every user in that field for ever.
Until this has run, the search panel is a wall of “Build the board set” buttons and the first person in each field
pays for a measurement everyone else then gets free.
The sweep does not cover all 23 fields: a hunt for business development returns the aggregators the app already searches,
because proposal and capture roles are advertised on the same general boards as the rest of business.
It builds the fields whose sourcing says the general feeds under-serve them — plus any you name.
Spends real AI calls and fetches.
Gate conversion — order the enrichment pass by ambiguity, or by score?
Two numbers and the rule that combines them, fixed before the data arrived: how often an unverified posting turns out to be gated once the full text lands, and whether the unread backlog is draining on its own. It states its own verdict rather than leaving the numbers to be read selectively. This has been computable for weeks and had no button — which is the same reason nobody read it.
JSON-LD probe — do employer career pages emit structured postings?
Fetches each employer’s careers page once and counts JobPosting
objects. Answers whether the no_jsonld enrichment failures are a parser problem or a real absence of
structured data. Bounded, read-only, no AI, and it writes nothing to any job — but it does spend real fetches,
so it stays a deliberate action rather than something the app does on its own.
Action ladder — is it discriminating?
The ladder was inert in production and nothing said so: three readers used
owner_stages()[1:] to mean “after applied”, but stage 0 is lead, so the slice
started at applied — every applied job read as already advanced and every rung came back
in_play. No error, no empty response: a working-looking endpoint returning a confident wrong answer.
The signature of that failure is not an exception, it is a distribution — every application piled on one
rung — so the app states its own verdict here rather than leaving somebody to read counts and judge.
Fetch review — what the numbers say
One AI call over the aggregate counters on this page — no job or user data leaves. It ranks the few systemic problems, quotes the numbers it reasoned from, and separates defects from expected behaviour. It only reports; nothing here changes your data. Every finding it can make was already visible in the tables below — that is the point: the McLean bug sat in these counters for weeks before a human read the CSV.
Description enrichment coverage — global
On-demand full-text enrichment of truncated (Adzuna / web-search) descriptions, by resolved platform. Aggregate-only — no per-user or per-job data.
Attempts counts every try; First tries excludes repeat (the same job failing the same way again), and the Rate is over first tries.
Outcomes: enriched (full text recovered) · no_jsonld (employer page reached, no JobPosting — the JS-SPA tail) · text_too_short (found a JobPosting, no longer than the snippet) ·
gated_ats (resolved to iCIMS/Taleo/SuccessFactors/Phenom — link is good, text isn't readable) · server_unreachable (Workday 403s server IPs; needs extension capture) ·
no_redirect / redirect_failed / stayed_on_aggregator / landed_on_aggregator (the four distinct reasons resolution didn't reach an employer) · no_url ·
job_backoff / host_cooldown (skipped on purpose — nothing was fetched).
resolver_skipped counts), yet
web-search has the best hit rate of any tier. Hard ceiling of 50 per pass; the AI arbiter tier runs only inside
this pass and only when web-search finds nothing.
Unplaceable locations — global
Location strings the offline gazetteer could not place, counted at fetch time.
The radius filter keeps these jobs (flagged) rather than guessing another state — safe, but invisible without this list.
unplaceable = a US-looking “City, ST” missing or spelled differently in us_cities.csv — these are the actionable ones, and the top row is the next alias worth adding.
foreign = an explicit non-US marker; correctly unplaced, nothing to fix.
Reset the tally after adding aliases so the next fetch shows what is still missing.
Learned non-requirements — global
Lines the gap classifier ruled out as not job requirements — EEO / Fair-Chance statements, anti-fraud recruiting notices, section headers, truncated fragments. Each was judged once by AI and is now filtered deterministically on every posting, for every user, at no further AI cost. The counterpart to the panel above: that one lists what the app could not decide, this one lists what it decided and no longer pays to re-decide. Forget all if a real requirement was suppressed by mistake.
Inbox — forwarded job emails
Forward job emails to the address below. JobScout reads each one, matches it to an application, and suggests actions — you choose what to apply. It never changes your tracker on its own and never sends email for you.
…
How to set up forwarding
Gmail auto-forward: Settings → Forwarding and POP/IMAP → add the address, confirm the code JobScout receives, then forward all mail or a filter of job senders.
One-off: just hit Forward on any job email — works from any provider, no setup.
Suggested actions
Candidates from your emails
Recruiters and contacts found in your forwarded emails — candidates to review and add to Contacts, deduped across your whole search.
Explore — fields outside your own that ask for what you already have
Reads the portable half of your résumé — the part that would still be true in another industry — and compares it against fields whose real postings have been read. Browsing costs nothing: those measurements are shared, so this is arithmetic. You pay only when you explore a field, and what you pay for is a real fetch. What travels is worked out under Profile → What travels to another field.
Your explorations — each one is a saved search of its own
An exploration keeps its own résumé, its own fit bar and its own postings. Its jobs stay out of your other searches, and theirs stay out of it — a field you were curious about does not end up in the library you apply from.
Auto‑Hunt — a scheduled search that feeds your list
This is JobScout's automatic job retrieval: turn it on and, on a schedule, it fetches and scores new jobs using your parameters (interests, sources, filters), then puts the best matches into your one job list, badged hunt pick so you can see why they are there. Leave it off and jobs are only pulled when you click Fetch now. It never applies for you — each job has one‑click assisted autofill you review and submit in your own browser.
Auto‑Hunt used to keep its own separate queue of jobs on this tab. It doesn't any more: there is one list, and this tab shows what the hunt did.
The schedule and the Daily digest below are the same once‑daily job. “Manual only” runs it only when you click Run now. Fit scoring respects your AI budget.
Last run
Loading…
Daily digest — the email version of this run
A once-a-day email of what needs your attention — past-due follow-ups, items due today, what is coming up, and any new matches the run found. It reports; it never fetches. Fetching is the Enable scheduled Auto‑Hunt switch above.
What your applications came back with
Which requirement gaps track a reply, and whether a résumé change helped — against the version you actually sent, not the one on file now.
What should count for more?
Two things about a job that only you can weigh. Everything else in the ranking is estimated from how jobs actually turn out.
Fit report
Patterns across your matches — the résumé gaps and hard requirements that keep coming up — each with one action. Fix a recurring gap once and it lifts every job that needs it.
Application profile
Review everything JobScout will use to fill applications, and confirm it's correct. Only your own data is here — nothing is invented. Fix anything wrong before it reaches a job form.
Contact
Professional summary
Skills
Work history
Each role with dates and bullets — this is what fills employment history and "describe your experience".
Education
Correct anything wrong and add what's missing. This is what fills School / Degree / Field on applications.
Screening answers
Federal & veteran profile (USAJOBS federal track — expand only if targeting federal roles)
Feeds compliant federal résumés and veterans' preference. Your own data only — nothing invented.
Saved answers
Answers captured from past applications (e.g. "How did you hear about us?", notice period). JobScout reuses these automatically — edit or remove any.
Résumé source
Exactly what the app uses for your tailored résumé, ATS match, gap analysis, and job scoring — so you can confirm it's your own data.
Résumé review — ATS & completeness
How your master résumé would fare at automated (ATS / AI) screening: what the parser can read, likely knockout exposure for your target roles, unsupported claims, and weak accomplishments — each with an honest, do-able fix. It is a diagnostic: it prompts you to add real evidence or state a real fact, and never invents anything.
LinkedIn Optimizer — generate profile copy from your résumé, ready to paste
Turns your résumé, confirmed facts, and logged wins into copy‑ready LinkedIn sections — headline, About, per‑role Experience, and skills — each sized to LinkedIn’s limits. It uses only your real information (nothing invented) and never touches LinkedIn: you review and paste each section yourself.
Import from LinkedIn — fill your résumé & profile from your LinkedIn
Bring your LinkedIn into JobScout (About, Experience, Education, Skills) to power matching & tailoring. Nothing is posted to LinkedIn; review it under Application profile above.
Tip: on LinkedIn, More → Save to PDF gives a clean file to upload.
Optimize for LinkedIn — generate copy from your résumé to paste back
Career interests
Pick broad areas — Claude does the exact‑title matching, so you don't need precise job titles. Or describe your target in your own words and let AI fill everything in.
Advanced / overrides
Optional. The guided interests above fill these automatically; edit only if you want to override.
Search defaults
These pre‑fill the Search panel each session; you can still tweak them per view without changing your profile.
Preferences Claude uses to rank fit
Web searches
For roles without a job-board feed (e.g. acting/theater), add search queries. Each fetch runs them via Brave and extracts real postings. Needs a Brave Search API key (add yours under AI Settings → API keys, or the operator's shared key).
Focus from your target market
The requirements that come up most across the jobs you target but read thin on your résumé. Work them in where they're truthfully yours — there's a clear path below.
Materials library
Upload résumés, skills lists, project write-ups, or credits. Text is extracted and feeds your tailored applications. For a demo reel, paste the link into a .txt file or your candidate summary.
Structured résumé — powers your tailored applications
AI usage & cost
Your own estimated spend on AI features (tailoring, scoring, gap analysis, outreach, the daily digest) — token‑based estimates. AI runs on the key the operator provides, so you don't need your own key; adding one in AI Settings is optional.
How you use the job list
The app can learn what you want from what you open, instead of asking you to configure it twice. This is everything it records, and the switch that stops it.
Deadlines calendar
Add your application deadlines and follow‑ups to your own calendar (Google, Apple, Outlook) with a day‑before reminder.
Blocked & down-ranked
Everything you've hidden or blocked — all reversible here. Job types set aside by a knockout (clearance, degree, license) can be shown again; blocked employers can be unblocked.
Danger zone
Permanently delete every job on your own account — all statuses, including Applied, across all pages — along with the tracker cards, tasks, notes, and saved kits tied to those jobs. Your account, profile, résumé, saved searches, and employer boards are kept. This cannot be undone.
Clear your target roles, titles, locations and ranking preferences, bringing back the guided setup. Your résumé, contact details, saved jobs, tracker, and searches are kept. This cannot be undone.
AI tuning
API keys
Add your own keys, or leave blank to use the shared key the operator has configured. Keys are encrypted at rest and never shown back to you.
Text messaging (SMS)
Send and receive texts inside JobScout using your own Twilio number — two‑way replies thread back automatically. Your Auth Token is encrypted at rest and never shown back to you. (No Twilio? You can still tap Call / Text via device on a contact to hand off to your phone or a VoIP softphone.)
To receive replies, paste the webhook URL above into your Twilio number's “A message comes in” webhook (Messaging → your number → Configure). US A2P 10DLC: carriers require a one‑time brand/campaign registration in your Twilio console before application‑sent texts deliver reliably — that step is done in Twilio and JobScout can't do it for you.