Skip to content
English
  • There are no suggestions because the search field is empty.

How do I split payroll by instrument or program?

Total what you pay teachers by instrument or program, such as piano, guitar, or group class. On Staff > Payroll, click export detailed (CSV). Each lesson row ends with Tag 1 to Tag 10, filled from the tags on that lesson's service in Opus1.io. Filter or pivot on those columns to get payroll cost per program. Tag your services under Settings > Services first. The summary export and the emailed report have no tag columns.

Applies to: Owner; Manager with payroll access turned on
PLUS Feature: No
Plan: All
Last updated: November 12, 2026

Table of Contents

  1. Overview
  2. Who can download the detailed payroll CSV
  3. Tag your services first
  4. Download the detailed payroll CSV
  5. What is in the file
  6. How the tag columns are filled
  7. Total pay for one instrument or program
  8. Rows with blank tag columns
  9. When the payroll report is emailed instead
  10. Limits of the tag columns
  11. FAQ
  12. Related Articles

Overview

A studio that teaches piano, guitar, and voice, or that runs private lessons alongside group classes, usually wants to know more than what each teacher is owed. It wants to know what each program costs. That number decides whether a program's tuition covers its teachers, which instrument to hire for next, and how to split payroll across departments or locations in your accounting.

Opus1.io already lets you tag services, and most studios tag by instrument, length, and lesson type. The detailed payroll CSV now carries those tags on every lesson row, one tag per column, in Tag 1 through Tag 10. You can total payroll by program from the same file you already send to your payroll provider, without matching lesson names by hand.

Why: Without the tag columns, splitting payroll by program means reading every lesson name and sorting rows yourself. With them, it is one filter or one formula.

ℹ️ Note: Opus1.io does not issue payouts, withhold tax, or mark a pay period as paid. The payroll report is your record of hours and dollars owed. Your payroll provider still pays your teachers.


Who can download the detailed payroll CSV

The download is on Staff > Payroll in Opus1.io.

Role Can download it?
Owner Yes
Manager Yes, when payroll access is turned on for that manager's profile
Staff and Limited Staff No. Teachers see their own payroll, without the export buttons.

Tag your services first

Opus1.io saves tags on the service, not on each lesson. Every lesson, class date, and payroll row for a service picks up that service's tags.

  1. Go to Settings > Services.
  2. Open the service, or click ADD SERVICE to create one.
  3. In Tags, choose a tag you already use, or type a new one and press Enter. You can add more than one.
  4. Click Update Service.

A good set of tags for payroll is the same set How Do I Set Up an Appointment-Based Service? recommends: the instrument or class type (piano), the length (30 minutes), and the lesson type (Private lesson, Trial, Makeup). Those same tags drive batch updates under Settings > Services and the filters families use on your self-booking link, so one set of tags does all three jobs.

⚠️ Warning: Use the same spelling and capitalization everywhere. Piano and piano are two different tags, and a spreadsheet will not group them together. Leave commas, apostrophes, and quotation marks out of tag names. The download removes those characters, so a tag saved as children's downloads as childrens.


Download the detailed payroll CSV

  1. Go to Staff > Payroll.
  2. Set the date range, and the staff member or location if you need one, to the pay period you want. The file includes only what those filters show. The date range has to be 12 months or shorter.
  3. Wait until the page finishes loading. The export buttons stay off while payroll is still loading.
  4. Click export detailed (CSV). The window is titled Export Payroll Detailed Report as CSV.
  5. When it says the items have loaded, click Download CSV.

The file Opus1.io downloads has a name starting with payroll_report_. Make sure you clicked export detailed (CSV), not export summary (CSV). The summary file is one row per teacher, with totals only.

A range longer than 12 months stops the export with this message: "Requested time period must be no more than 12 months, please update your filters and try again." Split the period into two downloads.


What is in the file

The detailed payroll CSV in Opus1.io has one row for each lesson, class date, paid availability block, and blocked time in the filtered period. The tag columns are the last ten, right after Rate Type.

Column What it contains
Event Id The lesson or class date ID. Blank on availability and blocked-time rows.
Staff Id The teacher's profile ID.
Staff Employee Id The Employee ID on the teacher's profile, if you set one. Use it to match rows to your payroll provider.
Staff The teacher's name.
Date (Start) Start date and time.
Date / Period Start time through end time.
Name The lesson or class name. Availability rows say Available, and blocked time says Blocked, followed by the block's label if it has one.
Hours Scheduled length, in hours.
Hours Paid Hours counted toward pay.
Clients Students on that lesson, separated by semicolons. Blank when nobody is enrolled.
Location Location name.
Status Attendance status, such as Completed or Attendance not taken. Blank on availability and blocked-time rows.
Credit Issued Yes, Capped, or -.
Amount Pay for that row, in your studio's currency.
Rate The teacher's pay rate for that service. Blank when no rate matched.
Rate Type Fixed or Hourly. Blank when no rate matched.
Tag 1 to Tag 10 The service's tags, one per column.

There is no separate service name column. The lesson or class name is in Name, and the instrument or program is in the tag columns.


How the tag columns are filled

Opus1.io sorts a service's tags from A to Z, ignoring capitalization, and keeps the spelling you saved. The first tag goes in Tag 1, the next in Tag 2, and so on. Columns left over are blank.

A piano service tagged piano, Private lesson, and 30 minutes downloads like this:

Name Tag 1 Tag 2 Tag 3 Tag 4 to Tag 10
Piano Private (Level I) - 30 Mins 30 minutes piano Private lesson Blank

30 minutes comes first because numbers sort before letters. Private lesson stays capitalized but sorts as if it were lowercase, so it lands after piano.

This means one tag can sit in different columns on different rows. A service tagged only piano puts piano in Tag 1. On the service above, piano is in Tag 2, because 30 minutes takes Tag 1. When your services carry more than one tag, look across all ten columns rather than filtering Tag 1 alone. The next section shows how.


Total pay for one instrument or program

If every service you care about has exactly one tag, filter or pivot on Tag 1 and sum Amount.

If your services have several tags, add a helper column that checks all ten tag columns at once. Tag 1 to Tag 10 are columns Q to Z, with the headers in row 1. In the first empty column, enter this in row 2 and fill it down:

=COUNTIF($Q2:$Z2,"piano")>0

Each row that carries piano in any tag column shows TRUE. Filter that column to TRUE, or use SUMIF on it, to total Amount for piano. Change piano to guitar, group class, or any other tag to total that program. The formula works the same way in Google Sheets and Excel.

Opus1.io downloads Amount and Rate as currency text, such as $60.00. If your total comes out as $0, the spreadsheet is reading those cells as text. Add another column with =VALUE(N2), fill it down, and sum that column instead.

💡 Tip: Match the spelling on the service exactly. COUNTIF ignores capitalization, but it will not match Guitar with a trailing space, or guitars with an extra letter.


Rows with blank tag columns

These rows leave Tag 1 through Tag 10 empty:

  • The service has no tags in Opus1.io.
  • The row is paid availability (Available) or blocked time (Blocked). Those rows have no service, so there is nothing to tag. They stay blank even when the teacher's lesson services are tagged.
  • The service's tags were removed before you downloaded.

Blank tag columns are empty cells, so a filter or formula looking for a tag skips them. To find untagged lessons, filter Tag 1 to blanks, then remove the Available and Blocked rows. Whatever is left is a service that needs tags under Settings > Services.


When the payroll report is emailed instead

A very long date range can take Opus1.io too long to build on the page. When that happens, Staff > Payroll tells you the result is incomplete and that a payroll report will be emailed within a few minutes. export detailed (CSV) stays off until the on-screen report finishes.

That emailed file is the detailed payroll report through Rate Type. It does not include Tag 1 through Tag 10.

To get the tag columns, narrow the date range, or filter to one teacher or one location, until export detailed (CSV) turns on, then download from the page. Repeat for the rest of the period and combine the files in your spreadsheet.


Limits of the tag columns

  • Only ten tags per service. Opus1.io exports the first ten tags in A-to-Z order. An eleventh tag is left out of the file.
  • Tags as they are today, not as they were. The file reads the tags saved on the service when you download. Rename or remove a tag, download again, and past lessons show the new tags. Keep a copy of any pay period you have already sent to payroll before you change tags.
  • Deactivated and deleted services still export their tags. A row that points at a deleted service can show a Deleted service flag on the payroll page, and its tag columns still fill.
  • Service tags only. Invoice tags are not in this file. The Transactions CSV is the export that includes invoice tags.

FAQ

Are tags I added to one group class included? No. Tags added to a single class with Edit Group Class help families filter classes on your self-booking link, but the Opus1.io payroll CSV reads only the tags on the service. To total payroll for a class, put the tag on its service under Settings > Services.

Should I remove tags from my services so the one I need stays in Tag 1? Usually not. Your service tags also drive batch updates and the filters families use when they self-book, so stripping them to tidy a spreadsheet costs you elsewhere. Use the COUNTIF helper column instead. It finds a tag in any of the ten columns.

Does export summary (CSV) include tags? No. export summary (CSV) has one row per teacher, with hours and the amount due. Tags are only on export detailed (CSV).

Will my teachers see these columns? No. Teachers can see their own payroll, but the export buttons are on Staff > Payroll, which only Owners and Managers with payroll access can use.


Related Articles