Thom Grisi/ Product Design

Case N° 01 Indeed · Financial Systems · 2023–2024 ← Back to selected work

827 enterprise clients can now read their own billing data without filing a ticket.

Indeed's itemized billing report had four fields. Enterprise accounting needs more, so a customer-service team and an RPA automation team hand-built custom reports on request. I redesigned the surface so clients build, save, share, and schedule those reports themselves, on the product that bills $3.7B a year.

The shipped Billing Reports product showing the table with configurable columns, the account selector, and saved-view controls.
The shipped surface. Configurable columns, saved views, and scheduled delivery for 827 enterprise clients.

§ Catalog data · At a glance

Company
Indeed. Billing Reports (BRP), inside Sponsored Jobs. $3.7B+ annual advertiser revenue runs through this surface.
Users
Centralized billing managers at enterprise clients and agencies; internal customer-service reps.
My role
Senior Product Designer and sole designer across all three workstreams. With no research function on the team, I ran my own concept testing, then took the work from discovery through permission modeling, engineering specs, and the phased ship plan.
Timeline
2023–2024, shipped in phases against fiscal-year deadlines.
Outcome
Three workstreams shipped inside Indeed's Flexible Reports launch, against a 4% reduction target for CS cases tied to itemized reports.

The report couldn't break out who spent what

When a report can't do the job, a person does it by hand, one request at a time.

Enterprise billing managers reconcile Indeed invoices into their own accounting systems. Most run a hybrid model: regions, stores, and recruiters spend independently, but one manager at headquarters pays every invoice, then has to push each charge back down to the unit that created it. That allocation is billback, and it only works if the report can break spend out by PO number, cost center, store ID, recruiter, and wire remittance. Indeed's itemized report gave them four fields and no billback across group accounts.

Comparison of hybrid, centralized, and decentralized enterprise purchasing and payment models. The hybrid model separates the unit creating a charge from the enterprise payer settling it.
How enterprises buy and pay on Indeed. Billback is the hybrid problem: the unit that creates a charge isn't the one that pays it, so costs have to be allocated back down the tree.

To cover the gap, a customer-service team and an RPA automation team built those reports by hand, one request at a time, for the largest accounts. It worked, but it was slow, and it tied up customer service in recurring work that should have been part of the product. By the time the problem reached me, both the team that built those reports and the previous UX designer were gone, so I rebuilt the context from PM, engineering, CS, and archived research, then traced the workflow from invoice to CS ticket to the client's accounting system to find where self-service had to start.

Billing reconciliation journey from bank statement to invoice lookup, file download, PDF review, and email to accounts payable, repeated for every invoice and account.
The billing journey: one client's path between Indeed, CS, and their own accounting system. Each detour through a person marked a place self-service had to reach.

From four fields to a configurable report

From a fixed four-field report to 20+ configurable invoice fields, without losing the report people already knew.

I replaced the fixed report with a table whose columns users configure themselves: they add, remove, and reorder invoice fields, with in-table search. With the PM, I scoped the data-model expansion to the fields that map to how enterprise accounting actually works: PO number, cost center, store ID, recruiter, wire remittance.

Walking CS reps and two client billing managers through v1 surfaced the real requirement: give people more fields to work with without taking away the report they already knew.

We made the cuts explicit, too. PDF export, batch download, and advanced filters moved to a fast-follow rather than bloating MVP scope before the fiscal-year deadline. I handed engineering Figma specs covering add/remove/reorder behavior, in-table search, and the edge cases for fields that don't exist on every account type. The Billing Reports page shipped inside Indeed's Flexible Reports launch and set the standard for configurable columns across the entire billing surface.

Save, Share, and Schedule, so a report gets reused instead of rebuilt

Named views, hierarchy-scoped sharing, and scheduled delivery replaced the monthly rebuild and the screenshot-by-email workaround.

Save

Concept testing validated the configurable report, and it surfaced demand for two features the team hadn't committed to: saving a view and scheduling delivery. Both moved onto the roadmap. Users save a column configuration, date range, and filter set as a named view. The modal's design problem was legibility of the object itself: testing showed people wouldn't trust a save they couldn't inspect. The preview pane was the fix, and it came straight out of the first usability round.

The report's saved-view menu, where selecting Save view opens the save dialog.
Start here: open the saved-view menu and select Save view.
The Save view modal showing the saved-view name field and the contents-of-view preview that makes the saved configuration legible.
The save dialog that opens, with the contents-of-view preview added after round-one testing.

Share

Sharing a view sounds simple until permissions enter. Indeed organizes enterprise accounts in a hierarchy called EHS, but each client built and named its own version of that hierarchy, so there was no standard structure to design against. Whatever the shape, a shared report could never show a recipient data outside their branch of the tree.

The EHS Hierarchical Group Modal showing a parent account with nested child accounts visible, demonstrating Indeed's enterprise account tree.
The EHS account tree: each client could structure and name its own, which is why permission scoping became load-bearing in the share design.

The architectural spine was four entry points to save-a-view: from a default view, from an existing saved view, from a shared link inside the same parent account, and from a shared link in a sub-account. Each had different defaults and different permission behavior. Mapping those four paths, not the modal, was the hard design work.

Schedule

Recurring reports deliver themselves on a cadence, so the monthly rebuild disappears entirely. Compliance review added the constraint that shaped the recipient experience: four documented unsubscribe acceptance criteria, specced and shipped.

We phased the release, Save by end of fiscal year and Share in Q1, so clients got value early while the harder permission work landed. I delivered specs per phase; the tech lead built a mock API against them and implementation followed through both phases.

The Share view modal showing the recipient field, permission-scope check, and access-mismatch warning when the recipient is outside the EHS scope.
Share modal: when a recipient sits outside the report's access scope, a warning appears at send time, rather than the report failing for them after it has already been shared.
The Share view default state showing the share controls and recipient list before any modal action is taken.
The share entry point, collapsed into the report header.
Schedule and share flow step 5: email address entry.
Email
Schedule and share flow step 6: active-for dropdown.
Active for
Schedule and share flow step 7: frequency selector.
Frequency
Schedule and share flow step 8: success confirmation.
Success

Scroll → Configuring a recurring report: recipient, duration, frequency, confirmation

Aligning two products without merging them

Billing and Analytics shared customers and vocabulary, and were about to build the same feature twice, differently.

Auditing adjacent surfaces turned up a collision: the Analytics team was planning its own Save and Share, on a similar timeline, unaware of ours. Engineering ruled out a shared platform capability (cross-team service costs killed it), which left the harder problem: align the experiences without merging the teams.

I authored the gap analysis that became the alignment artifact: 30+ jobs-to-be-done organized by user type, with explicit Billing/Analytics deltas at every row. The Analytics designer and I made joint calls: the saved-view concept, date-range model, and CTA structure stay aligned; release cadence and infrastructure stay independent. It made the alignment defensible to leadership, and both teams shipped on their own timelines. The two products use the same vocabulary today.

The Schedule and Share gap analysis: a table of 30+ jobs-to-be-done across three user types, with the Billing and Analytics answer and the open questions at each row.
The gap analysis artifact: 30+ jobs-to-be-done by user type, with the Billing and Analytics answer at each row.
§ Colophon · What this shows

Every major decision here got revised by the people who use it, and shipped better for it.

The configurable columns were reshaped by CS reps, the save modal rebuilt after usability testing, the share flow hardened in an engineering feasibility review. None of those were my first answer, and the cross-team plan only got better after engineering said no to the easy version. On a surface where the data has to be right and has to match how customers actually do their accounting, that is how the work earned trust: ship a position, get it in front of the people who use it, and revise.

827

Enterprise clients now self-serve

$3.7B+

Annual revenue on this surface

20+

New invoice fields shipped