Skip to content

T3 Reports


T3 Reports

T3 Reports is the report builder in the T3 Chrome Extension. It exports Metrc data as CSV, JSON, Excel, or Google Sheets — either as a one-time snapshot or as a live view that a spreadsheet re-fetches on its own.

The builder assembles a T3 API report URL, shows you a preview of the data it returns, and then hands you that URL. The URL is the product. You can open it, download it, email it, turn it into a Google Sheet, or paste it into a spreadsheet's =IMPORTDATA() formula so the sheet keeps itself up to date. See Spreadsheet Sync.

Every setting in the builder corresponds to one query parameter on that URL. Nothing the builder does is unavailable to a script, and nothing a script can do to a report URL will confuse the builder — you can paste a URL you wrote by hand straight back into it.

Opening T3 Reports

Open the T3 floating button menu in the bottom right of Metrc and choose T3 Reports.

The header links to a video walkthrough, to the T3 API Reports reference, and to Exports (Legacy) — the older export tool documented under Exports (Legacy).

T3 Free and T3+

T3 Reports is a T3+ feature. T3 Free users can open the builder and see how it works, but access to the reports themselves is limited. Full access comes with a T3+ subscription.


Authentication

A report URL carries its own credential. This is not a shortcut — a browser following a link, and a spreadsheet calling IMPORTDATA, have no way to send an Authorization header, so the credential has to live in the URL.

Secret key or temporary key

The Authentication card offers two modes:

Mode What it is When to use it
Secret key A long-lived key generated once from your Metrc credentials and saved to your account Anything you intend to keep — a saved report, a spreadsheet formula, a scheduled pull
Temporary key The extension's current short-lived session token Trying something out. No setup, but the URL stops working when the token expires

The builder shows which key is active by its last four characters and validates it in the background, so you find out that a key is wrong while you are building rather than when the report fails.

Choosing the temporary key adds a standing warning under the generated URL. A temporary link is fine for a one-off download and useless in a spreadsheet.

A report URL contains your credential

Anyone holding the URL can read the Metrc data it returns. The builder masks the key in the URL breakdown by default and lets you reveal it deliberately. Do not paste a report URL into a shared document, a ticket, or a screenshot.

Generating a secret key

If you have no key yet, the builder offers to generate one. Your hostname and username are filled in from your current Metrc session and cannot be edited — a key belongs to the account you are signed in as.

Two states need one extra field:

State Extra field Notes
Colorado Metrc login email The email tied to your Metrc login
Michigan Multi-factor authentication key The key, not a 6-digit code

Michigan: the key is not the code

Metrc's MFA setup shows both a QR code and a manual-entry key. T3 needs the key — the long string you would type into an authenticator app — because it generates the 6-digit codes itself. If you paste something that starts with six digits, the form tells you so.

Getting the key means resetting MFA in Metrc, and a reset key has to be activated by logging into Metrc with it once before T3 can use it. The generate form walks through those steps.

Keys can also be generated and managed outside the builder — see Authentication and the secret key page.


Choosing What to Build

Report categories

Reports are grouped into four categories:

Category What it produces Trade-off
Manifest Reports Transfer manifests with their packages and transporters The widest rows. See transfer manifest reports
Collection Reports Plain lists of Metrc records — packages, items, plants, harvests The largest maximum size
Supercollection Reports Records with related data attached — packages with lab results, harvests with source plants, items with ingredients More detail, smaller maximum size. See Super Reports
Scan Sheets Manifest packages laid out for barcode scanning Google Sheets and Excel only. See Scan Sheets

A category with no endpoints available to you is shown as Coming soon rather than hidden, so the set of categories does not change shape between accounts.

The builder remembers the last category you used and the last report you chose within each category, so returning to a category puts you back where you left it.

Starting from an existing report URL

Paste a T3 report URL into the Edit an existing report URL box and the builder reopens with every setting filled in from it — report path, licenses, format, includes, row layout, columns, header overrides, filters, sort, row limit, delivery, and email.

An entire spreadsheet formula works too. This is valid input:

=IMPORTDATA("https://api.trackandtrace.tools/v2/packages/active/report?licenseNumber=LIC-00001&contentType=csv&prependCsvMetadata=false")

If anything in the URL could not be applied exactly — a column that no longer exists, a format that does not support an option you asked for — the builder loads what it can and tells you what it changed.

This is the fastest way to modify a report that is already running in a spreadsheet: paste the formula, change what you need, and copy the new formula back.

Starting from a saved report

Your saved reports are listed with their names and descriptions and can be searched. Clicking one loads it into the builder, exactly as if you had pasted its URL.

Rows can be renamed or deleted in place. See Saving a Report.


Configuring the Report

The builder is two columns: configuration on the left, output on the right. The output column updates as you type, so the URL and the preview always describe the form as it currently stands.

Cards appear in the left column in the order below. Several are conditional — a control a format cannot express is hidden rather than shown and ignored. JSON returns the whole record, so it has no columns to pick and no rows to collapse, and neither card appears.

Report type and licenses

Pick the endpoint from the Report Type dropdown. Super variants are named as such, and a View schema link opens the record's field list.

Licenses is a searchable multi-select with None, Current and All shortcuts. A report may span at most 20 licenses, and the counter turns red when you go over.

Rows come back grouped in the order the licenses were selected, and the caps are totals rather than per-license allowances. See Reporting Across Multiple Licenses.

Format

Four formats, each mapping to contentType:

Format Best for Includes Column picker Row layout Metadata preamble
CSV Spreadsheets and =IMPORTDATA One Yes Yes Yes
JSON Scripts and integrations Unlimited No No No
XLSX Opening in Excel directly One Yes Yes Yes
Google Sheets A sheet you intend to share or edit One Yes Yes Yes

Includes

Super reports only. Each include attaches related Metrc data — lab results, history, source harvests — to every record.

  • JSON accepts as many includes as the request budget allows, so the card is a set of checkboxes.
  • CSV, XLSX and Google Sheets accept exactly one, so the card becomes a radio group. This is a property of a flat grid, not a restriction T3 chose; see One include in tabular formats, many in JSON.

Selecting an include also adds the report's default metadata columns, which are the summarized form of the included data.

Includes cost one Metrc request per record, which is why super reports have a much lower row cap. See Limits.

Row layout

Super reports in a tabular format only. This card answers the question "what is one row of this report?", and it is the setting people most often get wrong.

Option One row is Use it when
Expanded (the default) One included record — one lab result, one history entry You want the included records themselves
Collapsed One top-level record — one package You wanted the packages, with their results summarized

The difference matters more than it sounds. Ask for lab results on 500 packages in expanded mode and you get one row per analyte per test, with the package columns repeated down each block — easily tens of thousands of rows. Collapsed mode gives you 500 rows.

Collapsed mode also keeps records whose include came back empty. In expanded mode a package with no lab results is simply absent from the output, with nothing to indicate it was skipped.

The card appears whenever the endpoint offers includes and stays disabled until you select one, so it does not appear and vanish as you experiment.

Switching to collapsed drops any column that came from the include, and the builder names the ones it removed. There is no single lab result on a collapsed row, so labResults.testTypeName has nothing to point at — use the metadata. columns instead, which are already summarized one per record. See One row per record, or one row per included record.

Delivery

Two options, and the right choice is mostly about size:

Delivery What happens
Inline The report is generated while you wait. Subject to the 240-second request limit
Email A background worker generates the report and emails it to you. No time limit

For Google Sheets the same two options read as Open now (creates the sheet and opens it in a new tab) and Email link (a worker builds the sheet and emails you the link).

The Email field appears when it applies, and what it means depends on the delivery:

  • With email delivery it is required — it is where the report goes, and where any error is reported.
  • With Google Sheets opened inline it is optional. Filling it in shares the new sheet with that Google account; leaving it blank creates an unshared sheet.

Email delivery is the only way to retrieve a report that takes longer than 240 seconds. See Emailing a Report.

Report columns

Tabular formats only. Leave it on Default fields to get the report's standard columns, or switch to Custom fields to choose your own.

The custom picker has three parts, all bound to the same selection:

  • Available fields — a filterable checkbox list of every column on the record, plus any extra columns found in your data.
  • Selected — your chosen columns as a draggable list. The order here is the column order in the output.
  • Fieldnames — a comma-separated text box mirroring the other two. Type into it and the checkboxes follow; click a checkbox and the text updates. Paste a column list from a colleague here.

Bulk buttons reset the selection to the report's defaults, to everything, or to nothing.

Two things the picker will tell you about:

  • Past roughly 16 columns you get a soft warning. Nothing breaks, but wide reports get unwieldy fast.
  • Columns blocked by collapsed row layout are shown but not selectable, so you can see why a column you expected is unavailable.

Column names map directly to columns.

Column headers

Tabular formats only. By default each column gets a title-cased header derived from its name. Switch to Custom names to override any of them; a blank override keeps the default.

This renames the header row only — the columns and their data are unchanged. It is for matching an existing spreadsheet's headers so a downstream formula keeps working.

Headers cannot contain a comma

The override list is comma-delimited with no escape syntax, so a comma inside a header would split it into two. The builder rejects it rather than producing a misaligned file.

See Renaming the Column Headers.

Sort

Off by default. Turn it on to choose a field and a direction. The field list is limited to the columns the endpoint can actually sort on.

Sorting applies within each license, not across them — see Reporting Across Multiple Licenses.

Filter

Off by default. Each filter row is a field, an operator, and a value. Add as many as you need; once there are two or more, an AND / OR toggle decides how they combine.

The operators, and the values they produce in the URL:

Operator URL value
equals eq
not equals neq
contains contains
does not contain doesnotcontain
starts with startswith
ends with endswith
less than lt
less than or equal lte
greater than gt
greater than or equal gte

A filter row becomes one filter parameter, spelled field__operator:value:

https://api.trackandtrace.tools/v2/packages/active/report?licenseNumber=LIC-00001&filter=locationName__eq:Bulk Storage&filterLogic=and&contentType=csv

Filtering is usually the best way to bring an oversized report back under its limits, and it gives you a more useful report besides. See Report Request Too Large.

Options

Option What it does
Row limit Caps how many records the report returns. Excellent for testing a wide report before running it for real
Prepend report metadata On by default. Adds a header block describing the report to CSV, XLSX and Google Sheets output. Turn it off when the output feeds a formula that expects column headers on row 1 — see The Metadata Preamble
Open in browser instead of downloading Renders the report in the tab instead of saving a file. For troubleshooting only — a large report can hang the tab it renders into. See Downloading vs. Rendering

The Output Pane

The report URL

The URL is always visible, and it is shown broken apart rather than as one long string: the origin, the path, and then one row per query parameter with a short description of what that parameter does.

Parameters that are invalid or missing are highlighted, so an incomplete report tells you which piece it is waiting for rather than silently producing a URL that does not work. The secretKey parameter is masked until you choose to reveal it.

A finished report URL looks like this:

https://api.trackandtrace.tools/v2/packages/active/super/report?secretKey=YOUR_SECRET_KEY&licenseNumber=LIC-00001&include=labResults&rowMode=collapsed&columns=label,item.name,metadata.indexedLabResults.Total_THC.value&contentType=csv&prependCsvMetadata=false

Every part of it came from a control in the left column.

Actions

Action What it does
Generate Report Runs the report now and downloads it. Reads Create & open sheet for Google Sheets, and is replaced by a send panel when delivery is set to email
Save report Saves the current settings under a name. See Saving a Report
Copy report URL Copies the full URL, secret key included
Copy report URL w/ IMPORTDATA Copies the URL already wrapped in =IMPORTDATA("…"), ready to paste into a Google Sheets cell

Data preview

The preview fetches up to 5 rows and is available for every format, so you can check the shape of a report before running it in full.

Two details worth knowing:

  • XLSX and Google Sheets are previewed as CSV. All three contain the same rows, and a preview should never create a real Google Sheet.
  • The preview tells you when it is stale. Change any setting after fetching and it marks itself out of date rather than showing you results from a configuration you have since edited.

Extra Columns Found in Your Data

Some real columns cannot be known ahead of time. metadata.indexedLabResults is keyed by the names of the analytes on your packages' lab results, so its columns depend on your data, your lab, and your state.

To find them, the column picker samples 20 rows of your own data and flattens the result. Columns discovered this way are marked, and the picker tells you how many it found.

Three things follow:

  • Discovery only ever adds. The standard column list is available immediately and nothing is removed while sampling runs. If sampling fails, you get the standard list and a retry link.
  • Results are cached for the session only, per report and license and include combination. Analyte names are specific to a license and a point in time, so they are never persisted.
  • Discovered columns are real columns. They work in a saved report and in a spreadsheet formula exactly like any other.

This is what makes a report like "every active package with its Total THC" buildable from the picker instead of by hand.


Saving a Report

A saved report stores settings, not a credential. The secret key is stripped before the URL is stored, and the stored URL has no origin on it.

That has a useful consequence: a saved report keeps working when you rotate or revoke a secret key, because the key was never part of it. Saved reports belong to your Metrc account, so anyone signing in as the same username sees the same list.

To save one, use Save report and give it a name and an optional description. The panel opens inline beneath the URL so you can still see what you are saving.

Once a saved report is loaded, the button becomes Update, with Save as new and Rename alongside it. Rename changes only the name and description.

Update cannot overwrite the wrong report

The link between the builder and a loaded saved report is deliberately forgotten when you close Metrc. Reopening the builder gives you a fresh form and a Save report button, so Update can never write a default form over a real saved report.

Limit Value
Saved reports per account 100
Name 200 characters
Description 2,000 characters

The same saved reports are available from the API. See Saving a report.


Scan Sheets

Scan Sheets is its own builder rather than a report type, so choosing that category replaces the form. A scan sheet is a formatted spreadsheet you scan package tags into, so the text formats do not apply — the only outputs are Google Sheets (recommended) and Excel.

Configure it on the left: transfer type (incoming, outgoing, rejected, or hub), license, authentication, format, and delivery.

The right column lists the active transfers for that license, each showing its manifest number, shipper and recipient, package count, and date. Check the ones you want; Check all and Uncheck all are there for a full day's manifests.

Above the Generate button is a running row budget. A scan sheet is capped at 10,000 packages, counted across every selected manifest — the cap counts packages, not transfers, and the builder blocks the request rather than letting it fail after the wait.

For what to do with the finished sheet — the color codes, the scanner, and how to read a completed sheet — see Scan Sheets.


What Carries Over Between Sessions

The builder remembers the settings that describe how you work and forgets the ones that describe a particular report, so reopening it never leaves you with a half-configured form you did not build.

Remembered Forgotten
Your active secret key, or that you chose the temporary key Selected licenses
The last category you used Column selection, filters, sort
The last report you chose in each category Row layout
Format, delivery, row limit, metadata preamble Which saved report was loaded
Preview data and discovered columns

The temporary key is remembered as a preference. The token itself is never stored.


Limits

Limit Value
Licenses per report 20
Rows in a report 50,000
Rows in a super report 5,000
Includes in a tabular format 1
Preview rows 5
Recommended column count 16 (a warning, not a limit)
Column discovery sample 20 rows
Packages in a scan sheet 10,000
Saved reports per account 100
Inline report time limit 240 seconds

Row caps, the Metrc request budget, and what to do when you exceed one are covered in Limits and Troubleshooting.


Next Steps