A weekly Cintas invoice for a 50-site operation typically carries 30 or more line items per location: garment rental, mat rental, restroom services, first-aid replenishment, environmental fee, fuel surcharge, lost-garment fees, size-change fees, emblem charges, damage waivers. Each line needs a GL code, a cost center, and a location tag before it can be posted into QuickBooks, NetSuite, Sage Intacct, or Microsoft Dynamics. The myCintas portal hands AP a PDF, not a working spreadsheet, and copy-pasting from PDF for fifty sites a week is the part of the AP job no one wants to do manually.
To extract Cintas invoice to excel cleanly: parse the PDF for every line item, capture the location code attached to each line, and pivot the data so every location is a row and every service type a column. That inverts Cintas's default service-type-first grouping into the per-location view AP teams need. The same shape works for UniFirst, Vestis, Alsco, and Aramark Uniform invoices because all five vendors invoice on a weekly route-stop pattern; only the line-item naming differs. The resulting spreadsheet feeds QuickBooks, NetSuite, Sage Intacct, or Microsoft Dynamics with per-location cost allocation and GL coding intact.
The Cintas line-item taxonomy and the GL bucket each one usually lands in
A weekly Cintas invoice prints the same dozen-or-so categories across every site: rental lines, services, surcharges, exceptions, and the occasional one-time charge. The list below is the working taxonomy AP teams use when they sit down to map a Cintas weekly invoice into a spreadsheet column by column, with a sensible GL bucket beside each. The choice of GL is a company-specific call driven by your chart of accounts and what the controller wants visible at month-end; this is a menu of buckets to consider, not a one-true-answer.
| Line item category | What it is on the invoice | Typical GL bucket |
|---|---|---|
| Garment rental | Weekly rental of uniform shirts, pants, lab coats, FR garments, executive wear, butcher coats, kitchen apparel | Uniform expense, or a wages-clothing-rental sub-account where payroll keeps it next to wages |
| Mat rental | Scraper mats, waterhog mats, anti-fatigue mats, logo mats, swap-out frequency varies by stop | Facility services, or janitorial if mats sit there in your chart |
| Restroom services | Soap and sanitizer dispenser refills, paper services, restroom dispenser maintenance, air freshener cartridges | Janitorial supplies |
| First-aid replenishment | Cabinet restock, AED battery and pad checks, eyewash bottles, safety supply replenishment | Safety, or facility services where safety supply isn't a separate account |
| Environmental fee | A percentage surcharge applied to garment and mat services, presented as a line item per service block | Coded back to the parent service GL, or to a dedicated surcharge GL the controller wants visibility on |
| Fuel surcharge | A per-stop surcharge tied to fuel index movements | Same choice as environmental fee — back to parent service or to a dedicated surcharge GL |
| Energy / safety surcharge | Less frequent but appears on some routes | Same choice as the other surcharges |
| Lost garment / ruined garment | One-time charge per item lost or damaged beyond repair | Employee chargeback if you charge it back, shrinkage if you absorb it |
| Size change | Charge for swapping a garment to a different size on an existing employee | Uniform expense |
| Emblem / monogram | One-time setup charge for adding a name patch or logo | Uniform expense, or a one-time setup sub-account |
| Damage waiver / loss waiver | Optional weekly charge in exchange for waiving lost-garment costs | Insurance, or risk, depending on how the controller treats it |
| Direct sale / consumable | One-time purchase of items kept by the site (boots, towels, paper goods) | Uniform expense for apparel, janitorial supplies for paper, supplies generally for everything else |
| Stop charge / minimum charge | A floor charge on routes that fall below the contracted weekly minimum | Facility services, with a memo flag so it surfaces in the controller's review |
Vertical context matters: manufacturing plants often split FR rental from standard industrial; restaurants typically code kitchen apparel against COGS rather than uniform expense; hospitals usually split hygiene supply across per-department GLs rather than rolling everything into janitorial. The categories above are the same ones you'll see, in the same order they typically appear, on a UniFirst, Alsco, Vestis, or Aramark Uniform invoice — the surface naming differs (covered later) but the taxonomy is shared.
Pivot the invoice from service-type-first to location-first
The structural problem with a Cintas invoice for a multi-location operation is that the vendor groups by service type at the top level. The PDF arrives organized as a Garment Rental block with every site's weekly rental lines underneath, then a Mat Rental block with every site's mat lines, then Restroom Services, then First Aid, then surcharges. The vendor's reasoning is operational — the route driver delivers garments on one stop and mats on another — and the invoice mirrors how the service is delivered, not how AP needs to allocate the cost.
What AP needs is the inverse. Site 4427's controller wants to see Site 4427's weekly cost in one place: garment $312.40, mat $48.60, restroom $74.00, first-aid $22.50, environmental fee $18.32, fuel surcharge $9.18, total $484.00. Then Site 4428's. Then a roll-up across the region. The same data, pivoted, but pivoted off a column structure the PDF doesn't surface as columns.
Cintas invoice cost allocation per location works when the extraction shape lets the pivot happen with one PivotTable in Excel. Every row carries:
- location_code — the four-digit site number Cintas prints on each line, or your internal site code if you've mapped them
- location_name — the location's friendly name from your chart of accounts
- service_type — garment rental, mat rental, restroom services, first-aid, environmental fee, fuel surcharge, lost garment, size change, damage waiver — extracted as a discrete column, not buried in the line description
- line_description — the verbatim description Cintas prints (preserved for the audit trail and for chasing exceptions)
- qty, unit_price, extended — the three numerical columns
- invoice_number, invoice_date — repeated on every row so the row stands alone if exported
The column that does the work is service_type. Once it's a discrete column, the per-location pivot is one PivotTable: rows are location_code, columns are service_type, values are extended. The roll-up to region or division is one more PivotTable on top. The cost-allocation conversation with the controller stops being "let me re-read the PDF" and becomes "here's the per-site cost grid."
The structural pattern here isn't unique to uniform services. It's the same pattern that shows up in splitting a consolidated Sysco invoice across multiple restaurant locations, or in breaking a consolidated fleet leasing invoice into a per-vehicle spreadsheet where the pivot dimension is the vehicle rather than the site: a vendor groups its invoice the way it delivered the service, and the AP team needs the inverse for cost allocation. Once the service-type column is extracted cleanly, the pivot is mechanical regardless of which vendor's invoice you started from.
The practical question is how the service_type column gets populated cleanly across hundreds or thousands of lines. Building it manually in Excel — picking through the PDF block headers and tagging each line — is the work the spreadsheet was supposed to eliminate. The approach that holds up at 50-site, 200-site, or 500-site volume is to extract Cintas and uniform-services invoice line items to Excel automatically using a prompt that names the column structure above and instructs the extraction to repeat the location code on every line item row. A working prompt for a Cintas weekly invoice reads roughly like this:
Extract every line item from this Cintas invoice. One row per line item. For each row, capture: location_code (the site number printed on the line), location_name, service_type (one of: garment rental, mat rental, restroom services, first-aid, environmental fee, fuel surcharge, lost garment, size change, emblem, damage waiver, direct sale, stop charge), line_description (verbatim from the invoice), qty, unit_price, extended, invoice_number, invoice_date. Repeat invoice_number and invoice_date on every row. Classify environmental fee and fuel surcharge as their own service_type values rather than rolling them into the parent service.
The same prompt, saved once, runs every week against every invoice. The output is the per-line-item, per-location spreadsheet that pivots into the per-location cost view in one step.
Isolate environmental fee, fuel surcharge, and exception charges into their own columns and rows
The line items most worth extracting into discrete columns are the surcharges. Environmental fee, fuel surcharge, and where they appear, energy surcharge and safety surcharge — these are the lines that move year-on-year independently of the underlying service. They are the lines most commonly creeping up between contract reviews; 5 to 10 percent year-on-year is not unusual. Pulling them into their own columns in the per-location pivot turns "is this surcharge moving" into a copy-down formula instead of a manual re-read of every PDF.
In practice this means the per-location pivot from the previous section gets four more columns alongside the service-type columns: environmental_fee, fuel_surcharge, energy_surcharge, safety_surcharge. Each value is the per-location, per-week amount of that surcharge, summed across whichever services it applied to (garment, mat, or both, depending on the contract). A Cintas environmental fee fuel surcharge audit becomes a quarter-over-quarter delta in those four columns rather than a forensic exercise. The numbers either drift up at the rate the contract permits, drift up faster, or stay flat — and the controller can see which without leaving Excel.
The exception charges work the other way. Lost garment, ruined garment, size change, damage waiver, loss waiver, emblem, monogram, and replacement allowance: these are one-time charges on individual lines, often tied to a specific employee or department or piece of equipment. They are also the lines a location manager will want to dispute or chase down before AP pays. Rolling them into a generic "other" bucket on the per-location pivot loses the information that lets AP route them.
The handling that works is to keep exception charges as their own rows in the underlying line-item extract, with the verbatim line_description preserved. Cintas typically prints enough detail on the line — the employee name, the garment SKU, the route stop reference — that a quick filter on service_type = lost garment (or size change, or damage waiver) gives the location manager a chase list per stop. Where the invoice prints the SSR (Service Sales Rep) name or the route stop reference on each exception line, capture those into their own columns too: ssr_name, route_stop_ref. AP gets a starting point for the dispute conversation, and the location manager gets the names and references they need to follow up before the invoice posts.
The same approach across UniFirst, Vestis, Alsco, and Aramark Uniform
Mixed-vendor uniform contracts are the norm at any operation that has grown by acquisition or signed regional contracts at different times. A 120-site restaurant chain might have Cintas at the original sites, UniFirst at the sites that came over with a 2018 acquisition, and Vestis paperwork starting to arrive at the sites that historically billed under Aramark. According to TRSA's industry overview of the linen, uniform and facility services sector, the North American sector generates approximately $50 billion in sales annually across 2,580 facilities — most multi-location operations have at least one of these contracts on the AP queue. The per-location-pivoted column shape from earlier works across all five vendors because all five invoice on a weekly or bi-weekly route-stop pattern. Only the surface naming of line items differs.
A UniFirst invoice to excel extraction lands in essentially the same column structure as a Cintas one: location code, location name, service type, line description, quantities, prices, extended, invoice number, invoice date. UniFirst groups its rental lines slightly differently from Cintas — the company tends to break out shop apparel from executive wear earlier in the line listing, and uses its own naming for ancillary services like restroom and hygiene supply — but the categories map cleanly to the taxonomy from earlier. The same is true of Alsco uniform invoice excel extraction: Alsco's invoice convention overlaps Cintas closely on garment and mat lines, with slight divergence on restroom and hygiene-supply naming and on how stop charges are surfaced.
Vestis uniform invoice extraction is worth flagging separately because of the corporate history. Aramark spun out its uniform business as Vestis Corporation in 2023, so sites that historically received Aramark Uniform invoices now receive Vestis invoices. The line-item shape didn't change with the spinout, but the file naming and the AP routing inside many teams hasn't caught up — invoices are still filed mentally under "Aramark" by AP staff who haven't been told the parent rebranded. If your AP folder structure still has an "Aramark Uniform" subfolder, the Vestis invoices are landing in it, and they should. An Aramark uniform invoice spreadsheet today is a Vestis invoice spreadsheet, with the same per-location pivoted shape working across both pre-spinout and post-spinout paperwork.
The practical shortcut for handling multi-location uniform service invoice spreadsheet work across mixed vendors is to parameterize the extraction prompt on the vendor name. The prompt template stays the same; what changes is the vendor name and a short list of vendor-specific service-type aliases (UniFirst's executive-wear naming, Alsco's hygiene-supply naming, Vestis's legacy-Aramark line headers on older paperwork). One saved prompt per vendor, with each prompt naming the same column structure, is the operational pattern. The column structure on the output side is identical across all five vendors, which means the per-location pivot, the surcharge isolation, and the ERP import all work without per-vendor branching downstream.
The same column-shape-first approach also handles commercial cleaning, pest control, managed print services, and Shred-it / Stericycle multi-site billing — and stretches to country-and-franchisee dimensions in pan-European Mail Boxes Etc consolidation.
One vendor archetype to keep separate: Aramark Refreshments, the canteen, break-room, and coffee-services business that did not move to Vestis. Aramark Refreshments invoices have a different line-item shape (consumables, equipment lease, service visits) and a different per-stop billing rhythm. They sit in a different sibling article, not this one — if the invoice lists coffee, water, snack, or canteen items, treat it as a different vendor archetype regardless of the Aramark name on the masthead.
Loading the per-location spreadsheet into QuickBooks, NetSuite, Sage Intacct, and Microsoft Dynamics
Once the line-item data is in the column structure described earlier, the import shape for each of the four major mid-market ERPs is straightforward. The minimum column set every system expects is small and uniform; what differs is what each system calls those fields and how it handles dimensional structure beyond the basics.
For Cintas invoice QuickBooks import work specifically, QuickBooks Online and QuickBooks Desktop both accept a flat-list import with location mapped to the Class field (or the Location field, where Locations are enabled), GL account mapped to Account, amount mapped to Amount, the invoice number on each row carried in the Memo or Ref field, and the invoice date as the transaction date. QuickBooks doesn't natively support the multi-dimensional cost coding NetSuite and Intacct offer; the practical workaround for multi-site operations on QuickBooks is to use Class for site and let the GL account carry the service-type distinction, with the per-line-item granularity preserved in the memo field for the audit trail.
NetSuite uses department, class, and location as three separate dimensions, all of which can be populated from a flat-list import. Most multi-site operations map physical site to Location, business unit to Department, and the service-type column to Class — which gives the controller a three-way slice (site by department by service type) without any further coding. Sage Intacct's dimension structure is similar but more flexible; companies typically configure dimensions for Location, Department, and a custom dimension for service type that maps directly to the service-type column from the per-location pivot. Microsoft Dynamics 365 Business Central and the Finance & Operations product use financial dimensions that the import file populates per row, with location, department, and (where configured) service-line as the three most common dimensions populated from a uniform-services line-item extract.
The practical structure that drops cleanly into all four is to keep the per-location pivoted spreadsheet as the working analysis tool for AP and the controller, and produce a parallel flat-list output (one row per line item with location, GL account, amount, memo, reference, date) as the actual import file. Most extraction workflows produce both shapes from the same underlying data — the per-location pivot for the cost-allocation conversation, the flat-list for the import.
The mapping from service_type to GL account is where the line-item taxonomy from earlier earns its keep. Companies running automated GL-coding rules in NetSuite or Intacct can drive the GL assignment off the service_type column directly: garment rental → uniform expense, mat rental → facility services, restroom → janitorial supplies, and so on per the chart of accounts. Companies on QuickBooks usually code the GL once in the import-mapping spreadsheet (a small lookup table beside the line-item extract) rather than running rules inside the ERP. Either way, the line-item taxonomy stops being a manual decision per invoice and becomes a deterministic lookup driven by the column the extraction populated. The same import shape that serves AP at 5 sites is the import shape that serves AP at 500 — see multi-location accounts payable automation across 5 to 500 sites for the broader pattern.
Where the myCintas portal, GetMyInvoices, and Ottimate fit alongside this workflow
A reader who landed on this article almost certainly saw three other things on the same search results page. Each solves a real piece of the AP workflow; none produces the per-line-item, per-location spreadsheet this article walks.
| Tool | Solves | Doesn't solve | When it's the right choice |
|---|---|---|---|
| myCintas portal | On-demand PDF download, statement-level reconciliation, payment status, audit trail for SSR conversations | Per-line-item, per-location spreadsheet at multi-location granularity | The conversation with the SSR about a missed pickup or a disputed line; the source of the PDFs that feed the extraction |
| GetMyInvoices | Cross-vendor portal aggregation — auto-pulls PDFs from myCintas, UniFirst, Vestis portals into one place | Line-item extraction; output is still PDFs | The AP team is logging into 3+ vendor portals weekly and wants the download step automated |
| Ottimate | End-to-end AP automation: invoice approvals, payment scheduling, accounting integrations, vendor-portal sync | Targeted per-location uniform-services analysis without a multi-month rollout | The team is replacing AP tooling end-to-end and wants a single platform for all AP, not just uniform services |
| The DIY-spreadsheet path (this article) | Per-line-item, per-location data extraction with surcharge isolation and ERP-ready import shape | Approval workflow, payment scheduling, cross-portal download automation | The AP team needs the per-location cost grid next week without changing AP tooling |
The four sit in different operational slots and aren't mutually exclusive. The portal handles download. The aggregator handles cross-vendor download. Ottimate handles AP end-to-end if a tooling replacement is on the table. The spreadsheet path handles the per-line-item, per-location data extraction that none of those produce as a working Excel — and remains useful alongside any of the others. The same per-site extraction logic carries over to other recurring multi-site service bills an AP team juggles, including breaking ADT and Securitas alarm-monitoring invoices into a per-site Excel grid with monitoring fees, false-alarm charges, and guard hours coded by location.
Once the per-line-item spreadsheet is in hand, the next question for most controllers is whether the surcharge creep and rate increases on those invoices match the contract — that's the Cintas invoice overcharge and price-increase audit sibling article, with the column structure from this one as its starting point.
Extract invoice data to Excel with natural language prompts
Upload your invoices, describe what you need in plain language, and download clean, structured spreadsheets. No templates, no complex configuration.
Related Articles
Explore adjacent guides and reference articles on this topic.
Pest Control Invoice Reporting Schema: Fields and Categories
A vendor-agnostic pest control invoice reporting schema: header, site, service visit, treatment, labor, materials, tax, traceability, and GL fields for AP.
Extract Managed Print Services Invoices to Excel by Device
Extract Xerox, HP, Ricoh, Konica, Canon, and Lexmark MPS invoices to Excel by device — base/overage clicks, lease/service split, per-location cost allocation.
Extract Janitorial Invoices to Excel for Multi-Site AP
Convert ABM, ServiceMaster, Jan-Pro, Coverall, and ISS cleaning invoices into Excel for per-location cost allocation and GL coding.