TimeQuorum Documentation
Everything you need to track time, manage projects, invoice clients, and integrate with your tools.
What is TimeQuorum?
TimeQuorum is a multi-tenant time tracking and project management platform. Each workspace is isolated, your data never mixes with another company's. Use it to log hours, manage projects and clients, generate invoices, and report on team productivity.
Time Tracking
Live timer or manual entry with project/task context
Projects & Classes
Flexible billing classes, milestones, and task assignments
Clients
Client profiles, billing addresses, project links
Invoicing
Generate invoices from time entries & classes
Time Cards
Weekly submission, locking, and manager approval dashboard
Project Templates
Reusable class and task structures applied with one click
Reports
35+ reports: timecard, budget health, billing, profitability, utilization and more
REST API
Full API access for integrations and automation
TimeQuorum is available as a cloud-hosted SaaS or as a self-hosted on-premises installation for Enterprise customers.
Plans & Pricing
Features throughout this documentation are tagged with the minimum plan required.
- Up to 5 users
- 3 projects, 3 clients
- Time tracking
- Dashboard
- Unlimited users
- Unlimited projects & clients
- Reports & Audit log
- Calendar view
- Time cards & templates
- Everything in Starter
- Invoicing
- Expenses & receipts
- Gantt timeline
- Full API access
- Priority support
- Everything in Professional
- On-premises deployment
- SSO / SAML
- Dedicated support & SLA
| Feature | Free | Starter | Pro | Enterprise |
|---|---|---|---|---|
| Time Tracking | ||||
| Projects & Tasks | 3 projects | |||
| Clients | 3 clients | |||
| Reports | 5 personal | |||
| Audit Log | ||||
| Calendar View | ||||
| Invoicing | ||||
| Expenses & Receipts | ||||
| REST API | ||||
| Time Cards | ||||
| Project Templates | ||||
| Gantt Chart | ||||
| SSO / SAML | ||||
| On-premises |
Quick Start
Get your team tracking time in minutes.
A new workspace opens on a Getting started checklist at the top of the Dashboard. It lists the steps in the order that works (add a client, create a project, create a class, track time, run a report, and optionally add a task, invite your team, and set up your invoice and billing profiles), says why each one matters, and every button opens the right screen for you. Each step ticks itself off as soon as the record exists, so the checklist always matches what is really in your workspace. It is shown to admins and managers.
- Create a workspace: sign up at timequorum.com, your workspace gets its own web address automatically (Enterprise plans can request a custom address via support).
- Invite your team: go to Users and send invitation emails. Each person can set their own password on first login.
- Add clients: in Clients, add the companies or individuals you work with.
- (Optional) Create project templates: in Projects → Templates, build reusable class/task structures for your standard delivery types.
- Create a project: in Projects, link a project to a client, or apply a template if you have one.
- Create a class: inside the project, add a class such as Design or Support. A class is the bucket time is logged against and billed; a project needs at least one. Tasks are optional and split a class into pieces of work you can assign and report on.
- Start tracking: use the Time Tracking page to start a live timer or add manual entries.
- Submit your time card (if your workspace uses time cards): at the end of each week, click Submit week on the Week tab, or open Time Cards and click Submit, to lock your entries.
Hiding the checklist
Use Hide this on the card to hide it for yourself. Admins can also hide it for everyone. Once the required steps are done the card says you are set up and then goes away on its own. Hiding is permanent, so the card never comes back once a workspace is past onboarding.
Support menu
The Support button in the top bar is on every page. Documentation opens this guide. Contact support and Request a feature open a short form inside the app; your message reaches our team with your workspace and email attached, you get a reference number (S-00012 for support, F-00012 for feature requests), and we reply to the email on your profile. Already on Harvest? The checklist links straight to the Harvest import until your first time entry exists.
Time Tracking Free
The Time Tracking page is the primary place for logging hours. You can use a live timer or create manual entries.
Live Timer
Click Start Timer, choose a project and optional task, and the timer begins. A floating widget at the bottom-right of every page shows the running timer; you can navigate anywhere without losing it. Click the widget to stop and save the entry.
Pause & Resume
The Pause button on the floating widget pauses the timer without discarding the session. Resume when you're ready. Paused time is excluded from the final entry duration.
Manual Entry
Click Add Manual Entry to log hours for a past period. Set the date, start and end time, project, task, and optional notes. Wherever you type a duration, on the Time Tracking page or in a project's Log Time dialog, enter it as clock time (4:15) or decimal hours (4.25), whichever reads naturally to you.
The Week Tab: Fill a Whole Week at Once
What it is: a timesheet grid on Time Tracking → Week: one row per project › class › task · service you work on, seven day columns, hours in the cells, live row / day / week totals, and one Save week.
Why it's useful: reconstructing Friday afternoon from memory takes one pass instead of a Log Time modal per entry. Rows come back automatically from the last five weeks, so a regular week is already laid out; add anything new with Add row.
How: type 1.5 or 1:30 in a cell, Tab across, Enter to move down. A cell that already has entries shows a dot, click it to open those entries for notes or value fields; a cell with one entry edits it in place, a cell with several only grows (reduce it by editing the entries). Each row has an optional note that becomes the description of every entry the row creates (required when the workspace requires descriptions). When the week's time card is submitted or approved the grid is read-only until it's retracted. Credit, budget, and milestone classes stay on Log Time. API: GET /api/entries/week?date= plus POST /api/entries/bulk.
Effort vs Hours
Effort is an optional planning field available on all classes and tasks, regardless of billing type. It represents a relative weight or story-point estimate for a piece of work, completely independent of hours logged. Think of it as "how hard is this?" rather than "how long will it take?"
Common uses: story points for Agile teams, complexity weights for mixed-skill projects, or simple priority scores (1 = low, 5 = high). Effort never affects billing calculations; it's a planning dimension layered on top of time or milestone data.
Filtering Time Entries
The Time Tracking page includes filters for Class and Task: use them to narrow the entry list to a specific billing scope or work item without leaving the page. A Go to Time Entries button on each project class and task opens the pre-filtered Time Tracking view directly from the project detail view, so you can jump straight to the relevant entries.
Entry Columns
| Column | Description |
|---|---|
| Date | The date the work was performed |
| Project | The project this time belongs to |
| Class | The billing class within the project |
| Task | Optional task within the class |
| Hours | Total hours logged |
| Billable Hours | Hours marked as billable (may differ from total) |
| Notes | Description or memo for the entry |
Time Cards Starter+
Time Cards give teams a formal weekly submission cycle. At the end of each week, users submit their time card to lock their entries for that period. Managers get a team-wide dashboard showing who has submitted and who still needs to.
Turning Time Cards On
Time cards are off by default. An admin enables them in System Settings → Time Tracking → Enable time cards. Until then, Time Tracking shows only Entries, Week, and Team Activity; once enabled, the Time Cards and Review tabs appear and the Week tab gains a Submit week button.
How It Works
- Log time entries throughout the week as normal, or fill the week in the Week tab.
- On the Time Cards tab (inside Time Tracking), review your week summary, hours logged per day.
- Click Submit Time Card (or Submit week on the Week tab) to lock your entries. A confirmation shows how many entries were locked.
- If you need to make corrections after submitting, click Retract: your entries unlock and you can edit freely before re-submitting.
Time Card Statuses
| Status | Meaning |
|---|---|
| No Entries | No time was logged for this week |
| Pending | Time entries exist but have not been submitted |
| Submitted | Card submitted, entries are locked for this week |
Manager View
Admins and Managers see a Team Overview panel listing every active user with their current week and prior week submission status. Users with Pending or No Entries status are easy to spot at a glance.
Managers can also view any individual user's card history (last 26 weeks) and retract submitted cards on behalf of users when corrections are needed.
Work Week Start Day
The first day of each week (Sunday or Monday) is configured in System Settings → Time Tracking → Work Week Start. All time card week boundaries follow this setting.
Projects, Classes, Tasks & Time Entries Free, 3 projects Unlimited on Starter+
TimeQuorum organizes work in a four-level hierarchy. Understanding this hierarchy is essential for getting the most out of the platform.
The Full Hierarchy
Clients
Every project belongs to a Client. Clients represent the companies or people you do work for. Invoices are generated per client. See the Clients section for full details.
Projects
A Project is the top-level container for a body of work. It links to a client and carries top-level information:
- Project Code: a short identifier (e.g.,
WEB-001) - Billing Profile: which client billing profile to use on invoices
- Start & End Dates: the planned timeline (visible as optional columns on the project list)
- Status: Not Started, In Progress, On Hold, Complete, or Cancelled
- Billable Rate: a fallback hourly rate inherited by classes that don't set their own
- Resource Limits: optional caps on total credits, hours, or budget across all classes
Go to Projects → New Project. After saving, you land directly inside the project to configure everything. Completed or cancelled projects no longer appear in the time-tracking dropdowns.
Classes: The Billing Engine
Every project contains one or more Classes. A class is a billing scope; it defines how the work inside it is charged, how much of the budget it consumes, and when it is considered complete. Each class has a billing type:
| Billing Type | What it tracks | Completion |
|---|---|---|
| Time | Hours logged at an hourly rate. Set a time budget (e.g. 40:00) and track used (logged entries), reserved (task reservations), and free (uncommitted). | Based on % of total time consumed by entries |
| Credit | A pool of whole-number credits. Each time entry can deduct credits from the pool. Can reset weekly, monthly, or quarterly for retainer-style allowances. | Based on % of credits consumed |
| Budget | A dollar budget. Time entries deduct hours × rate from the budget. | Based on % of budget consumed |
| Milestone | A fixed deliverable with no time budget. Tracks task completion percentage. | Based on % of tasks completed |
- Used: what has actually been logged via time entries. This is your billing/invoicing view.
- Reserved: budget committed by active task reservations (completed task reservations stay committed; cancelled task reservations are released).
- Free: uncommitted budget still available for new work:
Total − Used − headroom, where headroom is the unspent portion of each task reservation. Entries logged within a task reservation do not double-count against Free.
Over-allocation: If task reservations exceed the class total, Free goes negative and the column turns red, a visible warning that more work is committed than budgeted. This is a warning only, not a block; intentional over-commitment remains possible.
Each class also carries:
- Start & End Date: the planned timeline for this scope of work (optional columns on the class list)
- Effort (pts): an optional integer representing relative weight or story points for planning (also an optional column on the class list)
- Billable Rate: overrides the project rate for this class
- Contract Value: the agreed revenue for this class scope, used in margin reports
- Require Task for Time: forces users to select a task before logging time to this class
- Status: Not Started, In Progress, On Hold, Completed, Cancelled. Completing a class cascades completion to its tasks.
Tasks: Optional Extra Control
Tasks are entirely optional. You do not need to create tasks to log time; you can log time directly against a project and class. Tasks are useful when you need a finer level of work breakdown within a class:
- Assign specific work items to individual team members
- Track status independently per item (not just per class)
- Set task-level due dates and effort estimates
- Force users to specify which task they worked on (using Require task for time on the class)
Each task belongs to a class and carries:
- Name and optional description
- Assignee: the user responsible for this work
- Status: Not Started, In Progress, On Hold, Completed, Cancelled
- Effort (pts): relative effort estimate (story points or weight)
- Start & End Date: planned timeline
- Reservation: optional budget commitment for this task. Reserves a slice of the parent class's free pool (hours for Time classes, credits for Credit classes, dollars for Budget classes). Completing a task keeps its full reservation committed against the class; cancelling or deleting a task releases the unspent portion back to the free pool.
Time Entries: Where Logging Happens
A Time Entry records actual work. Each entry captures:
- Date: the day the work was performed
- Project + Class: required; determines which budget is consumed
- Task: optional (or required if the class has "Require task for time" enabled)
- Hours: total hours logged
- Billable Hours: subset of hours that are billable (defaults to total hours if the class is billable)
- Description / Notes: free text memo for the entry
- Status update: optionally update the class or task status at the time of logging
Time entries can be created via the live timer or added manually. Completed or cancelled projects, classes, and tasks are excluded from the time-tracking dropdowns automatically.
amount = hours × rate using the class rate, project rate, or your personal rate (in that priority order). If no rate is configured on any of those, the entry will be rejected, set a rate on the class, project, or your user profile, or supply the amount directly when logging.
Working with the Project Detail View
Click any project to open its detail view. The view has three tabs:
- Classes tab: the primary tab. Shows all classes with Used (logged entries), Reserved (committed by task reservations), and Free (uncommitted, available for new work) budget columns, plus progress and status. Expand any class to see its tasks inline. Optional columns (Effort, Start Date, End Date) can be toggled via the columns button.
- Time Entries tab: all time entries for this project, with the same columns and edit/delete actions as the main Time Tracking page.
- Gantt tab: a visual timeline of classes (with their start and end dates) and tasks, useful for project scheduling at a glance.
Project Status Lifecycle
| Status | Meaning | Effect on time tracking |
|---|---|---|
| Not Started | Project has not yet begun | Available in dropdowns |
| In Progress | Active, work is ongoing | Available in dropdowns |
| On Hold | Temporarily paused | Available in dropdowns |
| Complete | Finished and closed | Hidden from time tracking dropdowns |
| Cancelled | Abandoned | Hidden from time tracking dropdowns |
Task Status Lifecycle
| Status | Meaning | Time logging | Reservation effect |
|---|---|---|---|
| Not Started | Work has not begun | Allowed | Reservation held in Free pool |
| In Progress | Actively being worked on | Allowed | Reservation held in Free pool |
| On Hold | Temporarily paused | Allowed | Reservation held in Free pool |
| Completed | Work is done | Blocked, cannot log new entries | Full reservation stays committed (reflects actual scope) |
| Cancelled | Work was abandoned | Blocked, cannot log new entries | Unspent reservation released back to class Free pool |
Statuses Start Themselves
You never have to remember to flip something to In Progress. Any work signal on a child, logging time against it, or marking a task or class In Progress or Completed, automatically advances every Not Started item up its chain (task → class → project) to In Progress, and the page updates live. The rules:
- Automatic advancement only ever goes to In Progress: completing every task never auto-completes a class or project; finishing is always your explicit call (and completing a project cascades downward to its classes and tasks).
- Deliberate states are never overridden: an On Hold, Completed, or Cancelled item is left exactly as you set it.
- It is one-way: deleting a time entry or moving a task back to Not Started never reverts a parent.
- Every automatic change is recorded in the Audit Log as activity-driven, so managers can see why a project started.
Project Templates Starter+
Project Templates let you define a reusable structure, a set of classes and tasks with pre-configured billing types, budget caps, reservations, and effort estimates, that can be applied to any new or existing project in a single click.
Creating a Template
- Go to Projects and open the Templates tab.
- Click New Template and give it a name (e.g., "Software Sprint", "Client Onboarding").
- Add classes to the template, set billing type, budget cap, and descriptions.
- Add tasks to each class with effort estimates and descriptions.
- Save the template. It's now available for any project in the workspace.
Applying a Template to a New Project
When creating a new project, a Apply Template step lets you choose one or more templates. All classes and tasks from the selected templates are created inside the project immediately.
Applying a Template to an Existing Project
Open any project, click Apply Template, and select one or more templates from the picker. The classes and tasks are added alongside whatever already exists in the project, existing work is not modified.
Multi-Template Apply
You can select multiple templates at once. All classes and tasks from every selected template are applied in sequence. If a class name already exists in the project, the template class is still added, names are not deduplicated, so review after applying if you want to consolidate.
Template Independence
Applied classes and tasks are entirely independent of the template after creation. Editing or deleting a template does not affect any projects it was previously applied to.
Clients Free, 3 clients Unlimited on Starter+
Clients represent the companies or individuals you work for. All projects link to a client, and invoices are generated per client.
Client Profile
Each client has a name, contact information, billing address, default currency, and a default billable rate. Client codes are auto-assigned and never reused after deletion.
Client Rate & Rate History
What it is: the client's billable rate is the last fallback in the rate chain, a time entry with no person, class, or project rate bills at the client rate. The rate carries a history: the plain field is the rate "from the beginning", and the Rate history drawer on the client form schedules changes from a future date.
Why it's useful: negotiate a client-wide increase for January without touching every project, and past entries keep the rate that was in effect on their day.
How: Clients → edit a client → set Billable Rate, or open Rate history → add a dated row. API: GET/POST /api/clients/{id}/rates, DELETE /api/clients/{id}/rates/{rate_id}.
Client Budgets & Alerts
What it is: a spend cap and/or an hours cap that rolls up every project for the client, with the same weekly / monthly / quarterly reset, anchor date, and alert threshold that projects use.
Why it's useful: a retainer client with five projects has one number that matters, the total. The client page shows a progress bar per cap, and when consumption crosses the alert level, admins, accounting, billing-access users, and the managers of that client's projects get one email per period.
How: Clients → edit a client → Client Budget: Budget ($), Budget (hours), Resets, Period starts on, Alert at (%). Consumption is visible on the client page header and in GET /api/clients/{id} as budget_used_amount / budget_used_hours.
Billing Profiles
Each client can have one or more Billing Profiles: stored sets of billing name, address, tax ID, payment terms, and bank details used when generating invoices. You can add new billing profiles inline directly from the project form or invoice form without navigating away.
Client Detail View
Click a client to view its projects, contacts, and billing history all in one place. From here you can create new projects directly linked to the client.
Dashboard Free
The Dashboard gives an at-a-glance view of team activity, recent time entries, and project status. Charts show hours by project over the selected date range.
Widgets
- Hours This Week: total hours logged by the current user
- Recent Entries: latest time entries across all projects
- Project Activity: bar chart of hours per project
- Active Projects: quick-access to in-progress projects
Calendar Professional+
The Calendar view displays your time entries and task due dates on a monthly or weekly grid. Each entry appears as a color-coded block by project. Click any entry to edit it directly from the calendar.
What You See
The calendar shows time entries and tasks that are assigned to you, scoped automatically to your projects, classes, and tasks. Admins and managers can use the User and Group filters to view any team member's calendar.
Filters
- Project filter: narrow the view to a single project's entries and tasks
- Class filter: further narrow to a specific class within the selected project
- User filter: (managers/admins) switch between team members
- Group filter: (managers/admins) show the calendar for an entire group
iCal Feed
Subscribe to your task due dates in any external calendar app (Google Calendar, Apple Calendar, Outlook) via the iCal feed link available in the Calendar page. The feed updates automatically, new tasks with due dates appear in your calendar without any manual export.
Users & Roles Free
Invite your team via email. Each user is assigned one of five roles that determine what they can see and do.
| Role | Description |
|---|---|
| Admin | Full access to all settings, users, billing, and data |
| Manager | Create/edit projects, clients, groups, view all entries and reports. Managers do not have invoicing access unless granted Billing Access |
| Accounting | The finance role, full control of invoices, credit notes and recurring invoices, expense approvals, financial reports, and QuickBooks invoice copy. Read-only elsewhere; no access to System Settings, integrations, or imports |
| Member | Log time on assigned projects, edit own entries |
| Observer | Read-only access to projects and time data |
Billing Access
Beyond roles, an admin can grant any individual user Billing Access from their user edit form. A user with Billing Access gets the same financial surface as the Accounting role, invoices, credit notes, recurring invoices, expense approvals, financial reports, and QuickBooks invoice copy, on top of whatever their role already allows. Grants take effect immediately and show as a BILLING badge in the users list. System Settings, integrations, and imports remain admin-only regardless of Billing Access.
Expense Approval Lifecycle
Expenses move through pending → approved or rejected. Approving requires a manager, accounting, or billing-access user. Rejecting requires a note; the submitter is notified by email and can edit the expense, which automatically resubmits it as pending. An approval can also be revoked (with a required note and confirmation): the expense returns to pending, the submitter is notified, and the action is audit-logged. An expense that is already on an invoice cannot have its approval revoked, remove it from the invoice first. If an approved expense was already copied to QuickBooks as a Purchase, revoking the approval leaves the Purchase in QuickBooks and records a warning in the integration sync log, delete it in QuickBooks yourself if that was intended.
Inviting Users
Go to Users → Invite User. Enter the email address and role. The invited user receives an email with a link valid for 7 days. If the link expires, click Resend Invitation: this generates a new link and invalidates the previous one.
Deactivating Users
Setting a user to inactive signs them out everywhere immediately: every session and remembered login is revoked on the spot, including the desktop and mobile apps, and their next request returns them to the login screen. Their history, time entries, and reports stay intact and they stop counting toward your seat limit. Reactivating the user lets them log in again as normal.
User Limits
Free plans support up to 5 users. Starter and above support unlimited users (billing is per-seat on paid plans).
Project-Level Permissions Starter+
TimeQuorum uses a two-tier permission model. The first tier is the workspace role (Admin, Manager, Member, etc.); it governs what a user can see and do across the entire workspace. The second tier is project-level access: it limits which specific projects a Member or Observer can interact with.
Assigning Access to a Project
Open a project and go to the Access tab. From there you can add individual users or entire groups:
- Individual users: add a specific team member with their workspace role automatically applied
- Groups: add a whole group in one action; all current and future members of that group gain access to the project
If a project has no access entries, it is visible to all workspace users according to their role. Once you add even one user or group, the project becomes restricted: only listed users/groups (plus Admins and Managers) can see it.
Class-Level Permissions
Within a project, you can further restrict a specific class to a subset of the project's users, useful when a project has both internal and client-facing billing classes, and you want to keep budget or cost-rate classes private.
Class-level access is managed from the class's Assignments panel inside the project detail view. A user with class-level assignment sees that class and all its tasks, as well as the parent project.
Task-Level Permissions
You can assign individual users or groups to specific tasks within a class. A task-level assignment grants the user visibility of that task, its parent class, and the parent project, nothing else. This is the most granular assignment level, useful for large projects where different developers work on separate tasks within the same class.
Assignment Hierarchy
| Assignment level | What the member can see |
|---|---|
| Project-level | All classes and all tasks in the project |
| Class-level | That class, all its tasks, and the parent project |
| Task-level | That task, its parent class, and the parent project |
How Permissions Show on a User Profile
On the Users page, click any user to open their profile. The Project Access tab lists every project the user has been explicitly granted access to, both direct assignments and group-based memberships. This gives admins a single view of exactly what each person can see, without having to visit each project individually.
| What you want | How to configure it |
|---|---|
| All members see all projects | Don't add any access entries, projects are open by default |
| Restrict a project to specific people | Add those users/groups to the project Access tab |
| Keep a class hidden from most of the team | Set class-level access to the subset who should see it |
| See what a user can access | Open Users → click user → Project Access tab |
Groups Free
Groups let you organize users into teams for easier project assignment and reporting. A user can belong to multiple groups. Groups can be assigned to projects to control visibility.
Reports Starter+
Reports give detailed visibility into how time is being spent across projects, clients, and team members. All reports support date range filtering, and most support additional filters by user, project, client, or group. Click any row in a report to jump directly to that project, task, or user.
Personal Reports
| Report | Description |
|---|---|
| My Time | Your own detailed time entries for any date range, a personal timesheet view |
| My Timecard | Your weekly hours summary by day and project, useful for self-review before submitting your time card |
| My Weekly Summary | Hours logged by week over a rolling period, see trends in your own productivity |
| My Assignments | All tasks currently assigned to you, with status, due dates, and parent project |
Team & Time Reports
| Report | Description |
|---|---|
| Team Timecard | Each user's weekly hours breakdown by project and class, the manager's payroll and billing review view. Filter by user, group, project, or class. |
| Time by User | Total hours per user for a date range, identify workload distribution across the team |
| Time by Project | Total hours broken down by project, includes chart view for visual comparison |
| Time by Client | Total hours grouped by client, useful for client-level capacity and billing reviews |
| Time Entries | Raw, filterable list of all time entries across the workspace, export to CSV for custom analysis |
| Team Velocity | Weekly hours trend per user or team, chart shows velocity changes over time |
Budget & Billing Reports
| Report | Description |
|---|---|
| Budget Summary | Hours and spend vs. budget per project and class, see Free, Reserved, and Used at a glance |
| Project Budget Health | Traffic-light view of which projects are on budget, approaching the limit, or overrun |
| Class Budget Health | Same as Project Budget Health but at the class level, drill into which specific classes are overrunning |
| Overbudget Projects | Projects that have exceeded their hour or spend budget, includes overage % and amount |
| Overbudget Classes | Classes where used time, credits, or budget exceeds the class total |
| Overbudget Tasks | Tasks where logged hours exceed the task reservation |
| Billable vs. Non-billable | Split of billable and non-billable hours by user or project, helps optimise billing ratios |
| Billable Hours | Billable hours by project and class with effective rates, ready for invoice preparation |
| Credit Consumption | Credit usage by client and project for credit-type billing classes |
| Invoice Aging | Outstanding invoices with days overdue, identify late payments at a glance |
| Client Billing Summary | Revenue pipeline grouped by client, total billed, outstanding, and paid amounts |
| Revenue Pipeline | Projected revenue from active projects based on remaining budget and billing rates |
| Unbilled Work (WIP) | What you could invoice right now, uninvoiced billable time and approved billable expenses per client and project, with the oldest unbilled date |
| Realized Rate | Standard rate vs what invoices actually billed, by service, client, project, or person, discounts and write-downs show up as realization % |
| Revenue by Period | Invoiced vs collected per month or per week with running totals, trailing 12 months by default, any range on request |
| Project Burn Rate | Weekly spending rate per project vs. the pace needed to complete on budget |
| Estimate Conversion | Win rate on the estimates you sent: accepted, declined, expired, and still open, with quoted and won value and days to acceptance, by month, client, or the person who wrote them |
| Estimate Pipeline | Every estimate that still needs something: drafts to send, sent ones awaiting an answer with the days left, and accepted ones not fully invoiced |
| Quoted vs Actual | For jobs started from an estimate: quoted hours and spend against the time and expenses actually logged, plus what has been invoiced |
Task & Project Status Reports
| Report | Description |
|---|---|
| Overdue Tasks | All tasks past their due date that are not yet complete, grouped by project and assignee |
| Milestone Tracker | Completion percentage of Milestone-type classes across all projects |
| Task Velocity | Tasks completed per week, track sprint throughput over time |
| Status Breakdown | Count of projects, classes, and tasks in each status (Not Started, In Progress, On Hold, Complete, Cancelled) |
Utilisation & Operations
| Report | Description |
|---|---|
| User Capacity Utilization | Each user's logged hours vs. their available capacity, identify over- and under-utilised team members |
| Group Utilization | Same as User Capacity Utilization but aggregated per group, see team-level load |
| Billable Utilization | Billable hours ÷ capacity per person, with the billable / non-billable split |
| Audit Activity Log | Workspace-level activity feed, who created, edited, or deleted records and when |
The utilisation reports flag people and groups at or above the workspace Capacity Warning Threshold (System Settings → Time Tracking, default 90%) in red, and from 20 points below it in amber.
Audit Log Starter+
The Audit Log records who did what and when across the workspace. Every create, edit, delete, login, and settings change is logged with a timestamp, user, and before/after diff.
Useful for compliance, debugging data changes, and tracking team actions. The log is read-only and cannot be modified by workspace users.
Invoices Professional+
Generate professional invoices from your time entries and billing classes. Send them directly to clients or export as PDF.
Creating an Invoice
- Go to Invoices → New Invoice
- Select the client and billing profile (or add a new billing profile inline)
- Click + From Time Entries. By default it pulls all uninvoiced billable time for the client (or the selected project); untick "any date" to bill a specific date range instead. Choose how lines are grouped; one line per project and service/class, per person (who worked at which rate), or one line per entry with its date and notes, and optionally apply a client discount percentage.
- Click + Billable Expenses for approved, uninvoiced expenses, again all of them, or a date range.
- Or click + From Classes to add milestone/credit items directly
- Review line items, apply tax rate if needed, and save
List Price vs Discounted Price
What it is: every line has a Unit Price (what you charge) and an optional List Price (the standard rate). When they differ, the PDF and email show List Price and Discount columns so the client sees the concession explicitly.
Why it's useful: non-profits, friends-and-family rates, and volume deals, the client sees the value they're getting, and your Realized Rate report sees the true discount.
How: enter a discount % in the From Time Entries dialog (pre-filled from the client's billing profile default discount) and every pulled line carries list and discounted prices; or type a List Price on any line by hand. Leave List Price blank for a plain line.
Removing Time from an Invoice
What it is: time entries remember the exact invoice line they were rolled into, so you can take work off an invoice precisely.
How: in the invoice editor, remove a line, its entries return to the billable pool automatically (stored lines show how many entries they carry). Or, from the Time Tracking page, use the purple Remove from invoice action on a single entry: the entry is released and its invoice line shrinks by those hours (or disappears if it was the line's only entry), and totals are recomputed. Not available once an invoice is paid. API: POST /api/entries/{id}/uninvoice.
Billing Profiles
Billing profiles store the client's billing name, address, and payment terms. You can add a new profile directly from the invoice form without navigating away.
Invoice Status
| Status | Meaning |
|---|---|
| Draft | Not yet sent; can be edited freely |
| Sent | Delivered to client; locked for edits |
| Partial | Some payment received, but a balance is still outstanding |
| Paid | Payment received in full. If the payment came through Stripe or PayPal, the invoice can only leave Paid after the payment is fully refunded in that processor. |
| Overdue | Past due date with no full payment recorded |
| Cancelled | Voided; excluded from outstanding balances and reports |
Due Dates & Automatic Payment Reminders
Every invoice carries an explicit due date, defaulted from your Invoice Settings due days (editable per invoice). Once the due date passes, unpaid invoices flip to Overdue automatically, no manual policing. Optionally, enable Invoice Payment Reminders (System Settings → Application Configuration) and TimeQuorum emails the client for you: a reminder a configurable number of days before the due date, then repeating overdue reminders on your cadence up to a maximum count. Reminders use a customizable template (Email Templates → Invoice Payment Reminder) and include the pay link when Stripe is enabled.
Recurring Invoices
Automate retainers and repeat billing from Invoices → Recurring. A schedule defines the client, frequency (weekly, every 2 weeks, monthly, or quarterly on a chosen day of month), and how line items are built:
| Mode | What gets billed |
|---|---|
| Fixed amount | The same template line items every period, classic retainer. |
| From tracked time | The period's billable hours, grouped by class at each class's rate, the invoice writes itself from the time your team logged. |
On each run date the invoice is generated as a draft for review, or emailed straight to the client with PDF and pay link. Either way, the schedule's creator and workspace admins get a notification saying exactly what happened, sent, drafted, or email failed, so nothing goes out (or silently fails) unnoticed. Tracked-time schedules with no billable hours in the period skip that run rather than sending an empty invoice.
Credit Notes
When you've overbilled or agreed a credit after an invoice was sent, don't edit or cancel the invoice, issue a credit note (Invoices → Credit Notes). It's a formal document with its own CN numbering, line items, reason, PDF, and client email. Once issued, apply it against the client's open invoices: the invoice's balance drops, its status moves to Partial or Paid automatically, and the credit shows in the payment history and Payments CSV. Credits can spread across multiple invoices, and applications can be reversed if entered by mistake.
Emailing Invoices
Use Send Email on any invoice to deliver it to the client's billing profile email. The email uses your customisable invoice template (System Settings → Email Templates), attaches a print-quality PDF of the invoice, and, when the invoice profile has Stripe or PayPal enabled, automatically includes a Pay this invoice online button. You can also place the payment link anywhere in the template with the {{pay_link}} placeholder, or use Copy Pay Link on the invoice to share it manually.
Payment History
Every payment recorded against an invoice, including online Stripe and PayPal payments and refunds, appears in a Payments section on the invoice detail, with date, amount, method, and reference. Refunds show as negative amounts, in red, labelled (refund).
Accounting Exports (QuickBooks, Xero, CSV)
From the Invoices section you can export your invoicing data as CSV files ready for your accounting system:
| Export | Contents |
|---|---|
| QuickBooks | Invoice line items in the QuickBooks Online invoice-import column layout |
| Xero | Invoice line items in the Xero sales-invoice CSV layout (account codes and tax types are left for your accountant's chart of accounts) |
| Generic CSV | Full invoice detail, statuses, periods, line items, tax, totals |
| Payments CSV | Every recorded payment (including Stripe payments and refunds) for AR reconciliation |
Exports can be filtered by date range, status, and client. TimeQuorum stays the invoicing front-end; your accounting package only needs the periodic import.
QuickBooks Online Sync Professional+
Connect one or more QuickBooks Online companies and keep your books in step with your invoicing, no re-keying. Invoices push to QuickBooks with one click (or automatically when sent), payments flow in both directions, and every sync action is logged.
What Syncs
| Data | Direction | How |
|---|---|---|
| Clients → Customers | Explicit mapping | You link each TimeQuorum client to a QuickBooks customer, or create the customer (with email, phone, and address) right from the mapping table. No blind name-matching, so no duplicate customers. |
| Invoices | TimeQuorum → QuickBooks | Line items, quantities, discount, invoice number, dates, and terms land as a QuickBooks draft under your chosen service item. Re-copying updates the same QuickBooks invoice instead of duplicating it. |
| Payments | Both directions | Payments recorded in TimeQuorum (including Stripe payments) post to QuickBooks against the matching invoice. Payments recorded in QuickBooks mark the TimeQuorum invoice paid automatically, usually within seconds, with a nightly sweep as backstop. |
Connecting
- Go to System Settings → Integrations → Add Integration, choose QuickBooks, and give the connection a name.
- Click Connect: you'll be sent to Intuit to sign in and approve access to your QuickBooks company, then returned here.
- Pick a default service item (invoice lines are pushed under this QuickBooks product/service) and map your clients to QuickBooks customers.
- Optionally set Copy invoices to QuickBooks to When sent or When created: invoices are then pushed automatically instead of one by one.
On any invoice, use Copy to QuickBooks; afterwards a badge links straight to the invoice in QuickBooks. If your client isn't mapped yet, the push stops and points you to the mapping table, nothing is created silently.
Who Sends the Invoice?
Each QuickBooks connection has an Invoice delivery setting that decides who actually emails your client when you hit Send:
| Mode | What happens on Send | Who emails the client |
|---|---|---|
| TimeQuorum emails the invoice (default) | TimeQuorum emails the invoice PDF with its own template and payment links; any QuickBooks copy stays a record-keeping draft. | TimeQuorum |
| QuickBooks emails the invoice | The Send button becomes Send via QuickBooks: the invoice is pushed with your client's billing recipients, address, and terms, then QuickBooks emails it using its own template and payment links. TimeQuorum marks the invoice sent without emailing anything. | QuickBooks |
| Draft only | Send is replaced by Push to QuickBooks: invoices land in QuickBooks as drafts for you to review and send from there. Status changes stay manual. | Nobody automatically |
The Copy invoices to QuickBooks trigger is independent of who sends: Manually (only when you click), When sent, or When created: the last pushes a draft to QuickBooks the moment an invoice is created, so drafts are ready for review even if TimeQuorum never emails anything.
For invoices QuickBooks sent, TimeQuorum's automatic payment reminders are suppressed, QuickBooks owns the follow-up there.
Payments pushed to QuickBooks normally land in Undeposited Funds; pick a Payment deposit account on the connection to deposit them straight into a bank account instead.
Good to Know
- Tax is computed by QuickBooks. US companies use QuickBooks Automated Sales Tax, so the QuickBooks total can differ from the TimeQuorum total, when it does, the sync shows both amounts rather than hiding it.
- Currency safety: a push is blocked (with a clear message) if the invoice currency doesn't match the QuickBooks customer's currency.
- Sync log: every push and pull, including errors like closed books, is listed per connection under System Settings → Integrations, with plain-language explanations.
- Reconnecting: QuickBooks connections expire if unused for ~100 days (and Intuit caps them at 5 years). When that happens the connection shows Reconnect needed: one click re-authorises it, and your mappings are kept. Workspace admins get an email when this happens: daily for the first week, then weekly, and a final notice after about five weeks, after which reminders stop until the connection is restored. Disabling the integration stops them immediately.
Importing from Harvest
Switching from Harvest takes an afternoon, not a migration project. The Import Data page (admins only) converts Harvest's own CSV exports into your TimeQuorum workspace, with a full preview before anything is written, duplicate-safe re-uploads, and one-click undo while an import is untouched.
The Export Files
Upload up to six CSVs. The Detailed Time report alone is enough for a complete import; each additional file enriches the result. Files are recognized by their columns, so filenames don't matter.
| File | Where to export it in Harvest | What it adds |
|---|---|---|
| Detailed Time report (required) | Reports → Time → Detailed Report → Export CSV | Clients, projects, tasks, people, and every time entry with its billable and cost rates |
| Expenses report | Reports → Expenses → Detailed Report → Export CSV | Expenses with categories, amounts, units, and billable flags |
| Clients | Manage → Clients → Export | Archived state and addresses, including clients with no logged time |
| Projects | Manage → Projects → Export | Project codes, budgets (fee budgets → project budget, hours budgets → estimated hours), start/end dates, archived state |
| Contacts | Manage → Clients → Contacts → Export | Client contacts with email and phone, attached to their clients |
| People | Manage → Team → Export | Auto-matches your team by email, imports exact billable/cost rates and contractor flags |
Harvest's invoice export is a zip of rendered PDFs and can't be imported, recreate open invoices manually after migrating, or use the QuickBooks sync going forward.
How Harvest Concepts Map
| Harvest | TimeQuorum |
|---|---|
| Client | Client |
| Project (with budget) | Project (budget carried over) |
| Task (Engineering, PM, …) | Class: rate-bearing activity bucket, seeded with the task's billable rate. (Workspaces that imported before this default keep the original General-class layout so re-imports stay duplicate-free; a toggle in the preview controls it.) |
| Time entry | Time entry, carrying its historical rate |
| Person | User, matched by email when the People export is included, otherwise by name with per-person decisions (map / create / skip). Created users can be left deactivated: history intact, no seat used. |
| Expense + category | Expense + category (categories auto-created) |
| Contact | Client contact |
Safe to Re-run
Every imported object is fingerprinted, so re-uploading a corrected or extended export updates instead of duplicating, safe to import January's file today and the full year later. The import history shows each batch with per-entity counts and any errors, and Undo removes everything a batch created, as long as nothing imported has since been edited or invoiced.
Estimates and Quotes Professional+
An estimate is a quote for work you have not done yet: labor, materials, expenses, and fixed-price items, priced and totalled like an invoice but never counted as revenue. Send it, let the client accept it online, then turn it into an invoice or a project in one click. Estimates live on the Invoices page: use the Invoices | Estimates switch at the top. Anyone who can work with invoices can work with estimates.
Creating an Estimate
- Click New Estimate, pick the client, and give the estimate a Title the client will recognise, such as "Panel upgrade, 123 Main St".
- Add lines with the + Labor, + Material, + Expense, and + Fixed buttons. Each kind asks for what it needs:
| Kind | What you enter | Priced as |
|---|---|---|
| Labor | A service (optional), a description, hours, and an hourly rate. Picking a service fills in its current rate. | Hours x rate |
| Material | A description, quantity, unit (ft, ea, box), and unit price. Start typing to pick an item from your materials catalog, which fills in the unit, price, and cost. | Quantity x price |
| Expense | An expense category, units, and a rate. Choosing Mileage fills in your workspace mileage rate. | Units x rate |
| Fixed | A description, a quantity, an optional unit, and a price each, for permit fees, call-out charges, or a flat price. Leave the quantity at 1 for a single flat amount. | Quantity x price |
When a labor line has both a service and a description, the client sees the service as the heading with the description underneath, for example Painter over "Painting bathroom and kitchen". Expense lines do the same with their category. Each line stays its own line, grouped under Labor, Materials, Expenses, and Fixed price with a subtotal per group.
Tax and discount start from the client's billing profile, the same way they do on invoices, and can be changed per estimate. Valid Until defaults to today plus the number of days set in System Settings. Notes are printed for the client; Internal Notes are for your team only.
Payment Terms and Terms and Conditions
- Payment Terms: a short line such as "Net 30" or "1/3 up front, 2/3 on completion". It starts from the client's billing profile, then your invoice profile, and is printed on the estimate and copied to every invoice raised from it. "Net" terms set the invoice due date.
- Terms and Conditions: the longer text the client agrees to, such as warranty, change policy, and what is not included. It is printed on the PDF and shown on the accept page directly above the Accept button. An invoice raised from the estimate carries the same text.
Terms and conditions are filled in for you from the most specific place that has them:
| Order | Where | Use it for |
|---|---|---|
| 1 | Typed on the estimate or invoice | A one-off change for this document. Clear the box to print none. |
| 2 | The client's Billing Profile | Terms negotiated with one client |
| 3 | Your Invoice Profile (Bill From) | Different wording per office, brand, or country |
| 4 | System Settings → General → Default Terms and Conditions | Your standard wording |
Invoices follow the same order and print the terms under the notes, on the PDF and on the payment page. Editing a profile later does not change documents that already exist.
Materials Catalog
Keep the materials you quote often on the Invoices page under the Materials tab (next to Invoices and Estimates), so every estimate uses the same price and knows its cost. Anyone who can create invoices and estimates can manage it, including users with Billing Access.
- Price from cost and markup: enter what the item costs you and a markup percent, and the price is worked out as cost plus markup. Type a price instead and the markup is worked out for you.
- Default markup: set one markup for the whole catalog. Items without their own markup follow it, and are repriced when you change it.
- Import and export: bring in a supplier price list as a CSV with the columns
name,sku,description,unit,cost,markup,price. A row with a SKU you already have updates that item; anything else is added. Export gives you the same file back for bulk edits. - On an estimate: add a Material line and start typing a name or SKU, then choose the item. You can still change the quantity, price, or wording for this estimate, or type a material that is not in the catalog.
An estimate keeps the cost and price it was given. Changing or deleting a catalog item never alters an estimate that already exists.
Estimates are numbered from their own sequence (EST000001, EST000002, and so on), separate from invoice numbers. Change the template under System Settings → General.
Sending and Acceptance
Send emails the estimate to the contacts on the client's billing profile, with the PDF attached and a Review and accept this estimate button. The button opens a private page that shows the estimate and lets the client accept or decline from a phone or a computer, with no account and no sign-in.
- Accepting: the client types their name, ticks "I agree to the terms and pricing above", and taps Accept estimate. Your team is emailed, and the client receives a confirmation with the PDF attached as their record.
- What is recorded: the name, the time, the network address, the browser, the total and payment terms on the page at that moment, and a fingerprint of the priced lines and of the terms text. It all appears in the estimate's activity list, so you can show exactly what was agreed to.
- Declining: the client can decline and leave a reason, which you see on the estimate.
- Answered once: after the first answer the page only shows the result, so an estimate cannot be accepted twice or accepted after it was declined.
- Other channels: if the client says yes by phone or text, use Mark accepted. Copy accept link gives you the private link to paste into a message, and Mark sent covers estimates you delivered some other way.
Every email is yours to edit under System Settings → Email Templates:
| Template | Sent to | When |
|---|---|---|
| Estimate | The client's billing contacts | You send or resend the estimate. Placeholders include {{estimate_number}}, {{title}}, {{total}}, {{valid_until}}, {{notes}}, and {{accept_link}}; if the template does not place the link, the button is added at the end. |
| Estimate Accepted (team) | The people attached to your invoice profile and its extra notify addresses | The client accepts through the link |
| Estimate Declined (team) | The same people | The client declines; {{reason}} carries what they wrote |
| Estimate Confirmation (client) | The client's billing contacts | Right after acceptance, with the PDF attached |
Estimate Statuses
| Status | Meaning |
|---|---|
| Draft | Being prepared. Fully editable. The client cannot answer yet. |
| Sent | With the client. Still editable; send it again after a change. |
| Accepted | The client agreed. The estimate is locked and ready to invoice or to start a project. |
| Declined | The client said no. Reopen turns it back into a draft. |
| Expired | Valid Until passed without an answer. The client can no longer accept. Reopen gives it a new validity. |
| Converted | At least one invoice or a project has been created from it. |
To change an estimate that is already accepted, declined, or expired, use Revise. It creates a new draft with the same lines, numbered as a revision (EST000045-R2), and leaves the original untouched as a record of what was agreed.
Invoicing an Estimate
From an accepted estimate:
- Convert to invoice creates a draft invoice with the same lines, tax, discount, profiles, currency, and notes. Review it and send it like any other invoice.
- Deposit... creates a draft invoice for a percentage of the estimate (10 to 100) or a fixed amount. The line names what it is a share of, for example "Deposit (25%) of $62,200.00 on estimate EST000045". Tax and discount are billed in the same proportion, so the deposit invoice totals exactly what you asked for.
- Invoice remainder appears once something has been invoiced. It bills everything still open and lists each deposit as a Less deposit received line, so the client sees the arithmetic. The deposit and the remainder always add up to the estimate total.
The estimate shows a progress bar, "Invoiced $2,500 of $10,000", and lists every invoice raised from it. Each of those invoices shows From estimate EST000045 with a link back, and a short summary on screen and on the PDF: the estimate total, what was invoiced before, this invoice, and what remains after it. Cancelling or deleting one of them puts its amount back on the estimate so it can be invoiced again.
You can also start from the invoice side: in New Invoice, + From Estimate lists the client's accepted estimates that still have a balance.
Starting a Project from an Estimate
Start project turns an accepted estimate into a project you can track time against straight away. You choose the name and dates; the rest comes from the estimate:
| On the estimate | On the project |
|---|---|
| Total | Contract value and budget |
| Total labor hours | Estimated hours |
| Each labor line | A Time class with the quoted hours, rate, and budget, and the service attached |
| Each fixed line | A Milestone class for the line total (quantity x price), with a milestone task to mark complete |
| All material and expense lines | One Budget class, "Materials and expenses", with one task per quoted item and that item's amount reserved for it |
Every class shows its quoted amount as its contract value. Log each material purchase or expense against its task and the project shows, item by item, what was planned and what was actually spent.
From there nothing is new: log time against the labor classes, log expenses against the budget class, and invoice either from the estimate (fixed price, with deposits) or from tracked time and expenses (time and materials). Invoices billed from the project count against the estimate too, so you can see how a time-and-materials job is tracking against what you quoted.
Change Orders
When a job grows, open the project and click New Estimate. That estimate is a change order for the project. Once the client accepts it, Add to project adds its classes to the existing project and raises the contract value and budget by its total. The project page shows a Quoted panel with the original estimate, every change order, and what has been invoiced against each.
Estimate Reports
Three reports under Reports → Revenue follow your quoting: Estimate Conversion (win rate by month, client, or person), Estimate Pipeline (what still needs sending, answering, or invoicing), and Quoted vs Actual (how each job is tracking against its quote).
Limitations
- Line-item estimates only. Proposals, contracts, and electronic signatures are not part of this feature.
- Payment terms are text. A payment schedule that raises its own invoices on set dates is not part of this feature; use a deposit, then the remainder.
- Materials are typed per estimate; there is no parts catalog to pick from yet.
- The client can accept or decline the whole estimate, with no partial acceptance or counter-offer.
- Clients are not reminded before an estimate expires. You see expired estimates in the list and can reopen them.
- Estimates are not pushed to QuickBooks. The invoices raised from them are, under your usual QuickBooks settings.
Online Payments with Stripe Professional+
Connect your own Stripe account and your clients can pay invoices online by card on a secure, Stripe-hosted payment page. Payments reconcile automatically, no manual bookkeeping.
What It Does
- Hosted checkout: each invoice gets a private pay link (unguessable address, one invoice per link). Clients pay by card on Stripe's hosted checkout; card details never touch TimeQuorum.
- Pay links everywhere: emailed invoices from a Stripe-enabled profile include a Pay this invoice online button automatically, the
{{pay_link}}placeholder works in email templates, and every invoice has a Copy Pay Link action. - Automatic reconciliation: when the client pays, the payment is recorded against the invoice, the status flips to Paid, and the payment appears in the invoice's payment history and the Payments CSV export.
- Refund-safe statuses: a Stripe-paid invoice can't be flipped out of Paid until the payment is fully refunded or voided in Stripe, so your books and Stripe always agree. Refunds you issue in Stripe show up in the payment history as negative entries.
Setting It Up
- Sign in to your Stripe Dashboard and open Developers → API keys (dashboard.stripe.com/apikeys).
- Copy your Secret key (starts with
sk_live_, orsk_test_for testing). If you prefer a restricted key, it needs write access to Checkout Sessions and read access to Payment Intents. - In TimeQuorum, go to System Settings → Invoice Profiles, edit the profile you invoice from, paste the key into the Stripe field, and enable Stripe payments.
- Save. TimeQuorum validates the key with Stripe before accepting it.
Bank Payments (ACH Debit)
For US workspaces billing in USD, enable Bank Payments on the invoice profile and the payment page offers "US bank account" alongside card, at Stripe's ACH pricing (0.8% capped at $5) instead of card rates, which matters on large B2B invoices. Requirements and behavior:
- Enable ACH Direct Debit in Stripe first: Stripe Dashboard → Settings → Payments → Payment methods (see Stripe's ACH documentation). TimeQuorum verifies this with Stripe when you turn the toggle on; no new API key is needed.
- Settlement takes a few business days. After the client authorizes the debit, the invoice shows a "bank payment processing" state; it only flips to Paid when the funds actually settle. Payment reminders and second checkouts are held while a debit is in flight.
- If the debit fails (insufficient funds, closed account), the processing state clears, the invoice remains due, and workspace admins are emailed so they can follow up.
Limitations
- The checkout charges the invoice's full outstanding balance, partial online payments aren't offered (apply a credit note first if the balance is wrong).
- ACH bank debit is USD / US bank accounts only; other currencies are card-only.
- The payment currency comes from the invoice profile's currency setting.
- Refunds are issued from your Stripe Dashboard, not from TimeQuorum, TimeQuorum then reflects them in the payment history and status guards.
- One Stripe account per invoice profile; there is no marketplace/platform account layer; you're paid directly on your own Stripe account, and Stripe's standard processing fees apply.
Online Payments with PayPal Professional+
Connect your own PayPal business account and the same pay link offers a Pay with PayPal button. Clients approve the payment on PayPal's hosted page (PayPal balance, linked bank, or card as a guest where PayPal allows it), and the invoice reconciles itself exactly as a Stripe payment does. Stripe and PayPal work independently: an invoice profile can use one, the other, or both.
What It Does
- Same pay link, second button: the private pay link, the Pay this invoice online email button, the
{{pay_link}}placeholder, and Copy Pay Link all work for PayPal-only profiles too. With both processors attached, the page shows both buttons and the client picks. - Automatic reconciliation: the payment is captured only while your invoice is still open, recorded against the invoice with the PayPal capture ID as its reference, the status flips to Paid, your billing contacts are notified, and any QuickBooks copy receives the payment.
- Refund-safe statuses: a PayPal-paid invoice cannot leave Paid until the capture is fully refunded in PayPal. Refunds you issue in PayPal show up in the payment history as negative entries.
Setting It Up
- Sign in to the PayPal Developer Dashboard with your business account and create a REST API app (or open an existing one). Copy its Client ID and Secret key.
- In TimeQuorum, go to System Settings → Integrations → Add Integration, choose PayPal, paste the client ID and secret, and pick the environment: Live for real payments, Sandbox only for testing with sandbox buyer accounts.
- Save. TimeQuorum validates the credentials with PayPal before accepting them.
- Open System Settings → Invoice Profiles, edit the profile you invoice from, and pick the PayPal integration under Online Payments. Leave the Stripe selection in place if you want both.
eChecks and Delayed Payments
When a client pays from a bank account that PayPal has to clear first (an eCheck), the invoice shows a "payment processing" state instead of Paid. TimeQuorum checks with PayPal in the background and flips the invoice to Paid once the funds clear, usually within a few business days. If PayPal declines the payment, the processing state clears, the invoice remains due, and workspace admins and accounting users are emailed (the PayPal Payment Failed notification) so they can follow up.
Limitations
- The checkout charges the invoice's full outstanding balance; partial online payments are not offered.
- The payment currency is the invoice's currency and must be one PayPal supports for your account. PayPal reports an unsupported currency at checkout and the client sees a generic "try again later" message; the detail is in your workspace log.
- Refunds are issued from your PayPal account, not from TimeQuorum; TimeQuorum then reflects them in the payment history and status guards.
- While a bank or PayPal payment is processing, both pay buttons are hidden so the invoice cannot be paid twice.
- PayPal's own invoicing product (PayPal sends the invoice) is not used; TimeQuorum sends the invoice and PayPal only takes the payment.
System Settings Admin only
System Settings are accessible to workspace Admins via the sidebar. They control how the entire workspace behaves, defaults set here cascade through the platform. Changes take effect immediately for all users.
General / Workspace Settings
| Setting | What it does |
|---|---|
| Workspace Name | Displayed in the header and on invoices. Used as the sender name when sending invoice emails. |
| Timezone | The workspace's default timezone. Time entry dates are interpreted in this timezone. Important for teams that span multiple time zones. |
| Date Format | Controls how dates are displayed across tables, reports, and date pickers (e.g., YYYY-MM-DD, MM/DD/YYYY, DD/MM/YYYY). Apply consistently so exported reports match your team's expectations. |
| Currency | The workspace's default currency for rates, budgets, expenses, and reports. Each invoice profile has its own currency, fixed on every invoice it issues. TimeQuorum does not convert between currencies; reports show one total per currency. Billable rates, budgets, and expenses are always in the workspace currency, so an invoice issued in another currency should use manually entered line items or an invoice profile in the workspace currency. |
| Default Billable Rate | Workspace-wide fallback hourly rate. Used when a project and class have no rate set. Individual users can also have their own rate for use in cost and margin calculations. |
Time Tracking Settings
These settings govern how time entries work for everyone in the workspace:
| Setting | Effect |
|---|---|
| Capacity Warning Threshold | Utilisation % at which the Capacity, Billable Utilization, and Group Utilization reports flag a person or group (default 90%). Amber starts 20 points below. |
| Require Entry Description | When enabled, the Notes/Description field becomes mandatory on every time entry, both for the live timer and manual entries. Users cannot save an entry without filling it in. |
| Use Effort Tracking | When enabled, the Effort field appears on task and class forms. Effort is a dimensionless number (story points, weight, etc.) for planning purposes, separate from hours. |
| Work Week Start | Sets the first day of the work week for reports and the weekly timecard view. |
| Default Work Hours Per Day | Used as a reference in reports and alerts when checking whether users have logged enough hours. |
Categories
The Categories tab holds the workspace's shared pick-lists: Services (the kinds of work you sell, with per-person rates and the Rate Matrix) and Departments (org labels from user profiles, rename one everywhere or remove it from all users).
Invoice Settings
| Setting | Effect |
|---|---|
| Invoice Number Prefix | Prepended to all invoice numbers (e.g., INV- → INV-0042) |
| Default Payment Terms | Pre-filled on new invoices. Can be overridden per invoice. |
| Invoice Time Rounding | Round billed hours when building invoice lines from time entries, up or to nearest, in 6 to 60 minute increments, per entry (Harvest-style) or on the class total. Stored time entries always keep exact hours. |
| Deduct Rounded Time from Caps | Optional sub-setting of time rounding: class and project time caps burn the same rounded hours your invoices bill, so a retainer's Consumed and Free columns match what has actually been invoiced. Off by default; entries themselves are never altered. |
| Invoice Email Template | The email body sent to clients when an invoice is emailed. Supports placeholders like {{client_name}} and {{invoice_number}}. |
| Invoice Profile (Bill From) | Your company's name, address, tax ID, and bank details shown on invoices as the sender. |
Email Templates
System Settings → Email Templates lets admins customise every email the workspace sends:
| Template | Used for |
|---|---|
| Invite | Sent to newly invited users. Supports {{invite_link}}, {{workspace_name}}, and {{invited_by}}. |
| Invoice | Sent when an invoice is emailed to a client. Supports placeholders like {{client_name}}, {{invoice_number}}, and {{pay_link}}; the invoice PDF is attached automatically. |
| Invoice Payment Reminder | Sent to clients before/after an invoice's due date when reminders are enabled. Includes amount due, due date, days overdue, and the pay link. |
| Credit Note | Sent when emailing a credit note; the credit note PDF is attached. |
| Notifications | Subject and body for each notification type, project start and deadline reminders, class/task deadlines, budget alerts, task assignments, project completion, weekly capacity warnings, recurring-invoice generation notices, and failed bank-payment alerts, with variables like project name, due date, and budget percentage. |
Plan & Usage
View your current plan, billing period, seat count, and payment methods. Upgrade or downgrade your plan, add a credit card, and view billing history. If your subscription has lapsed, a Pay Now button reactivates immediately.
Cards are accepted from any country Stripe supports. Saving a card may ask you to confirm with your bank (3-D Secure), as required in the EU, UK, and India, and the first charge of an upgrade may ask again. Billing country and postal code are required so the correct tax applies. If you enter a VAT or GST ID, Stripe validates it and applies it to your invoices; EU businesses with a valid VAT ID are reverse-charged. All fees are in US dollars; your card issuer may apply a conversion rate or a foreign transaction fee.
Danger Zone
Permanently delete the workspace. This drops all data and cannot be undone. You will be asked to confirm by typing the workspace name.
API Integration Professional+
TimeQuorum exposes a RESTful JSON API that lets you integrate with third-party tools, automate workflows, and build custom reporting dashboards.
Authentication
All API requests require a Bearer token in the Authorization header:
Authorization: Bearer <your-jwt-token>
Obtain a token by authenticating through the portal SSO flow or by using an API key (available in System Settings → API Keys on Professional+ plans).
Base URL
All endpoints are relative to your workspace URL:
https://{workspace}.timequorum.com/api
Key Endpoints
| Method | Endpoint | Description |
|---|---|---|
POST | /api/oauth | Authenticate and get a Bearer token |
GET | /api/users/me | Current user profile and permissions |
GET | /api/entries | List time entries (filter by date, project, user, class) |
POST | /api/entries | Create a new time entry |
GET | /api/projects | List all projects |
GET | /api/clients | List all clients |
GET | /api/users | List workspace users |
GET | /api/time-cards | List the authenticated user's time cards (last 12 weeks) |
GET | /api/time-cards/current | Current week time card with daily hours breakdown |
POST | /api/time-cards/{week_start} | Submit a time card for a week (locks entries) |
DELETE | /api/time-cards/id/{id} | Retract a submitted time card (unlocks entries) |
GET | /api/time-cards/users | Manager: all users' current and prior week time card status |
GET | /api/project-templates | List all project templates |
POST | /api/project-templates | Create a new project template |
GET | /api/reports/my-timecard | Authenticated user's timecard report data |
GET | /api/reports/team-timecard | Team timecard report, hours by user, week, project, class |
GET | /api/invoices | List invoices |
The full API reference with request/response schemas, parameters, and example payloads is available at /api-docs.html, powered by the interactive OpenAPI explorer.
Example: Fetch This Week's Entries
curl -X GET \
"https://acme.timequorum.com/api/entries?start_date=2026-05-04&end_date=2026-05-08" \
-H "Authorization: Bearer eyJhbGci..."
Example Response
{
"entries": [
{
"id": 42,
"date": "2026-05-07",
"project_id": 5,
"project_name": "Website Redesign",
"task_name": "Frontend development",
"hours": "3.50",
"billable_hours": "3.50",
"notes": "Implemented dashboard charts",
"user_name": "Alex Johnson"
}
],
"total": 1
}
Pagination
List endpoints support ?page=1&limit=50 query parameters. The response includes total, page, and limit fields for cursor navigation.
Common Integrations
Slack
Post daily time summaries or missing timesheet alerts via webhooks
Spreadsheets
Pull entry data into Google Sheets or Excel for custom reports
Zapier / Make
Trigger workflows when entries are created or projects reach milestones
BI Tools
Feed Tableau, Power BI, or Metabase with live project & billing data
Webhooks Professional+
Webhooks let TimeQuorum push real-time events to your systems rather than polling the API. Configure webhook endpoints in System Settings → Integrations.
Available Events
| Event | Fired when… |
|---|---|
entry.created | A new time entry is saved |
entry.updated | A time entry is edited |
entry.deleted | A time entry is removed |
project.created | A new project is created |
invoice.status_changed | Invoice moves to Sent, Paid, or Overdue |
user.invited | A new user invitation is sent |
Payload Format
{
"event": "entry.created",
"workspace": "acme",
"timestamp": "2026-05-08T14:32:00Z",
"data": {
"id": 42,
"user_id": 7,
"project_id": 5,
"hours": "2.00",
"date": "2026-05-08"
}
}
Webhook deliveries include a X-TimeQuorum-Signature header you can use to verify authenticity. Retries are attempted 3 times with exponential backoff on failure.