How topics connect to billing
Who can do this
Section titled “Who can do this”- Company Owners and Company Admins can create and configure topics, create products, and set up contracts.
- Company Members can assign topics to tasks. They can also create topics unless restricted by a Company Admin.
- Billing is available on the Team plan and above.
How the topic-to-billing pipeline works
Section titled “How the topic-to-billing pipeline works”The flow from work to invoice goes through three layers:
- Topic on a task — team members assign a topic when creating or editing a task (for example, “Bookkeeping” or “Payroll”). This categorises what type of work was done.
- Product scoped to a topic — in the Billing module, an hourly product can be configured to bill only time logged under a specific topic. If no topic scope is set on the product, it bills time from all topics.
- Contract generates the invoice — when the billing engine runs, it collects time entries (and task field values, for per-piece products) for the billing period and applies the product’s topic filter to determine what appears on each invoice row.
The result: each invoice row corresponds to one product, which may correspond to one topic. A client with separate bookkeeping and payroll topics will typically have separate invoice rows — one per product — each pulling from its respective topic’s time entries.
Setting a billable default per topic
Section titled “Setting a billable default per topic”The most important intersection between topics and billing is the billable default override.
Uku determines whether a time entry is billable in this order:
- Topic billable setting — if the task has a topic and that topic has a billable setting configured, it takes priority.
- Company-wide billable default — if no topic is assigned, or if the topic has no billable setting, the company default applies.
This means a topic like “Internal admin” can be set to non-billable even if your company default is billable — every task tagged as “Internal admin” will have its time marked non-billable automatically, without anyone having to remember to change the toggle on each task.
How to configure the billable default on a topic
Section titled “How to configure the billable default on a topic”- Go to Settings & Apps and click the Tasks app.
- Open the Topics tab.
- Click the edit icon next to the topic you want to configure.
- Set the Billable toggle — choose Yes, No, or leave it unset to fall back to the company default.
- Save.
Mapping a product to a topic
Section titled “Mapping a product to a topic”Hourly billing products support a topic filter that controls whose time they draw from. This is set when creating or editing an hourly product.
How to set the topic on a product
Section titled “How to set the topic on a product”- Go to Settings & Apps → Billing → Setup → Articles.
- Open an existing hourly product or click Add to create one.
- In the product settings, find the Topic (or Billed topic) field.
- Select the topic whose time this product should bill. To bill all topics, leave the field empty.
- Save the product.
A practical setup for a bookkeeping firm might look like this:
| Product name | Type | Topic scope |
|---|---|---|
| Bookkeeping — hourly | Hourly | Bookkeeping |
| Payroll — hourly | Hourly | Payroll |
| VAT returns — hourly | Hourly | VAT returns |
| Monthly fixed fee | Fixed price | — (not applicable) |
With this structure, each invoice row shows only the time for its topic — making invoices easy for clients to read and easy for you to reconcile against reported hours.
Topics and the invoice rows
Section titled “Topics and the invoice rows”When a contract generates an invoice, the invoice rows reflect the contract rows. Each contract row references a product. The product’s topic scope determines which time entries appear in that row’s quantity calculation:
- Hourly products with a topic — the row’s quantity equals the total hours logged under that topic during the billing period.
- Hourly products without a topic — the row’s quantity equals total hours logged under any topic (or no topic) during the billing period.
- Fixed price products — topic does not affect the quantity; the price is fixed regardless of time logged.
- Per-piece products — topic does not filter the billing; the product bills based on a custom task field value.
Topics and Missed Billing
Section titled “Topics and Missed Billing”The Missed Billing report uses topic assignment to identify unbilled work. Time entries and completed tasks are flagged as potentially missed when they have a topic that maps to a billable product but did not appear on an invoice for the period. If a topic’s billable default is set to non-billable, its time will not appear in the missed billing report. See How to find and manage missed billing.
Troubleshooting
Section titled “Troubleshooting”A product is not pulling in time for a specific topic
Section titled “A product is not pulling in time for a specific topic”Check two things: first, confirm the tasks being tracked have the correct topic assigned. Second, open the product settings and verify the Billed topic field is set to the right topic (or is empty if you want all topics included). A mismatch between the task’s topic and the product’s topic scope means the time will not appear on that invoice row.
Time entries are marked non-billable even though my company default is billable
Section titled “Time entries are marked non-billable even though my company default is billable”The task’s topic has its own billable setting that overrides the company default. Go to Settings & Apps → Tasks → Topics, find the topic in question, and check its billable setting. Change it to Yes or remove the override to fall back to the company default.
All topics appear on one invoice row instead of separate rows
Section titled “All topics appear on one invoice row instead of separate rows”Each invoice row corresponds to one contract row, and each contract row uses one product. If you want separate rows per topic, add separate products (one per topic) and separate contract rows for each. A single contract row using a product with no topic scope will aggregate all topics into one line.