CreateAUniqueDatabaseToOrganizeSOPs
Start with a new database in Notion. Not a table inside a page, but a full-fledged database — I made this mistake and spent half a day wondering why my grouped filters wouldn’t save 😵💫. You’ll want to create this from the Notion sidebar by hitting “+ Add a page”, then choosing “Table – Full Page”. Give it a name like “SOP HQ” (or if you’re like me and have naming anxiety, just call it “Process Dump” until inspiration hits).
The bare minimum properties you’ll need:
– Title (automatic)
– Status (select: Draft, Needs Review, Active, Archived)
– Category (multi-select: Marketing, HR, IT, etc.)
– Last Updated (date with timestamps enabled)
– Owner (people property so someone owns the doc)
– URL (text or URL type for any external doc links)
That’s just scratching the surface, but don’t overdo it upfront. I once spent two hours setting up a “Risk Level” property that I never used again. 🙂 Just build what you’ll realistically use in your filtering and views.
Now, go ahead and create a view called “All SOPs” that just shows everything. Then another called “Active SOPs” with a filter: Status → is → Active. I like a Gallery view for this one because it makes each SOP look like a flashcard. Makes my brain happy ¯\_(ツ)_/¯.
WriteTheSOPAsANotionPageInsideTheDatabase
Open any row in the database — that’s where you write the SOP. Treat it like its own Notion doc. Put your actual process in the content area. I like to use a consistent structure:
1. Summary (what this SOP is for)
2. Tools Required
3. When to Use
4. Step-by-Step Instructions (each step numbered + bold headers)
5. Troubleshooting
6. Last Updated
You can template this if you want — literally just create a new template from within the database. Use the “➕ New template” button in the dropdown next to the blue “New” button. I didn’t notice that button existed for like a week. Thanks, visual clutter.
With templates, you can pre-fill each new doc with placeholders, so your steps look like:
**Step 1** – Log into the system
→ Use the link at: [insert URL here]
**Step 2** – Navigate to Reports
→ It’s under “Operations” > “Final Reports”. This menu changes for no reason sometimes.
You get the idea.
AddStatusControlToTrackSOPReviewProcess
Now, this part tripped me up — I wanted to automatically move outdated SOPs to “Needs Review” every three months. Initially, I tried to do it with automations but Notion’s built-in features don’t support schedules like that natively. Sigh. So I just added a “Last Reviewed” date field that I sort manually.
But here’s the workaround: I use an integration with Make (formerly Integromat). The Make scenario pulls from Notion’s API, checks the “Last Reviewed” date, and if it’s over 90 days, it updates the Status to “Needs Review”.
It’s not super elegant — I had to manually get the database ID and paste it into the Make automation. But it works now. Just note: when you export a Notion database or copy it, you get a new database ID. Found that out the hard way when the automation silently failed for weeks. Oof.
Here’s the Make flow:
1. Notion module: Search Objects by Database → filter by Status contains “Active”
2. Add filter module: Only entries where Last Reviewed + 90 days < today
3. Notion module: Update Database Object → set Status to “Needs Review”
You could technically do this with Zapier too, but their Notion support is still weirdly limited — especially with date fields.
UseToggleBlocksForNestedStepsWithinEachPage
Some SOPs have side quests. Like, if Step 4 is “Update in Salesforce,” that might itself be a tiny SOP. Nest that under a toggle block:
**Step 4 – Update in Salesforce**
> Use toggle block here:
>> **How to update contact info**
>> – Go to Contacts
>> – Search by Name
>> – Click Edit → Update Company field
Toggles save you from overwhelming the reader (or yourself). I use them for optional instructions, known bugs, or alternate methods. Just make sure people know to OPEN THE TOGGLES. I once got a Slack message asking where the login link was — it was inside a toggle labeled “Login credentials”. 😑
Another trick: use callouts for warnings or tips. Like:
⚠️ You must click “Save and Close” — clicking “X” discards changes
You can even nest toggles *inside* toggle blocks, but if you do that too many times, your page starts looking like a 90s tree menu. Proceed with caution.
UseLinkedDatabasesToReferenceFromOtherTeams
You might need to reference your SOPs inside other Notion pages. Let’s say Marketing has their own planning dashboard, and you want to add a filtered view of just SOPs relevant to them.
Inside the Marketing page:
1. Type /linked and choose “Create linked database”
2. Search for your SOP database
3. Add a filter like: Category contains “Marketing”
Now their team sees only what they need. Just warn them not to edit the filter or the view breaks (Notion lets everyone edit views unless locked, and even then — locking is weirdly buried in the view kebab menu).
Advanced move: add a synced block at the top explaining how the view is filtered. Something like:
> This view shows only Active SOPs tagged “Marketing”
That way when someone panics that their SOP “disappeared,” it’s not a mystery. It’s just because it got silently archived.
AddACalendarViewForReviewDeadlines
Remember that Last Reviewed field? Slap a Calendar view onto your database and set the date prop to “Last Updated” or “Last Reviewed”. I keep it hidden by default but show it when I feel like doing maintenance.
This is how I see which SOPs haven’t been touched in months. I use background colors on the calendar based on the Status field:
– Green = Active
– Yellow = Needs Review
– Red = Archived
Notion doesn’t have conditional formatting, but you can fake it by renaming your Status options with emoji. Like, “🟢 Active”, “🟡 Needs Review”, etc. Yeah… it’s goofy, but way easier than scanning text alone.
I check this calendar at the beginning of each fiscal quarter and update what needs love. If I forget, that’s when automation kicks in and starts alerting me in Slack 😬.
ArchiveDeadSOPsWithoutBreakingLinkedViews
The worst is when you archive a page and someone’s linked database view suddenly goes blank. This usually happens when they had a filter like “Status is Active,” and you delete or rename that status. Avoid.
Better practice: don’t delete statuses. Just add a new one. And don’t delete SOPs — archive them and move them to a new group.
Create a view called “Archived SOPs” with a filter: Status is Archived. Then hide it unless you’re doing cleanup. That way the page still exists, links won’t 404, and you can still see old processes.
Also — don’t trust properties to fill themselves. I once had half a dozen SOPs missing “Owner” because people didn’t fill it when creating the page. Now I have a template that prompts them: “👤 Who owns this doc? Don’t skip!”
CreateASubmissionFormForNewSOPRequests
Set up a Form in Notion using NotionForms or Tally, connected to your SOPs database. It lets teammates submit new procedure outlines without editing the database directly (which you definitely don’t want, trust me).
You can collect:
– Title
– Person requesting
– Process being documented
– Urgency rating (optional, but fun to read people panic)
– Suggested steps
Then it shows up as a new row in a separate view called “SOP Submissions”. Create a filtered view for that so you don’t clutter your main table.
I tag all new requests with Status = Draft and Category = Review Pending. Later, I copy them into the full SOP template. Sometimes I copy the text from the form and realize half of it makes no sense — like “Step 3: Do the usual.” Cool. Thanks.
Still, it beats having to Slack people constantly.