Notion opportunity database
Skill ArthurZakirov/OpportunityOS/skills/notion-opportunity-database
Opportunity workflows for applications, registrations, browser handoffs, and supporting documents.
npx -y skills add ArthurZakirov/OpportunityOS --skill notion-opportunity-databaseAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Set up, maintain, and use a Notion opportunity database as the system of record for search, scoring, one-at-a-time application handoff, and status updates.
SKILL.md
7.8 KB, ~1.7k tokens by cl100k_base, as published. Nobody here has run it
Notion Opportunity Database
Purpose
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.
Tool Boundary
Use Notion MCP/API tools for:
- fetching database schema
- querying candidate rows
- checking duplicates
- creating rows
- updating row properties
- changing schema and views
- writing application status back
Do not use browser automation to edit Notion if MCP/API access is available.
MCP Query Limitation
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:
- Create or use a filtered Notion view for the exact audit queue, such as
Status is empty,Status is Needs enrichment, orStatus is To do. - Fetch/search rows from that visible queue and update individual pages through MCP
update_page. - If view-based enumeration is unavailable, use Notion search within the data source with broad role/company terms to discover likely rows, then fetch/update individual pages.
- For a known dataset, use previously collected page IDs as a bounded backfill list.
- If complete reliability is required and credentials are available, use the official Notion API database-query endpoint from a local script instead of the broken MCP SQL wrapper.
Prefer a temporary audit view over search when possible because it has a visible completion condition: the view becomes empty.
Recommended Schema
Minimum fields:
RoleorName: titleURL: URLCompany: textStatus: selectPriority Score: number, 0-100Rationale: rich textRole Family: selectLocation: multi-selectSalary Range: textSalary Rationale: rich textSource: select
URL should be one of the first visible columns, ideally immediately after the title.
Status Semantics
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 open
Use 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 response
Human 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 -> Rejected
Enrichment Criteria
Full enrichment requires candidate context. Before scoring fit or writing a candidate-specific rationale, confirm access to:
- resume or experience evidence
- target role preferences
- location/remote constraints
- compensation expectations, if relevant
- application strategy or dealbreakers
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:
- valid
URL CompanyRole FamilyLocation- numeric
Priority Score - consolidated
Rationale SourceSalary Rangewhen a credible value is available, otherwise emptySalary Rationaleexplaining source, confidence, or why salary is unknown
Use 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.
Rationale Field
Keep one consolidated Rationale field instead of separate columns for:
- fit rationale
- experience signal
- application angle
- main risk
Recommended structure:
Fit: ...
Experience signal: ...
Application angle: ...
Main risk: ...
Salary Fields
Keep the value separate from the reasoning:
Salary Range: only the actual range or value, such asEUR 80k-100k baseor empty if unknownSalary Rationale: source, confidence, or why the value is unknown
Do not put sentences like not captured; verify directly in Salary Range.
One-At-A-Time Application Handoff
Before invoking an execution skill:
- Fetch the database schema.
- Select one row by status and score, normally highest
Priority ScorewhereStatusisTo do. - Confirm the row has a valid
URL. - Update
StatustoIn progress. - Pass a compact handoff object to
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.
Writeback After Application
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 RangeandSalary Rationale: update only if the application revealed reliable compensation information
Do not overwrite source rationale with application logs. Keep detailed field inventories and sensitive application details in private logs.
Discovery Insert Rules
Before creating a row, deduplicate by:
- exact URL
- normalized URL domain/path
- company + role title
If a duplicate exists, update missing fields and leave application status intact unless the job is closed or reopened.
Output
Return:
- database used
- selected row
- handoff object
- status before and after
- fields updated
- blockers
Gives 0 of the 12 instructions most note taking skills give in ~1.7k tokens
Counted across 686 of the 876 authors here whose files we hold, read 2026-08-06
- include a visual element on every slidein 44 of 686, across 13 files
- use wikilinks for internal vault linksin 35 of 686, across 11 files
- commit to a single visual motif across every slidein 34 of 686, across 9 files
- read pptxgenjs guide before creating presentations from scratchin 30 of 686, across 6 files
- keep 0.5 inch minimum marginsin 30 of 686, across 7 files
- use subagents to visually inspect rendered slidesin 30 of 686, across 6 files
- re-verify affected slides after every fixin 27 of 686, across 5 files
- run content QA checks before declaring successin 26 of 686, across 3 files
- Use Markdown links for external URLs onlyin 26 of 686, across 10 files
- pick a bold topic specific color palettein 24 of 686, across 2 files
- read editing guide before editing existing presentationsin 23 of 686, across 1 file
- use one dominant color across all slidesin 23 of 686, across 1 file
Said here and by no other author read
- use notion api tools to edit the database
- use filtered views instead of broken sql queries
- enforce the minimum schema fields
- maintain the specified status semantics and flow
- confirm candidate context before scoring fit
- leave priority score blank if context is missing
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.