Live simulation
See the behavior we package.
How the data is made
Synthetic shoppers that actually browse.
Polanyi sends AI shoppers, each with its own goal, budget, and taste, to a real storefront. They search, compare, and reject like real customers, then stop before payment. Every decision becomes event data your recommender can learn from.
1 — Generate a population
Statistically grounded AI shoppers
Agent #4821 · now browsing
syn_4821Age
34
Location
Chicago, IL
Occupation
Physical therapist
Interests
Trail running, podcasts
Personality
Methodical
Preference
Price-conscious
Goal
Find running shoes under $130
Behavioral trajectory · 0 of 9 events captured
What you take home
Each run exports personas.json, recsys_events.jsonl (and .parquet) and summary.json. You bring them into your existing training and evaluation pipeline. Polanyi never touches your model.
Step by step
From a population of agents to a better recommender.
Here is each step in detail, using a real session our agents ran on amazon.com: who the agents are, what they set out to do, what they did, and what you receive.
We start with people who look like your market.
Every agent is built from a detailed synthetic persona: an age, sex, home town, education, job, household, hobbies and habits. The population is drawn so that, taken together, it matches real-world statistical distributions such as census data.
That matters because a recommender learns from the crowd. If the crowd skews young, urban or affluent, so do the recommendations. Matching the real mix means the behavior you get back reflects the shoppers you actually serve.
- Grounded in real data. Demographics follow published distributions rather than a writer's guess.
- Tunable to you. Narrow the population to your markets, age bands or customer segments.
Agents sorted by age vs. real-world share
Each dot is one released agent. Dashed outlines show the U.S. adult age mix (approximate census shares); agents are drawn so the two line up. The same holds for sex, region, education, occupation and household.
Each agent gets a reason to shop and a real browser.
An agent with nothing to do produces noise. So each one gets a concrete shopping goal that fits who they are: their persona, their budget style and what your store sells. Mary, a budget-minded 28-year-old in Madison, sets out to find wireless headphones and compare them properly.
Then we hand them a real web browser pointed at a real store. There is no script and no fixed path. The agent reads the page, decides where to go next and changes its mind, just as a person would.
- Different goals, different journeys. Gift buyers, deal hunters and careful researchers each move differently.
- Safe by design. Agents stop before sign-in, checkout or payment. Nothing is bought.
How one agent's goal is written
They browse the way people really do.
Once inside, the agent shops. Mary searched, sorted by price, narrowed to over-ear models, re-sorted by reviews, skimmed five results, opened four product pages and compared a $40 pair against $200–$450 alternatives before choosing the soundcore Q20i.
Depending on the store, agents also save and like items, pass on ones that don't fit, add to cart, rate and write reviews. What they skip says as much as what they pick: Mary looked at AirPods and Bose, then walked away from them.
- Comparison, not just clicks. Back-and-forth between products is where real preference shows up.
- The reasons come too. Each session ends with the signals behind the choice, like price and battery life.
Mary's real session · 17 recorded events
Recorded on amazon.com, October 2026. Darker dots carry stronger preference signal.
Every action becomes a clean, labeled event.
We record each step as a structured event: what happened, to which product, in what order, and how strongly it signals preference. Mary's 17-step session became 17 rows of training data.
Not every action means the same thing, and the labels say so. Seeing a product is exposure, not interest. Opening it is a weak signal. Saving, adding to cart, choosing or reviewing is strong. Your model learns the difference instead of treating every click alike.
- Kept separate from your customers. Synthetic events carry their own IDs and are never joined to real people.
- Only what was observed. We don't invent dwell time or scroll depth the agent didn't actually produce.
One recorded event, as delivered
How strongly each action counts as preference
Your recommender learns from far more behavior.
Most stores have the same problem: a few shoppers generate most of the data, and most products, especially new ones, have little or no history. Recommenders struggle there, so they fall back on bestsellers.
Synthetic journeys fill those gaps. You add them alongside your own user data to warm up a new model, give new products their first signals, and test ranking changes offline before real customers see them.
Your interaction data, before and after
Illustrative. Each row is a shopper, each column a product, each filled square a recorded interaction.
