---
id: varejo/listas-acionaveis-comercial
industry: Retail and e-commerce
usage: common
effort: medium
grain: Customer x action (one task per customer per round)
---

# Actionable lists for sales

Every day or every week the team gets, in the tool it already uses, who to reach out to (abandoned cart, unclosed quote, lapsed customer), with no repeat contact and knowing afterwards who bought.

## Executive summary

**For:** Retailers and e-commerce businesses with a sales, service or SDR team that reaches out to customers proactively.

**What it solves**

- The team gets the list ready in its day-to-day tool, with no spreadsheet exports.
- No one is contacted twice for the same action, and neither is a customer who already bought.
- Every list comes back with the result: who bought, how much and how fast.

**Why it matters:** Nobody opens a dashboard when it is time to call; a ready list in the team's tool becomes a contact the same day. Without a send history, the same customer gets three outreaches and the brand loses their trust. Without closing the loop with the order, there is no way to know which action pays for the team's time.

**Business questions it answers**

- Which repeat customers abandoned a high-value cart this week?
- Which items are quoted most and closed least over the last few months?
- Which good customers have gone longer than usual without buying?
- How many customers from each list bought after the contact, and how much did they spend?
- Which salespeople have the most cards in negotiation, and how much value is stalled at each store?

**What you need**

- Online store, ERP or hub and CRM connected to Nekt
- The team's tool set up as a destination (ClickUp, CRM chat or WhatsApp)
- The rule for each action: who gets in, who gets out, priority and who receives it

**What you get**

- A table of eligible customers per action, with purchase context and priority
- Automatic delivery to the team's tool, in the format it requires
- A permanent send history that prevents repeat contact
- Feedback on who bought after the contact, with conversion rate per action

## Detailed

### The problem

The abandoned cart is in the online store, purchase history in the hub or ERP and the contact in the CRM, each with its own identifier. An eligibility query with no memory sends the same customer every round. The task that gets created stays open forever, because nobody links the later order to the contact. And the quote that never became an order does not even show up, because in the ERP it is not a sale yet.

### Business rules

1. **One action, one selection, one formatter.** Split into three steps: (1) selection of eligible customers for the current action, the only part that changes per action; (2) exclusion of those already sent; (3) formatting in the exact layout of the destination. The eligibility table carries the action name, so the history and the feedback know where each contact came from. (Avoid: A single query that selects, deduplicates and formats, rewritten for every campaign.)
2. **Abandoned cart with an explicit criterion.** Eligible: checkout with no completion date (completedAt null), with an identified customer, value above the action's minimum, each customer's latest abandonment in the window. Customers who placed an order after the abandonment are removed. To prioritize, join with ERP or hub history: customers who bought at least twice, with an average ticket above the minimum, in the order statuses that count as a sale. (Avoid: Every abandoned checkout of the week, including from customers who bought an hour later.)
3. **A quote only leaves the list when it becomes an order.** In the ERP, the sales pipeline mixes quotes and orders in the same stages. Treat it as an order only when the payment method has been entered on the installment; before that, it is an open quote. For the list of most-quoted, unclosed items, count quotes per item over the last few months and the conversion (quotes that became an invoice / quotes), linking cart to invoice by the full key (store and invoice number). (Avoid: Treating every card in a quote stage as lost, including those that already have a payment set.)
4. **Lapsed customer by last purchase in the ERP.** The last purchase comes from ERP invoicing, not from the latest CRM activity. Lapsed means the customer went past their own purchase cycle without coming back, prioritized by customer classification (A, B, C). Not every customer who buys has a CRM record: the list comes from the ERP and creates or updates the record. A dedicated win-back pipeline in the CRM separates reactivation contact from regular sales contact. (Avoid: Using "no CRM activity for 90 days" and ignoring customers who buy without a CRM record.)
5. **Normalized customer identity.** Join the online store and the ERP by CPF (individual tax ID) or CNPJ (company tax ID) as digits only, or by lowercase email. When the destination does not store the ID, embed the key in an extractable format: an "Email: <e-mail>" line in the task description, or the ERP ID in parentheses in the card title ("NAME (123)"). With no name, use "Unnamed customer (<id>)" instead of leaving it blank. (Avoid: Matching customers by name, or creating the task without any recoverable key.)
6. **Permanent send history.** Every round writes to an insert-only table: customer, reference (the cart, the quote), action and send date. Before sending, exclude anyone already in the history for the same action. The history is never overwritten by the next round; it is what guarantees idempotency when the send runs again. (Avoid: Comparing only with the previous round, or overwriting the send table on every run.)
7. **A resend compares with what is already in the destination.** Sends fail halfway. Before resending, read the tasks that already exist in the destination list, extract the key (the email in the description) and send only the missing ones. Run in test mode first, without writing, and make a send failure break the run so it shows up. (Avoid: Resending the whole round and duplicating the tasks that had already gone in.)
8. **Close the loop with the order.** Read back the open tasks in the list (customers to handle, negotiating, no reply, follow-up, did not buy). When the customer placed an order after the task was created, mark the task as "bought" and store the number and value of the first order. That way each action has conversion and revenue measured by the order, not by the manual status. (Avoid: Measuring the action by the status the agent set by hand.)
9. **Summary by salesperson, in the team's channel.** Besides the per-customer lists, send yesterday's summary by store every day in the CRM chat (sales and quotes, count and value) and the cards in qualification or negotiation by salesperson, with value. Exclude system and integration users from the ranking. The text sent is the same one that gets stored, for checking. (Avoid: A salesperson ranking with the integration user at the top.)
10. **Personal data out of free text.** List tables store flags (has phone, has document) and, when needed, a hash of the contact with the secret kept in the vault, not the data in clear text. Shared views show a masked CPF. Phone and email only appear in the final step, which writes to the destination. (Avoid: An intermediate table with CPF, phone and email in clear text, queryable by everyone.)

### The most used lists and who leaves them

Adjust window and minimum value per action.

- **Abandoned cart** → Latest abandonment per customer, above the minimum (`out: order after the abandonment`)
- **Unclosed quote** → Quote without a payment method (`out: became an order or invoice`)
- **Most quoted, unclosed items** → Top N items with % conversion (`weekly, window of months`)
- **Lapsed customer** → Past the purchase cycle without coming back (`out: new purchase in the ERP`)
- **After-sales return** → Customer with a scheduled service or maintenance (`out: visit recorded`)
- **Salesperson summary** → Yesterday's sales and cards in negotiation (`daily, CRM chat`)

### Definitions

| Metric | Definition |
|---|---|
| Eligible | customer who meets the action's rule on the round date and is not in that action's send history |
| Sent | distinct count of customers recorded in the send history, by action and round |
| Bought | sent customer with a valid order dated after the task was created, within the action's window |
| Action conversion | customers who bought / customers sent, by action and round |
| Action revenue | sum of the value of the first order after contact, by action and month |
| Time to purchase | days between task creation and the first order, median per action |
| Quoted item conversion | the item's quotes that became an invoice / the item's quotes, within the list's window |
| Lapsed customer | customer whose days since last ERP purchase exceed their average repurchase cycle, by classification |

### Pitfalls

- **Same customer every round.** The abandoned cart list had no memory, and the same customer became a task in consecutive rounds of the same action. How to avoid: Insert-only send history, filtered by customer and action before every send.
- **Duplicate resend.** A round failed halfway and was resent in full, creating duplicate tasks for those who had already gone in. How to avoid: Read the destination, extract the key from the description and resend only the missing ones.
- **Tasks open forever.** Customers bought after the contact and the tasks stayed as "to handle". The action seemed not to convert. How to avoid: Automatic feedback: an order after the task changes the status to bought.
- **A CRM win that is not a sale.** A closed pre-sales contact showed up as won in the pipeline and entered the results list as a converted customer. How to avoid: Conversion measured by the order in the ERP or store, not by the CRM stage.
- **Send broken by a large query.** Joining quoted items with the catalog produced a giant filter pushed down to the warehouse read, and the weekly send failed on a size limit. How to avoid: Disable broadcast join in the notebook, or pre-aggregate before the join.

### Acceptance test

- [ ] Running the same action twice on the same day, the second run creates no new task.
- [ ] No customer on the abandoned cart list has an order dated after the abandonment.
- [ ] For a closed round, sent = tasks created in the destination with the action in the description (zero difference).
- [ ] A test order placed by a customer on the list changes their task to bought on the next run, with the order number.
- [ ] Bought + did not buy + open equals the total sent for each action.

### Context document

```text
Actionable lists for sales
- Grain: one row per customer and action. The send history is insert-only (customer, reference, action, send date).
- An action's eligible customers exclude anyone already in the same action's history and anyone who bought after the event (abandonment, quote).
- Abandoned cart: completedAt null, identified customer, value above the action's minimum, latest abandonment per customer.
- A quote becomes an order when the payment method is entered on the installment. A cart links to the invoice by the store + invoice number key.
- Lapsed customer: days since last ERP purchase above the customer's average cycle. The last purchase comes from the ERP, not the CRM.
- Identity: CPF (individual tax ID) or CNPJ (company tax ID) as digits only, lowercase email. In the destination, the key sits on the "Email: <e-mail>" line of the description or in parentheses in the title.
- Bought = valid order after the task was created. Action conversion = bought / sent.
- A CRM win is not a sale. A sale is an order or invoice.
- System and integration users stay out of salesperson rankings.
- Do not expose CPF, phone or email in clear text in answers; use masked values.
Client exceptions:
- <client>: order statuses that count as a sale in the hub <list>.
- <client>: minimum value for action <action> = <value>; window <days>.
- <client>: system user IDs <list>.
```

### Variations

- **Workshop return visits:** Vehicle customers with a scheduled service and no recorded visit, with masked document, for after-sales to call.
- **Professional win-back:** Professionals who refer or buy for construction jobs and stopped buying, in a CRM win-back pipeline.
- **Best leads of the day:** Score by being an existing customer, pipeline stage and source, sending the top N to each salesperson.
