Opening Problem Statement
Meet Will Stenzel, an academic coordinator at Oasis Hub, a growing community of student-led projects. Every semester, Will spends countless hours manually creating project showcases, entering team member data, and linking users to their respective projects and semesters in Notion. This repetitive task not only wastes approximately 8-10 hours every week but also introduces frequent errors such as missing team users or incorrectly linked projects. Managing large teams and projects manually jeopardizes accurate tracking, causing delays in evaluations and wasting valuable administrative resources.
What This Automation Does
This specialized n8n workflow streamlines the entire project-team-semester relationship management within Notion. Here’s what happens when it runs:
- Automatically receives new project and team data via a secure webhook post.
- Extracts individual team members and checks if they already exist as users in Notion; if not, creates new user entries.
- Fetches the current academic semester from Notion to link projects and users correctly.
- Creates new project showcase pages in Notion with project names and ideas, defaulting to a generated name if none is provided.
- Updates user pages to associate them with all relevant semesters, including newly added projects.
- Maintains relational integrity by linking projects to semesters and users to projects automatically.
By automating these steps, the workflow saves administrative teams around 10 hours weekly and drastically reduces human error.
Prerequisites ⚙️
- n8n account (hosted or self-hosted) 🔑
- Notion account with API access and configured databases for Users, Projects, and Semesters 📊
- HTTP Basic Authentication credentials for secure webhook access 🔐
- Familiarity with Notion database structures
Step-by-Step Guide
1. Set Up the Secure Webhook (Team Creation)
Navigate to n8n Dashboard → Create a new Workflow → Add a Webhook node.
Configure the webhook with path team-create, set method to POST, and enable Basic Auth using your credentials (for example, username and password tied to your team).
You should see the webhook URL displayed; this URL is where your external system (e.g., frontend form or API) will send team project JSON data such as:
{
"projectIdea":"A hub for all things Oasis",
"projectName":"Oasis Hub",
"teamMembers":[{"name":"Will Stenzel","email":"[email protected]"},{"name":"Jane Doe","email":"[email protected]"}]
}Common mistake: Forgetting to enable Basic Auth or misconfiguring credentials will prevent your data from entering the workflow.
2. Extract Project Name and Idea
Add a Set node after the webhook, name it Get Project Name & Idea.
Set two string fields: projectName with expression {{$json["body"]["projectName"]}} and projectIdea with {{$json["body"]["projectIdea"]}}.
This extracts project details for later use.
Common mistake: Not wrapping expressions accurately in double curly braces, causing undefined values.
3. Extract Team Members into Separate Items
Use a Function node called Get Team Members with this JavaScript:
const newItems = [];
for (const item of items[0].json.body.teamMembers) {
const newItem = { json: item };
newItems.push(newItem);
}
return newItems;This splits each team member into separate items for individual processing.
Common mistake: Modifying the input items beyond structure breaks the loop; keep the function code as-is.
4. Query Existing Users in Notion by Email
Connect a Notion node named Query for User set to Get All operation.
Configure a filter where Email equals the current item email using expression {{$json["email"]}}.
This checks if each team member already exists in the Notion Users database.
Common mistake: Using incorrect property keys—ensure you use the exact email field key as in your database.
5. Merge Incoming Members With Query Results
Add a Merge node (Merge1) with mode mergeByKey, using key email from the webhook data and Email from Notion query.
This pairs each incoming member with existing Notion user data if available.
Common mistake: Mixing case or incorrect keys — ensure keys exactly match the JSON property names.
6. Conditional Step to Create New Users if Not Exists
Add an If node named If user exists checking if $json contains an id key (which indicates user exists).
If user does not exist, connect to Create User Notion node to add that user, setting Name and Email properly from the input.
Common mistake: Forgetting to connect outputs of If node properly can leave new users uncreated.
7. Query Current Semester from Notion
Add a Notion node called Query Current Semester, querying the Semesters database filtering by a checkbox property Is Current? equals true, sorting by creation time descending, and returning all results.
This obtains your active semester for linking projects and users.
Common mistake: Incorrect filter property key—ensure you use the exact property name with proper case and type.
8. Extract Semester ID and Count Projects
Add a Set node Select Semester ID and Projects Count with two computed fields:
semesterID: Set to{{$json["id"]}}from semester queryprojectsCount: Set to{{$json["Projects"].length}}counting existing projects
This helps to track current projects and semester for naming and records.
Common mistake: Null references if projects property doesn’t exist; ensure your database has relation to Projects.
9. Merge Team Members With Semester Data
Add a Merge node connecting project info and team member flow, multiplex mode, to align data for project creation.
Common mistake: Incorrect input order for multiplex causes mismatched data.
10. Set Default Project Name if Empty
Add a Set node with expression:
projectName = $json["projectName"] == "" ? "Project Group " + ( $json["projectsCount"] + 1) : $json["projectName"]
This ensures a project name is always set, either from input or a generated default.
Common mistake: Expression syntax errors; copy exactly as above.
11. Create New Project in Notion
Use a Notion node Create Project, creating a new page in Projects database with:
- Name (title) from
projectName - Project Idea text from
projectIdea - Related Semester linked using
semesterID
Common mistake: Missing database permissions or credentials cause failures.
12. Select Created Project ID and Prepare Merges
Add a Set node Select Project Showcase ID to isolate the newly created project id.
Then merge user data to update relations.
Common mistake: Mislabeling property keys removes correct ID propagation.
13. Query and Update User-Semester Relations
Query the user again from Notion by email, merging and concatenating semester IDs with a Function node:
for (item of items) {
const currentSemesterID = item.json["semesterID"];
let allSemesterIDs = [currentSemesterID];
if (item.json["Semesters"]?.length > 0) {
allSemesterIDs = allSemesterIDs.concat(item.json["Semesters"].filter(semID => semID !== currentSemesterID));
}
item.json["allSemesterIDs"] = allSemesterIDs;
}
return items;Then update the user’s semester relation property in Notion with this array.
Common mistake: Overwriting existing semesters; this method preserves old semesters while adding new.
14. Update Project-User Relations
Similarly, use a Function node to concatenate all projects associated with the user, then update the Notion user’s project relation.
Note: The JavaScript also avoids duplicate project IDs.
Common mistake: Typo in variable names (ensure use of allProjectIDs not allWorkspaceIDs).
15. Final Multiplex Merge and Update
Use multiple Merge nodes to combine user, project, and semester info, pushing final updates back into Notion, maintaining relational integrity.
Once set up, trigger your webhook with new team and project data to watch updates propagate seamlessly.
Customizations ✏️
- In the Use Default Name if Not Specified node, adjust the naming convention to include semester year or customized prefix.
- Expand the Create User node properties to include additional fields like role, department, or profile picture URLs.
- Modify the webhook node to accept PATCH methods for partial project updates instead of only POST.
- Enhance the Query Current Semester node filter to support future or archived semesters rather than only the current one.
- Add an email notification node after user and project creation to inform stakeholders of new entries.
Troubleshooting 🔧
Problem: “No data returned from Notion query node”
Cause: Email filter mismatch or database permissions issue.
Solution: Double-check your Notion database field keys and credentials. Confirm the email property in Notion matches exactly as configured.
Problem: “Workflow fails to create new users for team members”
Cause: Incorrect IF node condition or merge keys.
Solution: Verify that the If user exists node uses Object.keys($json).includes("id") correctly and mergeByKey uses exact email keys.
Problem: “Project not linked to the current semester”
Cause: Incorrect semester ID reference or relation property key mismatch.
Solution: Validate that semesterID is correctly extracted and used in the Create Project node’s relation property.
Pre-Production Checklist ✅
- Verify all Notion credentials in n8n are valid and have correct permissions.
- Test webhook endpoint with sample JSON data to ensure received data splits properly.
- Confirm that all database fields (email, relation, checkbox) exist and are correctly named.
- Run simulation with mock team to check new user creation and project linkage.
- Back up Notion data or enable version history for rollback safety.
Deployment Guide
Activate your workflow in n8n by toggling it ON in the workflow editor.
Ensure your webhook endpoint is accessible to authorized applications via Basic Auth.
Monitor executions under the Executions tab to verify successful runs or troubleshoot errors.
Consider integrating logs or notifications on failures using error workflow triggers for production stability.
FAQs
Can I use Airtable instead of Notion in this workflow?
Not directly without modifying the Notion nodes; however, you can replace Notion nodes with Airtable nodes and adapt filtering and relation updating accordingly.
Does this workflow consume Notion API limits quickly?
This workflow is optimized to batch queries and only update when necessary, minimizing API calls, but heavy usage might approach standard rate limits.
Is my team data safe with this webhook?
Yes, the webhook uses HTTP Basic Authentication ensuring only authorized requests can trigger the workflow.
Can this scale for large teams?
Yes, but you may need to adjust execution timeouts and test with batches as Notion API can throttle large requests.
Conclusion
By implementing this n8n automation linking Notion Projects, Users, and Semesters, you have built a robust solution that saves administrative time, ensures accurate team-project associations, and maintains your academic or organizational records effortlessly.
This workflow can save approximately 10 hours of manual work weekly and prevents costly errors caused by human data entry.
Next steps might include automating email notifications when projects or users are added, integrating feedback forms, or adding reporting dashboards—all achievable with n8n’s flexible ecosystem.
Now go ahead and deploy your automation—with confidence!