> For the complete documentation index, see [llms.txt](https://docs.coupler.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.coupler.io/sources/category/time-tracking/harvest/data-overview.md).

# Data Overview

Harvest exposes a wide range of data through Coupler.io — from raw time logs and expense records to rolled-up reports and billing documents. Here's a breakdown of what's available and how to use it.

## Entity types

| Type                 | Entities                                                                                                                    |
| -------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| Reports (aggregated) | Time report, Expense report, Uninvoiced report, Project budget report                                                       |
| Time & expenses      | Time entries, Expenses, Expense categories                                                                                  |
| Billing              | Invoices, Invoices with line items, Invoice item categories, Estimates, Estimates with line items, Estimate item categories |
| Projects & tasks     | Projects, Project task assignments, Project user assignments, Tasks                                                         |
| People & org         | Users, Roles, Clients, Client contacts, Company                                                                             |

## Metrics and dimensions

#### Time entries

| Field              | Description                                |
| ------------------ | ------------------------------------------ |
| `hours`            | Hours logged for the entry                 |
| `billable`         | Whether the entry is billable (true/false) |
| `billable_rate`    | Hourly rate applied if billable            |
| `cost_rate`        | Internal cost rate for the user            |
| `spent_date`       | Date the time was logged                   |
| `user.name`        | Team member who logged the time            |
| `project.name`     | Project the time was logged against        |
| `task.name`        | Task associated with the entry             |
| `client.name`      | Client linked to the project               |
| `is_running`       | Whether the timer is currently active      |
| `timer_started_at` | Timestamp when the timer started           |
| `updated_at`       | When the record was last modified          |
| `notes`            | Free-text notes on the entry               |

#### Report: Time report

| Field                  | Description                                        |
| ---------------------- | -------------------------------------------------- |
| `total_hours`          | Total hours logged in the report period            |
| `billable_hours`       | Hours marked as billable                           |
| `currency`             | Currency used for billing                          |
| `billable_amount`      | Revenue value of billable hours                    |
| `spend_date` (From/To) | Date range for the report                          |
| Report type            | Breakdown by client, project, task, or team member |

#### Report: Project budget report

| Field              | Description                             |
| ------------------ | --------------------------------------- |
| `budget`           | Total budget allocated to the project   |
| `budget_spent`     | Budget consumed to date                 |
| `budget_remaining` | Budget still available                  |
| `is_over_budget`   | Whether the project has exceeded budget |

#### Report: Uninvoiced report

| Field                 | Description                     |
| --------------------- | ------------------------------- |
| `uninvoiced_hours`    | Billable hours not yet invoiced |
| `uninvoiced_expenses` | Expenses not yet invoiced       |
| `uninvoiced_amount`   | Total uninvoiced revenue        |

#### Invoices

| Field         | Description                              |
| ------------- | ---------------------------------------- |
| `amount`      | Total invoice amount                     |
| `due_amount`  | Amount still outstanding                 |
| `state`       | Invoice status (draft, open, paid, etc.) |
| `issue_date`  | Date the invoice was issued              |
| `due_date`    | Payment due date                         |
| `client.name` | Client the invoice was sent to           |
| `subject`     | Invoice subject line                     |

#### Users

| Field                     | Description                                               |
| ------------------------- | --------------------------------------------------------- |
| `first_name`, `last_name` | Team member name                                          |
| `email`                   | Email address                                             |
| `is_active`               | Active status                                             |
| `weekly_capacity`         | Weekly capacity **in seconds** (divide by 3600 for hours) |
| `roles`                   | Assigned roles                                            |
| `cost_rate`               | Default cost rate                                         |
| `default_hourly_rate`     | Default billing rate                                      |

## Common metric combinations

* **Utilization by team member** — Join Time entries + Users, group by `user.name`, compare `hours` to `weekly_capacity`
* **Client profitability** — Join Time entries + Invoices on `client.id`, compare `billable_amount` to `cost_rate × hours`
* **Budget burn rate** — Use the Project budget report and track `budget_spent` vs. `budget` week over week with Append
* **Unbilled work pipeline** — Use the Uninvoiced report filtered by date range to see revenue ready to invoice

## Use cases by role

{% tabs %}
{% tab title="Operations & project managers" %}

* Pull the **Project budget report** into Google Sheets or Looker Studio to monitor budget burn across all active projects in real time
* Use **Project user assignments** and **Time entries** with a Join transformation to see which team members are working on which projects and at what cost
* Track overdue deliverables by combining the **Uninvoiced report** with **Invoices** data
  {% endtab %}

{% tab title="Finance teams" %}

* Export **Invoices with line items** to BigQuery for revenue recognition and cash flow tracking
* Use the **Uninvoiced report** to forecast incoming revenue before month-end close
* Combine **Expenses** with **Expense categories** to analyze spend by category across projects
* Send invoice aging summaries to ChatGPT or Gemini for narrative reporting
  {% endtab %}

{% tab title="Team leads & HR" %}

* Export **Users** and **Time entries** to calculate actual utilization vs. capacity per team member
* Use **Roles** and **Project user assignments** together (Join) to see resource allocation by role
* Pull payroll-relevant data from **Users** and **Time entries** for headcount reporting — several teams use this for payroll inputs
  {% endtab %}
  {% endtabs %}

## Platform-specific notes

* The `weekly_capacity` field in the **Users** entity is returned in **seconds**, not hours. Divide by 3600 to convert to hours.
* The **"Changed after"** filter applies to the `updated_at` field — it is not the same as filtering by `spent_date`. If you want to pull entries for a specific time period, use the **Time report** entity with **From** and **To** date fields instead.
* The **Report: Time report** requires you to select a report type (by client, project, task, or team member) — this determines how rows are grouped.
* When filtering **Time entries**, **Invoices**, or **Expenses** by **Project ID**, you can only filter by one project at a time. Find the project ID in the Harvest URL when viewing a project.
* Advanced filters use lowercase field values — for example, use `true` not `TRUE` when filtering boolean fields like `is_active`.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.coupler.io/sources/category/time-tracking/harvest/data-overview.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
