# How to get feedback from users who come back

> Detect a return by comparing the last visit date your backend stores with the current login, then show one welcome-back prompt on the first session after a long gap. Ask what kept them away and what brought them back, and store the days away as metadata so you can read returns separately from regular use.

Source: https://escutaproduto.com/resources/feedback-from-returning-users
Last updated: 2026-10-11

## Why a returning user is worth a question

A user who comes back after a long absence has already told you something by leaving. They stopped for a reason, and then they chose to return. That choice is valuable because it shows what they still need. Some users come back because a feature finally works for them. Others return because a colleague asked them to, or because a deadline forced them. Each story points to a different part of the product.

Most products treat a return as a normal login. The user sees the same dashboard as everyone else, and the team never learns what changed. A short question on the first session after a gap turns that quiet return into a useful conversation.

## How do you detect a return after inactivity?

Escuta Produto does not know when your users last signed in. That information lives in your app, so your backend has to detect the return. Store a last seen timestamp when the user starts a session, or update it once an hour to keep writes low. When the user logs in, compare the stored value with the current time. A gap of 30 days is a reasonable starting point for a product used weekly, and a gap of 90 days suits one used a few times a year.

Set a flag on the session that says the user returned, so the prompt appears only once. Clear the flag after the prompt is shown or dismissed. Without this, the prompt will appear on every page load for the rest of the day.

```js
function returnedAfterGap(lastSeenAt, now, gapDays) {
  if (!lastSeenAt) return null;
  var days = Math.floor((now - new Date(lastSeenAt)) / 86400000);
  return days >= gapDays ? days : null;
}

var daysAway = returnedAfterGap(user.lastSeenAt, new Date(), 30);
if (daysAway !== null && window.EscutaProduto) {
  window.EscutaProduto.setMetadata({
    event: "welcome_back",
    daysAway: daysAway,
  });
  window.EscutaProduto.open({ kind: "other" });
}
```

The code runs after your app loads and the widget script is available. Users without a stored date, such as new accounts, return null and see nothing, which is the behavior you want.

## What should the welcome-back prompt say?

Keep it to one question and one optional field. Something like "Welcome back. What brought you here today?" works, and it asks for the reason they came back without assuming why they left. A second line can ask what kept them away, but do not require both. Two fields in a welcome message feel like a survey.

Show the prompt inside the app, next to the greeting, rather than as a pop-up over the page they came for. The user wants to get back to work. A small panel with a text field and a close button respects that. Dismissing the panel should cost nothing, and it should not count as a negative answer.

## What pulled them away?

The question about leaving has to be asked differently. "Why did you stop using the product?" invites a defensive answer. A better version is "What kept you away for a while?" which gives the user room to say the workflow was too slow, a teammate left, or a feature was missing. Accept any answer, including "I was busy", because that is still a real reason.

Ask the leaving question only once, in the welcome message. Do not run a separate exit survey for people who never returned. Those people are covered by your cancellation or churn process, and this moment is for users who chose to come back.

## How do you read returns separately?

Filter the inbox to the product and search for the event name you used, such as welcome_back, or read the items in batches of twenty. Put each report in a spreadsheet with three columns: the days away, the reason they came back in their own words and the reason they left. Group the reasons into categories by hand, and count distinct accounts for each category.

Pay attention to the days-away column. Users who return after a week often left because of a bug or a slow workflow they resolved. Users who return after six months often came back because of a new feature or a change in their team. The gap changes the meaning of the answer.

If the same reason for leaving appears repeatedly, treat it as a retention signal. The [cancellation feedback guide](/resources/cancellation-feedback) explains how to handle the reasons from users who did leave, and the [release notes article](/resources/release-notes-feedback) covers how to reach people who may have been away when a fix shipped.

## Acting on what brings people back

When returning users name a feature that brought them back, check whether it is visible on the first screen after login. Many returns happen because something changed, and the user never noticed. A short note in the welcome panel, pointing to the change, can turn a return into a retained user.

When returning users name a problem that pushed them away and it is now fixed, reply to them from your own email. Escuta Produto does not send automatic emails to customers, so the reply is yours to write. Keep it short and name the change. The [guide on reaching a user who reported a bug](/resources/tell-reporter-bug-fixed) describes the same pattern for bug reports.

## Setting up returning user feedback in Escuta Produto

Create the product, copy its public key and add the widget to your authenticated layout with the open attribute or the open call. Store the last seen date in your database, run the gap check on login, and call setMetadata before opening the panel. The [widget docs](/docs/widget) list the metadata and open options, and the [Next.js guide](/docs/nextjs) shows where to place the script in a layout so it loads for signed-in users.

Test the flow with an account whose last seen date is set 45 days in the past. Confirm the panel appears once, the metadata includes the days away, and the second login does not show it again.

## Frequently asked questions

### How do you know a user has returned after a long absence?

Your app has to detect it. Store a last seen date for each user, compare it with the current login, and treat a gap of your chosen length, such as 30 days, as a return. Escuta Produto does not track sign-in dates, so the check lives in your backend.

### What should you ask a user who just came back?

Ask one short question, such as what brought them back today, in an optional text field. You can also ask what kept them away, but keep the second question optional so the message does not feel like a survey.

### How often should a returning user see the prompt?

Once per return. Set a session flag when the prompt is shown or dismissed, so it does not reappear on every page. Users who never return are not part of this moment and should not receive the same prompt.
