For agencies, freelancers and B2B teams
Give every client a private status page, powered by the Sheet you already update.
Agencies, freelancers, print shops and B2B suppliers track projects and orders in Google Sheets. FlexTable shows each logged-in client only their own rows, like project stages, deliverables, invoices and delivery dates, so you stop answering "any update?" emails.
| Project | Stage | Next milestone | Invoice |
|---|---|---|---|
| Website redesign | In review | Nov 20 | Paid |
| SEO retainer | In progress | Monthly report, Dec 1 | Due Nov 30 |
| Brand refresh | Scheduled | Kickoff, Jan 8 | Not issued |
Sound familiar?
Your tracker is up to date. Your clients just can't see it.
Half my inbox is clients asking for a status update I already wrote in a spreadsheet.
I can't share the tracker sheet because every client is in it.
Proper client portal software costs more than the problem it solves.
How it works
A client portal in three steps
No new project management tool. Keep updating your Sheet; FlexTable shows each client their slice of it.
Track work in one Google Sheet
One row per project, order or deliverable, with a column for the client's email or username.
Turn on User-Specific Display
Match rows to the logged-in WordPress user by email, username or name.
Give clients a login
Each client signs in and sees only their own rows. Everyone else gets a login prompt.
One Sheet, a private view for every client
FlexTable compares the logged-in user with a column in your Sheet and shows only the matching rows. The search box is removed, so clients can't browse anyone else's records.
- Match by username, email address or name
- Clients with several projects see all of their rows
- Values must match exactly, so emails work best
- Update the Sheet and every client's view changes
| Order | Item | Qty | Status |
|---|---|---|---|
| #4471 | Business cards | 1,000 | Shipped |
| #4502 | Trade-show banner | 2 | Printing |
| #4519 | Flyers A5 | 5,000 | Awaiting proof |
Order tracking without logins
Not every customer needs an account. Publish a lookup page where customers enter an order or ticket number and see just that order's status, carrier and delivery date.
- Search one column, like Order No.
- Nothing shows until a valid number is entered
- Status updates appear as soon as the Sheet changes
Visitors who aren't signed in see a login prompt
Choose what non-logged-in visitors see: a custom login message with your own button text and URL, or no table at all. Your client data stays behind the login.
- Custom message, button label and login URL
- Or hide the table completely
- Protected View for internal team tables
Features that matter here
Everything a lightweight client portal needs
Live from your tracker
Update a row in the Sheet and the client's view updates. No double entry.
Match by email or username Pro
Use whatever identifier your Sheet already has. Emails are the most reliable.
Private by default Pro
Login prompt or hidden table for anyone who isn't signed in.
Projects and invoices in tabs Pro
Show several Sheet tabs, like Projects and Invoices, in one tabbed table.
Exportable Pro
Let clients download their own list as CSV, Excel or PDF.
Works on phones
Clients can check status from anywhere.
Also used for
FlexTable Pro: MCP server
Or just ask your AI assistant to build it.
Connect Claude, ChatGPT (Codex), Cursor or VS Code to FlexTable through its MCP server. Describe the table you need, and your assistant syncs the Google Sheet, styles the table, manages its columns and publishes the page for you.
Illustrative example of a FlexTable MCP session.
FAQ
Frequently asked questions
More ways teams use FlexTable
Answer "any update?" before they ask.
Turn your project or order tracker into a private client portal. Free to start.