Skip to content
See all cases
Fitness Academia logo

Sales targets for five gyms left the spreadsheet and now come straight from NextFit

Fitness Academia has been around for more than two decades and runs five locations across Chapecó and Cunha Porã, Brazil. The sales data already lived in NextFit, but the commercial target was rebuilt by hand in a parallel spreadsheet — with a different rule at each location. Epicora built the platform that reads NextFit every five minutes and turns it into a single reading: the network, the location, and each sales rep's contribution.

Client
Fitness Academia (Chapecó and Cunha Porã, Brazil)
What we did
Sales-target platform integrated with the NextFit ERP — network dashboard, per-location dashboard and synced sales
Platform
Responsive web (React · NestJS · MongoDB · AWS + Vercel)
104%
of the network target in the first full month
4/5
locations hit their target
664
plan sales managed in the platform
5/5
locations synced every 5 minutes
01

The starting point

Fitness Academia is a gym network with more than two decades in business and five locations across Chapecó and Cunha Porã. The commercial operation — prospecting, sign-ups and renewals — is run by sales reps, and the network already used NextFit as its ERP: every sale, every plan, every cancellation was already recorded there.

The problem was not missing data. It was that the data never reached the people who needed it. The target was tracked in a parallel spreadsheet, filled in by hand from NextFit itself — the same number, typed twice. What one location counted as "a sale that hits the target" was not what another counted, so the numbers were not comparable. And the sales rep, who most needs to know how much is left to hit the goal, had no screen at all: she had to ask the manager or open a shared spreadsheet that also exposed everyone else's performance.

  • Targets rebuilt by hand in a spreadsheet from data that already existed in NextFit — pure rework, with typos and a number that was always out of date.
  • A different rule per location: what counted toward the target varied, and the numbers never reconciled.
  • No autonomy for the sales rep: to know how much was left, she depended on the manager or his spreadsheet.
  • A shared spreadsheet isolates no one — everyone's performance was visible to everyone.
  • No network view: the manager compared five spreadsheets instead of looking at one number.
Before: one target spreadsheet per location
NextFit became the single source
02

The turning point

Epicora did not build a second place to type sales into. The architectural decision was the opposite: NextFit remains the single source of truth, and the platform never accepts manual entry. A job reads each location's API every five minutes and mirrors the sales into the application database — and every screen works off that mirror, never querying the ERP live. That delivered two things at once: instant reads for the user, and an integration that does not overload the client's ERP.

Before writing the integration, Epicora ran a technical spike against the real API to find out what the documentation did not say: the request limit NextFit actually tolerates, and how each sale type arrives in the payload. That spike set the sync frequency and the classification rule — which is why the integration did not break when it scaled to five locations.

The second structural decision came from a scope review with the client: the target belongs to the location, not to the individual rep. Each location has a monthly target, and each rep sees her contribution to the collective number — not an individual quota. That reshaped the whole product, and the network gained a number that means the same thing at all five locations.

The decision that unlocked it

Deciding that only plan sales count toward the target — and that everything else does not even show up. Gym-pass partnerships, one-off products and drop-in classes are still imported for history, but they do not add up and they do not clutter any screen. That ended the divergence: every sale you see in the platform is, by definition, a sale that counts. There is no more "depends how you count it".

03

What we delivered

The network dashboard — five locations on one screen

Network target, actuals, attainment percentage and how many locations hit the target this month, with the list sorted by attainment — worst first, because a manager does not need confirmation about who is doing well, he needs to know where to step in. Next to it, the month's curve against the target line, to see whether the pace on day 10 will hold up by day 31.

The location dashboard — the screen the sales rep never had

A progress ring for the location's target, how much is left, days remaining and a "your contribution" block with what that rep added to the total. She sees her own location as a whole — target, actuals and her colleagues' contributions — and never sees another location.

Synced sales, with a correction in the manager's hands

Every plan sale coming from NextFit, with search, filters by period, location and rep, sale detail and CSV/PDF export. A sale cancelled in the ERP shows up as cancelled on its own. And because real life happens, the admin has a per-sale toggle to force whether it counts toward the target — the case of a member transferred between locations, or an entry made at the wrong one.

Targets, locations and a sync log you can audit

Target setup per location and month, with a structural block against two targets in the same period. Each location has its own API key, with a connection test and on-demand manual sync. And every job run is logged with duration and result — how many records read, new and updated — so "why did this number change?" is a question with an answer.

04

How we made it safe

Isolation between locations, not just between screens

Two roles — admin and collaborator — and the collaborator's isolation holds everywhere: not through a manipulated URL, not through a filter, not through an export can a collaborator reach another location's data. Scope is enforced in the backend, not hidden in the frontend. JWT with refresh tokens, email invitations and a strong password policy validated on both ends.

An integration that respects the client's ERP

Each location's API key is stored encrypted. The sync is incremental and paginated, with backoff and throttling adapted to NextFit's real limit — discovered in the spike, not assumed. Because every screen reads the local database, a usage spike in the platform never becomes a request spike in the ERP. And the log shows the whole network synced in the same five-minute window: five out of five locations.

Independent QA with the authority to reject

The delivery went through Epicora's own QA, run by someone who did not write the code — and who rejected it three times before approving. The third round caught the kind of bug that only shows up in real use: the period filter built the day window in UTC and, since the operation runs on Brasília time, late-night sales fell into the next day. Fixed by computing the day's edges in local time. Only then was the system presented to the client.

05

The result

In the first full month with the platform live, the network closed at 104% of target, with four of the five locations hitting their number. The platform does not sell for the team — the reps did the selling. What changed is that, for the first time, that percentage came out of the system and not out of a spreadsheet: it came from sales read straight from NextFit, under a single rule, with every sync logged and auditable.

And adoption shows up in the database itself: the client created all fifteen accounts for the operation on their own in the weeks after delivery, and already has targets set through December — half-year planning done inside the tool, not in a new spreadsheet tab.

Four out of five hit the target

Related solutions

Related cases

Is the data you need already in your system — just not readable?

Epicora connects what your operation already uses and turns it into the reading the decision requires: one number, updated on its own, the same for everyone.

Contact

Let's talk about your project

Tell us what you need to solve. We reply fast, with people who understand both technology and business.

Prefer to talk directly?

Pick the channel you prefer. We reply fast, during business hours.

From the first conversation to go-live: efficiency, security and innovation.