Notion formulas are one of those features that feel optional until the moment you need them — and then you need them urgently and have no idea where to start. This glossary is the reference you keep open while building. Thirty-eight formulas covering text manipulation, date calculation, conditional logic, business metrics, and personal productivity — each with what it does, why you would use it, and the exact syntax to copy.
All formulas use the prop("Property Name") convention. Replace the property names in each example with the exact names of your own database properties, including capitalisation and spacing.
You need a Notion workspace to use these. Create your free account here — the free plan includes full formula support.
How to Use This Glossary
To add a formula to any database: open the database, click the “+” to add a property, select “Formula” as the type, and paste or type the formula into the editor. Notion validates the formula in real time — a red underline means there is a type mismatch or syntax error. Hover over the underline to see what went wrong.
Property names in formulas are case-sensitive and must match exactly. If your property is called “Due Date” (with capital D), then prop("due date") will throw an error. Copy property names directly from your database header to avoid typos.
Text Formulas
1. Full Name from First and Last Name
What it does: Combines two separate name properties into one display field.
Why use it: HR databases, CRM contacts, client lists — anywhere you store names in separate fields but want a single display column.
concat(prop("First Name"), " ", prop("Last Name"))
2. Email Domain Extraction
What it does: Extracts the domain name from an email address.
Why use it: CRM databases — quickly see which company a contact is from without reading the full email.
slice(prop("Email"), add(indexOf(prop("Email"), "@"), 1))
3. Word Count Estimate
What it does: Estimates word count of a text property by counting spaces and adding one.
Why use it: Content databases — track estimated word count of article summaries or brief descriptions stored as text properties.
add(length(replaceAll(prop("Description"), "[^ ]", "")), 1)
4. Uppercase Title
What it does: Converts a text property to all uppercase.
Why use it: Standardising category labels or creating consistent display titles in gallery views.
upper(prop("Name"))
5. Content Snippet Preview
What it does: Truncates a long text property to the first 100 characters and adds ellipsis.
Why use it: Gallery views where you want a preview of long descriptions without the full text overflowing the card.
if(length(prop("Notes")) > 100, concat(slice(prop("Notes"), 0, 100), "..."), prop("Notes"))
Number and Math Formulas
6. Profit Margin Percentage
What it does: Calculates profit margin as a percentage of revenue.
Why use it: Sales, ecommerce, and freelance databases — see profitability at a glance without manual calculation.
if(prop("Revenue") > 0, round((prop("Revenue") - prop("Cost")) / prop("Revenue") * 100), 0)
7. Budget Variance
What it does: Shows how much over or under budget an item is (positive = under budget, negative = over).
Why use it: Project budget databases — surface overspend immediately without manual comparison.
prop("Budgeted Amount") - prop("Actual Amount")
8. VAT / Tax Inclusive Price
What it does: Calculates the tax-inclusive price from a net price and tax rate.
Why use it: Product databases, invoice trackers, ecommerce systems.
round(prop("Net Price") * (1 + prop("Tax Rate") / 100) * 100) / 100
9. Hourly Rate from Fixed Fee
What it does: Calculates effective hourly rate from a project fee and estimated hours.
Why use it: Freelance project databases — see whether fixed-fee projects are priced correctly before you sign them.
if(prop("Estimated Hours") > 0, round(prop("Project Fee") / prop("Estimated Hours")), 0)
10. Running Total Label
What it does: Formats a number as currency with a dollar sign prefix.
Why use it: Finance and budget databases where the Number property format is insufficient and you want currency display in a formula column.
concat("$", format(round(prop("Amount") * 100) / 100))
Date and Time Formulas
11. Days Until Deadline
What it does: Shows how many days remain until a due date. Negative means overdue.
Why use it: Task and project databases — see urgency at a glance without reading dates.
dateBetween(prop("Due Date"), now(), "days")
12. Days Since Created
What it does: Shows how many days have passed since an item was created.
Why use it: CRM leads, support tickets, job applications — flag items that have been sitting open for too long.
dateBetween(now(), prop("Created"), "days")
13. Project Duration in Weeks
What it does: Calculates the total project duration from start to end date in weeks.
Why use it: Project planning — see project length without manually counting calendar weeks.
dateBetween(prop("End Date"), prop("Start Date"), "weeks")
14. Day of the Week
What it does: Returns the day of the week (0 = Sunday, 6 = Saturday) for a date property.
Why use it: Content calendars — check whether a publish date falls on a weekend without opening a calendar.
day(prop("Publish Date"))
15. Contract Expiry Warning
What it does: Returns “Expiring Soon” if a contract renews within 30 days, “Expired” if it has already passed, otherwise blank.
Why use it: Client contracts, software subscriptions, vendor agreements — never miss a renewal.
if(dateBetween(prop("Renewal Date"), now(), "days") < 0, "Expired", if(dateBetween(prop("Renewal Date"), now(), "days") <= 30, "Expiring Soon", ""))
16. Month Name from Date
What it does: Returns the month name (January, February, etc.) from a date property.
Why use it: Finance databases, content calendars — group or display items by month name rather than number.
if(month(prop("Date")) == 1, "January", if(month(prop("Date")) == 2, "February", if(month(prop("Date")) == 3, "March", if(month(prop("Date")) == 4, "April", if(month(prop("Date")) == 5, "May", if(month(prop("Date")) == 6, "June", if(month(prop("Date")) == 7, "July", if(month(prop("Date")) == 8, "August", if(month(prop("Date")) == 9, "September", if(month(prop("Date")) == 10, "October", if(month(prop("Date")) == 11, "November", "December")))))))))))
Conditional and Logic Formulas
17. Overdue Flag
What it does: Returns true if a task is past its due date and not yet done.
Why use it: Task databases — create a filtered “Overdue” view using this checkbox property.
and(dateBetween(prop("Due Date"), now(), "days") < 0, prop("Status") != "Done")
18. Priority Score (Multi-Factor)
What it does: Assigns a numeric priority score based on both Priority level and days until due date, for sorting.
Why use it: Task databases with large volumes of tasks — sort by this number to surface the most urgent and important items first.
add(if(prop("Priority") == "High", 100, if(prop("Priority") == "Medium", 50, 10)), if(dateBetween(prop("Due Date"), now(), "days") < 0, 200, if(dateBetween(prop("Due Date"), now(), "days") <= 2, 100, if(dateBetween(prop("Due Date"), now(), "days") <= 7, 50, 0))))
19. Completion Status Label
What it does: Returns a text label based on a checkbox property — "Complete" or "Incomplete".
Why use it: When you need a text filter or display for a checkbox property, since checkboxes cannot be used in all filter types.
if(prop("Completed"), "Complete", "Incomplete")
20. High Value Flag
What it does: Flags items where the deal or order value exceeds a threshold.
Why use it: CRM pipelines, ecommerce order databases — instantly identify high-value items that warrant priority attention.
prop("Deal Value") >= 10000
Status and Progress Formulas
21. Task Completion Percentage
What it does: Calculates percentage of tasks completed using Rollup properties.
Why use it: Projects database — automatic progress percentage updated every time a task is marked done. Requires a "Total Tasks" Rollup and a "Completed Tasks" Rollup already configured.
if(prop("Total Tasks") > 0, round(prop("Completed Tasks") / prop("Total Tasks") * 100), 0)
22. Progress Bar (Text)
What it does: Creates a visual text progress bar using block characters — for example, "████░░░░░░ 40%".
Why use it: Dashboards and gallery views where a visual representation of progress is more readable than a number.
concat(slice("██████████", 0, floor(prop("Progress") / 10)), slice("░░░░░░░░░░", 0, 10 - floor(prop("Progress") / 10)), " ", format(prop("Progress")), "%")
23. Project Health Score
What it does: Returns "On Track," "At Risk," or "Off Track" based on completion percentage and days remaining.
Why use it: Project portfolio dashboard — see project health at a glance across all active projects.
if(prop("Progress") >= 80, "On Track", if(and(prop("Progress") < 50, dateBetween(prop("Target Date"), now(), "days") < 14), "Off Track", "At Risk"))
24. Habit Streak Counter
What it does: Counts consecutive days a habit has been logged (requires daily checkbox properties Mon–Sun).
Why use it: Habit tracker databases — see current streak without manual counting.
add(if(prop("Mon"), 1, 0), add(if(prop("Tue"), 1, 0), add(if(prop("Wed"), 1, 0), add(if(prop("Thu"), 1, 0), add(if(prop("Fri"), 1, 0), add(if(prop("Sat"), 1, 0), if(prop("Sun"), 1, 0)))))))
Business Formulas
25. Lead Score
What it does: Scores a CRM lead based on company size, engagement level, and deal stage.
Why use it: Sales pipelines — prioritise outreach to highest-scoring leads automatically.
add(if(prop("Company Size") == "Enterprise", 30, if(prop("Company Size") == "Mid-Market", 20, 10)), add(if(prop("Engagement") == "High", 30, if(prop("Engagement") == "Medium", 15, 5)), if(prop("Stage") == "Proposal", 40, if(prop("Stage") == "Discovery", 20, 5))))
26. Invoice Overdue Status
What it does: Returns "Overdue" if an unpaid invoice is past its payment due date.
Why use it: Invoice tracking databases — instantly see which invoices need chasing without reading through dates.
if(and(prop("Status") != "Paid", dateBetween(prop("Payment Due"), now(), "days") < 0), "Overdue", "")
27. Monthly Recurring Revenue Label
What it does: Converts an annual subscription value to a monthly figure.
Why use it: SaaS product tracking, subscription management databases.
round(prop("Annual Value") / 12)
28. Employee Tenure in Years
What it does: Calculates years of employment from a start date to today.
Why use it: HR employee databases — surface tenure for anniversary recognition, review scheduling, and retention analysis.
floor(dateBetween(now(), prop("Start Date"), "years"))
29. Inventory Reorder Flag
What it does: Returns "Reorder Now" when stock falls below a minimum threshold.
Why use it: Inventory and product databases — never run out of stock because a reorder was missed.
if(prop("Stock Level") <= prop("Reorder Point"), "Reorder Now", "")
30. Commission Calculator
What it does: Calculates sales commission based on a tiered commission rate.
Why use it: Sales team databases — automatically calculate commission earned per deal without spreadsheets.
if(prop("Deal Value") >= 50000, round(prop("Deal Value") * 0.1), if(prop("Deal Value") >= 20000, round(prop("Deal Value") * 0.07), round(prop("Deal Value") * 0.05)))
The HR Management, Recruitment and Onboarding template uses several of the business formulas above — tenure calculation, onboarding completion percentage, and contract renewal warnings — already configured in the employee and contractor databases. If you are managing a team in Notion and want a system where these formulas are already working correctly, it is a useful starting point.
Personal Productivity Formulas
31. Reading Time Estimate
What it does: Estimates reading time in minutes from a word count property (assuming 200 words per minute).
Why use it: Reading list and book databases — know how long something will take before you start it.
concat(format(ceil(prop("Word Count") / 200)), " min read")
32. Goal Progress Label
What it does: Returns "Not Started," "In Progress," or "Achieved" based on a progress percentage.
Why use it: Personal goal tracking databases — clear status labels without manual select updates.
if(prop("Progress") == 0, "Not Started", if(prop("Progress") < 100, "In Progress", "Achieved"))
33. Budget Remaining This Month
What it does: Subtracts total spent from monthly budget to show remaining allowance.
Why use it: Personal budget databases — see spending headroom at a glance without summing manually.
prop("Monthly Budget") - prop("Total Spent")
34. Sleep Quality Score
What it does: Calculates a simple sleep score from hours slept and a subjective quality rating (1–5).
Why use it: Personal health tracking databases — a combined metric for filtering and analysing sleep patterns.
round(prop("Hours Slept") * prop("Quality Rating") / 5 * 10) / 10
35. Weekly Review Prompt
What it does: Returns "Review Due" if the last review date was more than 7 days ago.
Why use it: Personal knowledge bases and second brain systems — flag items that need a periodic review.
if(dateBetween(now(), prop("Last Reviewed"), "days") > 7, "Review Due", "")
Advanced Combination Formulas
36. Urgency × Impact Score
What it does: Multiplies an urgency rating (1–5) by an impact rating (1–5) to produce a priority matrix score.
Why use it: Backlog databases, feature request trackers — sort tasks by a weighted priority score rather than a single dimension.
prop("Urgency") * prop("Impact")
37. Dynamic Status with Deadline Context
What it does: Returns a combined status that incorporates both task status and deadline proximity into one readable label.
Why use it: Executive dashboards and status reports where a single-column status needs to convey full context.
if(prop("Status") == "Done", "Complete", if(dateBetween(prop("Due Date"), now(), "days") < 0, "Overdue", if(dateBetween(prop("Due Date"), now(), "days") <= 3, "Due Soon", if(prop("Status") == "Blocked", "Blocked", "In Progress"))))
38. Unique Identifier Generator
What it does: Creates a unique reference code by combining a prefix, the year, and the item's ID number from a Rollup.
Why use it: Invoice databases, ticket systems, contract registers — generate reference codes automatically without manual numbering.
concat("INV-", format(year(prop("Date"))), "-", format(prop("Invoice Number")))
Formula Troubleshooting: The Three Errors You Will See Most
Type Mismatch — you are passing a number where the function expects text, or vice versa. Fix: use format() to convert a number to text, or toNumber() to convert text to a number.
Property Not Found — the property name in prop("...") does not exactly match the property in your database. Fix: copy the property name directly from the database header — check capitalisation, spaces, and special characters.
Division by Zero — a formula divides by a property that is zero or empty. Fix: wrap the division in an if() that checks the denominator is greater than zero before dividing, and returns 0 otherwise: if(prop("Total") > 0, prop("Numerator") / prop("Total"), 0).
Many of these formulas are already built and configured inside our professional templates. The Project Management with AI template uses formulas 21, 23, and 37 across its project and task databases. The Ecommerce Business Management System uses formulas 6, 8, 26, and 29. If you want to see these formulas working in a complete system rather than building from scratch, start your free Notion account here and duplicate either template into your workspace.
Disclosure: This post contains affiliate links. If you sign up for Notion through the links in this post, we may earn a small commission at no extra cost to you. All opinions are our own.



0 Comments