Skip to main content
The R&D Capitalization report classifies your merged PRs as R&D or non-R&D under the tax jurisdiction you choose, and turns those classifications into an estimated R&D wage schedule your finance team can hand to a tax preparer.

What is R&D capitalization?

Capitalization means recording a cost as an asset on the balance sheet and deducting (amortizing) it over several years, instead of expensing the full amount in the year it was incurred. For software companies, the question of whether engineering work must be capitalized or can be expensed shows up in two separate rulebooks — tax law and accounting standards (GAAP) — and the answer in both cases depends on what kind of work your engineers actually did.

Why classification is the hard part

Whether for the R&D credit, Section 174 tracking, or GAAP capitalization, the common bottleneck is evidence: auditors consistently reject flat “magic percentages” (for example, capitalizing 70% of all engineering payroll with no support). Defensible approaches tie the determination to the actual work items — tickets, PRs, and commits — classified by what the work really was. That artifact-level audit trail is what this report produces automatically.

How Weave classifies your work

Weave uses an AI agent to classify every merged PR as R&D or Non-R&D against the qualifying criteria of your configured tax jurisdiction: Each classification records a confidence score and a written reasoning, giving you a PR-level audit trail. Work involving technological uncertainty and experimentation tends to qualify; routine bug fixes, UI polish, documentation, and standard CRUD work tends not to. When in doubt, the classifier is deliberately conservative. You can sharpen results for your organization by adding custom qualifying and non-qualifying criteria in settings.

What the report shows

The report lives at Reports → R&D Capitalization and supports month, quarter (default), and year granularities. Data is shown for completed periods only.

PR classification tab

  • Executive summary — your Organization R&D percentage (weighted by code output) and Estimated R&D wages for the period, plus a per-employee table: Total PRs, R&D PRs, R&D %, Period salary, and Est. R&D wages. Authors who aren’t paid in the jurisdiction’s currency are listed separately under Excluded from R&D analysis with the reason.
  • PR classifications — the audit trail: every PR with its R&D / Non-R&D badge, confidence, code output, and the classifier’s reasoning.
Both views export to CSV (Export R&D wage summary CSV and Export PR classifications CSV).

Project breakdown tabs

If you configure project breakdown fields, each one gets its own tab showing code output and PR count by category — as an overview pie chart and table, and for Jira custom fields, over-time and by-team charts. PRs without a category appear as Uncategorized, and you can drill down from any chart to the underlying PRs. The open tab is saved in the page URL, so you can share a link that opens a specific breakdown directly.

How Jira custom field categories are assigned

A Jira custom field breakdown (for example, a work type field) assigns each PR a category in three steps:
  1. PR to issue. Weave links the PR to Jira issues by issue key, as described in linking tasks to PRs. PRs that aren’t linked to a Jira issue aren’t included in the breakdown.
  2. Issue to epic. Weave finds the issue’s epic. A sub-task without its own epic uses its parent issue’s epic.
  3. Category lookup. Weave reads your configured custom field in this order and uses the first value it finds:
    • The epic’s value
    • The value on the epic’s parent, then on that parent’s parent (for example, an initiative)
    • Your fallback rules, if configured (labels first, then issue types)
    • The issue’s own value
A PR linked to several issues counts toward each category its issues resolve to. It appears as Uncategorized only when none of its linked issues resolves to a category. The epic’s value takes precedence over the issue’s own value, so every issue under an epic inherits the epic’s category. To recategorize that work, change the field on the epic rather than on individual issues. If you clear the field on an epic, its issues stop using the old value after the next sync.
Weave syncs Jira data roughly every 3 hours, and each sync only picks up issues and epics that changed in Jira since the last sync. Renaming an option in the Jira field’s configuration doesn’t mark issues as changed, so Weave checks for renamed options separately about once a day. After a rename, the old option name can show for up to a day.

How estimated R&D wages are calculated

For each included author in a period:
  • R&D % = the author’s code output on R&D-classified PRs ÷ their total code output. Weights by output rather than PR count, so large qualifying projects count for more than one-line fixes.
  • Period salary comes from your HR data when available; otherwise it falls back to your organization’s hourly rate.
  • Est. R&D wages = period salary × R&D %.
The organization-level percentage and wage total aggregate across included authors.

Setting it up

1

Enable the add-on

R&D capitalization is a paid add-on. If you don’t have it yet, you can subscribe directly from the report page — it shows pricing and a checkout flow, whether or not you already have a base Weave subscription.
2

Choose your tax jurisdiction

Go to Organization settings → R&D capitalization and pick your jurisdiction under Classification settings. Optionally add custom qualifying or non-qualifying criteria.
3

Connect salary data

Connect HR data for per-person salaries, or set an organization hourly rate as a fallback.
4

Add project breakdowns (optional)

Under Project breakdown fields, add a Project name breakdown or a Jira custom field breakdown, with optional fallback rules based on labels or issue types.

Who can see it?

Anyone with the Manager or Admin role can view the report. Only organization admins can change the R&D configuration or export CSVs.
Last modified on October 15, 2026