Excel reports
A spreadsheet for the people who will never open a chart. Pick the tags and the period, and get an .xlsx with a row per hour or per day — each tag's minimum, maximum, average and number of readings — and a summary sheet that says what it covers.
In your time zone, with summer time handled: the day the clocks go forward has 23 hours and the day they go back has 25, and the report says so. On Pro and Business.
Last updated
Which plans
| Plan | Excel reports |
|---|---|
| Free | Not included |
| Pro | Included |
| Business | Included |
Making one
In the Explorer, open the chart and choose Excel report. It starts with the tags on the chart; change them, pick a period — yesterday, the last 7 days, last month, this month or any dates — and whether you want a row per hour or per day, then download. The time zone is Europe/Stockholm unless you pick another, and the Explorer remembers the one you picked.
What is in the file
- Summary, the sheet that opens: the period, the time zone and its UTC offsets, any clock change inside the period and how long that day was, when the report was made, and for every tag its unit and description and its minimum, maximum, average and readings over the whole period. Notes at the bottom say what the numbers mean.
- Hourly or Daily: a row per hour or per day. The first column is the start in local time; the second is the hour's UTC offset, or the day's length in hours. Then four columns per tag — Minimum, Maximum, Average, Readings — under the tag's name and unit. The headers and the first two columns stay in view while you scroll.
Dates are real dates and numbers are real numbers, so the sheet sorts, filters and charts in Excel like any other. Nothing in the file is a formula: tag names and descriptions are written as text, whatever they contain.
What the numbers mean
- Average is time-weighted. Each stored hour counts for the time its value covered, which is what makes a daily average the average of the day.
- Minimum and maximum are the lowest and highest values in force during the hour or day. A spike of a second shows up even years later, when the individual readings are long gone.
- Readings is how many readings were stored. A row with values and 0 readings had no new reading: the last value held. A value is taken to hold for up to 24 hours; after that the cells are empty.
- An outage is left empty, not held. When a device stops answering, the collector stores one marker with a bad quality, carrying the last value it read. The hours after it are empty until the device answers again, and stay out of the daily rows and the summary, so a day's average is made only from what was measured. The marker counts as one reading of its hour. The same goes for any value its source marked bad or uncertain.
- An empty cell means nothing was stored for that tag in that hour or day, or the value before it was marked bad or uncertain. The row is still there, so every period has its row.
Time zones and summer time
The period is local time, and its end is not included: from 1 October to 1 November is October. A daily row runs from midnight to midnight in the report's time zone, so in Europe/Stockholm the last Sunday in March has 23 hours and the last Sunday in October has 25 — the Hours column shows it, and the summary names the change.
In an hourly report the night the clocks go back has 02:00 twice: two rows, each its own hour, told apart by the UTC offset beside them. The night they go forward has no 02:00 row, because no clock showed it.
How big a report can be
A report reads at most 1,000,000 tag-hours: the number of tags times the hours in the period. That is all 500 tags of a Business account for a month (372,000), or 114 tags for a year. Daily rows are made from the same hours, so they count the same. A request over the limit, or one with more rows or columns than an Excel sheet holds, is refused with the numbers before anything is read.
An account can make 30 reports an hour, one at a time: ask for the next when the last has downloaded. The report is made while you wait, at a pace that leaves incoming data its share of the service: seconds for most, up to a minute or two for the largest. An hour is summarised about ten minutes after it ends, so the hour in progress - and for those minutes the hour before it - is not in a report yet. Trends on Auto shows those newest hours from the readings in the meantime; a report holds only summarised hours, so a report saved today says the same tomorrow.
From a script
A Read key is enough. from and to are local dates (or dates and times, for hourly rows) in timeZone, with no offset; interval is hour or day (the default); timeZone is an IANA name and defaults to Europe/Stockholm.
curl -X POST https://api.taghistorian.com/api/reports/excel \
-H "X-Api-Key: <your-api-key>" \
-H "Content-Type: application/json" \
-d '{
"tags": ["Boiler.Temp", "Boiler.Pressure"],
"from": "2026-10-01",
"to": "2026-11-01",
"interval": "day",
"timeZone": "Europe/Stockholm"
}' \
-o boiler-october.xlsx| Answer | Means |
|---|---|
200 | The file. |
400 | Something to change, and the error says what: a date, the time zone, a tag that is not in the account (named in unknownTags), or a report over the limits. |
402 | The account's plan does not include Excel reports; includedIn says which do. |
429 | 30 reports this hour already, the account's previous report is still being made or downloaded, or the service is busy — other accounts' reports, or incoming data, came first. Retry-After says when to try again. |
503 | The report could not be made just now. Retry-After says when to try again. |
GET /api/reports/excel answers whether the account's plan includes reports, which plans do, and the limits. For every reading rather than a summary, see getting your data out.
Common questions
- Which plans include Excel reports?
- Pro and Business. On Free the Explorer shows the report and says which plans have it; the API answers 402 with the same.
- Why is the daily average not the plain average of the hours?
- Because it is weighted by time. Each stored hour counts for the time its value covered, so a value that held for a whole hour weighs as much as one that changed a thousand times, and an hour the sensor covered for half of counts for half. It is the same arithmetic as the stored daily summaries, and an hourly row's average is the chart's hourly average for that hour. The chart's daily averages are UTC days, though, while a report's days run midnight to midnight in your time zone, so a daily row and the chart agree on a day only in a report in UTC.
- Can I get a report every month without asking for it?
- Not from us yet: there are no scheduled reports. A scheduled task that runs the curl command below on the first of every month makes the same file.
- Does a report use my raw readings?
- No. Every row is made from the hourly summaries, which are kept 10 years on every plan, so a report of a period whose raw readings are gone is as complete as one of last week.