# Case study: Merchandiser Returns App

> An offline app and portal for merchandisers to raise returns in store, get them approved by the supplier, and hand them straight to the collection system, with the collection date and proof of collection coming back to the merchandiser. More than 340 merchandisers raised nearly 8,000 requests in the last year.

- URL: https://www.happen.software/case-studies/merchandiser-returns-app
- Publisher: Happen Software (https://www.happen.software/)

## At a glance

- **Client**: National retail returns specialist
- **Category**: Logistics · Field & mobile apps
- **Running**: Since 2021 · 5 years
- **Users**: Merchandisers, supplier authorisers, and the client's admin team
- **Engagement**: Build, run, and evolve, since 2021
- **Platforms**: Offline web app for merchandisers and a management portal
- **Integration**: Two-way link to the collection system: requests out, dates and results back
- **Scale**: 7,900+ requests a year from 340+ merchandisers in 1,500+ stores
- **Visibility**: 6 dashboards, 5 reports, and scheduled emails to merchandisers and suppliers

## Outcomes

- **7,900+**: Return requests raised in the last year, more than 660 a month
- **20,000+**: Stores set up for returns, with requests raised at more than 1,500 of them in the last year
- **340+**: Merchandisers raising returns in the last year

## Context

Our client collects returned stock from retail stores for the suppliers who own it. We built and run the collection system its operators and depots use. This is the other half: the app merchandisers use to raise those returns in the first place.

A merchandiser in a store spots stock that has to go back, often for several suppliers at once. Some returns need the supplier's approval first, and once a request is in, the merchandiser wants to know when it will be collected and see proof that it was. The app captures the return, gets it approved, and hands it to the collection system, which reports the date and the result back.

## The challenge

- **Two teams, one return**: The person who finds the stock isn't the person who collects it, so the request, the date, and the result have to pass between two teams.
- **Approval before collection**: Each supplier decides which returns need approval, by value or units, and who gives it. That depends on the store's region and channel.
- **Stores without signal**: Returns are counted in stores and back rooms where the connection can't be relied on, so capture can't depend on it.

## Before and after

| Area | Without it | With the app |
|---|---|---|
| Raising a return | Returns reported by phone or email. | Captured product by product in the store, with barcode scanning, photos, and a signature, even offline. |
| Several suppliers | A separate request for every supplier. | One store visit split automatically into one request per supplier. |
| Approval | Approvals chased by hand. | Each supplier's rules send a return to the right authoriser or group, with a daily reminder. |
| Hand-off | Requests typed again into the collection system. | Sent straight to the collection system on submission, mapped to its stores and products. |
| Collection date | Merchandisers asking when stock will be collected. | The date pushed to the merchandiser's phone and emailed, with every store's next date updated hourly. |
| Proof | Proof of collection requested after the fact. | Units, weight, claim numbers, and the signed collection document, emailed as soon as it's done. |

## A return, end to end

1. **Pick the store**: The merchandiser chooses the store and sees when it's next due for a collection. They're warned if a return for that supplier was already raised there today.
2. **Capture**: They scan or pick each product and record the quantity, stock status, unit, and any expiry, batch, or serial number, with photos checked for blur. It all works without signal.
3. **Approve**: If the return crosses the supplier's rule for that store's region and channel, the authoriser or group is emailed a link. Requests still pending are re-sent at 13:30 on weekdays.
4. **Submit**: The merchandiser signs. The visit is split into one request per supplier, the PDF documents are generated, and each request goes straight to the collection system.
5. **Scheduled**: When the collection is booked, the date comes back to the app with a push notification and an email. At 19:00 the evening before, merchandisers are reminded which stores are being collected.
6. **Collected**: The result comes back with the uplift number, units, weight, and claim numbers. The signed collection document is emailed as a PDF and shows in the merchandiser's history.

## What we built

- **Offline merchandiser app**: An installable web app. Requests, product lists, and photos are kept on the phone, so a return can be captured with no signal and sent later. A paused request can be carried on from another device.
- **Guided capture**: Barcode lookup, stock statuses, units of measure, expiry, batch and serial numbers, photos checked for blur, and the merchandiser's signature. One visit becomes one request per supplier.
- **Supplier approval rules**: Each supplier sets value and unit bands by region, channel, and category, and names the authoriser, manager, or group who decides. Unanswered requests are re-sent every weekday.
- **Linked to collections**: Submitted requests go straight to the collection system, where they can be scheduled automatically. Dates and results come back as soon as they happen, and each store's next collection date updates hourly.
- **Notifications**: A push notification and email when a collection is booked or done, a 19:00 reminder of tomorrow's collections, and a Monday 07:00 summary of the week ahead.
- **Documents for every request**: An uplift note, a store confirmation note, and a product-off-shelf document are generated as PDFs, and each supplier chooses which ones it receives.
- **Dashboards & reports**: Six dashboards: compliance, paused uplifts, reason codes, store activity, yield, and merchandiser locations. Five reports, including requests against completed collections, emailed to suppliers at 08:00 if they choose.
- **Location & attendance**: Location is captured at the start and end of each request and shown on a map. Optional time and attendance lets merchandisers clock in and out, and anyone still clocked in is clocked out at 23:55.

## What each team gets

### Merchandisers

- Returns captured in store with no signal
- The collection date on their phone
- Proof of collection in their history

### Suppliers

- Their own rules for which returns need approval
- PDF documents for every request, as they choose
- A daily report of requests against collections

### Authorisers

- Only the returns their rules send them
- An email with a link to approve or cancel
- A reminder at 13:30 on weekdays until it's done

### Admin team

- Six dashboards across stores and merchandisers
- Stores, products, and users imported from Excel
- A resend button if a request needs to go again

## How it was delivered

- **2021, Launch**: The portal, merchandiser app, and supplier approvals, linked to the collection system by July, two months after the first commit.
- **2022, Field-ready**: The app packaged for phones and time and attendance.
- **2023–2025, Kept current**: Regular app store releases and ongoing platform updates.
- **2026, Web-first**: Web push notifications and read-only data access for the collection system's AI assistant.

## Engineering

- Offline-first capture: requests, product lists, and photos kept on the device, with paused requests synced so they can be resumed elsewhere.
- Each request saves its products and the VAT rate at the time, so documents and totals don't change when prices do.
- Safe re-sends: a request that's already finalised is skipped rather than processed again, and a phone still holding it is told to discard its copy.
- Integration both ways over REST: requests out on submission, dates and results back as they happen, and store dates every hour.
- A read-only data gateway, locked to its own key and the collection system's server address, so that system's AI assistant can answer questions across both.
- Upgraded through every .NET release from 6 to 10 since 2022, with an old third-party framework retired along the way.
- Kept current with regular technology, library, and framework updates, along with ongoing performance and security improvements.

Stack: .NET, ASP.NET Core, SQL Server, Angular, Ionic, Progressive web app, Web push, GitHub Actions

## Get in touch

Field teams raising work another team has to do? We'll talk through how an offline app could capture it at the source, get it approved, and hand it to the team that does the work, with the results coming back. Book a free 30-minute call with one of our engineers.

Contact: https://www.happen.software/contact or sales@happen.software
