AI for Thrift Stores: List Donated Items From a Phone Photo

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for AI for Thrift Stores: List Donated Items From a Phone Photo.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for AI for Thrift Stores: List Donated Items From a Phone Photo.

Photograph the item front, back and label against the same plain background, send the photos to an AI with a fixed intake prompt, and ask for a draft title, description and price range. Then a person checks the brand, size, condition and price against the photos and recent sold listings before anything goes live. The AI drafts; staff verify.

A thrift store's problem isn't a reseller's. One person lists their own stock at leisure, while a donation bench has a back room of items nobody knows the story of, volunteers with very different experience, and a rule that nothing risky goes out. The routine below is built for that bench. For a single seller's version, see the reseller's photo-to-listing routine.

Follow me on Instagram@sagnikteaches

The numbers below belong to an invented charity thrift store with one intake bench, a rota of volunteers and two part-time staff. It sorts about 300 donated items a week, puts most on the shop floor, and lists the 30 to 40 most promising online.

Connect on LinkedInSagnik Bhattacharya

Decide what is worth listing before anyone picks up a phone

The biggest time saving comes from not listing things. A photo, a prompt, a check and a parcel cost more than a paperback is worth. Write a one-page triage rule that volunteers can apply in seconds, with a threshold you set (an invented one is that an item goes online only when its likely sale price is at least twice what the shop floor would take for it). The rest is a short table:

Subscribe on YouTube@sagnikteaches
Item typeOnline?Reason
Branded clothing in good conditionYes, if the label can be readBrand and size drive the price
Ordinary paperbacks and mugsShop floorThe price doesn't repay the listing time
Small electricalsOnly after staff power them on and test themThe AI can't know whether they work
Child car seats, helmets, cots, mattresses, cosmeticsNever, unless your own policy says otherwiseSafety history or hygiene can't be checked from a photo. Set your policy and check the rules where you trade
Phones, tablets and laptopsOnly when wiped and signed outPersonal data and account locks
Items bearing luxury brand namesHold for a second checkCounterfeits exist, and the AI can't authenticate
Records, coins, medals and similar collectablesHold for a specialistValue depends on details a photo may not show

Put the never-list in the AI's instructions as well as on the wall. A tired volunteer on a Saturday afternoon will photograph the helmet if nothing stops them, and the prompt below stops them.

A five-photo routine at the intake bench

Consistency beats quality. A phone on a stand, a plain board or wall, window light and the same spot every time produce photos the AI reads accurately and buyers trust. Take five shots, and name each file with the item's ID so nothing gets separated:

  1. Front, the whole item in frame.
  2. Back, the whole item in frame.
  3. Labels, sharp enough that you can read the brand, size, fibre content and care text. If the AI can't read them, a buyer can't either.
  4. Flaws, every mark, tear, scuff or missing part, close up.
  5. Scale, the item next to a tape measure or ruler.

Before photographing anything, check pockets and compartments, remove personal items, wipe any device, and keep donors' names, addresses and faces out of the frame. Edit nothing except crop and brightness. Retouching the item itself, or generating a nicer picture of it, misleads the buyer and can breach a marketplace's picture rules, as what the eBay picture policy says about AI photos explains.

Measurements deserve a line of their own, because buyers of second-hand clothing rarely trust a printed size. A volunteer measures flat and says the numbers aloud, or dictates them into the staff-notes field: chest from armpit to armpit for tops and coats, length from the collar seam or waistband, and for shoes the inside length of the sole. Bags need height, width and depth. The AI can turn the numbers into a sentence, but do any doubling or unit conversion in the sheet. A pit-to-pit figure of 58 cm becomes 116 cm around only if someone multiplies it, and you don't want that to be a guess.

The intake prompt: fixed fields, quoted labels, flagged doubts

A free-form request such as "write me a listing" invites flattery. A fixed set of fields forces the AI to quote what it can see and say so when it can't. Keep it as the standing prompt in a single ChatGPT or Claude project, so everyone who runs it uses the same version:

You are helping a charity thrift store draft online listings. A member of staff checks everything before posting.
I will send photos of the front, back, labels, flaws and scale, then staff notes. Return exactly these fields:
BRAND: the text exactly as printed on the label, or UNREADABLE. Never infer a brand from a logo or style.
ITEM: what it is, in plain words.
SIZE: as printed on the label, or NOT SHOWN. Give measurements only if staff supplied them.
COLOUR:
MATERIAL: as printed on the label, or NOT SHOWN.
CONDITION: only flaws visible in the photos or listed in staff notes. Never write "excellent" or "like new".
TITLES: three options, 80 characters or fewer.
DESCRIPTION: under 120 words, facts only. Never write authentic, genuine, rare, vintage, designer, waterproof or working unless the label or staff notes say so.
PRICE RANGE: low, likely and high in USD, labelled "unverified guess".
FLAGS: anything staff should check. Write NEVER LIST for child car seats, helmets, cots, mattresses, cosmetics, or electricals not marked "tested".
Staff notes: [paste]

The AI's own character counts are unreliable, so don't trust the count it reports beside a title. Put the titles in the sheet and check them with =LEN(), flagging anything over 80. eBay's title limit is 80 characters, and other marketplaces set their own, so check the limit for the one you use.

What to do when the label is unreadable

UNREADABLE is a good answer, and it deserves a routine instead of a shrug. First, retake the label photo with the garment flat, the label under a window or a lamp, and the phone close enough to fill the frame. If the print has worn away, look for a second label: a care label, a hangtag, a stamp inside a pocket, a sewn-in tag at the collar. A style number printed on any of them can be typed into the marketplace's search to find matching sold listings. If every route fails, list the item as unbranded and describe it by what you can see, or send it to the shop floor. An unbranded item priced honestly beats a branded one that turns out to be something else.

One donated jacket from photos to listing

The jacket arrives in a bag of outdoor clothing. Five photos are taken, and a volunteer adds staff notes: "flat chest 58 cm pit to pit, length 74 cm, zips run smoothly, no odour, faint mark on left cuff". Here is the AI's first pass, with the brand names swapped for placeholders:

BRAND: [Brand A] (logo on chest)
ITEM: Men's waterproof hooded jacket
SIZE: L
COLOUR: Green
MATERIAL: Gore-Tex shell, 100% nylon
CONDITION: Excellent used condition
TITLES: 1) [Brand A] Men's Gore-Tex Waterproof Hooded Jacket Size L Green
DESCRIPTION: A premium waterproof jacket from [Brand A], ideal for hiking and everyday wear.
PRICE RANGE: low $90, likely $115, high $140 (unverified guess)
FLAGS: none

It looks professional, and five things in it are wrong or unsupported. The check is a walk through the photos with the draft beside them:

FieldThe draft saidWhat the check foundFix
Brand[Brand A], from the chest logoThe sewn-in label reads [Brand B]. The logo is a similar markQuote the label: [Brand B]
MaterialGore-Tex shell, 100% nylonThe label says shell: 100% polyester, and names no membraneShell: 100% polyester
Waterproof"waterproof"The care label says water-repellent finish"Water-repellent finish, as labelled"
ConditionExcellentFaint mark on the left cuff, light wear at the hem"Good used condition", with the cuff mark described
Price$90 to $140See the sold-listings check below$30 to $55, likely $43

The brand error matters most, because it moves the price by a factor of two or three. A volunteer who recognises the logo reads no further. A rule on the wall helps: "Read the sewn-in label and the hangtag, never the logo." The final listing, checked by a second person:

[Brand B] Men's Hooded Water-Repellent Jacket, Size L, Green

Men's hooded jacket by [Brand B], size L as labelled. Flat measurements: chest 58 cm pit to pit (116 cm around), length 74 cm. Shell: 100% polyester with a water-repellent finish, as labelled. Zip front and drawstring hood. Good used condition: a faint mark on the left cuff (photo 4) and light wear at the hem. Our staff noted no odour and smooth zips. Donated to [store name]; sold as seen.

The title lost three words on the way. An earlier version ended with "Good Used Condition" and, with a nine-letter brand name in place, ran to 81 characters, one over eBay's limit. The =LEN() column caught it, and the condition moved to the description, where it is spelt out in full anyway.

If your listing says where the money goes, the wording must match your finance policy. "All proceeds support [cause]" and "proceeds after costs support [cause]" are different promises, and the AI will pick the more generous one unless you give it the exact sentence.

Eight donated items: what the checks caught

A morning's batch shows the pattern. Every one of the eight needed a person to decide something, and none of the drafts reached a buyer unchecked:

ItemThe draft saidThe check foundOutcome
Men's jacketWrong brand, material and price (above)Label read; sold listings checkedListed, after edits
Set of mugs"Set of 6"The photos and a count by hand show 5Listed as a set of 5
Vinyl record"Rare first pressing"Nothing in the photos supports itHeld for a specialist volunteer
Handbag with a luxury logo"Authentic"The AI can't authenticate, and the stitching can't be judged from a photoHeld for a second check
Child's cycling helmetNEVER LIST flag from the promptRule working as intendedNot listed
Dress with no size labelSize 12, "guessed from the photo"No label. Staff measured it flatListed with measurements instead of a size
Table lamp"In working condition"Untested. A volunteer powered it on and it worksListed as "tested working by staff"
Electric kettleNEVER LIST flag (untested electrical)The shop has no safe way to test kettlesNot listed

Four listed, two held and two not listed. The tally is worth keeping each week, because the held pile tells you whether you need a specialist volunteer, and the not-listed pile tells you whether the triage rule on the wall is clear. A second tool exists for sellers on eBay: its own Magical Listing feature drafts a listing from a photo inside the app. Trade-press coverage and seller reviews report that it can misidentify items and leaves many clothing details, such as fabric and fit, for the seller to fill in, and the seller still answers for what the listing says. The same checks apply, and the tutorial on testing its item specifics against sold data shows how.

When a lot beats single listings: twelve hardbacks

Not every donation should be listed one piece at a time. A donor leaves twelve matching hardbacks from one series, each worth about $4 on its own. Listed singly, each takes about 5 minutes to photograph, draft, check and post, which is an hour of bench time for $48 of potential sales, or $0.80 a minute. Listed as one lot with a single set of photos and a single check, say eight minutes of work for a $30 sale, it earns $3.75 a minute. The lot takes less money for the same stock but uses far less of the bench's time, and the stock leaves the building.

The AI helps with the lot's description: ask it to list the titles it can read from the spines, then count them yourself, because a lot described as twelve that holds eleven brings the same dispute as the mug set. The same sum, value per bench minute rather than value per item, is a handy test for every borderline donation. Both sets of figures are invented, so use your own average time per listing, which the intake sheet will give you after a fortnight.

Price ranges: treat the AI's number as a question

The AI's price range comes from patterns in text it has seen, not from what sold last week. In the jacket's case it was out by a factor of two or more. Check it in five steps:

  1. Search your marketplace for the exact brand, item type and size, and filter to sold items. eBay's Seller Hub also has Product Research, which is free to all sellers.
  2. Record the ten most recent sold prices for items in the same condition.
  3. Take the median, the middle value, with =MEDIAN() in the sheet.
  4. Price at or just below it. If you find fewer than five comparable sales, write "price unknown" and hold the item for a second opinion.
  5. Write the source and date in the sheet, so a later check can see where the number came from.

For the jacket, ten invented sold prices were $32, $35, $38, $40, $42, $44, $45, $48, $50 and $55. The median is $43, the average of the middle two (42 and 44). The AI's likely price of $115 was about 2.7 times that, and a listing at that figure would have sat. Listing at $42, just under the median, follows step 4. After fees and postage, that sale still has to beat the shop-floor price by your threshold, so check your marketplace's current fee page before you decide an item belongs online. For a faster way to price donated items on the shop floor, charity shop pricing with AI covers that side.

Condition notes only a person can write

The AI sees a photo. It can't smell the coat, feel a fastener stick, or hear the speaker crackle. So a good intake sheet splits the condition note into fields that say who is responsible for each:

FieldWho fills itExamples of what goes in it
OdourStaff, by noseNone, smoke, mould, perfume
Marks and stainsPhoto, then staff confirmLocation and size: "faint mark, left cuff, about 1 cm"
WearStaffCuffs, hems, soles, corners, hinges
FunctionStaff, testedZips run, buttons present, lamp powers on
Missing partsStaffOdd lid, no charger, one earring
Cleaned?Staff, only if trueLaundered, wiped, or sold as received

Two phrases are banned from every draft: "smoke-free home" and "pet-free home". A thrift store doesn't know the donor's home, and the claim would be invented. For a ready-made layout, the eBay description template for flaws and measurements goes into more detail.

The intake sheet that keeps volunteers honest

One row per item, with the ID stuck on the item and in every photo's file name. The columns that matter are who checked, what the price rested on, and what happened. This is the invented sheet for four of the morning's items:

IDItemBrand (as on label)Checked byStatusPrice rests on
T-0412Men's hooded jacket, L[Brand B]AKList at $4210 sold listings, median $43
T-0413Mugs, set of 5UnbrandedAKList at $146 sold listings, median $14
T-0414Vinyl recordLabel as printedPendingHoldNeeds a specialist
T-0415Child's cycling helmetn/aJMNot listedNever-list

The initials make the check real. A listing with a name next to it gets read twice, and when a buyer disputes a description, you can see who verified it and from what. One rule keeps it honest: the checker is never the person who photographed and drafted the item. Fresh eyes catch the cuff mark that the photographer stopped seeing.

Photo limits and costs on each AI app

This workflow sends a lot of images, so file limits matter more here than in a text-only job. As of late October 2026, OpenAI's file-upload help lists 3 uploads a day on the free plan and up to 80 files every 3 hours on paid plans. Whether photos count the same way as other files isn't clear from that page, so test your own plan before you rely on it. Claude accepts up to 20 files per chat, and Gemini's app takes 10 files per prompt. Five photos per item fits all three, but it argues for one chat per item, which also stops details leaking from one donation to the next.

If one staff member runs the prompt, the $20-a-month individual plans (ChatGPT Plus, Claude Pro) cope with a bench doing 40 listings a week, though vendors change prices. If several people will run it, a business tier gives each of them a seat under the shop's control. ChatGPT Business and Claude Team cost $25 a seat when billed monthly, with two seats as the floor, and business content stays out of model training by default. Individual plans are generally meant for one person, so read the terms before a rota of volunteers shares one login. Either way, delete photos from personal phones once they are in the shared folder.

A bench card volunteers can follow without asking

Everything above compresses into a card that sits by the phone stand. Keep it to one side of paper, and change it whenever the checks catch something new:

  1. Triage first. If it's on the never-list or the shop-floor list, stop here.
  2. Check pockets, remove personal items, wipe any device.
  3. Take the five photos, and name each file with the item ID.
  4. Measure flat, and say the numbers aloud for the notes.
  5. Run the intake prompt, one chat per item.
  6. Read the sewn-in label and the hangtag, never the logo.
  7. Check the price against ten sold listings. Fewer than five comparable sales means hold.
  8. Pass the sheet to a second person to check. They sign, then it posts.

New volunteers will break a rule or two in the first week. That is a signal to reword the card, not a reason to loosen the checks, and the held pile tells you which rule needs rewording. The wider job of getting volunteers settled is covered in volunteer onboarding for charities.

Is the bench getting faster without getting sloppier?

Five tallies answer that, and all of them come from the intake sheet and the marketplace's order history:

  • Items listed per volunteer hour: listings published divided by bench hours. You want it rising while corrections stay flat.
  • Corrections after posting: listings you had to edit because a claim was wrong. It should fall towards zero.
  • Buyer disputes: returns or complaints that say the item wasn't as the listing described. Zero, or close to it.
  • Price accuracy: the sold price against the price you listed at. Set your own tolerance and watch for drift in one direction.
  • The held pile: items waiting for a second check. It should clear within the week.

The time sum is simple. If a volunteer lists 6 items an hour by hand and 10 with drafts and checks, a 40-item week takes 6.7 hours instead of 4, which frees about 2.7 hours. Those rates are invented, so time your own bench for a fortnight before and after. If corrections rise as speed does, slow down: the checks are what the process is for.

Questions thrift store managers ask about this

Can AI authenticate designer items from photos?

No. It can read what is printed on a tag, but it can't tell a genuine item from a convincing copy, and a confident 'authentic' in a listing is a claim you would have to defend. Hold luxury-brand items for a second check by someone who handles them regularly, or by a specialist authenticator, and decline to list anything you can't stand behind.

Should the listing mention that the item was donated?

If you want to, say it plainly and say what the sale supports, using wording your finance lead has approved. 'All proceeds' and 'proceeds after costs' mean different things. Don't let the AI write that claim, because it will round up. Many shoppers like the story, but the item facts matter more.

How many photos does each item need?

Five covers most items: front, back, the labels, a close-up of any flaw, and one with a tape measure for scale. Marketplaces allow more, and eBay accepts up to 24, but extra photos help only when each answers a question a buyer would ask.

Can volunteers use their own phones?

They can, if your policy says how. Photos should go straight into a shared folder rather than a personal camera roll, any AI account should sit under the shop's control rather than a volunteer's personal login, and the photos should be deleted from the phone after upload. Keep donors' personal items out of the frame.

Further reads

Sources: trade-press coverage and seller reviews of eBay's Magical Listing tool (seen in search results, October 2026); eBay's title, photo and Product Research help; OpenAI, Anthropic and Google help pages on file limits (late October 2026). Items, prices and sold-listing figures in the examples are illustrative.

Want donation intake turned into listings, safely?

On a 1:1 call we'll walk through your intake bench, decide which donations are worth listing online, and set up a draft-and-check routine that volunteers and staff can follow.

Book a 1:1 call with me