Inspiration

We kept seeing things we wanted and then losing them. A lamp in a café. A sweater on someone at the bus stop. A jacket in someone's Instagram post. Finding the exact item meant guessing what it's called, scrolling past dozens of look-alikes and comparing prices across tabs, and most of the time we gave up.

AI can already look at a photo and search for it. What it can't easily do is spend your money without making you nervous. So we built the version we'd actually trust: a shopping dog you name who fetches what you spot, and only spends inside rules you set yourself.

What it does

You take a photo of something, upload a screenshot, or share a post straight from Pinterest or any other app. Scout works out what's in it. If there are several things in the shot, like a whole outfit, it asks which one you mean.

Then it finds the item in real stores through Channel3 and checks each store's live price and whether your size is in stock. If the purchase fits your house rules (monthly budget, how much it can spend without asking, which categories are allowed, a separate gift budget, ask before a new store, only ship to saved addresses), Scout buys it with your saved PayPal. You get five seconds to undo.

If something breaks a rule, Scout stops and tells you which one, for example "$51.80 over your $100 limit", and waits for your fingerprint.

There's more around that core:

  • Watch a price and get a notification when it drops. If it hits your target, Scout buys it.
  • Send something as a gift, with a note.
  • Follow each order from store to door, with tracking added to the PayPal transaction.
  • Cancel before it ships and PayPal refunds you.
  • See what goes well with what you bought.

How we built it

The app is Kotlin Multiplatform with Compose Multiplatform. We built for Android first, and the shared UI is ready for iOS. The scrapbook look uses hand-drawn doodle icons, and Scout is drawn entirely in code.

The backend runs on Firebase: Cloud Functions in TypeScript on Node 22, Firestore, Firebase Auth, Cloud Messaging for approval notifications, and App Check.

On the PayPal sandbox we use:

  • vault setup tokens to link PayPal once without charging anything
  • Orders v2 so Scout can charge the saved account later with no redirect
  • the tracking API for shipment tracking
  • refunds for cancellations

For recognition, Gemini Flash-Lite and Claude Haiku race each other and the first good answer wins. They return every item in the photo with its position, colour, age group and department. Channel3 handles image and text search, live product details with per-size stock, "more like this", and price history for watches.

The house rules are plain code with unit tests, not a prompt. The model suggests a product, the rules decide whether money moves, and every decision goes into Activity with its reasons. Purchases are idempotent, so a retry can never charge twice. Data coming back from the app is signed so it can't be tampered with. Each user is rate limited, and the saved PayPal token never reaches the phone.

We made the demo video in Remotion from our screen recordings, with an ElevenLabs voiceover.

Challenges we ran into

Speed was the first one. On a slow day, Gemini took over 10 seconds just to recognise a photo. Racing it against Claude, and starting the image search at the same time, got us from photo to results in about 3 seconds.

Prices were the second. A search result once showed $44.97 for a jacket that cost $129.50 on the store's page, so now the rules always check the live price right before buying.

Real-world photos are messy. A kids' hoodie showed up in adult results, sweatpants matched dress trousers, and one product title came back in Norwegian. We added age and department filters (read from the clothing, never from the person wearing it), grouped related categories together, and locked results to US English.

The scariest bug was a purchase nobody tapped. A tap landed on Buy while the screen was still moving, and a network library quietly retried the request. We fixed both, and made every purchase idempotent from the app to the server.

Finally, real stores don't take sandbox payments. In the demo, PayPal pays our sandbox merchant and the store's side of the order is simulated, and the app labels it "Demo store · sandbox".

Accomplishments that we're proud of

The whole loop runs for real on the PayPal sandbox: link PayPal, snap a photo, get real products, check the rules, pay, track the order and get a refund.

We're also proud that the trust features are things you can see: the undo countdown, approvals that explain themselves, and an Activity log with a reason for every buy.

And we like Scout a lot.

What we learned

Most of agentic shopping is about trust. Finding the product turned out to be the easy part. People need to know where the limits are, and that the limits always hold.

We learned not to let a model make the final call on money. Plain rules, idempotent purchases and a live price check did more for safety than any prompt we wrote.

Running two AI models against each other also made the app faster and harder to break, which we didn't expect going in.

And PayPal's vault plus Orders APIs made "pay later, without the user present" much simpler than we feared.

What's next for Fetch-it

  • Real checkout with stores, once Channel3's checkout launches, or through an agent browser.
  • An iOS release from the same shared code.
  • Refining searches by voice: "cheaper, in blue, under $50".
  • PayPal webhooks, so refunds and reversals made outside the app show up in Activity.
  • Learning your fit from "how did it fit?" feedback.
  • Shared family budgets.

Built With

Share this project:

Updates

Submission history