04.07.2026 offerhopper.ai team 4

How offerhopper.ai Knows What You Actually Mean

How offerhopper.ai Knows What You Actually Mean
How Offer Hopper understands you. — Photo by T S on Unsplash

You type "milk" on your list. No quantity, no unit. A basic app searches for the cheapest product containing the word "milk" and hands you a 200ml condensed milk. offerhopper.ai knows you probably mean a liter of fresh milk.


Price comparison apps compare what's easy to compare: identical products, matching units, matching package sizes. As soon as that breaks down — and in a real supermarket, it breaks down more often than you'd think — a gap opens up. The app still returns a result, but it doesn't match what you actually need.

offerhopper.ai closes that gap by asking a different question first: What do you actually mean?


What happens when you just type "milk"

Most shopping lists look like this: milk, butter, bread, tomatoes. No quantities, no units. That's normal — you know what you mean when you write the list. The problem starts when a system has to interpret it.

"Milk" without a quantity could mean:

  • 1 liter (the standard purchase)
  • 500ml (single household)
  • 200ml (for coffee at the office)
  • 6 liters (large family, weekly shop)

offerhopper.ai resolves this through quantity inference: for every product category, a learned default exists that matches typical shopping behavior in German supermarkets. Milk: 1 liter. Butter: 250g. Bread: 500g. Apples: 1kg. Toilet paper: 1 pack.

These defaults are based on the common package sizes the system finds during the search. When the available milk listings are predominantly 1-liter cartons, 1 liter is the sensible default.

If you specify a concrete unit, it overrides the default. "2 liters of milk" or "500ml milk" — the system takes what you say. If you write "6x milk", the quantity (6 pieces) is taken, but the right package size per piece comes from what's actually on the shelf. 6x milk means 6 one-liter cartons — because that's the standard single package. But if you just write "milk", you get the standard liter. And then the system finds the best deal for exactly that quantity — instead of just the cheapest product with the word "milk" in its name.


When grams and pieces don't match

You search for 500g salmon fillet. The shelf lists packages in "pieces" or "portions" — no gram weight on the price tag. A standard price comparison can't do much here, because it can't bridge grams and pieces.

offerhopper.ai bridges this gap with unit bridges — learned relationships between units within a product category:

  • 1 salmon fillet portion ≈ 180g (derived from available listings)
  • 1 roll of kitchen paper ≈ 75 sheets (median from search results)
  • 1 cup of yogurt ≈ 150g (standard market size)

These values aren't hardcoded. When the system processes a supermarket listing, it reads the physical structure: a pack of kitchen paper labeled "3 rolls, 100 sheets each" has three information layers — purchase unit (1 pack), contained quantity (3 rolls), content per roll (100 sheets). From this data, the system derives what "one portion" or "one roll" physically means for different products.

So when you want 500g salmon fillet and the shelf only knows "salmon fillet, 1 piece", the system calculates: 1 piece ≈ 180g, so you need 3 portions. The price comparison then runs on the correct quantity, not on the wrong result of "1 piece of salmon for €3.99 — cheapest hit!".


The right package for your quantity

Back to yogurt. You need 1 kg. The store has:

  • 150g cups at €0.49
  • 500g cups at €1.29
  • 1 kg tub at €2.19

A standard price comparison would compare per-100g prices and recommend seven 150g cups (cheapest unit price). That's 1,050g for €3.43. The 1 kg tub costs €2.19. The difference: you pay 57% more, because "cheap per unit" and "cheap for you" are two different things.

offerhopper.ai thinks in total cost for the required quantity:

What's the cheapest product or product combination that fulfills my actual requirement?

There's a configured tolerance: you asked for 1 kg. 950g works for the recipe too. This threshold prevents the integer explosion error — the absurd recommendation to buy 14 small cups because 13 would theoretically be too few.

And when a product is outside the offers database? The system estimates a realistic price using AI-based market data and marks it internally as synthetic — it gets scored lower than a verified offer in the optimization, but it closes the gap instead of leaving you without a result.


Price comparison vs. shopping optimization

A price comparison optimizes prices. offerhopper.ai optimizes shopping trips — including travel costs, time value, and basket effects.

In practice that means: the cheapest combination of package sizes for your actual quantity. The product that physically matches your request most closely. The best result considering distance, time, and your full basket — calculated via the complete cost function.

You type "milk" and get the right liter at the best price in the nearest store. No mental math, no unit confusion.

Try it out — type your shopping list and see what the system makes of it.

(What decision fatigue at the shelf feels like when you're facing nine options is covered in the article on decision fatigue in grocery price comparison. General questions are answered in the FAQ.)

offerhopper.ai

About offerhopper.ai

The AI-driven shopping route planner for expats and locals in Germany.