Skip to content
EP365 Worklog
Time tracking for Microsoft 365 · v 1.0

From logged hour. To invoice. Inside your M365.

Customers, projects and milestones, logging hours, approvals and billing inputs — the whole flow from a logged hour to an invoice in one app that lives directly in your tenant's SharePoint. Service allowances with hour carry-over, a rate matrix and a client report in one click. No external backend.

From hour to invoice
Log → submit → approve → invoice. The whole flow of hours in one app, with an audit trail.
Service contracts under control
Monthly allowance, carry-over of unused hours and overage work — calculated, not guessed.
Inside your M365
Hours, rates and reports stay inside your tenant's SharePoint. No external backend.
Book a demo Get a quote 9 lists · 4 roles · per tenant
WORKLOG · APPROVALS
312 h logged this month · CZK 186,400 to invoice
Submitted entries · awaiting approval
JN
Jana Nováková
Development · 6 h · Claims module
PD
Petr Dvořák
Support · 4.5 h · Service — July
LM
Lucie Marešová
Consulting · 2 h · API workshop
MK
Martin Kolář
Analysis · 8 h · MVP launch
allowance 16 h · overage 3.5 h → BILLING
9 lists
all data in your SharePoint lists
4 roles
Admin · Lead · Team member · Billing
100 %
data inside your M365 tenant
0 backends
no Azure Functions, no external database
What companies deal with today · 3 / 3

Three things every time-billing company knows.

01 · SPREADSHEETS

Hours in workbooks and heads

Everyone tracks time their own way — in Excel, in notes, or not at all. At the end of the month hours are chased across the team, rates are dug out of emails and nobody vouches for the time sheet being complete.

02 · OVERRUNS

Nobody watches the allowances

A service contract includes 16 prepaid hours — but how many were actually used? Overruns surface too late, unused hours expire with no rules, and overage work never gets invoiced.

03 · BLIND INVOICING

Billing inputs assembled by hand

The billing team assembles invoice attachments from spreadsheets nobody approved. There's no trail of who signed off what, the client report is formatted by hand and there's no revenue forecast from hours at all.

Who it's for / not for

For teams that sell their time.

Who it's for

  • You sell time — consulting, development, support — and want hours logged, approved and invoiced in one flow.
  • You run service contracts with a monthly allowance and need to watch usage, carry-over of unused hours and overage work.
  • You want rates driven by a price list (customer / project / person), not negotiated at invoicing time.
  • You send clients a monthly work report and want it generated in one click — Word from your template, or CSV.
  • You use EP365 CRM and want approved hours pushed into the revenue forecast automatically.

Who it's NOT for

  • You're looking for an enterprise PSA / ERP with capacity planning, attendance and payroll integration (SAP, project ERPs).
  • You need stopwatches and automatic background time capture. EP365 Worklog is about deliberate reporting, not activity tracking.
  • You want an integrated invoicing core that issues invoices. Worklog prepares approved inputs and amounts — you issue the invoice in your accounting system.
  • You don't have SharePoint Online. EP365 Worklog runs as an SPFx web part inside Microsoft 365 only.
Key features · 8 / 8

Eight things that keep hours from getting lost.

01

Logging without procrastination

My time sheet with quick entry (project, milestone, work type, hours, description) and a weekly grid — hours by day Mon–Sun, clicking a cell pre-fills the form. Empty week? One button copies last week as drafts. An entry can also be started straight from a milestone or a task.

Weekly gridCopy last weekDraft → Submitted
02

Customers, projects and milestones

A tree of customer → project → milestone → task. Projects on a kanban board by status (drag & drop), milestones as service-contract months or functional units with hour budgets. Tasks with an assignee, status and percent complete. Customers can be taken over from EP365 CRM.

Project kanbanMonths & functional unitsHour budgets
03

Approvals with an audit trail

Submitted entries wait in a queue — the admin sees everything, leads see their own projects. Approve or reject in bulk or one by one; a rejection carries a reason the author sees on the record. Email notifications for submission, approval and rejection go out via Microsoft Graph.

Approval queueRejection reasonEmail notifications
04

Service contracts and allowances

A Service contract project has monthly prepaid hours and a carry-over mode for unused hours (none / full / partial with a cap). The month-end close calculates the carry-over and writes it into the next month. Usage shows as a burn-down on the dashboard — including overage work. The allowance and rate can be inherited from a contract in EP365 CRM.

Allowance + carry-overOverage workInherited from CRM
05

A rate matrix

Hourly rates on three levels: customer × work type (+ a default customer rate), project × work type, and a personal rate on a project. On entry, the most specific rate wins and is stored as a snapshot with the record — later price-list changes never rewrite history. Non-billable hours are tracked without an amount.

Customer · project · personRate snapshotBillable / internal
06

Billing and the client report

Approved hours grouped by customer: export a monthly report to Word using your template (logo, header, footer) or CSV, and mark selected hours as invoiced with an invoice number. Totals respect currencies (CZK / EUR per project).

Word from templateCSV exportMark as invoiced
07

Month-end close → CRM forecast

If you run EP365 CRM, one button computes billable revenue from approved hours — for service contracts only the hours above the allowance, for fixed-price (FTFP) milestones the fixed price after acceptance — and writes it into Expected revenue in the CRM. The customer's payment terms decide which month the revenue lands in.

T&M and FTFPPayment termsIdempotent re-sync
08

Import, roles and scoping

CSV import of hours with a preview, matching people to accounts and protection against importing the same file twice. Four roles driven by SharePoint groups. Team members can be scoped to specific customers or projects — with no assignment they see nothing (strict mode).

CSV import with preview4 rolesMember scoping
In use · 4 real scenarios

What people do with it every day.

CONSULTANT

Hours logged in a minute a day

A USER SAYS
“After lunch I open My time sheet, the grid shows my week — I click today on a project, fill in hours and a note. On Friday one button submits the whole week for approval.”
  • Quick entry with the project and milestone pre-filled
  • Weekly grid by day + copy last week
  • A rejected entry shows the reason — I fix it and resubmit
PROJECT LEAD

The approval queue done in five minutes

A USER SAYS
“I get an email that the team submitted their hours. I open Approvals, see only my projects — approve in bulk, return one entry with a reason. The author sees it immediately, with a notification.”
  • A queue of my projects only, bulk approval
  • Rejection with a reason + email to the author
  • Milestone budgets and usage burn-down on the dashboard
BILLING

Invoice inputs in one click

A USER SAYS
“At the start of the month I open Billing — approved hours grouped by customer. I export a Word report with our logo as the invoice attachment and mark the hours as invoiced with the invoice number.”
  • Approved hours grouped by customer
  • Word report from a template (logo, header, footer) / CSV
  • Mark as invoiced with an invoice reference
MANAGING DIRECTOR

Service usage and a revenue outlook

A USER SAYS
“The dashboard shows service allowance usage including carry-overs and overage work. After the close, approved hours appear in the CRM forecast — I know what the work actually turns into.”
  • Service contract burn-down (allowance + carry-over + overage)
  • Month-end close → Expected revenue in EP365 CRM
  • Usage overview: hours by customer, invoiced by currency
How it's built

Four layers. All inside your M365.

No extra system. Hours, rates, configuration and calculations stay in your SharePoint and Microsoft Graph. On our side, only the licence check runs.

01
INTERFACE
One web part, blade panels and ⌘K
An SPFx web part with a light app shell. Records open in side blade panels (detail + edit), an entry can be started straight from a milestone or task. Deep links to every view and record, and a command palette (⌘K / Ctrl+K) with full-text search.
02
DATA — SP LISTS
Everything in your SharePoint lists
All data lives in 9 SharePoint lists (EP365Work* prefix) inside your M365 tenant — projects, milestones, tasks, entries, the price list, assignments, customers and settings. Auto-provisioning creates them on first load.
03
MICROSOFT GRAPH
Email notifications
Notifications about submitted, approved and rejected entries go via /me/sendMail (the sender is always the signed-in user). Everything is best-effort from the browser — a Graph outage never breaks the action itself.
04
LICENCE
The only contact with our server
Used solely to verify your licence (tenant ID + expiry). No hours, rates or customer data ever pass through it.
Competitive comparison

Where EP365 Worklog has a clear edge.

Capability
EP365 Worklog
Excel / spreadsheets
Cloud time tracking
Custom SP solution
Runs inside your M365 tenant
no
~partly
No external backend
no
~partly
Data never leaves the tenant
no
Approval workflow with an audit trail
no
~partly
~partly
Service allowances + hour carry-over
~partly
no
no
Rate matrix and rate snapshots
no
~partly
no
Client report (Word from your template)
~partly
~partly
no
Connected to a CRM forecast
no
no
no
Data & security

Arguments your IT and management will appreciate.

Hours and rates inside your tenant, no Power Automate, no external backend. The only external dependency is the licence check. Auto-provisioning with no manual PowerShell.

Data inside your tenant

Hours, rates, customers and reports stay in the customer's SharePoint, under their Entra ID identity and permissions. No export to a third-party cloud.

No Power Automate

Notifications go straight from the browser via Microsoft Graph; calculations (rates, usage, the close) run client-side. No flows, no PA licences.

A single external dependency

The licence check (tenant ID + expiry) — no customer data is transferred. Without a valid licence the app switches to read-only; your data stays.

XSS guards over content

Inputs from lists (notes, links, rich text) pass through allowlist-based XSS guards — even content written by a regular site member is safe.

Roles and scoping

Four roles via SharePoint groups. A team member only sees assigned customers and projects (strict mode), and rates are visible to admins and billing only.

Auto-provisioning

One .sppkg into the App Catalog. SharePoint lists and groups create themselves on first load, idempotently. No manual PowerShell.

No customer data ever leaves the customer's M365 tenant. The app has no backend for business logic — entries, rates, allowance usage and the month-end close all run in SharePoint and Graph inside the tenant.
Pricing

A monthly licence by company size + on-site implementation.

The monthly subscription is based on the size of your organisation — the total number of users in your Microsoft 365 environment. The full scope of the app within the given size.

Licence

How we price the licence

1
Up to 25 users
CZK 2,000 / month
2
26–70 users
CZK 3,500 / month
3
71–150 users
CZK 5,000 / month
4
More than 150 users
Contact us
Extended support

Support pricing

CZK 2,200 / hour

Consulting, environment adjustments, or user support.

How support is billed

Support is billed per started 15 minutes of work. You are informed of the expected scope in advance.

Rollout

On-site implementation

CZK 8,800–17,600 one-time

Installation, list provisioning, a team workshop (2 h), theming to match your brand, configuration of work types, the rate matrix and the report template; optionally importing customers and hours from CSV and connecting to EP365 CRM.

Not included

Full localisation of the interface beyond Czech, customisation beyond theming, migration of extensive historical data, and server-side automation.

Prices exclude VAT
Case study

What it looks like in real operation.

IT services · 25 consultants

“No more chasing hours at month end — and overage work finally gets invoiced.”

COMPANY
IT services · 25 consultants
PROJECTS
18 active + 7 service contracts
MANAGED BY
2 leads + billing
ROLLOUT
half a day, no DevOps
Before
Every consultant kept their own spreadsheet; at month end the billing team spent three days assembling inputs and chasing stragglers. Service allowances were watched by gut feel — overruns were invoiced late or not at all, and unused hours expired with no rules.
After rollout
Hours are logged daily (weekly grid, copy last week), leads approve continuously with notifications. Billing exports Word reports with the logo as invoice attachments and marks hours with the invoice number. The close pushes approved hours into the CRM forecast.
The key moment
The first month-end close: two service contracts showed overage work that had never been invoiced before — and carry-over of unused hours stopped being a matter of debate with the client.
“Billing inputs that used to take three days now take one morning — approved, with an audit trail. And the data never left our tenant.”
— operations director, IT services, 25 employees
FAQ

What PMs, finance and IT ask.

Where are our hours and rates stored?
Exclusively in the SharePoint of your Microsoft 365 tenant, in EP365Work* lists. The app has no database or backend of its own — no data leaves your tenant. The only external communication is the licence check (tenant ID + expiry).
Do we need Power Automate or Azure?
No. Email notifications go straight from the browser via Microsoft Graph (you approve Mail.Send once in the SharePoint admin centre); rate resolution, allowance usage and the month-end close all run client-side. No scheduled flows, no Azure Functions.
How does the approval workflow work?
A team member submits drafts for approval — the lead of the affected projects gets an email. In the Approvals queue the admin sees everything and leads see their own projects; you approve in bulk or one by one. A rejection carries an optional reason the author sees on the record and in the notification — they fix the entry and resubmit. An approved entry can no longer be edited by its author.
How do service contracts and hour carry-over work?
A Service contract project has monthly prepaid hours (an allowance) and a carry-over mode for unused hours: none, full, or partial with a cap. The month-end close calculates unused hours and writes them into the next month's milestone — the bucket is then allowance + carry-over. Hours above the bucket are billed at the price-list rate, or at the rate inherited from the contract in EP365 CRM.
Do we need EP365 CRM?
No — Worklog is fully standalone; you keep customers directly in the app. With EP365 CRM you additionally get: CRM companies offered when creating a customer, the allowance and rate inherited from a service contract in the CRM, and approved hours pushed into Expected revenue (the forecast) at the month-end close.
How fast can we roll it out?
Typically within a few hours. Upload the .sppkg to the App Catalog, approve the Graph permission, add the web part to a site — and the first load creates all SharePoint lists and groups by itself. Test data is one button away, and real data can be imported from CSV.
Can we customise work types and the report template?
Yes. Work types are a configurable code list; the client report has a template with your logo, header, intro text and footer. Rates are set as a matrix for customer, project and individual person, and the app's accent colour can match your brand.