[Cotlet](https://cotlet.dev/index.md) · [Integrations](https://cotlet.dev/integrations.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Use cases](https://cotlet.dev/use-cases.md) · [Security](https://cotlet.dev/security.md) · [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md) · [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [Contact](https://cotlet.dev/contact.md) · [Pricing](https://cotlet.dev/pricing.md) · [Sign up](https://cotlet.dev/signup)

# Approve Deputy timesheets in bulk by your own rule

> Approve Deputy timesheets that match the roster, discard shifts nobody worked and keep the odd ones for yourself. Runs daily, oldest first.

Source: https://cotlet.dev/integrations/deputy-api-mcp-server/approve-timesheets-in-bulk

Every morning the pending timesheets of last week pile up on the Timesheets tab, and a Location Manager checks each start, end and break against the roster before clicking Approve.

Cotlet does it in your own Deputy account with list\_timesheets, get\_timesheet, approve\_timesheet and discard\_timesheet, called by your AI agent, an n8n workflow or a script.

[Sign up free](https://cotlet.dev/app/signup?app=deputy) [All Deputy tools](https://cotlet.dev/integrations/deputy-api-mcp-server.md)

Hosted · nothing to install or maintain

## Can Deputy do this on its own?

Deputy offers bulk approval in the web app and a timesheet approve endpoint in its REST API (checked 20 Oct 2026). Both approve what you pick, not by a rule such as "matches the roster". Deputy has no official MCP server, so an agent needs your own code and token.

## How you do it in Deputy today

1. On the Deputy website, a manager opens the Timesheets tab and chooses Approve Timesheets to view, edit and approve the team's timesheets.
2. A pending timesheet with a start and an end time is approved with the Approve button on its right. One without an end time is opened in the detailed view, edited, then approved.
3. For many at once, the manager ticks checkboxes by timesheet, team member or date, and a bulk action bar appears at the bottom. A System Administrator must first switch on the approve-all setting in Business Settings.
4. A team member who never clocked in leaves an unsubmitted timesheet. The manager uses Import scheduled details to complete it, or Discard Time Sheet if the shift was not worked.
5. Deputy recommends approving in date order, oldest first, so overtime and shift loading calculate correctly, which is easy to get wrong in a long list.

## How to approve Deputy timesheets in bulk by your own rule

Prompt

```
List pending timesheets at Harbour Cafe, oldest first. Approve the ones that match their roster within 15 minutes, discard shifts nobody worked, and leave the rest for me with a reason.
```

1. 01  
### Read the queue oldest first  
Your agent calls list\_timesheets with status pending and a location, and keeps the date order Deputy recommends. The account must be a Location Manager or System Administrator for the pay part; a Supervisor sees time only.
2. 02  
### Compare with the roster  
For each timesheet, get\_timesheet returns the start, end and break next to the scheduled shift. The agent applies your rule from the prompt, for example "within 15 minutes of the roster", and quotes the numbers it used.
3. 03  
### Sort into three piles  
Matches go to approve. A timesheet with no clock-in and no worked shift goes to discard. Anything with a missing end time, a long overrun or a manual edit stays pending with a one-line reason.
4. 04  
### Approve, then discard  
approve\_timesheet runs for the matches in date order, so overtime is calculated correctly even if you stop halfway. discard\_timesheet runs only for shifts nobody worked. Both wait for your OK per call until you switch confirmation off for them.
5. 05  
### Check before each call  
Right before approving, the agent reads the timesheet again. One that another manager approved or edited in the meantime is logged as already handled and skipped.

### What you get back

Example data

```
Pending timesheets at Harbour Cafe: 14
Approved 10 (all within 15 minutes of the roster)
Discarded 1 (Sam Okafor, Oct 11: shift not worked)
Left for you 3:
- Ana Lopez, Oct 12: no end time
- Tom Becker, Oct 12: 45 minutes over
Already handled by another manager: 0
```

### Other ways to ask

- Every evening, approve timesheets of staff who clocked on and off within 10 minutes of their shift.
- Show me pending timesheets with a break shorter than the roster, and approve nothing.
- Approve everything at Harbour Cafe for last week except timesheets with a comment.

## What Deputy allows, and what to know first

- Deputy lets Location Managers and System Administrators amend and approve both the time and the pay part of a timesheet; Supervisors handle only the time part and cannot see pay.
- Deputy's mobile app cannot bulk approve absent timesheets, where an employee missed a scheduled shift.
- Deputy unapproves a timesheet only in the web app, so Cotlet has no unapprove tool; an approval by mistake is fixed there.
- Deputy's bulk approval needs a System Administrator to switch on the approve-all setting in Business Settings; one-by-one approval does not.

approve\_timesheet and discard\_timesheet ask for your OK by default. To run it daily without you, switch confirmation off for those tools in your dashboard.

Sources: [Deputy Help: Approving your team's timesheets](https://help.deputy.com/hc/en-au/articles/6997348381327-Adding-editing-and-approving-Timesheets) · [Deputy Help: Approving timesheets](https://help.deputy.com/hc/en-au/articles/4689553875471-Approving-timesheets) · [Deputy Help: What if a team member forgets to clock on or off](https://help.deputy.com/hc/en-au/articles/4689857967375-What-do-I-do-with-the-timesheet-if-a-team-member-forgets-to-clock-on-or-off) · [Deputy Developer: Timesheet Management Calls](https://developer.deputy.com/docs/timesheet-management-calls)

## Call approve\_timesheet from a script

curl

```
curl -X POST https://cotlet.dev/api/v1/deputy/timesheets/4821/approve \
  -H "Authorization: Bearer $COTLET_API_KEY"
```

Example response

```
{
"timesheet_id": 4821,
"employee": "Ana Lopez",
"date": "2026-10-12",
"start": "09:00",
"end": "17:30",
"break_minutes": 30,
"hours": 8,
"status": "approved"
}
```

MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is deputy\_write → approve\_timesheet. Example data.

[Schedule it in n8n, Make, Zapier or cron](https://cotlet.dev/integrations/deputy-api-mcp-server.md#automations)

## Deputy tools this automation uses

__Cotlet Deputy tools used to approve Deputy timesheets in bulk by your own rule__
| Tool | Parameters |
| ------------------ | -------------------------------------------------------- |
| list\_timesheets | location\_id, status, date\_from, date\_to, employee\_id |
| get\_timesheet | timesheet\_id |
| approve\_timesheet | timesheet\_id |
| discard\_timesheet | timesheet\_id |

[All 12 Deputy tools with descriptions](https://cotlet.dev/integrations/deputy-api-mcp-server.md#tools)

## Frequently asked questions

### Is it safe to connect Deputy to Cotlet?

Yes. You sign in to Deputy yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get Deputy once you enable it, every background request is listed, and the browser profile is stored encrypted with AES-256-GCM, the cipher 1Password uses for its vaults. The AI model never sees a login, posts and messages wait for your OK, and Disable for agents cuts access in one click. Independent scanners grade cotlet.dev A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory; live results are on https://cotlet.dev/security.

## More Deputy automations

- [Approve or decline Deputy leave requests by your own rule](https://cotlet.dev/integrations/deputy-api-mcp-server/approve-leave-requests.md)
- [Deputy API and MCP server: every tool](https://cotlet.dev/integrations/deputy-api-mcp-server.md)
- [All use cases](https://cotlet.dev/use-cases.md)

## Give your agent access to Deputy.

Free 7-day trial with 2,000 credits, no card needed. Cotlet is independent and not affiliated with Deputy.

[Sign up free](https://cotlet.dev/app/signup?app=deputy)

---

Give your AI agents your signed-in browser.

**Product:** [Integrations](https://cotlet.dev/integrations.md) · [Use cases](https://cotlet.dev/use-cases.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Pricing](https://cotlet.dev/pricing.md) · [Security](https://cotlet.dev/security.md)

**Resources:** [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [GitHub](https://github.com/cotletdev/cotlet)

**Solutions:** [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md)

**Company:** [About](https://cotlet.dev/about.md) · [AI info: company facts](https://cotlet.dev/ai-info.md) · [Contact](https://cotlet.dev/contact.md)

**Legal:** [Terms of service](https://cotlet.dev/terms) · [Privacy policy](https://cotlet.dev/privacy) · [Refund policy](https://cotlet.dev/refunds) · [Acceptable use](https://cotlet.dev/acceptable-use) · [Cookie policy](https://cotlet.dev/cookies) · [DPA](https://cotlet.dev/dpa) · [Subprocessors](https://cotlet.dev/subprocessors)

**Elsewhere:** [Status page](https://status.cotlet.dev) · [Cotlet on GitHub](https://github.com/cotletdev) · [Cotlet on X](https://x.com/cotletdev) · [Cotlet on LinkedIn](https://www.linkedin.com/company/cotletdev) · [Cotlet on Product Hunt](https://www.producthunt.com/products/cotlet) · [Cotlet on Crunchbase](https://www.crunchbase.com/organization/cotlet) · [Cotlet on SaaSHub](https://www.saashub.com/cotlet)

Cotlet is an independent service. It is not affiliated with, endorsed by or sponsored by any of the products listed on this site. Product names are trademarks of their respective owners.

## For AI agents: sign your user up

Is your user asking you to sign them up for Cotlet? You can do it for them, no account or key needed.

1. Read the fields and their allowed values: GET https://cotlet.dev/api/v1/access-requests
2. Ask the user for each value: email, apps, what you will do with them. If they leave the password to you, generate a strong one and show it to them.
3. Show the user what you will send, then POST it as JSON to https://cotlet.dev/api/v1/access-requests.

One call creates the account and sends the access request; we email the user when access is granted.
