Batch: send a list of URLs, collect every resultExplore Batch
Zenrows
Talk to sales Start free
Lenspricer's comparison page for the Precision1 lens: a price-per-month summary with a column of storefronts listed under it, from Warby Parker at the cheapest to LensesForLess.
Zenrows Lenspricer

Every store.
The same price row.

Every row is a storefront that had to answer.

How Lenspricer compares the prices stores keep to themselves

Lenspricer helps consumers buy cheap contact lenses online, comparing prices across country domains from the UK to Brazil. Every price on it came from a storefront that had to be read first, and the ones worth the most were the ones that refused.

Europe was straightforward
Expanding across European stores worked with the methods they already had.
The US and Canada were not
Scaling there ran into stores that were far more heavily protected.
Every method ran out
Changing user agents, open-source tools and proxies stopped working on those sites.
A missing store is a wrong answer
A comparison that silently drops a storefront still looks complete, and recommends the wrong price.
They compared, then chose
Lenspricer tested several scraping services against the sites that were blocking them.
An API, not a stack
An API call replaced the agent rotation, the tooling and the proxy pool they had been maintaining.
Support that answered
Quick, useful replies while they were integrating, which is what a small team is buying.
Reliability was the deciding test
The thing that mattered: the data could actually be scraped.
  • Integrating the API

    A scraping stack to maintain

    The same morning

  • Where the site runs

    Europe only, at that scale

    From the UK to Brazil

The stores that refused

A price comparison is only worth the storefronts it can read. Lenspricer had already covered Europe with the usual toolkit: rotate the user agent, reach for an open-source scraper, put a proxy in front. Then it went to the US and Canada, where the stores defend themselves properly, and the toolkit stopped returning anything.

It took us just 5 minutes to integrate the API into our code, and it just worked.
LenspricerPrice comparison for contact lenses

The call that replaced the stack

They compared the options against the sites that were actually blocking them, and picked the one where the data came back. What replaced the stack was the request itself: no agent rotation to keep current, no proxy pool to manage, no scraper to repair when a store changes.

That matters more for a comparison site than for most. Every storefront it cannot read is not a gap in a report, it is a price a visitor is never shown.

From the UK to Brazil

Lenspricer runs on country domains from lenspricer.co.uk to lenspricer.com.br. On the US site, a lens is compared across every storefront that sells it, and the spread between the cheapest and the dearest is wide enough to be the whole reason a visitor came.

Every storefront, the same lens, the same day

  • The floorWarby ParkerThe cheapest storefront on the row.
  • Just aboveGlassesUSASame lens, a different storefront.
  • A step up1800contactsWell above the floor, for the same box.
  • The ceilingthe top of the rangeFar enough above the floor to be the whole reason to compare.

Miss a row and the answer changes. That is why every storefront has to be reachable, not most of them.

Conclusion

Lenspricer sells confidence: that the price it shows is the lowest there is. That holds only while every storefront answers, in every country it runs in, every day.

More customer stories