notion-opportunity-database — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited notion-opportunity-database (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Use this skill when a Notion database should act as the system of record for opportunity workflows.
The database owns discovery, deduplication, scoring, rationale, application handoff, and post-action status. It should feed one selected opportunity at a time into execution skills such as job-application-operator.
Use Notion MCP/API tools for:
Do not use browser automation to edit Notion if MCP/API access is available.
Some Notion MCP environments advertise a SQL/data-source query tool but reject it at runtime with an error like Tool notion-query-data-sources not found. When that happens, do not block on full-table SQL scans.
Use these workarounds instead:
Status is empty, Status is Needs enrichment, or Status is To do.update_page.Prefer a temporary audit view over search when possible because it has a visible completion condition: the view becomes empty.
Minimum fields:
Role or Name: titleURL: URLCompany: textStatus: selectPriority Score: number, 0-100Rationale: rich textRole Family: selectLocation: multi-selectSalary Range: textSalary Rationale: rich textSource: selectURL should be one of the first visible columns, ideally immediately after the title.
Status is the application/execution state. It is not a priority or fit label.
Recommended values:
Needs enrichment: found or imported, but fit, score, rationale, salary, or source fields are incompleteEnriching: an agent is researching and completing the rowBacklog: enriched and scored, not yet selected for application workTo do: selected from the backlog for the next application work batchIn progress: application form is being inspected, filled, or preparedHuman blocked: requires user action, login, CAPTCHA, missing information, unknown required field, or a policy decisionReady to apply: application is prepared and waiting for final submission/reviewSubmitted: application has been submittedWaiting for response: submitted and waiting for company responseInterview invite: company invited the candidate to book an interview, but it is not scheduled yetInterview scheduled: interview is booked on the calendar or otherwise confirmedInterview completed: interview happened and the candidate is waiting for the next responseAssessment received: company sent an online assessment/challenge, but work has not startedAssessment in progress: assessment/challenge is actively being workedAssessment submitted: assessment/challenge was submitted and the candidate is waiting for the next responseRejected: rejected or self-rejected after applicationClosed: job is no longer openUse Priority Score for ranking and Rationale for fit explanation.
Expected flow:
Needs enrichment -> Enriching -> Backlog -> To do -> In progress -> Ready to apply -> Submitted -> Waiting for responseHuman blocked is a branch from In progress; return to In progress or Ready to apply after the blocker is resolved.
Company responses branch after submission:
Waiting for response -> Interview invite -> Interview scheduled -> Interview completed -> Waiting for response
Waiting for response -> Assessment received -> Assessment in progress -> Assessment submitted -> Waiting for response
Waiting for response -> RejectedFull enrichment requires candidate context. Before scoring fit or writing a candidate-specific rationale, confirm access to:
If that context is unavailable, ask whether to do partial enrichment instead. Partial enrichment may still fill public/company facts such as URL, company, role family, location, source, salary range, and salary rationale, but should leave Priority Score and candidate-fit Rationale blank or explicitly mark them as needing candidate context.
A row is enriched enough for Backlog when it has:
URLCompanyRole FamilyLocationPriority ScoreRationaleSourceSalary Range when a credible value is available, otherwise emptySalary Rationale explaining source, confidence, or why salary is unknownUse Needs enrichment for raw imports and partially captured roles. Use Enriching while an agent is actively researching the row. Do not move a row to Backlog for fit-based application selection until full enrichment has candidate context, unless the user explicitly accepts partial enrichment. Do not move a row to To do until it is in Backlog unless the user explicitly chooses to apply without full enrichment.
Keep one consolidated Rationale field instead of separate columns for:
Recommended structure:
Fit: ...
Experience signal: ...
Application angle: ...
Main risk: ...Keep the value separate from the reasoning:
Salary Range: only the actual range or value, such as EUR 80k-100k base or empty if unknownSalary Rationale: source, confidence, or why the value is unknownDo not put sentences like not captured; verify directly in Salary Range.
Before invoking an execution skill:
Priority Score where Status is To do.URL.Status to In progress.job-application-operator.Handoff object:
source: notion
pageId:
role:
company:
applicationUrl:
priorityScore:
rationale:
salaryRange:
salaryRationale:
roleFamily:
location:
statusBefore:The application operator should work on exactly that one job, then return a structured outcome.
After execution, update the Notion row:
Status: Ready to apply, Submitted, Human blocked, Closed, or another application-stage valueRationale: append concise application outcome notes if they materially change the decisionSalary Range and Salary Rationale: update only if the application revealed reliable compensation informationDo not overwrite source rationale with application logs. Keep detailed field inventories and sensitive application details in private logs.
Before creating a row, deduplicate by:
If a duplicate exists, update missing fields and leave application status intact unless the job is closed or reopened.
Return:
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.