| name | harvest |
| description | Harvest time tracking and invoicing API integration with managed OAuth. Track time entries, manage projects and clients, create invoices and estimates, record expenses, and manage team members. Use this skill when users want to log time, generate invoices, manage project budgets, track expenses, or review team timesheets. |
Harvest

Manage time tracking, projects, and invoicing from chat -- log time entries, create invoices and estimates, manage clients and projects, record expenses, and administer team members. Powered by ClawLink for hosted OAuth.
Setup in 3 Steps
| Step 1: Install | Step 2: Pair Account | Step 3: Connect Harvest |
|---|
 |  | App-specific connection GIF coming soon |
| Run the install command in OpenClaw | Sign in and approve the device | Open the dashboard and connect Harvest |
How It Works
┌─────────────────┐ ┌──────────────┐ ┌──────────────────┐
│ OpenClaw │────▶│ ClawLink │────▶│ Harvest API │
│ (User Chat) │ │ (OAuth) │ │ │
└─────────────────┘ └──────────────┘ └──────────────────┘
Install
openclaw plugins install clawhub:clawlink-plugin
openclaw config set tools.alsoAllow '["clawlink-plugin"]' --strict-json
openclaw gateway restart
Quick Start
clawlink_call_tool({ tool: "harvest_list_time_entries", parameters: {} })
clawlink_call_tool({ tool: "harvest_create_time_entry", parameters: { project_id: "123", task_id: "456", hours: 2.5 } })
clawlink_call_tool({ tool: "harvest_list_projects", parameters: {} })
Authentication
ClawLink handles OAuth with Harvest. No API keys needed. Connect at claw-link.dev/dashboard?add=harvest.
Connection Management
clawlink_list_integrations()
clawlink_call_tool({ tool: "harvest_get_company_info", parameters: {} })
Security & Permissions
- Read tools are safe and require no confirmation
- Write tools require confirmation before execution
- Delete operations are high-impact and irreversible
- Admin or Manager permissions required for many write operations
Tool Reference
Time Tracking Operations
| Tool | Description | Mode |
|---|
harvest_list_time_entries | List time entries with date and project filtering | Read |
harvest_get_time_entry | Get a specific time entry by ID | Read |
harvest_create_time_entry | Log a new time entry (hours or start/end times) | Write |
harvest_update_time_entry | Update an existing time entry | Write |
harvest_delete_time_entry | Delete a time entry | Write |
Project Operations
| Tool | Description | Mode |
|---|
harvest_list_projects | List projects with pagination | Read |
harvest_get_project | Get project details by ID | Read |
harvest_create_project | Create a new project (T&M, Fixed Fee, or Internal) | Write |
harvest_update_project | Update project fields | Write |
harvest_delete_project | Delete a project and its time/expenses | Write |
Client Operations
| Tool | Description | Mode |
|---|
harvest_list_clients | List clients with pagination | Read |
harvest_get_client | Get client details by ID | Read |
harvest_create_client | Create a new client | Write |
harvest_update_client | Update client properties | Write |
harvest_delete_client | Delete a client with no dependent resources | Write |
harvest_list_client_contacts | List contacts with filtering | Read |
harvest_create_client_contact | Add a contact to an existing client | Write |
harvest_update_client_contact | Update contact details | Write |
harvest_delete_client_contact | Delete a client contact | Write |
Invoice Operations
| Tool | Description | Mode |
|---|
harvest_list_invoices | List invoices by client, project, date, or state | Read |
harvest_get_invoice | Get full invoice details by ID | Read |
harvest_create_invoice | Create a new invoice | Write |
harvest_update_invoice | Update an existing invoice | Write |
harvest_delete_invoice | Delete an invoice permanently | Write |
harvest_create_invoice_payment | Record a payment against an invoice | Write |
harvest_delete_invoice_payment | Delete an invoice payment | Write |
harvest_list_invoice_payments | List payments for an invoice | Read |
harvest_create_invoice_message | Send, close, or reopen an invoice | Write |
harvest_list_invoice_messages | List messages for an invoice | Read |
harvest_delete_invoice_message | Delete an invoice message | Write |
harvest_list_invoice_item_categories | List invoice item categories | Read |
harvest_create_invoice_item_category | Create an invoice item category | Write |
harvest_delete_invoice_item_category | Delete an invoice item category | Write |
Estimate Operations
| Tool | Description | Mode |
|---|
harvest_create_estimate | Create a new estimate | Write |
harvest_get_estimate | Get estimate details by ID | Read |
harvest_update_estimate | Update estimate fields | Write |
harvest_delete_estimate | Delete an estimate | Write |
harvest_create_estimate_message | Send, accept, decline, or re-open estimate | Write |
harvest_list_estimate_messages | List messages for an estimate | Read |
harvest_delete_estimate_message | Delete an estimate message | Write |
harvest_create_estimate_item_category | Create estimate item category | Write |
harvest_update_estimate_item_category | Update estimate item category name | Write |
Expense Operations
| Tool | Description | Mode |
|---|
harvest_create_expense | Record a new expense against a project | Write |
harvest_update_expense | Update an existing expense | Write |
harvest_list_expense_categories | List expense categories | Read |
Task Operations
| Tool | Description | Mode |
|---|
harvest_list_tasks | List all tasks (reusable activity types) | Read |
harvest_get_task | Get task details by ID | Read |
harvest_create_task | Create a new task (e.g., Development, Design) | Write |
harvest_update_task | Update task attributes | Write |
harvest_delete_task | Delete a task with no time entries | Write |
User & Company Operations
| Tool | Description | Mode |
|---|
harvest_list_users | List all users | Read |
harvest_get_user | Get user details by ID | Read |
harvest_create_user | Create user and send invitation | Write |
harvest_update_user | Update user profile and settings | Write |
harvest_delete_user | Delete a user with no time entries | Write |
harvest_get_company_info | Get company settings and feature flags | Read |
harvest_update_company_info | Update time tracking and weekly capacity settings | Write |
Code Examples
Example 1: Time tracking workflow
await clawlink_call_tool({
tool: "harvest_create_time_entry",
parameters: {
project_id: "123456",
task_id: "789012",
date: "2026-06-08",
hours: 3.5,
notes: "API integration work"
}
});
const entries = await clawlink_call_tool({
tool: "harvest_list_time_entries",
parameters: { from: "2026-06-08", to: "2026-06-08" }
});
Example 2: Create and send an invoice
const invoice = await clawlink_call_tool({
tool: "harvest_create_invoice",
parameters: {
client_id: "5735776",
line_items: [{
project_id: "123456",
kind: "hours",
quantity: 10,
unit_price: 150
}]
}
});
await clawlink_call_tool({
tool: "harvest_create_invoice_message",
parameters: {
invoice_id: invoice.id,
event_type: "send"
}
});
Example 3: Project and expense management
const project = await clawlink_call_tool({
tool: "harvest_create_project",
parameters: {
client_id: "5735776",
name: "Website Redesign",
is_billable: true,
bill_by: "Project",
budget_by: "project",
budget: 100
}
});
await clawlink_call_tool({
tool: "harvest_create_expense",
parameters: {
project_id: project.id,
expense_category_id: "456",
date: "2026-06-08",
total_cost: 250.00,
notes: "Software license"
}
});
Discovery Workflow
- Call
clawlink_list_integrations to confirm harvest is connected.
- Call
clawlink_list_tools --integration harvest to see the live catalog.
- Use
clawlink_search_tools({ query: "invoice", integration: "harvest" }) to find specific tools.
Execution Workflow
READ (safe): list_time_entries → list_projects → list_invoices → get_company_info
WRITE (confirm): create_time_entry → create_invoice → create_project → update_client
DELETE (high): delete_project → delete_invoice → delete_time_entry → delete_user
Notes
- Projects require a valid
client_id -- use list_clients first
- Invoice item categories cannot be deleted if actively used for billing
- Large project lists may return remote files instead of inline JSON
- Company settings (timezone, currency) cannot be changed via API
Error Handling
| Status / Error | Meaning |
|---|
| 401 Unauthorized | OAuth token expired -- reconnect at dashboard |
| 403 Forbidden | Requires Admin or Manager permissions |
| 404 Not Found | Project, client, or invoice ID does not exist |
| 422 Unprocessable | Missing required fields or invalid data |
| 429 Rate Limited | Too many requests -- apply exponential backoff |
Troubleshooting
Tools Not Visible
- Start a fresh OpenClaw chat to reload plugin catalog
- Call
clawlink_list_integrations to confirm pairing
Cannot Create Project
- Ensure
client_id exists by calling list_clients
- Verify billing configuration fields (
bill_by, budget_by)
Resources
Powered by ClawLink -- an integration hub for OpenClaw
