AI for Laundromats: Upsell Wash-Dry-Fold From Your Transaction Data

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for AI for Laundromats: Upsell Wash-Dry-Fold From Your Transaction Data.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for AI for Laundromats: Upsell Wash-Dry-Fold From Your Transaction Data.

Export 90 days of card and app transactions, have ChatGPT or Claude group customers by washer loads per visit, and text a wash-dry-fold and delivery offer to regulars who run three or more loads, timed for your quiet weekday hours. Work out your cost per bag, delivery included, first, and hold back a control group to measure the result.

Only customers who pay by card or app have an identity in your data, so coin users stay invisible, and only those who agreed to marketing messages can be texted. Wash-dry-fold also pays only when you know what a bag costs to wash, fold and deliver. The first job is arithmetic, not copywriting.

Follow me on Instagram@sagnikteaches

What 90 days of card and app payments can show you

Most self-service payment systems log every cycle: the time, the machine, the amount, how it was paid and, for card and app users, a customer ID. Ask your supplier for a CSV export of the last 90 days. Ninety days smooths out a single odd week and still reflects the season. If your trade swings with term dates or holidays, pull the same 90 days from last year as well and keep the two files apart.

Connect on LinkedInSagnik Bhattacharya

These columns are enough:

Subscribe on YouTube@sagnikteaches
  • Timestamp of the cycle start.
  • Machine type, such as washer 20 lb, washer 40 lb or dryer, and ideally the machine number.
  • Amount charged for the cycle.
  • Payment method: card, app or coin.
  • Customer ID for card and app users. This is a number or code, not a name.

Be clear about what the file cannot tell you. Coin and cash customers have no ID, so some or much of your trade is invisible. The file counts cycles, not pounds of laundry, so "three washer cycles" is a proxy for a big load. Two people sharing one app account look like one very heavy user. And nothing in it says whether a customer would pay for someone else to fold their clothes. The data shows who already does a lot of laundry in your shop, which is where a folded bag saves the most time. Whether those customers value that time is what the four-week test answers.

One more gate comes before any analysis: consent. Marketing texts generally need the customer's agreement, and the rules differ depending on where you trade. Find out whether your sign-up screen records the opt-in, and text only people who agreed. Keep the record of when and how each agreed, and put a plain way to stop in every message. A solicitor or your data-protection adviser can check the sign-up wording in an hour. Customers who recently had a refund or a machine fault are best left out of any promotion, and how to manage an unattended laundromat covers handling fault calls and refunds so those records exist.

Quiet machine hours decide what you can promise

Wash-dry-fold turns your self-service machines into a small production line, so find out when they sit idle before you promote anything. Ask for washer cycles started per day in a handful of time blocks, then work out utilisation: cycles multiplied by the average cycle length, divided by machines multiplied by the minutes in the block. Time one or two real cycles for the cycle length rather than trusting the label. This illustrative shop has 12 washers and a 35-minute average cycle.

Time blockWasher cycles started per dayWashers in useWhat it means for wash-dry-fold
Mon to Fri, 07:00 to 10:001016%Drop-offs can be washed at once
Mon to Fri, 10:00 to 15:001818%The main production window
Mon to Fri, 15:00 to 20:005251%Busy; keep bag work out of the way
Mon to Fri, 20:00 to 22:002049%Fold only
Saturday, 09:00 to 17:0012878%Never run bags here if you can avoid it
Sunday, 09:00 to 17:0010463%Limited room

The pattern in this shop: weekday mornings and early afternoons run at under a fifth of capacity, and weekends are nearly full. A bag dropped before 10:00 on a weekday can be washed, dried and folded by the afternoon, so "ready next day" is an easy promise. Running bags through those hours costs you almost nothing in lost self-service trade. Running the same bag at 11:00 on a Saturday would displace a walk-in who pays about $6.75 for a wash and a dry (with a $4.50 wash and a $2.25 dry, which are illustrative prices), and that lost trade belongs in the bag's cost.

Check the clock before you trust that pattern. Some payment systems export time stamps in UTC (universal time) rather than shop time, which slides every block by several hours, and an export that puts your busiest hour at 02:00 on a Saturday has done exactly that. Compare the busiest hour in the file with the one you know from standing in the shop. If they differ by a whole number of hours, shift the column before you build the table, or the "quiet" mornings you plan bags around will turn out to be your evening rush.

In this shop the machines are not the limit. A bag takes about 25 minutes of attendant time, so twelve bags a day is five hours of folding and handling. That is a person, not a machine, and the question to answer is whether an attendant is already on shift, and paid, during those hours.

Grouping customers without handing over their phone numbers

Customer groups come from a few measures per customer ID: how many visits, how many washer cycles per visit, what they spend per visit and when they come. You can build them with pivot tables, but an assistant that can run code on an uploaded file does it in minutes. The pricing pages of ChatGPT and Claude both list that ability (data analysis and file uploads in ChatGPT, file creation with code execution in Claude), with limits on the free plans.

Before you upload, delete every column that identifies a person. Keep the customer ID as a number, and keep the phone numbers in your own sheet, where you will join them back to the results later. Then use a prompt like this one.

I am uploading 90 days of self-service laundromat transactions.
Columns: timestamp, machine_type (washer_20lb, washer_40lb, dryer),
amount, payment (card, app, coin), customer_id (blank for coin).

1. Ignore rows with no customer_id. Treat all rows for one customer_id
   on one calendar day as one visit.
2. For each customer_id compute: number of visits, average washer cycles
   per visit, average spend per visit, share of visits starting after
   17:00, and days since the last visit.
3. Assign each customer to one group:
   A = average washer cycles per visit of 3 or more AND 6 or more visits
   B = average washer cycles per visit of 3 or more AND fewer than 6 visits
   C = fewer than 3 cycles per visit AND 6 or more visits
   D = everyone else
4. Return a table of group sizes with the averages from step 2.
5. Return a CSV of customer_id and group.
6. List any rows you excluded and why. If a column is missing or looks
   wrong, say so instead of guessing.

A reply in the right shape would resemble this table (illustrative figures for the imaginary shop).

GroupCustomersAvg washer cycles per visitVisits in 90 daysAvg spend per visitVisits after 17:00
A: big-load regulars1183.49.2$23.8041%
B: big-load occasionals1643.22.6$22.1037%
C: light regulars3721.68.1$9.6029%
D: everyone else4961.31.8$7.4033%
Total identified1,150

Do not trust the table until you have checked it. Confirm that the four groups add up to the number of distinct customer IDs in the file. Pick three customers from the CSV and recompute their visits and spend by hand from the raw rows. Read the list of excluded rows, because that is where a faulty date column or a duplicated export shows up. Rules such as "same calendar day equals one visit" are simplifications: a customer who washes at 08:00 and again at 19:00 is counted once, and you should decide whether that suits your shop. If your plan cannot run code on a file, ask for spreadsheet formulas or a pivot-table recipe for the same steps instead.

The cut-offs (three cycles, six visits) are starting points. Look at how many customers each cut-off puts in a group and move them if a group is tiny or enormous. A group of 20 is too small to learn from, and a group of 600 is not a segment at all.

Who gets the text and who gets nothing

Groups A and B are the candidates. They already pay about $22 to $24 a visit to run three or more washer cycles and then wait for the dryers and fold, so they have the most time to buy back. Group A is the better first target because it comes back about every ten days, which means a trial can be judged within a month. Groups C and D wash small loads, and a per-pound minimum would cost them more than they spend now. Leave them out of this test; a loyalty offer suits them better.

The audience shrinks at each gate, and it helps to see the funnel before promising yourself a result. In the example shop, 1,150 customers have an ID. Groups A and B hold 282 of them. Of those, 180 opted in to marketing texts (80 in A and 100 in B). Half of those 180, which is 90, will get the text, and 90 will be deliberately left alone as a comparison. If your own funnel ends at thirty people, the test will be noisy, and you should lengthen it or widen the groups rather than draw conclusions.

The cost of a bag comes before the cost of a text

Wash-dry-fold is usually priced by the pound with a minimum order, and pickup and delivery either folded into the price or added as a fee. Laundromats' own published price pages commonly show that structure. Your own numbers decide the rest. Weigh and time a normal bag, read your utility bills and add up one bag's costs. The illustration uses a 15 lb bag at $1.80 a pound, which is the 15 lb minimum, so $27.00.

Item for one 15 lb bagBasis (illustrative)Amount
Price15 lb at $1.80 a pound$27.00
Attendant time25 minutes at $18 an hour, wages and extras included$7.50
Water, energy, detergent, softenerFrom your meter readings and invoices$2.10
Bag, tag, packagingYour supplier price$0.45
Payment feesAbout 3% of the price$0.81
Contribution before deliveryPrice minus the four costs$16.14 (about 60%)

Delivery is where the margin disappears, because the cost belongs to the route and not to the bag. Say a route takes 2.5 hours of driver time at $20 an hour and covers 18 miles at 60 cents a mile (your own per-mile figure should include fuel, wear and insurance). That is $50.00 plus $10.80, or $60.80 per route. The cost per bag depends entirely on how many bags the route carries.

Bags on the routeDelivery cost per bagContribution per bag after delivery, with a $4 fee
6$10.13$10.01
10$6.08$14.06
14$4.34$15.80

A $4 fee covers the delivery cost only when a route carries about fifteen bags ($60.80 divided by $4 is 15.2). Below that the fee does not cover the route, though each bag still earns something because the wash-dry-fold margin is large. The practical rule: sell delivery only on days when you expect eight or more stops, offer collection in the shop on other days, and set a minimum order that makes a stop worth driving to. Working out delivery cost per drop from route and fuel data takes the sums further, and route planning for small fleets covers keeping stops close together.

Offer texts: an AI draft and what to change

Give the assistant the facts of the offer (price per pound, minimum, ready time, drop-off window, first-bag discount and its end date) and ask for three short texts for groups A and B. Insist on the shop's name and an opt-out line. The first draft will usually sound like this (illustrative):

Hi [first name]! We noticed you wash three or more loads every visit. Why not let us handle it? Our award-winning wash-dry-fold service gets your clothes perfectly fresh and folded in 24 hours, guaranteed! Use code FOLD5 for $5 off. Reply STOP to opt out.

Six things need fixing. "We noticed you wash three or more loads" tells the customer you have been profiling them, which feels intrusive even when it is accurate. "Award-winning" is a claim you cannot support unless you actually won something. "Guaranteed" promises what a busy Saturday may break. "Perfectly fresh" says nothing a customer can check. The price, minimum and drop-off window are missing, so the customer cannot judge the deal. And the code has no end date, which makes it impossible to measure. The corrected version:

Hi [first name], it's [shop name]. Big laundry week? Drop a bag in before 3pm on a weekday and collect it washed, dried and folded the next day. $1.80 a lb, 15 lb minimum. First bag $5 off with code FOLD5 until 30 Nov. Reply STOP to opt out.

It names the benefit (time), the terms and the deadline. It also hints at what you know ("big laundry week") without showing your workings. Test two or three angles against each other, one per sub-group, so you learn which one works.

AngleDraft (shortened)Send toWhat it tells you
Price-ledFirst 15 lb bag $5 off with FOLD5 until 30 NovHalf of each groupWhether a small discount is needed at all
Time-ledSkip the Saturday queue: drop off on a weekday, collect folded next dayHalf of each groupWhether the weekday promise sells without a discount
Delivery-ledFree collection and delivery for orders over 20 lb on Tuesdays and ThursdaysGroup A onlyWhether delivery wins orders that price cannot, and whether routes fill

The delivery-led text needs care, because a free-delivery threshold changes the route economics. At $1.80 a pound a 20 lb order brings in $36.00, and free delivery gives up the $4 fee. On a route of ten bags the delivery cost per bag is $6.08, which the order's margin absorbs comfortably. On a route of six it is $10.13, which takes a much bigger bite. Offer free delivery only on the two days you have decided to run routes, and say the days in the text.

A four-week test with a hold-back group

Without a comparison group you cannot tell whether the offer worked or the weather did. Split the 180 opted-in customers at random into two halves inside each group (40 and 40 in A, 50 and 50 in B). Text one half. Leave the other half alone, and give both halves the same wash-dry-fold service, price list and shop signage, so the only difference is the text. Record every wash-dry-fold order for four weeks with the customer ID and whether it used the code.

Here are illustrative results.

MeasureTexted (90)Held back (90)
Customers who placed an order14 (15.6%)4 (4.4%)
Orders placed317
Orders using the delivery service12not counted

Four held-back customers still ordered, seven orders between them, because they saw the sign in the shop, which is why the comparison matters: counting all 31 orders as the text's work would overstate it. The extra orders attributable to the text are 31 minus 7, which is 24. Now the sum, using the $16.14 contribution per bag from the cost table.

  • Contribution from 24 extra orders: 24 × $16.14 = $387.36.
  • First-bag discounts: 14 customers × $5 = $70.00.
  • Delivery shortfall: 12 deliveries at $6.08 cost against a $4 fee, so 12 × $2.08 = $24.96.
  • Time to build, send and record, about 2.5 hours at $20: $50.00.

Net: $387.36 less $70.00, $24.96 and $50.00 leaves about $242 after four weeks, from 90 texts. That is a good result for an afternoon's work, and it understates the value if the 14 customers keep ordering. It is also a small sample. Fourteen against four is a nudge, not proof, so repeat the test on a second batch before you rebuild a service around it.

Decide the rule before you see the data, to avoid talking yourself into a result. Something like this works: extend the offer to the next group if the texted half converts at least twice as often as the held-back half and the net, after discounts and delivery, is positive. If it does not, change one thing (the discount, the minimum or the angle) and test again. If a texted customer's order gap grows longer than their usual interval, a reminder is the natural next message; winning back lapsed customers with AI-personalised messages covers how to write one.

When the numbers say not to deliver

Sometimes the arithmetic says no. If your route cost per bag stays above the fee at every realistic bag count, you have three honest choices: raise the fee, raise the minimum order, or offer wash-dry-fold with shop collection only. A fourth choice, free delivery to win volume, is only sound if the contribution after delivery stays positive at the lowest route you will actually run. Check the six-bag line of the table, not the fourteen-bag line.

Two practical cautions come with taking customers' clothes away. Ask your insurer whether garments in your vehicle and in your care are covered, and what the policy says about loss and damage. And label every bag at drop-off, because a lost or mixed-up bag costs far more than any discount you gave. How dry cleaners and laundries use AI for orders and collections shows what a tidy collection process looks like.

The assistant's part in all this is narrow and useful: grouping rows, drafting texts, summarising results. It cannot know your cost per bag, whether your customers agreed to be texted, or whether a route is worth driving. Those answers come from your invoices, your sign-up records and your own timing of a normal bag, which is why they come first.

Questions laundromat owners ask about using their data

Can I use this if most customers pay with coins?

Only partly. Coin customers have no identity in the data, so you cannot group or text them. You can still find idle hours and set prices from all cycles. To reach coin users, put the offer on a sign and a card in the shop, and offer a loyalty card or app sign-up with a clear opt-in so more of them join the data.

Do I need permission before texting customers?

Marketing messages usually need the customer's agreement, and the rules differ depending on where you trade. Text only people who opted in, keep a record of when and how they agreed, and include a simple way to stop. Ask a solicitor or your data-protection adviser to check your sign-up wording.

What if my payment system cannot export customer IDs?

Ask the supplier whether a report with customer or account IDs exists, because some systems keep it in a different report or plan. Without IDs you can still use the export for idle hours and machine mix. For customer groups, run a loyalty sign-up for a month, then analyse that group.

Is it safe to paste transaction data into a chatbot?

Keep names, phone numbers and emails out of the file and use the customer ID only. Join the results back to phone numbers in your own sheet afterwards. Use a work account, and check the model-training switch in the privacy settings if you are on a consumer plan, since business plans do not train on your content by default.

Further reads

Sources: ChatGPT and Claude plan pages (data analysis and code execution on uploaded files), checked October 2026; published price pages of laundromats for how wash-dry-fold is usually priced (per pound with a minimum). All worked figures are illustrative.

Want your transaction data turned into offers?

On a 1:1 call we'll look at what your payment system can export, pick the first customer group worth texting, and work out your cost per bag before you promote wash-dry-fold.

Book a 1:1 call with me