To build a scalable client portal, never put all clients into a single shared page. You must use a relational database architecture. Create two core databases and connect them using a Relation property with two-way sync enabled.
Plaintext
1. Type /database to create "DB_Clients"
- Properties: Client Name (Title), Email (Email), Portal Link (URL)
2. Type /database to create "DB_Deliverables"
- Properties: Task (Title), Status (Select), Deadline (Date)
3. In "DB_Deliverables", click [+] > Relation > Select "DB_Clients"
- Toggle ON "Show on DB_Clients" to establish a 2-way connection.
The Syntax Breakdown
DB_Clients: Your master backend database. This lives in your private workspace and acts as the single source of truth for all CRM data. Clients never see this directly.DB_Deliverables: Your master task database. Every task for every client lives here.RelationProperty: The bridge between the two databases. By linking a specific deliverable to a specific client, you can use Linked Database Views to filter tasks automatically based on the client name.- Two-Way Sync (
Show on...): By enabling this toggle during the Relation setup, Notion automatically creates a reciprocal property inDB_Clients. When you assign a client to a task, that task instantly appears on the client’s profile. - Linked View of Database (
/linked): The command used to embedDB_Deliverablesonto a unique Client Page. You apply a hard filter here (Client Name=Specific Client) so they only see their own data.
Real-World Example: B2B Content Marketing Agency
You run a freelance content agency managing deliverables for dozens of clients. You need each client to log into a unique dashboard to see the real-time status of their specific articles without seeing your internal notes or other clients’ pipelines.
Here is your master backend data structure:
DB_Clients (Private)
| Client Name | Status | Contact Email |
| TechCorp | Active | admin@techcorp.com |
| GlobalData | Onboarding | ops@globaldata.com |
DB_Deliverables (Private)
| Task | Deadline | Status | Client Relation (Points to DB_Clients) |
| Q3 SEO Audit | 10/15/2026 | In Progress | TechCorp |
| Wireframe Copy | 10/18/2026 | Review | GlobalData |
| Blog Post: AI | 10/22/2026 | Not Started | TechCorp |
The Application (Client Portal Setup):
- Create a new, blank Notion page called “TechCorp Portal”.
- Share this specific page with
admin@techcorp.comas a Guest. - Type
/linkedand select yourDB_Deliverablesdatabase. - Click the Filter icon > Client Relation > select TechCorp.
The Output:
When the TechCorp client logs into their portal, they only see the filtered view of the master database.
| Task | Deadline | Status |
| Q3 SEO Audit | 10/15/2026 | In Progress |
| Blog Post: AI | 10/22/2026 | Not Started |
Common Errors & How to Fix Them
- Clients can see tasks belonging to other companies: You shared the master
DB_Deliverablesdatabase instead of sharing a specific Page containing a Linked View. Fix: MoveDB_Deliverablesto a private workspace folder. Only share the individual client dashboard pages where the Linked View is strictly filtered by their name. - New tasks added by the client disappear instantly: The client is creating a task in their portal, but the Linked View filter requires a relational tag that wasn’t automatically applied. Fix: Open the Filter menu on the client’s Linked View and ensure the relational filter is set to exactly match their client name. Any new row created in a filtered view automatically inherits that filter’s properties.
- Rollup data shows as a comma-separated text string instead of a calculation: You are trying to display a progress bar or sum calculation based on the Relation, but left the Rollup configuration on “Show original”. Fix: Click the Rollup property header, select Edit property, and change the Calculate dropdown from Show original to Count all, Sum, or Percent checked.