Get booking and usage data into your BI tool

Pull bookings, room usage and occupancy figures into Power BI, Tableau or any other BI tool: which analytics calls return usage counts, minutes and percentages, which one streams the same bookings as a spreadsheet, the read scopes a reporting client needs, and the paging, date-window and row caps on each — plus where the Excel and CSV buttons are when a downloaded file is all you need.

Updated 14 Sept 2026

Booking and usage data leaves Offision two ways: as a file somebody downloads from a report screen, or over the REST API, which returns the same bookings as rows and the usage figures already aggregated. Power BI, Tableau and every other reporting tool use one or the other.

Take the file, or call the API

Take the file when somebody needs a number this afternoon. Every list and report screen exports itself as Excel or CSV; where all the export buttons are lists them, and which report answers which question says what each report holds. The one download built for onward analysis is the booking analytics pivot table, how much your rooms are used, whose workbook carries a Raw data sheet — one flat row per combination, the shape a PivotTable expects.

Call the API when the extract has to repeat without anyone present, cross a period longer than a screen will show, or land somewhere other than a spreadsheet.

What a call needs

An integration client, created on API authentication under Marketplace, as either a long-lived Access token or an OAuth2 client exchanging its secret for a daily bearer token. Connect your own systems covers both and the guards around them.

Open API authentication

A reporting client only ever reads, so grant it booking.read, analyze.read, bookableResource.read, building.read, user.read, userGroup.read and dashboard.read rather than all.read — a token can ask for less than its client holds, never more.

The calls a report makes

What you wantThe callWhat comes back
Every booking, as rowsResource appointmentsOne row per booking, paged. Narrow by date, resource, resource type, organiser, booking state or free text
The same bookings as a spreadsheetBooking exportAn .xlsx stream, in the time zone you name, optionally one email domain
How much each room was usedBooking by resourcePer resource: booking count, minutes used, percentage used
How that moves over timeBooking by timeThe same three figures per bucket — five minutes up to monthly
What the sensors saw, not what was bookedOccupancy by resource, and a by-time twinThe same two shapes, measured rather than booked
Visitor counts for one dayVisitor badge statisticsThat date’s expected, on site, left, no-show and over-staying counts
The names behind the idsResources and buildings, users and their groupsWhat you join the figures against. There is no department call — a user group is the nearest thing
Three tables side by side. The first has a row for each booking with its room and start time. The second has one row per room carrying minutes used and a percentage. The third has one row per date carrying the same two figures.

What the three calls return, side by side: one row per booking, or rows already totalled by room and by period.

Windows, paging and the caps

  • Always send from and to to an analytics call. Left out, both default to the current moment, and the call returns an empty window rather than everything.
  • Booking rows are paged, thirty to a page unless you ask for more, with the total beside the data so you know how far to walk.
  • Usage by resource is not paged and stops at 9,999 rows. Estates larger than that have to be fetched a floor at a time.
  • The spreadsheet call takes two months at a time. The JSON calls have no such limit, so a year-long extract is a loop over the rows, not over the export.
  • A thousand requests every five seconds, per token. Past that the call returns 429 with a Retry-After telling you how long to wait.
Three horizontal bars against one ruler marked in months. The bookings JSON call runs the whole width and continues past it with an arrow. The usage report download stops at twelve months. The booking export call stops at two months.

How far back each route reaches: the JSON call has no range limit, the usage download stops at a year, the spreadsheet call at two months.

Keeping an extract fresh

Most reporting runs on a schedule — re-read a moving window each night and let the warehouse deduplicate. For sooner, a client holding bookableResource.readwrite can register a callback URL against named resources, and Offision posts to it when a booking on one of them changes.

What there is no way to do

  • No database access. There is no ODBC or JDBC driver and no direct connection to the data; everything goes through the exports or the API above.
  • No connector to install. Power BI, Tableau, Zapier and Power Automate all reach Offision as a plain REST caller or by reading an exported file.
  • Nothing pushes an extract out. The closest thing is the emailed booking summary, which attaches a spreadsheet on a schedule.
  • The audit trail is not on the API. It downloads from its own screen only — see the audit trail.
  • An oversized export is refused rather than truncated, with a message asking you to narrow the range or the filters. Do that, or switch to the API.