← Matviy Korsunskiy
World of Luxury ↗

Luxury watches and jewelry, Aventura FL  ·  ~$500K/yr on Shopify  ·  retained 8 months

A voice agent that checks 5,000 live products

01

Why a human VA fails at this task

02

How it works

Layer 1  Keeping the product list up to date

n8n’s built-in Shopify node only pulls 50 products at a time. Looping it enough times to get through all 5,000 kept hitting Shopify’s rate limit and switching the workflow off.

I replaced it with a custom request that pages through Shopify 250 products at a time, which is 5x faster and runs without me touching it.

It updates the existing record rather than adding a new one, so a price change edits the product instead of duplicating it.

Fig 1 Pulling every product out of Shopify, page by page
Pulling every product out of Shopify, page by page
The arrow from Has More Products? back to Build Request is the loop.
Fig 2 The same loop for orders, slowed down so Shopify does not block it
The same loop for orders, slowed down so Shopify does not block it
The same loop with one addition: a Wait node between rounds. Without it the loop goes fast enough to hit Shopify’s rate limit, which is what was quietly killing the workflow before.

Layer 2  Finding the right watch while the caller waits

The agent can call 3 lookups in the middle of a conversation.

Each one does the same thing: take what the caller said, clean it up, search the product list, rank the matches, and hand back the best one in a form the agent can read out loud.

A product page showing the 3 matchable fields
A real listing. These 3 fields are everything the agent has to match against.
  • 1Product nameLong and brand-heavy. This is what callers mispronounce and what speech-to-text mangles.
  • 2PriceThe tiebreaker. When a name hits a cluster of near-identical pieces, price separates them.
  • 3Model numberDigits, letters, dots, and a Preowned- prefix only some products carry.
Fig 3 Finding a watch by name and price
Finding a watch by name and price
Extract & Normalize cleans up what the caller said, Airtable returns everything that might match, then Fuzzy Match & Rank narrows it to one.
Fig 4 Finding a watch by model number
Finding a watch by model number
The same flow pointed at the model number instead. Most of the work is stripping out the capitals and punctuation that make an exact search return nothing. 90 to 95% correct across 5,000 products.
Fig 5 Looking up an order, with a live check if it is missing
Looking up an order, with a live check if it is missing
Note the branch to Run Order Sync. If the order has not been saved yet, this fetches the newest orders straight from Shopify and then answers, instead of telling the caller it cannot find them.

It asks instead of guessing. If a model number matches more than one watch, the agent asks for the price and narrows it down. A pronunciation list keeps the brand names spelled correctly on the way in.

Layer 3  Turning each call into a lead the owner sees

Every finished call saves the transcript, the recording, the caller’s details and a link to the exact product they asked about.

A scheduled workflow gathers the overnight calls and emails them before the shop opens, because the owner was never going to log into a dashboard.

Fig 6 The email the owner gets before opening
The email the owner gets before opening
The If gate is the part that matters: a quiet night sends nothing rather than an empty report.

03

The results, counted by hand

I listened to every call in a recent sample and tagged each one: when it came in, what they wanted, how it ended, and whether a lead was actually captured.

89%of calls arrive after hours
90–95%correct product from 5,000
78%of genuine inquiries become a lead
$21–302Krange of pieces asked about

Stack

Retell AI n8n Airtable Shopify

More work

If any of this is the shape of your problem, I’d like to hear about it.

Eastern time, New Jersey, US
Client names and internal details omitted where I am under confidentiality.