Repository navigation
Notion Setup
JobRadar writes into one Notion database through an internal integration. Three parts: create the integration, create the database, connect them.
- Open notion.so/profile/integrations → New integration.
- Name
JobRadar, type Internal, pick your workspace, save. - On Configuration → Capabilities tick Read content, Update content, Insert content; user information: No user information.
- Copy the Internal Integration Secret into
.envasNOTION_TOKEN.
Create a page called JobRadar, and inside it a full-page database called Jobs with exactly these properties. Names are case-sensitive.
| Property | Type | Notes |
|---|---|---|
| Role | Title | rename the default "Name" |
| Company | Text | |
| Match Score | Number | |
| Status | Select | not Notion's "Status" type. Options are created automatically: New, Shortlisted, Applied, Interview, Offer, Rejected, Skipped, Hidden |
| Deadline | Date | |
| Location | Text | |
| Work Mode | Select | Onsite, Hybrid, Remote |
| Experience | Text | |
| Skills | Multi-select | |
| Salary | Text | |
| Apply Link | URL | |
| Resume | URL | |
| Seen In | Number | how many groups posted it |
| Scam Risk | Select | Low, Medium, High |
| Job ID | Text | JobRadar's internal id |
| Cover Letter | Checkbox | |
| Notes | Text | yours; never written by JobRadar |
| Added | Created time |
Extra columns of your own are fine; JobRadar ignores them.
Open the JobRadar page → ••• → Connections → add JobRadar → Confirm. Without this step every call fails with "object not found".
Open Jobs as a full page → ••• → Copy link. The 32 characters before ?v= are NOTION_DATABASE_ID.
JobRadar uses Notion's current API (2025-09-03), where a database contains one or more data sources. It finds the data source by itself; only if your database has more than one do you need to set NOTION_DATA_SOURCE_ID.
uv run jobradar init checks every property and names any that are missing or have the wrong type.
| View | Layout | Filter / sort |
|---|---|---|
| All jobs | Table | none |
| Inbox | Table | Status is New · sort Match Score ↓, then Added ↓ |
| Top matches | Table | Match Score ≥ 80 · Status is not Hidden |
| Closing soon | Table | Deadline within next week · Status is not Applied · sort Deadline ↑ |
| Board | Board | group by Status |
| Applied | Table | Status is any of Applied, Interview, Offer, Rejected |
Match Score arrives with v0.2 part B, so Top matches stays empty until then.
- It creates a page per job and updates its properties.
- It sets Status only when it creates the page (New), or when it hides a job (an ad, or not a job). After that, Status is yours.
- Inside the page it owns one toggle called JobRadar (summary, eligibility, skills, original post, where it was seen) and rewrites only that toggle. Anything else you write on the page is never touched.
JobRadar is MIT-licensed and self-hosted. You submit every application yourself. · Report a security issue privately
JobRadar
Repository