Projectworks
Project ManagementProjectworks is professional services automation for consultancies and agencies: projects, budgets, timesheets, leave, expenses, forecasting, resourcing and invoicing. Agents create projects and assignments, submit and unsubmit timesheets, record expenses and pull invoicing and forecast data.
What This Integration Enables
Projectworks is professional services automation, which is a specific claim: the same system holds the project, the budget split across its phases, the timesheet, the leave calendar, the expense claims, the resourcing plan and the numbers that become an invoice. For a consultancy that is the point, because utilization and margin are only calculable when all of those sit in one place. FlowRunner agents work across that whole span. They create clients and projects with the commercial setup Projectworks demands up front, add modules and tasks, book time in the shape the timesheet route expects, record leave and expense claims, write forecast and resource rows, and pull rendered reports out for distribution.
Two things about this API decide how a flow against it should be written. Projectworks publishes no webhooks, so change detection is a poll on the modified timestamp rather than a subscription, and every list operation here takes that field for exactly that reason. And ten operations in this connector replace a list rather than adding to it. Setting project members, task members, user roles, postings, leave balances, forecasts and resources all take a complete list and overwrite what was there. That is not a quirk to route around; it is a design that assumes the caller read the current state first. It is also the sharpest argument on this connector for FlowRunner's human-in-the-loop approach, because a replace built on an incomplete read fails silently rather than loudly.
Without FlowRunner
With FlowRunner
Use Case Scenarios
-
A project that opens with its commercial setup already decided
Projectworks requires nine fields to create a project, because a project carries its own commercial configuration: office, client, type, status, currency, project manager, account manager and self service mode all have to be settled before the record exists. The agent reads each of them from the reference lists with List Lookup Values and List Offices, resolves the client with List Clients, and calls Create Project with the whole set. Create Module then splits the budget across the phases the engagement was sold as, and Create Task adds the work under each module, because a task in Projectworks hangs off a module rather than off a project directly. The kickoff summary posts to Slack with the budget split laid out beside the fee.
-
Timesheet week that closes without anybody chasing it
Every Monday the agent walks the team with List Users, calls Get User Timesheet for the week just ended, and separates the submitted weeks from the ones still open. For each open week it reads List Timesheet Entries to see whether the time is there but unsubmitted or genuinely missing, then sends the right message: a nudge to submit where the hours exist, a question about the gap where they do not. Submit Timesheet closes the loop for anybody who confirms their week is complete, and Unsubmit Timesheet reopens one that has to be corrected. The escalation to the delivery lead names only the people whose week has been open past the deadline, not everybody who was slow.
-
Expenses that reach the client invoice with their receipts
An expense is logged, or arrives from a card feed. The agent calls Create Expense Claim against the project, passing the receipt as content the operation encodes for the base64 body Projectworks expects rather than as a file upload. As the claim moves through approval, Update Expense Claim marks it processed and re-billable. At billing time the agent lists the claims for the period, calls Download Expense Receipt on each so the PDFs are in FlowRunner file storage, and assembles them with the invoice detail from Get Invoice into a pack for the account manager. The receipts and the line they justify travel together, which is the version of this the client actually accepts.
Human-in-Loop Highlight
Set Project Members replaces a project's member list rather than adding to it, and it carries the rate each person is charged at on that project. That combination is why it is the gate on this connector. Read the current members, send the new list, and anybody you failed to read stops being on the project, along with the rate that governed their billing. Projectworks does provide Remove Task Member for taking one person off a task without touching the rest, but it publishes no equivalent at project level: the full replace is the only route there is. So an agent proposing a resourcing change does everything up to the write and then shows its work: "Set Project Members on Halberd Rebuild. Currently 6 members. Proposed 6: adding Dan Okoye at 145 per hour, removing Kirsten Vaughan. Rates for the other 5 unchanged. Confirm the list, because this call replaces the whole set." The delivery lead reads six names and answers. What makes this gate necessary is not that the operation is destructive, it is that its failure mode is quiet: a member dropped by an incomplete read looks exactly like a member somebody meant to remove.
Agent Capabilities
79 actionsClients
5- List Clients Returns the clients on the account. The modified timestamp is the field to poll on, because Projectworks publishes no webhooks and this is how a flow notices changes without re-reading everything.
- Get Client Returns one client with its finance settings, address and default rate card.
- Create Client Creates a client. An account manager and an office are required as well as a name, because a client cannot exist outside an office in this data model.
- Update Client Changes the properties of a client that are supplied and leaves the rest alone, using the partial route rather than the one that replaces the whole record.
- Delete Client Deletes a client. Projectworks refuses this while the client still has projects, so retiring a client is done by clearing its active flag instead.
Billing Contacts and Rates
4- List Billing Contacts Returns the billing contacts on the account or on one client. These are who an invoice is addressed to, and they are separate from the people who use Projectworks.
- Create Billing Contact Adds a billing contact to a client, which is who that client's invoices go to.
- Delete Billing Contact Removes a billing contact. This route is not nested under the client, so it takes the contact's own identifier alone.
- List Client Rate Cards Returns the rate cards that apply to one client, which is what decides what its work is charged at.
Projects
5- List Projects Returns projects, filtered by client, person or status. The modified timestamp is the field to poll on for change detection.
- Get Project Returns one project with its client, status, dates, manager and budget settings.
- Create Project Creates a project. Projectworks requires nine fields, because a project carries its own commercial setup: office, client, type, status, currency, project manager, account manager and self service mode all have to be decided up front.
- Update Project Changes the properties of a project that are supplied and leaves the rest alone. This uses the partial route; the replacing route would blank anything omitted, including dates, manager and rate card.
- Delete Project Deletes a project and everything under it. Clearing the active flag with Update Project closes a project down without losing its history.
Project Members
3- List Project Members Returns the people assigned to a project, with the rate each is charged at on it. The read that has to happen before any member write.
- Get Project Member Returns one person's assignment to a project, including the rate they are charged at on it.
- Set Project Members Sets who is on a project, as a whole list. This replaces the project's members rather than adding to them, and there is no targeted removal at project level, which is why this page's human gate sits here.
Modules
5- List Modules Returns modules, which are the phases or workstreams a project's budget is split across. Every task belongs to one.
- Get Module Returns one module with its budget, fee type and general ledger code.
- Create Module Adds a module to a project. A budget of zero is a real budget here and is sent as such rather than being dropped.
- Update Module Changes the properties of a module that are supplied and leaves the rest alone, using the partial route.
- Delete Module Deletes a module and the tasks under it.
Tasks
5- List Tasks Returns tasks, filtered by project, module or person. A task hangs off a module rather than off a project directly, so filtering by project is a convenience over that structure.
- Get Task Returns one task with its dates, rate, fee, completion and timesheet settings.
- Create Task Adds a task to a module. A module has to be chosen rather than a project, and a percentage or fee of zero is a real value here rather than an omission.
- Update Task Changes the properties of a task that are supplied and leaves the rest alone, using the partial route.
- Delete Task Deletes a task. Projectworks refuses this once time has been booked to it, so a task with history is closed down by taking it off the timesheet instead.
Task Members and Placeholders
5- Set Task Members Sets who is on a task, as a whole list. This replaces the task's members rather than adding to them, so read the task first and send everybody who should remain.
- Get Task Member Returns one person's assignment to a task, with their allocated hours on it.
- Remove Task Member Takes one person off a task, leaving the rest of its members alone. The targeted alternative to Set Task Members, and the operation project membership has no equivalent of.
- Set Task Placeholders Sets the placeholders on a task, as a whole list. A placeholder is unnamed capacity, used to plan work before it is known who will do it. This replaces rather than appends.
- Delete Task Placeholder Removes one placeholder from a task, freeing the capacity it reserved.
People
5- List Users Returns the people on the account, with their offices, positions and employment dates.
- Get User Returns one person with their contact details, employment dates and office.
- Create User Creates a person on the account. Their office, position and rank are set afterwards through postings, because Projectworks treats those as a dated history rather than as fields.
- Update User Changes the properties of a person that are supplied and leaves the rest alone, using the partial route.
- Delete User Deletes a person. Projectworks refuses this once they have booked time, so a leaver is recorded with an employment end date instead.
Postings, Roles and Leave Balances
6- List User Postings Returns a person's postings, which are the dated record of which office, position, rank and team they have held over time. Employment history lives here rather than on the person.
- Set User Postings Sets a person's postings, as a whole list. This replaces their posting history rather than adding to it, so read the current list first and send everything that should remain.
- Delete User Posting Removes one posting from a person's history. The posting is identified by its start date rather than by an identifier, which is how Projectworks keys them.
- List User Roles Returns the permission roles a person holds, which is what decides what they may see and do in Projectworks.
- Set User Roles Sets the permission roles a person holds, as a whole list. This replaces their roles rather than adding to them, so send every role they should keep.
- Set User Leave Balances Sets a person's leave balances, which is how an opening balance or an adjustment is loaded from a payroll system.
Timesheets
7- List Timesheet Entries Returns booked time, filtered by person, task or date. This is the record billing and utilization are calculated from.
- Create Timesheet Entries Books time against tasks. This takes a list rather than one entry, because the timesheet route is built for loading a whole day or week at once, and a single entry is a list of one.
- Update Timesheet Entries Changes booked time. Like the create, this takes a list, and each entry has to carry its own identifier.
- Delete Timesheet Entry Deletes one booked time entry. The identifier travels in the query string here, unlike every other delete in this API.
- Get User Timesheet Returns one person's timesheet for the week beginning on the date given, which is the unit Projectworks submits and approves.
- Submit Timesheet Submits one person's timesheet week for approval, which is what a reminder flow ends with.
- Unsubmit Timesheet Reopens a submitted timesheet week so it can be corrected, which is the reverse of Submit Timesheet.
Leave
5- List Leave Returns leave requests, filtered by person, type, status or date range.
- Get Leave Returns one leave request with the individual days it covers.
- Create Leave Records a leave request. Projectworks takes leave as a list of days rather than as a start and end date, because a request can cover half days and skip non working days.
- Update Leave Changes a leave request, which is how it is approved or declined. Sending the days replaces the whole set on the request.
- Delete Leave Deletes a leave request and returns the balance it consumed.
Expense Claims
6- List Expense Claims Returns expense claims, filtered by person, client, project or status.
- Get Expense Claim Returns one expense claim with its amount, tax, billing settings and attached receipt.
- Create Expense Claim Records an expense claim against a project. The receipt travels as encoded text inside the request body rather than as a file upload, so a URL or the content itself is enough and this operation does the encoding.
- Update Expense Claim Changes an expense claim, which is how it is approved, marked processed or re-billed.
- Delete Expense Claim Deletes an expense claim.
- Download Expense Receipt Fetches the receipt attached to an expense claim into FlowRunner file storage and returns a URL later steps can use.
Invoicing
2- List Invoices Returns invoices, filtered by client, project, status or number.
- Get Invoice Returns one invoice with its lines, tax and totals.
Forecasting and Resourcing
5- List Forecasts Returns revenue forecasts by project and month, which is what the pipeline view is built from.
- Set Forecasts Writes revenue forecast amounts as an upsert keyed on project, module and month, so a row that exists is overwritten and one that does not is created.
- List Resources Returns resource bookings, which are the planned allocations of people to work over time.
- Get Resource Returns one resource booking with its dates, hours and the person it reserves.
- Set Resources Writes resource bookings as an upsert rather than an append, so a booking already covering the same person, task and dates is overwritten.
Reports
2- List Reports Returns the saved reports on the account, which are what the download operation renders.
- Download Report Renders a saved report into FlowRunner file storage and returns a URL later steps can use, which is how a Projectworks report is emailed or pushed to a warehouse on a schedule.
Custom Fields
3- List Custom Fields Returns the custom fields defined on the account, with the entity each belongs to. Read this first to learn what a custom field write will accept.
- Set Custom Field Values Writes custom field values onto records through the account wide route, naming the entity on each row.
- Set Record Custom Fields Writes custom field values onto one record, choosing which kind of record it is. The narrow alternative to the account wide route.
Accounting Links
2- List Accounting Contacts Returns the contacts Projectworks has synchronized from the connected accounting system, which is how an invoice is matched to the right ledger.
- List Tracking Categories Returns the tracking categories from the connected accounting system, which is what a project's revenue is tagged with when it is exported.
Service Desk
2- Create Or Update Service Desk Task Creates a task from a service desk ticket, or updates the one already linked to it. Projectworks keys this on your external reference rather than on a task identifier, which is what makes it safe to re-run.
- Find Service Desk User Finds one person by the value of a custom field, which is how a service desk's own user identifier is matched to a Projectworks person.
Reference Data
2- List Offices Returns the offices on the account. Every client, project and person belongs to one, so this is usually the first call when setting an integration up.
- List Lookup Values Returns one of Projectworks' reference lists by name. Every identifier the create operations demand comes from one of these lists, and this exposes all of them as a single choice rather than as twenty near-identical operations.
Frequently Asked Questions
What can FlowRunner do with Projectworks?
FlowRunner agents can run List Clients, Get Client, and Create Client in Projectworks, plus 76 more actions.
Does connecting Projectworks to FlowRunner require OAuth?
No. Projectworks connects to FlowRunner with basic authentication (a username and password), no OAuth flow required.
Can Projectworks trigger a FlowRunner workflow automatically?
Projectworks doesn't currently expose triggers in FlowRunner. It connects as an action step inside workflows started by another trigger.
Start building with Projectworks
Free plan, no card required. Connect in minutes.