Stitchwork Docs

Leads & re-engagement

Five lists that answer five different questions: who asked to be rung, who is shopping right now, who left money in a basket, who is due to buy again, and who owes a balance. Every row says who already has it, and one click puts it on somebody's list.

Where it fits

Follow-ups is what your team has committed to doing — a customer, an owner, a day. This is the page above it: the evidence, unclaimed, waiting to be turned into a commitment.

The two are a pair, and the order matters. A shop with an empty follow-ups list has either done all its work or has nowhere to find any. Leads in the sidebar is where you find it.

Everything here is already in your data

No list on this page asks you to enter anything. They are built from what your tracking tag, your orders and your quotes already know. If a list is empty, that is an answer about your shop rather than a setup step you missed — with one exception, noted under Why a list is empty.

The figures at the top

Four numbers, describing the same population from different angles.

FigureWhat it counts
Repeat rate The share of your buyers who ever came back. The number this whole half of the product exists to move.
Bought once Customers with exactly one order. Usually the largest and most winnable group you have.
Due to buy Buyers at or past the point their next order normally lands. The ones who have been quiet far longer than that are in here too, marked — see Due to buy.

Repeat rate reads — rather than 0% when nobody has bought yet. "Nobody returned" and "nobody bought" are different answers and the page will not conflate them.

Where "due" gets its numbers

From your own orders. The line under the figures says how long a first-time buyer normally takes to come back and how long everybody else takes — and where those came from:

This is said out loud on purpose. 120 days is right for a mattress shop and absurd for a coffee subscription, and a page that keeps asserting "due" owes you an answer to says who. Change them under Settings → Retention.

The five lists

There is deliberately no combined "priority" list. These are five different conversations, and one merged feed would have to open all five with the same sentence — which is how retention outreach ends up sounding wrong for everybody it reaches.

TabWho is on itWhat the call is
Callbacks Typed their number into a message on your site while still anonymous They asked. Ring them.
Shopping now Browsing hard, never bought A first sale
Left in basket Got as far as the checkout and stopped — one row per basket, not per attempt "Your order didn't go through — shall I sort it?"
Due to buy At the point their next order normally lands, most overdue first An ordinary moment to be useful at — or, at the far end, a win-back
Awaiting balance Paid a deposit, balance still outstanding Money owed on a sale you have already made

The page opens on Callbacks whenever anything is waiting there, and on Shopping now otherwise. Each tab carries a sentence saying what the list is — and, as much to the point, what it is not.

Callbacks — they asked to be rung

The warmest thing Stitchwork can hand you. Every other list is inference: somebody looks interested, somebody has gone quiet. This is a person who typed their number and asked to be called.

They arrive from a nudge with a phone CTA. Where the browser was already a known customer, the request becomes a follow-up immediately and never appears here. This queue is the other case: a browser nobody has a name for yet.

Each row carries what you need to open the call:

Claim it is what you press after the call.

Ring them first — claiming needs their email

A Stitchwork customer record requires an email address, and a phone number is not one. That is why these are a queue rather than follow-ups already: there is no customer record to owe the obligation to. Claiming asks for the address you took on the call, which is the only honest way past it — Stitchwork will not invent a placeholder and put a fake person in your customer list.

Give the name and address, plus a note about what the call was about, and four things happen at once: the customer record is created (or matched, if that address is already one of yours), every page they browsed before the call becomes their history, a follow-up opens against them, and the callback leaves the queue.

No answer is the other end — a mistyped number, a bot, a test during setup. It asks for a sentence saying what happened, and it means it: no follow-up will ever exist for this person, so that sentence is the entire record. A queue whose rows vanish without explanation is one nobody trusts the second time.

Two people can work this queue at once safely. If a colleague claims a row a moment before you do, you are told so rather than quietly overwriting their work. Every claim and every dismissal goes in the audit log — this is a decision about somebody outside your company who asked to be contacted.

Shopping now — a first sale

Customers browsing, searching, carting or being quoted, who have not bought in the same window. Sorted by intent.

The important thing on each row is not the score — it is the reason: "two cart adds, six product views". That is a sentence somebody can open a conversation with. Handed only 0.63, a salesperson will invent the reason, and the invented one is what reaches the customer.

Use the window control to widen or narrow how far back the behaviour counts — 30 days for fast-moving stock, a year for considered purchases where somebody researches for months.

Somebody who bought last year and is circling something new belongs on this list and is on it. Purchases are counted over the same window as everything else, so having ever bought does not exclude anyone forever — and their row says has bought before rather than "never purchased", so nobody opens by welcoming a regular.

What the list leaves out by default is anyone who bought inside the window. Include recent buyers adds them: the customer who bought three weeks ago and is already looking at something else. They are not lapsed, will not be for months, and are not due yet — so without that control they fall through every list on this page. Off by default, because the ordinary question is still who is about to buy their first thing.

Left in basket — what was left at the checkout

The opportunity scan, grouped one row per basket: four goes at the same sofa in half an hour is a card declining, not four changes of mind, and it is one phone call. Each row carries what was in the basket, how many tries, how long ago, which store, and — where it applies — what they did buy since, when that was not enough to cover it.

Biggest baskets first. Anyone who has since spent enough to cover the basket is held back rather than rung about an order they already placed, and the line under the tab says how many were held back and how many baskets had nobody to ring (a guest checkout with no email). It is the same scan, with the same rules, that the agent's find_abandoned_orders reads.

Awaiting balance — money owed on a sale you already made

Customers who paid a deposit where the balance has not arrived. This is the one list on the page that is not a prediction: everywhere else Stitchwork is telling you who might buy, and here it is telling you what you are owed on something already sold. Every row carries what the order was for, what has been paid, what is left, and how long since the deposit landed.

Longest wait first. A balance sitting for four months is usually a problem — a slipped delivery, a customer having second thoughts, a job nobody picked up — rather than a bigger version of one sitting for a week, and sorting by value would bury it under whichever order happens to be dearest. Switch to Largest balance first if you would rather work it by size.

Nothing here is "overdue"

Stitchwork does not know your payment terms or your delivery dates — those live in your own paperwork — so it cannot tell late from early. Every row says how long since the deposit landed, and nothing more.

A kitchen booked for March is not late in February. Deciding which of these is actually a problem is your job, and the page is deliberately built so it cannot pretend otherwise.

Empty can mean two different things, and the page says so: either every sale has been settled, or deposits are not being recorded. An order that was part-paid but marked paid carries no balance to find — see Orders for how to record one.

Due to buy — an ordinary moment, and a win-back at the far end

Customers at or past the point their next order normally lands, measured against your shop's own rhythm. A one-time buyer is judged against the gap between first and second orders; everybody else against second-to-third, because those are genuinely different intervals and one blended number describes neither.

Order it three ways, and every one is a column you can see on the row:

There is no blended score behind those, deliberately. A colleague asking "why is Sarah above David" deserves a better answer than "she scored 0.71".

Due and back on the site

Narrow the list with Back on the site in the last 30 days and you get the best call this page produces: somebody at the point their next order normally lands who is also browsing right now. Every row says both — last ordered eight months ago, back on the site yesterday.

It is off by default, so the tab always opens on the whole list. A control that quietly removes people is worse than no control.

Where "Lapsed" went

There used to be a fourth tab for it. It selected buyers whose last order was older than a shop-wide window — but Due to buy already selects everybody past a shorter window and sorts the most overdue to the top, so every lapsed customer was on both lists and the same two names led both. One measurement, cut twice, presented as two ideas.

The two conversations are still real, and Due to buy carries both: a week past due is an ordinary catch-up, two years quiet is a win-back, and the rows at the far end say long overdue — not an ordinary catch-up so nobody sends a we-miss-you email to somebody who bought six weeks ago. What went was a second list, not the distinction.

What a shop usually means by lapsed is a regular who stopped — somebody who bought six times and has not been seen since March. That is a comparison against that customer's own rhythm rather than the shop's average, which is real work rather than a filter, and a tab that looked like it and was not is worse than no tab.

What every row says

Under the evidence on each row is a line saying what is already happening with that person, so the same call is never made twice:

Phone numbers and email addresses are links, so a row read on an iPad on the floor can be dialled rather than retyped.

Turning a lead into work

Nothing on this page is an obligation until somebody makes it one, and making it one is a click on the row:

Claiming a callback raises a follow-up for you as part of the claim, because the claim is the call.

One open follow-up per customer, enforced in the database. If the same person turns up on three of these lists — which is common and usually meaningful — they still owe one phone call, not three.

Where new leads come from

Two of the four lists need only your order history. The other two need the tracking tag, because they are about behaviour rather than purchases. Three things bring genuinely new people in:

Contact form enquiries

A message through your own contact form does three things: resolves the sender to a customer, attaches the browsing that led up to the enquiry, and stores the message on their record under Messages.

It also opens a follow-up, due today, carrying their subject line or the opening of their message — their words, not a summary of them. That line is read in the minute before somebody rings back, and a paraphrase is a chance to be subtly wrong about what a stranger asked for.

Somebody who sends three messages in an afternoon owes you one reply, not three. The email notification still goes out as well — but an inbox is a notification and a follow-up is an obligation, and only one of them gets noticed when it is ignored.

Why a list is empty

ListEmpty usually means
Callbacks Good news, or you have no nudge running with a phone CTA. Only a phone CTA fills this queue.
Shopping now Most often the tracking tag is not installed, or consent is blocking events. Without it there is no browsing to read.
Left in basket Unfinished checkouts arrive from your order feed or an import — an order marked draft, pending or abandoned with money still in it. None recorded, none to show.
Due to buy Not enough order history to have a rhythm yet, or genuinely nobody is due. Both are fine answers.

If you are restricted to particular channels, every list here is narrowed to customers seen on those channels. A colleague with wider access will see more than you do, and that is working as intended.

"Showing the strongest matches only" on the Shopping now list means your workspace has more engaged customers than one page can score. It is not an error — but "that is everyone" and "that is everyone we looked at" are different claims, and the page will not make the first one when it means the second.

Working it programmatically

The lists you see on this page are drawn by endpoints under /api/v1/lead-desk, authenticated with the browser session of a signed-in user — the same arrangement as every other screen in Stitchwork. As with those, there is no credential you could hold and nothing you could call them with from outside, so they are not part of the integration surface.

To read these lists from your own tooling, use the MCP connector. It exposes all four, reading the same code the page reads, with a credential you can actually hold.

Not to be confused with /api/v1/leads

That path is the demo-request form on the Stitchwork marketing site — a different thing entirely, with no workspace behind it and no relationship to anything on this page.

Using it from an AI agent

Everything on this page is also in the MCP catalogue, reading the same lists — so your agent and your shop floor cannot rank the same two people differently. What the agent does not get is the row's buttons: it can raise a follow-up through create_follow_up, and cannot take, reassign or merge anything.

TabTool
Callbackslist_pending_callbacks
Shopping nowfind_high_intent_customers
Left in basketfind_abandoned_orders
Due to buyfind_repeat_candidates
Awaiting balancefind_outstanding_balances

find_lapsed_customers is also there, and it is the far end of find_repeat_candidates rather than a fourth list — the same axis, cut further out, so everybody it returns is already on the due list with a lapsed flag. It is worth calling for one thing the due list cannot express: active_since_days, which narrows it to long-quiet buyers who have started browsing again. Those are people already back on your site who have not bought, and it is the sharpest cut in the product.

The morning_run playbook works the lead lists in order, opens with the callback queue, and stops to ask you what to file. Ask for it by name, or just say "work today's round".

Your agent cannot claim a callback, and does not see the number

list_pending_callbacks is read-only, and phone numbers are left out of what it returns. Claiming needs an email address that only exists once a person has made the call, and a stranger's mobile — given to one shop, for one purpose — is not something to copy into a chat transcript. Your agent tells you who is waiting and what they were looking at; the number is on this page, for whoever is going to dial it.

Next